]> Pileus Git - ~andy/sfvlug/blob - cc/cc.tex
Start on C Compiling slides.
[~andy/sfvlug] / cc / cc.tex
1 \documentclass[13pt]{beamer}
2
3 %%%%%%%%%%%%%%%%%%%
4 % Commands/macros %
5 %%%%%%%%%%%%%%%%%%%
6 \newcommand{\link}[1]{
7   \begin{flushright}
8     \scriptsize{#1}
9   \end{flushright}
10 }
11
12 \newcommand{\header}[1]{
13   \hspace{-1em}\textit{#1:}
14 }
15
16 \newcommand{\sheader}[1]{
17   \vspace{1.5em}
18   \header{#1}
19 }
20
21 %%%%%%%%%%%%%%%%
22 % Header/theme %
23 %%%%%%%%%%%%%%%%
24 %\usetheme[
25 %  pageofpages=of,
26 %  alternativetitlepage=true,
27 %]{Torino}
28 \setbeamertemplate{navigation symbols}{}
29 \setbeamertemplate{footline}{}
30 \setbeamersize{text margin left=20mm} 
31 \setbeamersize{text margin right=10mm} 
32 \setbeamerfont{frametitle}{size={\fontsize{15}{16}}}
33
34 % Import packages
35 \usepackage[english]{babel}
36 \usepackage[latin1]{inputenc}
37 \usepackage{times}
38 \usepackage[T1]{fontenc}
39 \usepackage{graphics}
40 \usepackage{hyperref}
41 \usepackage{ulem}
42 \usepackage{listings}
43
44 %%%%%%%%%%%%%%%%%%%%
45 % Title page setup %
46 %%%%%%%%%%%%%%%%%%%%
47 \subject{%
48   c,
49   compile,
50   unix,
51 }
52
53 \keywords{%
54   c,
55   cc
56   make,
57   autotools,
58 }
59
60 \title[C Compiling]{%
61   C Comipling and More!
62 }
63
64 \author[Spencer]{%
65   Andy Spencer
66 }
67
68 \date[2018-12-15]{%
69   December 15, 2018 \\
70   \small{San Fernando Valley Linux Users Group}
71 }
72
73 %%%%%%%%%%%%%%%%%
74 % Content pages %
75 %%%%%%%%%%%%%%%%%
76
77 \begin{document}
78
79 %%%%%%%%%%%%%%%%
80 % Introduction %
81 %%%%%%%%%%%%%%%%
82
83 \begin{frame}[plain]
84   \titlepage
85 \end{frame}
86
87 %%%%%%%%%%
88 % Why C? %
89 %%%%%%%%%%
90
91 \section{Why C?}
92
93 \begin{frame}
94   Why C
95 \end{frame}
96
97 %%%%%%%%%%%%%%%%%%%%%
98 % Compiled software %
99 %%%%%%%%%%%%%%%%%%%%%
100 % - compilers vs interpreters
101 % - C compile steps (cpp, cc, as, ld)
102 % - executable formats (ELF)
103 % - dynamic and static linking
104
105 \section{Compiled software}
106
107 \begin{frame}{Compilers vs Interpreters}
108   \structure{Interpreters}
109   \begin{itemize}
110     \item Bash, Python, Ruby
111     \item Interpreter runs and follows the instructions
112     \item The interpreter is generally compiled
113     \item Advantages: advanced languages, lot of features, easy development
114   \end{itemize}
115
116   \structure{Compilers}
117   \begin{itemize}
118     \item C/C++, Fortran, Haskell, Rust, (GCC / LLVM)
119     \item Translates one language to another
120     \item Often self compiling (needs bootstrapping)
121     \item Advantages: fast, deterministic, more static analysis
122   \end{itemize}
123 \end{frame}
124
125 \begin{frame}{C compiling steps}
126   \begin{itemize}
127     \item[cpp] C Pre-Processor
128       \begin{itemize}
129         \item Text based macros (\#include, \#define)
130       \end{itemize}
131
132     \item[cc] C Compiler
133       \begin{itemize}
134         \item Translates C to Assembly
135         \item Register allocation
136         \item Memory layout (structs/unions)
137         \item Function calling conventions
138       \end{itemize}
139
140     \item[as] Assembler
141       \begin{itemize}
142         \item Translates Assembly to object code
143         \item Handles labels, addresses, and mnemonics
144       \end{itemize}
145
146     \item[ld] Linker
147       \begin{itemize}
148         \item Combines object files
149         \item Resolves symbols and relocations
150       \end{itemize}
151
152   \end{itemize}
153 \end{frame}
154
155 \begin{frame}{Executable formats}
156   \begin{itemize}
157     \item[ELF] Executable and linking formats (Linux)
158     \item[COFF] Common Object File Format (Unix)
159     \item[PE] Portable Executable (Windows, EFI)
160     \item[Mach-O] Mach Object (Mac OSX)
161   \end{itemize}
162
163   \textit{There are also DWARFs... \\
164           "Debugging With Attributed Record Formats"}
165 \end{frame}
166
167 \begin{frame}{Dynamic vs static}
168   \begin{itemize}
169     \item Static linking
170     \item Dynamic linking
171     \item Modules
172     \item System calls
173   \begin{itemize}
174 \end{frame}
175
176 %%%%%%%%%%%%%%%%%
177 % Build systems %
178 %%%%%%%%%%%%%%%%%
179
180 \section{Build systems}
181
182 \begin{frame}{C is for CC}
183   \begin{itemize}
184     \item C is for CC
185   \end{itemize}
186 \end{frame}
187
188 \begin{frame}{Scripts}
189   \begin{itemize}
190     \item Scripts
191   \end{itemize}
192 \end{frame}
193
194 \begin{frame}{Make}
195   \begin{itemize}
196     \item Make
197   \end{itemize}
198 \end{frame}
199
200 \begin{frame}{autotools}
201   \begin{itemize}
202     \item autotools
203   \end{itemize}
204 \end{frame}
205
206 \begin{frame}{kconfig}
207   \begin{itemize}
208     \item kconfig
209   \end{itemize}
210 \end{frame}
211
212 \begin{frame}{others}
213   \begin{itemize}
214     \item others
215   \end{itemize}
216 \end{frame}
217
218 \end{document}