From ff9d18a8bbaa3c349c28f0cb0af564882c901496 Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Sun, 2 Dec 2018 06:23:48 +0000 Subject: [PATCH] Start on C Compiling slides. --- cc/cc.tex | 218 ++++++++++++++++++++++++++++++++++++++++++++++++++++ cc/makefile | 5 ++ 2 files changed, 223 insertions(+) create mode 100644 cc/cc.tex create mode 100644 cc/makefile diff --git a/cc/cc.tex b/cc/cc.tex new file mode 100644 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 index 0000000..ae699e6 --- /dev/null +++ b/cc/makefile @@ -0,0 +1,5 @@ +build: + runlatex cc.tex + +clean: + rm -f *.aux *.log *.nav *.out *.pdf *.snm *.toc *.vrb -- 2.43.2