1 \documentclass[13pt,aspectratio=169]{beamer}
12 \newcommand{\header}[1]{
13 \hspace{-1em}\textit{#1:}
16 \newcommand{\sheader}[1]{
21 \newcommand{\screen}[1]{
22 \setlength{\leftmargin}{0pt}
23 \setlength{\rightmargin}{0pt}
25 \includegraphics[height=3.0in,width=4.25in,keepaspectratio]{#1}
34 % alternativetitlepage=true,
36 \setbeamertemplate{navigation symbols}{}
37 \setbeamertemplate{footline}{}
38 \setbeamersize{text margin left=20mm}
39 \setbeamersize{text margin right=10mm}
40 \setbeamerfont{frametitle}{size={\fontsize{15}{16}}}
43 \usepackage[english]{babel}
44 \usepackage[latin1]{inputenc}
46 \usepackage[T1]{fontenc}
78 \small{San Fernando Valley Linux Users Group}
105 %%%%%%%%%%%%%%%%%%%%%
106 % Compiled software %
107 %%%%%%%%%%%%%%%%%%%%%
108 % - compilers vs interpreters
109 % - C compile steps (cpp, cc, as, ld)
110 % - executable formats (ELF)
111 % - dynamic and static linking
113 \section{Compiled software}
115 \begin{frame}{Compilers vs Interpreters}
116 \structure{Interpreters}
118 \item Bash, Python, Ruby
119 \item Interpreter runs and follows the instructions
120 \item The interpreter is generally compiled
121 \item Advantages: advanced languages, lot of features, easy development
124 \structure{Compilers}
126 \item C/C++, Fortran, Haskell, Rust, (GCC / LLVM)
127 \item Translates one language to another
128 \item Often self compiling (needs bootstrapping)
129 \item Advantages: fast, deterministic, more static analysis
133 \begin{frame}{C compiling steps}
135 \item[cpp] C Pre-Processor
137 \item Text based macros (\#include, \#define)
142 \item Translates C to Assembly
143 \item Register allocation
144 \item Memory layout (structs/unions)
145 \item Function calling conventions
150 \item Translates Assembly to object code
151 \item Handles labels, addresses, and mnemonics
156 \item Combines object files
157 \item Resolves symbols and relocations
163 \begin{frame}{Executable formats}
165 \item[ELF] Executable and linking formats (Linux)
166 \item[COFF] Common Object File Format (Unix)
167 \item[PE] Portable Executable (Windows, EFI)
168 \item[Mach-O] Mach Object (Mac OSX)
171 \textit{There are also DWARFs... \\
172 "Debugging With Attributed Record Formats"}
175 \begin{frame}{Executable formats}
179 \begin{frame}{Dynamic vs static}
182 \item Dynamic linking
192 \section{Build systems}
194 \begin{frame}{C is for CC}
195 \structure{Running CC manually}
197 \item Compiling manually...
198 \item Works for very small program.
200 \item gcc -Wall -o hello hello.c
203 \structure{Scripting}
205 \item Why not just write a script for this?
206 \item Dependency tracking, parallel execution.
212 \item Generic dependency tracker.
213 \item Except GNU Make, which has tons of dumb rules.
214 \item Configured with -DOPTION or config.mk
218 \begin{frame}{autotools}
221 \item Designed to be "portable".
222 \item Good support for configuration.
223 \item Handles all the weird corner cases.
224 \item Nobody likes it but everybody uses it.
228 \item {[./autogen.sh]}
229 \item ./configure --help
235 \begin{frame}{kconfig}
237 \item Started out in the Linux kernel.
238 \item Even better support for configuration.
239 \item Provides nice menu interfaces.
243 \begin{frame}{others}