]> Pileus Git - ~andy/sfvlug/commitdiff
Start on C Compiling slides.
authorAndy Spencer <andy753421@gmail.com>
Sun, 2 Dec 2018 06:23:48 +0000 (06:23 +0000)
committerAndy Spencer <andy753421@gmail.com>
Sun, 2 Dec 2018 06:23:48 +0000 (06:23 +0000)
cc/cc.tex [new file with mode: 0644]
cc/makefile [new file with mode: 0644]

diff --git a/cc/cc.tex b/cc/cc.tex
new file mode 100644 (file)
index 0000000..c0d47db
--- /dev/null
+++ b/cc/cc.tex
@@ -0,0 +1,218 @@
+\documentclass[13pt]{beamer}
+
+%%%%%%%%%%%%%%%%%%%
+% Commands/macros %
+%%%%%%%%%%%%%%%%%%%
+\newcommand{\link}[1]{
+  \begin{flushright}
+    \scriptsize{#1}
+  \end{flushright}
+}
+
+\newcommand{\header}[1]{
+  \hspace{-1em}\textit{#1:}
+}
+
+\newcommand{\sheader}[1]{
+  \vspace{1.5em}
+  \header{#1}
+}
+
+%%%%%%%%%%%%%%%%
+% Header/theme %
+%%%%%%%%%%%%%%%%
+%\usetheme[
+%  pageofpages=of,
+%  alternativetitlepage=true,
+%]{Torino}
+\setbeamertemplate{navigation symbols}{}
+\setbeamertemplate{footline}{}
+\setbeamersize{text margin left=20mm} 
+\setbeamersize{text margin right=10mm} 
+\setbeamerfont{frametitle}{size={\fontsize{15}{16}}}
+
+% Import packages
+\usepackage[english]{babel}
+\usepackage[latin1]{inputenc}
+\usepackage{times}
+\usepackage[T1]{fontenc}
+\usepackage{graphics}
+\usepackage{hyperref}
+\usepackage{ulem}
+\usepackage{listings}
+
+%%%%%%%%%%%%%%%%%%%%
+% Title page setup %
+%%%%%%%%%%%%%%%%%%%%
+\subject{%
+  c,
+  compile,
+  unix,
+}
+
+\keywords{%
+  c,
+  cc
+  make,
+  autotools,
+}
+
+\title[C Compiling]{%
+  C Comipling and More!
+}
+
+\author[Spencer]{%
+  Andy Spencer
+}
+
+\date[2018-12-15]{%
+  December 15, 2018 \\
+  \small{San Fernando Valley Linux Users Group}
+}
+
+%%%%%%%%%%%%%%%%%
+% Content pages %
+%%%%%%%%%%%%%%%%%
+
+\begin{document}
+
+%%%%%%%%%%%%%%%%
+% Introduction %
+%%%%%%%%%%%%%%%%
+
+\begin{frame}[plain]
+  \titlepage
+\end{frame}
+
+%%%%%%%%%%
+% Why C? %
+%%%%%%%%%%
+
+\section{Why C?}
+
+\begin{frame}
+  Why C
+\end{frame}
+
+%%%%%%%%%%%%%%%%%%%%%
+% Compiled software %
+%%%%%%%%%%%%%%%%%%%%%
+% - compilers vs interpreters
+% - C compile steps (cpp, cc, as, ld)
+% - executable formats (ELF)
+% - dynamic and static linking
+
+\section{Compiled software}
+
+\begin{frame}{Compilers vs Interpreters}
+  \structure{Interpreters}
+  \begin{itemize}
+    \item Bash, Python, Ruby
+    \item Interpreter runs and follows the instructions
+    \item The interpreter is generally compiled
+    \item Advantages: advanced languages, lot of features, easy development
+  \end{itemize}
+
+  \structure{Compilers}
+  \begin{itemize}
+    \item C/C++, Fortran, Haskell, Rust, (GCC / LLVM)
+    \item Translates one language to another
+    \item Often self compiling (needs bootstrapping)
+    \item Advantages: fast, deterministic, more static analysis
+  \end{itemize}
+\end{frame}
+
+\begin{frame}{C compiling steps}
+  \begin{itemize}
+    \item[cpp] C Pre-Processor
+      \begin{itemize}
+        \item Text based macros (\#include, \#define)
+      \end{itemize}
+
+    \item[cc] C Compiler
+      \begin{itemize}
+        \item Translates C to Assembly
+        \item Register allocation
+        \item Memory layout (structs/unions)
+        \item Function calling conventions
+      \end{itemize}
+
+    \item[as] Assembler
+      \begin{itemize}
+        \item Translates Assembly to object code
+        \item Handles labels, addresses, and mnemonics
+      \end{itemize}
+
+    \item[ld] Linker
+      \begin{itemize}
+        \item Combines object files
+        \item Resolves symbols and relocations
+      \end{itemize}
+
+  \end{itemize}
+\end{frame}
+
+\begin{frame}{Executable formats}
+  \begin{itemize}
+    \item[ELF] Executable and linking formats (Linux)
+    \item[COFF] Common Object File Format (Unix)
+    \item[PE] Portable Executable (Windows, EFI)
+    \item[Mach-O] Mach Object (Mac OSX)
+  \end{itemize}
+
+  \textit{There are also DWARFs... \\
+          "Debugging With Attributed Record Formats"}
+\end{frame}
+
+\begin{frame}{Dynamic vs static}
+  \begin{itemize}
+    \item Static linking
+    \item Dynamic linking
+    \item Modules
+    \item System calls
+  \begin{itemize}
+\end{frame}
+
+%%%%%%%%%%%%%%%%%
+% Build systems %
+%%%%%%%%%%%%%%%%%
+
+\section{Build systems}
+
+\begin{frame}{C is for CC}
+  \begin{itemize}
+    \item C is for CC
+  \end{itemize}
+\end{frame}
+
+\begin{frame}{Scripts}
+  \begin{itemize}
+    \item Scripts
+  \end{itemize}
+\end{frame}
+
+\begin{frame}{Make}
+  \begin{itemize}
+    \item Make
+  \end{itemize}
+\end{frame}
+
+\begin{frame}{autotools}
+  \begin{itemize}
+    \item autotools
+  \end{itemize}
+\end{frame}
+
+\begin{frame}{kconfig}
+  \begin{itemize}
+    \item kconfig
+  \end{itemize}
+\end{frame}
+
+\begin{frame}{others}
+  \begin{itemize}
+    \item others
+  \end{itemize}
+\end{frame}
+
+\end{document}
diff --git a/cc/makefile b/cc/makefile
new file mode 100644 (file)
index 0000000..ae699e6
--- /dev/null
@@ -0,0 +1,5 @@
+build:
+       runlatex cc.tex
+
+clean:
+       rm -f *.aux *.log *.nav *.out *.pdf *.snm *.toc *.vrb