From 665a11917a3e2b34325476ba8faf9753b3f76b90 Mon Sep 17 00:00:00 2001 From: Alex Hoffman Date: Tue, 14 Apr 2020 18:05:08 +0200 Subject: [PATCH 1/8] CMakeLists for a basic C project --- CMakeLists.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..05799084 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,12 @@ +project(git_tutorial) +cmake_minimum_required(VERSION 3.4 FATAL_ERROR) + +set(CMAKE_BUILD_TYPE Debug) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin) + +include_directories(include) + +file(GLOB SOURCES "src/*.c") + +add_executable(foo ${SOURCES}) + From db8a6423deb6f1d04a48e65231560b243f298910 Mon Sep 17 00:00:00 2001 From: Alex Hoffman Date: Thu, 16 Apr 2020 14:56:50 +0200 Subject: [PATCH 2/8] Instructions on compiling C projects --- README.md | 352 ++++++++++++++++-------------------------------------- 1 file changed, 100 insertions(+), 252 deletions(-) diff --git a/README.md b/README.md index b701a2a1..fbf3d7f2 100644 --- a/README.md +++ b/README.md @@ -1,305 +1,153 @@ -# Git, C, CMake and State Machine Tutorial +# Compiling C programs -## Getting Started +The compiling of a C program takes place in three steps. Each instrumented by CMake. In the following couple of exercises you will look at each step and how they work. This will hopefully mean I have less questions to answer later in the semester when you get a linker error. -To do this tutorial you must fork this by clicking the fork button in the GitHub web interface. The instructions will always appear in the root folder of the repo and can be viewed in the web interface. +The three steps are: +1. Preprocessing
+ Handling of preprocessor directives to produce completed C files for compilation. +2. Compilation
+ The creation of object files from C files. +3. Linking
+ The compiled object files are linked together to form a binary file that represents the built program. -## Welcome +## Preprocessor -Hello and welcome to this Git tutorial. I am to help you get some savvy Git skills whilst also using the C compilation process and a C project as a means to provide a reasoning behind the power and necessity of Git. The C projects will also demonstrate how a state machine works and a basic way of implementing one. +A big advantage that the C programming language has over interpreter based languages, such as Python, as well as other compiled languages, such as Java, is its precompiler. This preprocessor allows a programmer to use certain directives to simplify coding. The most basic analogy for what a lot of the preprocessor does can be thought of as "cut and paste", where chunks of code are pasted around to minimize the amount of manual code copying and/or search and replace that the programmer must perform. -Please note that if you're reading these instruction whilst doing the tutorial they may dissapear if you change branch or do some git trickery that causes them to move/change. As such, while you get to grips with Git I would reccomend moving these README.md files, as they become available, somewhere outside of the current Git repo while you complete the challenge. +There are specific preprocessor directives, such as `#include` and `#define` which you should all be familiar with. One can also create conditional statements that allow for the preprocessor to either include or not include code sections. This is done with the directives `#if`, `#ifdef` and `#ifndef`. A common example of these directives would be when performing "feature inclusion" via compiled flags. -## Git - -So what is Git? - -I hope you all already know the answer to this. Git is a version control software that is now more or less the gold standard in code version control used around the world. As such, knowing Git is a very important skill in today's workplace for anyone that has anything to do with the development of code, regardless of the code type. It can be useful not just code projects but for the version control of any sort of project based around non-binary files, such as PCB designs. - -So without writing a big blurb on Git, I say we just get into it and learn by doing. - -## What is Forking? - -So you will of now forked my repo from GitHub. What this means is that you have more or less copied (not cloned) my repo. It is a complete copy, including the Git histroy, Git objects etc. The key point is that it now belongs to you and you can do as you wish with it, without disturbing my original repo. It is a handy feature that is implemented by the Git server systems (such as GitLab and GitHub), it is not intrinsically a part of Git. It allows for developers to essentially snapshot someone's project, modify it and then, if they want, they can send the changes back to the original developer who can decide if they want to merge their changes into the original code. Forking is popular in the open source community where people are not always directly included in someone's project. - -Throughout this tutorial we will do two things, we will set up a new repository for you to use throughout the semester to manage your code and we will undertake some little challenges in this repository to help further your Git and C abilities. - -## Basics - -Now the very basics of Git. Git works using repositories (previously mentioned repos). Repos are essentially a mini filesystem (locally seen as a folder) in which all changes, that happen within that folder, are (or can be) tracked. Git monitors changes to files and stores snapshots of the files at specified points. By snapshotting the file system, Git gives each point point in the repo's history a unique value. Enabling a developer to revert changes, go back and look at previous, or parallel, version as well as lots of other cool stuff we will cover a bit more later. - -Without going into it too much now, we know that a Git repo will give us a folder, whose content will be tracked. So now let's set up the repo that you will use throughout semester. - -For anyone doing this that is not one of my students you will have to just ignore the specifics aimed at my students. - -You can either use the LRZ GitLab or a **private** GitHub repo for this, the functionality is identical. Do not use a public GitHub as other students will be able to view your code and you might be involved in some nasty business if duplicate code is found in another student's project. - -So now you will need to create a new project. This will require you to do the following: - -1. Create a new project/repository in the web GUI -2. Either follow the given instructions to clone the new repository or copy the clone link so you can clone the repository to your machine which I will explain now. - - There are two types of links always available, one via SSH and the other via HTTPS. SSH allows you to upload your public SSH key to the server and use it to authenticate yourself when interacting with the server, meaning you do not have to constantly enter your username and password when interacting with the server. In contrast HTTPS requires you to enter your username and password in the terminal every time you interact with the server when authentication is required. - - I recommend uploading a SSH key and using the SSH link. Google how to do this, its not hard. - - Then to clone the repository you simply have to run the `git clone` command. Looking at the manual page for the clone command (`man git clone`) we can see that the command takes the form of `git clone `. For us we will just use the basic command to clone our newly created repository into a folder called "ESPL_code". From the folder where you would like to have your `ESPL_code` folder stored run - - ``` bash - git clone ESPL_code - ``` - - Now we will have the Git repo on our local machines. Next we will look into the basics of creating and storing code in our repository. Please note that after the basics of the "ESPL_code" repository are set up we will do the rest of this tutorial in the tutorial repository, I am just wanting to make sure you have a Git repo set up and ready for the rest of semester so that you USE IT! - -# How Git Tracks Your Changes - -Git works slightly differently to other version control software in that is uses a staging area to which a user adds files that he/she wishes to be tracked (changes recorded). As such Git does not automatically track all changes in a repository. It is up to the user to make sure that the files that they are interested in are added to the staging area, there are ways to wildcard add things but this can lead to very messy and unprofessional repos. - -As such the workflow follows the flow of: - -1. Working directory - - Here a developer can modify/create/delete files in their project, just do your thing....write your code etc. - -2. Staging area - - Here are the files that the user has told Git are important and should be tracked. If a file is not here then Git will not care for the changes made to that file. Files are added to the staging area using the `git add` command. Use `man git add` for a more detailed overview. It's quite straight forward. - -3. Repository - - Once files have been added to the staging area, using `git add`, they can then be committed to the repository. A commit represents a snapshot in the repo's file system. The difference between two commits as seen as a set of changes to a set of files, also synonymous to a patch (funnily enough a lot of modern patches come straight from Git commits). Also note that that your changes and repository are local and not automatically sent to your Git server, this must be done manually. As such one must commit changes to your repository and then push the commits to the remote server, but we will get to this a little later. - -The benefit of having a staging area is that a user can create separate commits for different chunks of work. If you modified two separate files you could add each file to the staging area individually, commit the changes, thus creating a psudo patch for that file then add and commit the second file creating a separate patch for the second file. While this functionality will most likely not be that useful for you in ESPL, it is an important concept to grasp, especially for industry work where the generation of patches is very important. As you should not have random files contained within your patches, such as debug files, knowing how to control the contents of a commit is very important. - -Storing changes to file in the staging area are done using the `git commit` command. See `man git commit` for details. We will see how this is done in practice shortly and it should become clear if it's not making complete sense at the moment. - -## What is a Commit? - -Now that we know the rough workflow of Git, I feel that it will help to make the entire process of Git and tracking changes clearer if what a commit is is outlined. - -A commit holds the state of the repository at the moment when the commit was created. This state is just a node in a linked list of the repository's previous states, with the commit node's parent(s) being the commits that came before it during the development within the Git repository. Git does not store the delta of each file like other versioning control software but instead creates copies of changed files, unchanged files are thus able to be simply referenced, such that that unnecessary copies of unchanged file are not made. This allows the user to navigate through this linked list of commits to look at the repository's snapshots at different points in time. As such, Git is more or less a mini filesystem that has some powerful tooling to achieve some pretty nifty tricks. - -## Lets Commit! - -Now let's put this into practice. Git repositories almost always contain a README.md file. The README is responsible for giving an overview of and/or instructions for the project on the GitHub/GitLab page when one views the repository in the web interface, as you are probably doing now. - -The README usually contains useful information outlining the project, how to build it, developer's contact information etc. As such, we will create and add one to our newly created ESPL repository. Please then create, in your ESPL repository, a `README.md` file. The `.md` signifys that it is a markdown fil, allowing for markdown formatting of the text. Markdown formatting information can be found [here](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#links). - -Please add your name and a quick description to the README then we will go through and add it. - -``` bash -echo "# Your name here" > README.md -echo "A quick description" >> README.md -``` - -This will create the file and add your name and a description to the file, with your name being a H1 title. - -Every time you make a change to the contents of your Git repository you can see the status of the repository using the command `git status`. - -Running that now will show us a few things - -``` -On branch master - -No commits yet - -Untracked files: - (use "git add ..." to include in what will be committed) - - README.md - -nothing added to commit but untracked files present (use "git add" to track) -``` - -We can see that we are on our Master branch (we will cover branches a little later) and that we have the file `README.md` as an untracked file, meaning it is not in the staging area and would not be included in any commits. - -Let's for testing purposes try and commit our README without adding it to the staging area. Looking at the manual for the `git commit` command (running `man git commit`). We can see the commands which can be used to add and remove files from the staging area (read the description section). Now a commit always requires a commit message, given using the `-m` option. Commit messages should always be precise and describe what changes have been implemented in this commit. Think of the commit message as a title/description for the patch that would be generated from the commit. As such to "attempt" to commit our README without adding it to the staging area we would run - -``` bash -git commit -m "Added README" -``` - -We will now see that Git complains that nothing was added to the commit, meaning the staging area was empty. As we should all know by now, we need to add the `README.md` to the staging area. To do this we can either add the individual file or add all files in the repository. I would recommend avoiding adding all file where possible as you tend to include a lot of junk. We will cover how to avoid this a little later on. - -For now add your README using - -``` bash -git add README.md -``` - -Now attempting to commit should result in the output - -``` -[master (root-commit) 3c2b284] Added README - 1 file changed, 2 insertions(+) - create mode 100644 README.md -``` - -Showing us a few things. It shows us our branch `master`, the beginning of the commit hash `3c2b284`, the commit message `Added README`, the changes made as well as the files added, in this case the `README.md`. To find out what the mode is read [here](https://stackoverflow.com/questions/737673/how-to-read-the-mode-field-of-git-ls-trees-output/8347325#8347325). - -We have now successfully created a commit in our repository. Running `git log` we can see that the commit now appears in the repository's logs. In the log you can also see the entire commit hash which is used to identify that specific commit within your repo. - -In a repo you will create many commits as you implement features and commit them, the commits will not be automatically visible to others who also have the repository on their machines or are looking through the web interface. Git does not automatically sync changes as it is designed to be usable offline, only syncing when told to. To then send your commits to the remote repository, stored on a Git server, you must `git push`. To understand what we are doing exactly when we are pushing we need to know a couple of things. - -To push our code to the Git server we us the command `git push origin master`. - -Breaking this command down we have: - - * `git push`, this is the command the tells Git to send all of the commits saved locally on your machine to the remote server. - * `origin`, is the alias given to the remote server where our repository is stored. If you look into the `.git/config` file in your repositories root directory you will see something similar to the following - - ``` - ... - [remote "origin"] - url = git@git.alxhoff.com:alxhoff/espl-test.git - fetch = +refs/heads/*:refs/remotes/origin/* - ... - ``` - - This is telling us that when we use `origin` we will be sending our commits to the server specified by that alias. It is possible to send to multiple servers at once, for instance a backup server, or to send to both a private and public server. - -* `master`, tells Git which branch's commits we are wanting to send. We will cover branches soon. - -Running `git push origin master` will show us the following - -``` -Enumerating objects: 3, done. -Counting objects: 100% (3/3), done. -Writing objects: 100% (3/3), 253 bytes | 253.00 KiB/s, done. -Total 3 (delta 0), reused 0 (delta 0) -To git.alxhoff.com:alxhoff/espl-test.git - * [new branch] master -> master +``` C +#ifdef USE_AMAZING_FEATURE +device_t dev = amazing_device +#else +device_t dev = NULL +#endif ``` -which should be quick self-explanatory. +### Include and Define Directives -Now that we have covered how to add, commit and push we will stop using the ESPL repository and focus purely on this tutorial repository that you forked. The ESPL repository is there for you to use over the semester, read the exercise and project descriptions to see how your use of Git will be assessed. Using Git is required as part of the grading in this course, USE IT! +#### Includes -# Branching +The include directive should be one that everyone is familiar with (if you don't know it this tutorial is going to be extra fun for you). This directive is found at the top of most C files. Includes enable the inclusions (funny that) of header files that contain required function *declarations* (function prototypes) and any other data that is required to interact with the API that the header file exposes from the relevant `.c` file, eg. constant values. This is achieved by the preprocessor pasting the contents of the header file wherever the relevant `#include ` directive is found. Remember this when trying to debug include errors. -Inside this repository there are a couple small programming challenge that we will get to soon. Through them where you will learn about some more advanced features of Git, the basics of building a C project and also do some very basic programming exercises. The first step will be to start our C project. To do this you will need to get and merge the CMake project to your master branch, to do this we need to learn about branches and merging. First step it branching. +#### Defines -A Git branch essentially takes a copy of the current state of your git repository and allows you to change it seperate to the branch from which you branch. Confused? -As the same implied, branching allows your to diverge your code base into a seperate "copy" that can be modified and later merged back into "core" of your repository. -Git uses branches to allow for parallel development of code without interfering with the code on other peoples machines or without breaking your stable code base whilst you hack around some changes. How exactly branches are used is a personal preference or the preference of your company, but there are some good ideas to employ when using your Git branches. +The define directive is used for text substitution, allowing for few nifty little tricks when writing C code. Firstly the `#define` allows the programmer to set a flag or give a certain text literal a value, which is then substituted during the preprocessing step of the build process. Commonly called a "hash define". This gives a few advantages, outlines below are the key, and most common, advantages. -We have already come across the master branch, as the name implies this is the root branch of the repository and it usually the most sacred of all branches. Good practice is to not develop directly on the master branch as the master branch should always have a stable version of your code that builds and runs, while it might not have all the latest features, it should be able to be demo'd at any moment in time (except maybe exactly during a merge). You should as such never push to master, only merge to master. Be prepared for impromptu requests to see your code running, it should thus be able to be run from your master branch always even if it lacks all the latest features. + * Setting flags. -As master is this stable branch that must never break, you might of guessed that all development should be done on other branches. This is correct. When working in large groups or on a project where you are swapping between implementing multiple features at the same time, each person or feature should be a branch. I would recommend towards having a branch for a feature as multiple people might work on a feature over the duration of a project. To understand the next concept we need to have a basic understanding of what merging is, while we will look at merging in practice shortly, a theoretical understanding is needed. + Using the `ifdef` conditional preprocessor statements one can set flags. For example a "debug" mode could be enabled using a Boolean debug flag that then allows for the inclusion of debug code, such as print statements -Merging, as the name implies, is the task of merging the code (the changes) from one branch into another. If you have a branch to implement a certain feature, you would then merge this feature into your master branch once the feature is stable and completed. The merge process can become quite complex and involved but for now you should understand what merging aims to achieve. As you can imagine, merging large complex changes can become quite involved, while Git does a great job at handling most changes automatically it does not always manage on its own. As such, merging your changes into master can sometimes lead master to becoming unstable whilst the merge is handled. As such, you can imagine that employing a merge branch to handle the merging of complicated code changes into one single delta can act as a good intermediary between your feature branches and the master branch. + ``` C + #define DEBUG_MA_CODEZ 1 + ... + #if DEBUG_MA_CODEZ + printf("Value waz %d", da_value); + #endif + ... + ``` + * Human readability. -Therefore it can be good practice to have a branch structure similar to the following + By using hash defines instead of magic numbers (should be avoided whenever possible) code is able to be a more easily read as it will real more like actual text. This is important when sharing code or developing with others. Your code should read like a book. -``` -master ----- merging ----- feature A - |---- feature B -``` + ``` C + #define SMILEY_X_LOCATION 12 + #define SMILEY_Y_LOCATION 34 + void function_that_draws_smiley ( int x_position, int y_position ) { + ... + } + ... + void main( int argc, char **argv ) { + ... + function_that_draws_smiley( SMILEY_X_LOCATION, SMILEY_Y_LOCATION); + return 0; + } + ``` + * Centralizes frequently used variable values in one locations, making changing widely used value very easy. -Thus any complicated merge conflicts will be contained to the merging branch and can be resolved there before being merged (via a less complex merge, as the complex problems have now been resolved) into the master branch. We will cover merge errors and the likes later as your perform your own merges. + For example, if the smiley drawn in the previous example is drawn many times in your program and you need to shift its location a hash define allows for the smiley to be moved for all cases where its location's value is used. By changing one centralized value. Simply put, hash defined are slightly better magic numbers. A good example of this would be using the following -Let us now go to the merging branch. To check the branches that exist in the repository one can use the `git branch` command. A new repository might not show all of the branches as Git does not download all information when not required, to try and minimize the data required locally. `man git fetch` will detail how Git fetch can be used. + ``` C + #define PI 3.14 + ``` + should you decide that PI is better as 3.15 then you would be quickly and easily able to break your code by changing just one value :) -When no remote is specified the default `origin` is used. Run `git fetch` to thus retrieve all the branches and tags on the origin remote. Now run `git branch --all` to list all of the branches on the origin. We want a branch called `merging` where we will perform our merges before merging to master. To do this we need to first create a branch and then swap to this branch. To create a new branch simply use +#### Macros -``` bash -git branch merging -``` -now if we list our branches using `git branch` you should now see that there is a `merging` branch. We now need to change to this branch so our modifications that we perform are done there. It should be noted that the new branch is a copy of this current branch, although if we were to continue modifying master then the merging branch would fall behind and would need to be brought back up to speed with master. But for now just checkout `merging` using the checkout command. +Now a more advanced use for defines is macros. Macros use the substitution of tokens with other tokens to allow for the generation of code. Macros are beneficial when the use of a function would be trivial and/or executionally slower. -``` bash -git checkout merging + ``` C +#define CIRCLE_AREA(RADIUS) (PI * RADIUS * RADIUS) ``` -It is also good to note that this action of branching and checking out can be done in a single command by using the `-b` option with the `checkout` command. +The use of the above macro produces more easily read code that is then evaluated into inline C code during precompilation. The precompiler would do the following, via substitution -``` bash -git checkout -b merging + ```C +#define MY_CIRCLE_RADIUS 2 +... +my_circle_area = CIRCLE_AREA(MY_CIRCLE_RADIUS) ``` - -# Merge Basics - -Now that you have checked out your merging branch we are going to perform some merges. As this tutorial will also look into building C projects, using CMake specifically, we will using merging and other Git tools to pull a basic CMake project together. - -Firstly we will want to make our Git server (origin remote) aware of this new branch we have created, as it does not get made aware of this change unless we tell it. Similarly to before we will use the `git push` command but this time our branch has changed. - -As such please push the current branch using the previous command of - -``` bash -git push ______ ______ +Would become +``` C +my_circle_area = 3.14 * 2 * 2 ``` -You will need to fill in those two blanks. +To see some much more involved macros that are used in the auto generation of data structures in a state machine, look [here](https://github.com/alxhoff/Application_Interfacing_Governor/blob/master/AI_gov_phases.c). -Now back to the problem. You should be able to find a branch called `make`, check it out using your newly learnt checkout command. On this branch is the skeleton for our CMake project. Now to merge the `CMakeLists.txt` file, which is the core CMake file for any CMake build, into our merging branch. We need to use the `git merge` command. Details of this can be found in the manual, you should be able to run the correct `man` command yourself now to do this. +## Compilation -Merging is always done on the branch into which you wish to merge. If you wish to merge your `merging` branch into `master` you would first need to `git checkout master` and then merge `merging` into `master`. As we are wanting to merge the `make` branch into our current branch (merging) we don't need to change branches. +Now the compilation of code is only one step in the process of building a program. After each C file is run through the preprocessor, so that all the preprocessor directives have been handled, the completed C files must then compiled into assembly code. This is done using a compiler, such as the GNU C Compiler (GCC). The assembly code must then be made into machine code that is actually usable by the target device. This is done by the assembler, which creates machine code from the assembly code. By modifying these pieces of software, collectively called a toolchain, you can change how the code is compiled. Various toolchains are available for different hardware architectures, such that the compiled code is compiled with regards to how the code executes on the target architecture. Compiling for a different architecture, such as compiling on an x86 laptop for a ARM based micro-controller, is known as cross compiling. -The `git merge` command handles the merging of files automatically, although it requires human intervention occasionally. We will get to this later. For now we simply want to merge the `CMakeLists.txt` into our current branch. As our branch does not have a `CMakeLists.txt` file the merge should not have any errors when performing this merge. +The file produced by the assembler is a binary file, the formats can vary (ELF, a.out, ...) but the idea is the same. The binary files are called objects, each object file contains the compiled code and exposes the symbols contained within the binary code. Symbols are the addresses of the variables and functions contained within a binary, they can be thought of as the "API" to the object file. The addresses of all the symbols within an object file are stored within a symbol table. -We can thus execute +At this point all of your source files have been compiled into separate objects which are unaware of each other. Function calls to functions found in other object files are at this point pointing to an unknown memory locations, in an unknown binary file. These calls are stored as references to undefined addresses which are to be resolved in the last step of building a program, linking. If the completed program binary is to be able to execute, each function call needs to know where the pointed to code actually resides in memory. This is done by the third step in building a program, linking. Common errors pop up along the lines of "undefined reference" when a symbol cannot be resolved, meaning that the linking step was not able to be completed. -``` bash -git merge make -``` -This should give us an output along the lines of +I should also mention that libraries, with which you are hopefully familiar with, are simply object files that can be reused by multiple programs such that the same code is not rewritten and/or recompiled unnecessarily. -``` bash -CMakeLists.txt | 12 ++++++++++++ -1 file changed, 12 insertions(+) -create mode 100644 CMakeLists.txt -``` -Telling us that a new file was created with 12 new insertions, 1 for each line in the file. Now if we run `git log` we will see the commits made on the make branch when this `CMakeLists.txt` file was added to the repo. +## Linking -Now that we have got the commits from the make branch merged into our branch we should push these changes to the remote, running `git push` again will now show that the files have been pushed. If we rerun `git log` you will notice that the commit where the `CMakeLists.txt` file was commited has now changed from - -``` bash -(HEAD -> merging, origin/make, make) -``` -to -``` bash -(HEAD -> merging, origin/merging, origin/make, make) -``` -meaning that this commit can now found be found in origin/merging and not just merging, origin/make and make. This annotation (`origin/`) signifies the remote branch (ie. the branch on the server). The branch merging is your local branch while the branch origin/merging is that on the remote. +So we know now that our program is compiled into a number of object files (binary blobs) we need to resolve all of the references to the symbols that are pointed to and found in other object files. As the name implies, linking is the process of linking these references to the actual memory addresses in the appropriate object files. Linking to files within the same source code chunk is usually not that error prone. Most errors come from having to link against static libraries or source code found else where on a system or in another project. Common errors will be those that complain of either missing definitions (cannot find appropriate symbols to link against) or duplicate errors (multiple objects exposing the same symbol). # CMake -Now that we have merged our CMakeLists to our current branch we need to go about making the project build such that it is stable and is in a condition that we would be happy to have on `master`. Good practice when building code projects is to have a folder where all temporary and/or build files are kept such that your project folder doesn't become cluttered with temporary build files. Cleaning the build is also easier as all build files are clumped together. +So now that I have outlined a bit for you what happens when building a program, we will go through and build a demo program by using a program called CMake. CMake just helps in automating the build process a little, while not abstracting the process so much that one looses touch with what is happening. Using your newly discovered Git skills we will piece together a basic project and get it compiled and linked. You may have to apply some Git trickery along the way to get all the pieces ;). -A common standard practice is to use a `build` folder. As such create a build folder in your Git repo's root, such that the build folder and `CMakeLists.txt` are in the same folder. +So now that you have an idea of what goes into building a C project lets see how you can accomplish this using CMake. If we open the CMake file in this branch you should see the following -Now running the command `man cmake` we can see that to execute a CMake script one simply has to call the command cmake and the path to the cmake script file. First navigate into the build directory and then execute `cmake ..` where `..` specifies the folder in which the CMake script can be found, while the current directory (build) is used as the build directory. Moving up a folder (`cd ..`) and running `git status` you can now see that the build directory is now untracked and has had changes done to it. Running `git status build` shows us that the build directory now includes a `CMakeCache.txt` and a directory `CMakeFiles`. These are the temporary files generated by CMake. +``` bash +project(git_tutorial) +cmake_minimum_required(VERSION 3.4 FATAL_ERROR) -Now before we go ahead and actually get the CMake project building lets play it safe and add **all** of the current files in the Git to the staging area, commit and push them so that we have a safe point to return to. Do this yourself, using a meaningful commit message. +set(CMAKE_BUILD_TYPE Debug) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin) -## .gitignore +include_directories(include) -When committing the files you will see a lot of new files being created in Git. These are all temporary build files and should not actually be added to Git. If you already was questioning what I was doing by adding all of these then pat yourself on the back, you were correct in thinking so. This is a common problem that people new to Git have in that they include all sorts of useless metadata files, build files and binaries to the Git repository so that they clutter the Git repository and make navigating around the branches difficult as you create little changes without meaning so that changing branches becomes more difficult. This will be something you will come across in the future. But for now we will now fix this error by using a file called the `.gitignore`. +file(GLOB SOURCES "src/*.c") -The `.gitignore` is a hidden file that lives in the Git root and contains a list of files that should intentionally be left untracked. Meaning that changes to those files are not of concern to Git. A more detailed description of how to use this file can be found [here](https://git-scm.com/docs/gitignore). +add_executable(foo ${SOURCES}) +``` -For now we just want to tell Git that the build folder's contents should be left untracked. To do this we need to create the `.gitignore` file and put the build folder in it. +Now the first few lines should be quite self-explanatory. On the fourth line we set the output directory for our binary. Meaning we will need to create a `bin` directory in our repo's root. Do this now. The fifth line is where we tell CMake which directories we want to use as include directories. In the directories here is where make will then look for files that you include using `#include`. This CMake line equates then to the `-I` make build option. Another good common practice is to separate your `.c` source files from your `.h` source files. As can be seen in the CMake, we use a folder called `include` for the header files and a folder called `src` for the source files. Create the `include` folder so it sits alongside the bin and build directories. Following this we can see the `file` command. The file command is a file manipulation command used to achieve lots of different things. In this case it is used with `GLOB`. Glob is used to generate a list of files given one or more globbing expressions, storing the results in a variable, in this case `SOURCES`. From the provided globbing expression we can see that in this case the file command generates a list of all `.c` files that can be found in the `src` folder. Since we do not have this you will also need to create it. -This can be done by runing -``` bash -echo "build/" > .gitignore -``` -From the Git repo's root directory +The final line in the CMake lets CMake know that an executable should be built from the provided source files, in this case those stored in the `SOURCES` variable. This will also perform the required linking should there be more than one source file found, as there are going to be no object files external to our source files' directory. -## Removing Staging Cache +Now we are almost there. We have the folder structure set up for our project but we are missing some code! We want to merge the new folder structures that we created back to our merging branch. The problem is that Git only tracks the contents of a folder and not folders themselves. As all of our folders are empty they would not be able to be tracked, commited and then merged to our `merging` branch. A convention of Git to keep Git directories that are empty are to add a `.gitkeep` file to them. This is a hack way of creating a reason for Git to track the folder. In this case we are in need of this folder structure for CMake and as such it is important that Git is able to track our folders. Let's touch a `.gitkeep` into each folder that is empty. `man touch` should help you understand what touching does. -Now running Git status we can see that the `.gitignore` file is untracked but the files we wish to have untracked (the build folder) are still being tracked. This is because the files are in the staging cache and need to thus be removed before the gitignore will be applied to them. A common fix that is used is to simply remove all files from the staging cache and then add them back. +Checking the status of your repo you should now see that you can track your empty `src`, `bin` and `include` directories as they all have `.gitkeep` files in them. Add and commit your folders with a meaningful commit message and then checkout your merging branch and merge the folders to your `merging` branch. Come back to this branch (`compiling`) when you have done that. -To do so run +## Coding Challenge I -``` bash -git rm -r --cached . -``` -This will recursively remove tracked files from the staging cache. Running `git status` again will now show us that all of the files in the repo have been deleted, meaning deleted from the staging area. In the untracked files section you will now only see the README, CMakeLists and .gitignore as these files have not been ignored via the gitignore. Now we can add these files back and commit them using something such as "Actualizing gitignore" as the commit message. After pushing the new commit, if we look at the repo through the web interface, looking specifically at the files on the merging branch, you will see that the build files are not included. It is important to add all files that you do not want included in the repository to be added to the gitignore so that there is no way for them to become accidentally included in a commit, this makes you look like a Git noob if you are committing build files. +Now we are in need of the most the most fundamental of fundamentals to compile our project, a main function. As we will consider the main function a new "feature" that you are to add to your project you must perform the following steps: + * Checkout a new branch to implement your features, branching from this branch. + * Write a main function in an appropriate file in your project, that is to output "Hello ESPL" to the terminal. + * Add, commit and PUSH the work you have done to the origin remote. + * Merge the changes back to `merging`, pushing the result. + * Come back to this branch to continue with the instructions below. -## Onwards With CMake +Now you should have at least one source file and be able to rerun your CMake command to generate the required make files for your project. If all went well in your build folder you should now see a Makefile that was generated from CMake. To then build your project you need to run the command `make` from within your build directory. If all went well you should now find a built binary in your bin directory with the same name as the executable specified in you `CMakeLists.txt`. -Now that we have solved that problem let us continue building our CMake project. Previously we saw that CMake complained that there were no sources given to the target foo. Let us pick through the CMake file so we understand what went wrong and what we need to fix it. +Navigate to your bin directory and execute the binary by using the `./` Linux convention. You should be greeted with "Hello ESPL". -To do so jump to the branch `compiling`. +Now we know roughly how to navigate around a Git repo, create, add and commit files as well as build a basic C project with an idea of what is happening behind the scenes. Before we look into the more advanced CMake features, such as linking libraries, you should merge your current project to master as it is now in a stable state. Binary files should not be included in your commits and should be left untracked. Modify your repository accordingly such the the binaries can never be accidentally added. Once that is done you will need to go to the `exercise` branch where you will need to use the Git logs, merging and the `git cherry-pick` command to get your exercise requirements and the library code. Useful articles can be found [here](https://www.git-tower.com/learn/git/faq/detached-head-when-checkout-commit) and [here](https://www.hacksparrow.com/how-to-merge-a-specific-commit-in-git.html) to explain the process. -In your web browser, if you select the branch `compiling` you can read the README directly in the browser. +One commit will contain the necessary `.h` and `.c` files for a static library that we will build called `espl_lib`. Another commit will contain a `.patch` for your CMake script to link the library. Checkout the commits, find the files, verify their contents and then use cherry pick to merge them to your merging branch. The instructions (in a separate `.md` file) to continue can also be found in a seperate commit. From fbca77480cb64daa84074472c84c749605c23e57 Mon Sep 17 00:00:00 2001 From: Alex Hoffman Date: Thu, 16 Apr 2020 15:39:52 +0200 Subject: [PATCH 3/8] Instructions on how to continue --- YOUR_NEXT_INSTRUCTIONS.md | 111 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 YOUR_NEXT_INSTRUCTIONS.md diff --git a/YOUR_NEXT_INSTRUCTIONS.md b/YOUR_NEXT_INSTRUCTIONS.md new file mode 100644 index 00000000..9a40be4d --- /dev/null +++ b/YOUR_NEXT_INSTRUCTIONS.md @@ -0,0 +1,111 @@ +Now that you should have found the following: +- Library style code that exposes the function `num_to_words` +- A `.patch` file for CMake + +We will discuss what patches are as this will also help strengthen your understanding of commits as well as exposing you to what has the be the most important and legacy method for version control in the software industry. The patch will enable your CMake script to compile the `espl_lib` as a static library which we will then link into your project, using it's functions in your main function. + +# Patches + +A patch, is a record of the changes made to a set of files. Patch files can then be used to apply the changes to an unmodified sets of files. As such, Git uses patch style diffs (read `man diff` to understand this) to show the changes that have occurred in the repo since the last commit. Open the file where your main function is and add in another print statement directly below the one printing the "Hello ESPL" message. Now `git status` tells us that we have modified that one file but it does not tell us the changes. The command `git diff` will do this for us. You should have an output similar to + +``` bash +diff --git a/src/main.c b/src/main.c +index 82e0743..cca099a 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -5,5 +5,6 @@ + int main() + { + printf("Hello ESPL"); ++ printf("This is a new print"); + return 0; + } +``` + +Now this is a Git diff. Git being the smart software it is, and as it was created by Linus Torvalds to maintain the Linux kernel, it makes sense that Git uses/creates patches to handle changes. As the Linux kernel uses email and patch files to handle developer submissions to the mainline kernel. What `git diff` produces is actually a unified format patch, read [here](https://en.wikipedia.org/wiki/Diff#Unified_format) for more info. + +## Creating Patches + +We can therefore create a unified format patch by simply saving the diff output to an appropriately named file. In this case we are patching the file where our main function lives, in my case this is `main.c` and as such I will name my match `main.patch`. + +``` bash +git diff > main.patch +``` + +You should now have a patch file that contains the output of diff. Let's go through the pieces of the patch file so you can better understand it. Having a knowledge of patch files will be essential if you plan to work in any industry that deals with code bases that are handled by more than one person. + +The first line tells us that we are dealing with a Git diff generated patch and the files that were changed was the main.c. The second line gives us the hashes of the before and after files as well as the mode of the given file, in this case an ordinary file. The following line shows the before and after file names, this is useful if a file changes its name or if a file is deleted (becomes `/dev/null`). Now comes the more important information. The line starting with `@@` tells us the statistics of the following diff hunk. A patch file can contain multiple of these. `@@ -5,5 +5,6 @@` has the format `@@ -, +, @@`. Below I have now included the modified file with line numbers. + +``` C + 1 #include + 2 + 3 #include "espl_lib.h" + 4 + 5 int main() + 6 { + 7 printf("Hello ESPL"); + 8 printf("This is a new print"); + 9 return 0; +10 } +``` +From the patch we can see that the modification starts at line 5, meaning the main function and the previous version contained 5 lines. The modified version also started at 5 but now contained 6 lines. The rest of the patch shows where the lines were added within that range, as we can see the line `+ printf("This is a new print");` was added, indicated by the +. + +## Applying Patches + +Now that we have our patch file we will want to try it out. To do this remove the line you added when generating your patch. Your file should now look the same as it did before. Running `git status` should show that you have a new untracked file which is your patch file but you `.c` file containing your main function should not be appearing as it has not changed, since you reverted the changes manually. + +Now we have two ways to apply a patch, either running the patch hoping that the exact file names exist that the patch file specifies (which they do in our case) or you can apply the patch file to a specific file. Both methods are shown below. Pick one and apply your patch. `man patch` will give you more info on patching. + +``` bash +patch < main.patch +``` +or +``` bash +patch main.c < main.patch +``` + +Now you should be able to see your changes back in your `.c` file. + +Now in this commit there is a `CMakeLists.patch` that contains a patch that will modify your pervious CMake script to build and link the `espl_lib` library you have either already found or need to find. Open the patch and go through it. + +``` bash +CMakeLists.patch +--- CMakeLists.txt 2019-03-20 10:25:46.547529531 +0100 ++++ CMakeLists.txt 2019-03-20 10:28:36.907537321 +0100 +@@ -5,8 +5,12 @@ + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin) + + include_directories(include) ++include_directories(lib) + + file(GLOB SOURCES "src/*.c") + + add_executable(foo ${SOURCES}) + ++file(GLOB ESPL_LIB_SRCS "lib/*.c") ++add_library(ESPL_LIB ${ESPL_LIB_SRCS}) ++target_link_libraries(foo ESPL_LIB) +``` + +We can see that there has been 4 lines added. The first line has added the lib directory to our project's includes. This is such that the espl_lib.h can be found during building. The header file for a library exposes the libraries API, in this case it exposes the function `num_to_words` whilst keeping the inner workings of the library inaccessible to the programmer. As such the library ensures the programmer cannot call `get_digit_word` directly. This is good practice to employ. A `.c` and `.h` file combo should implement a black box of code. Your implemented functions inside the `.c` function don't necessarily need to be exposed via the `.h` file. The exposed functions should give as simple and easy to use interface as possible. Such that as much of the programming logic related to the "module" the files implement is maintained within the `.c` file, not necessarily being exposed via the `.h` if unnecessary. A common mistake of beginner programmers to no not properly modularize their code. You want to write you code such that you can make "modules" for different portions of you code, this way they are reusable and more easily tested as you can test them independently. + +Now back to the patch. The three lines at the end of the patch handle the building and linking of the library to our executable. The first line should look familiar in that it is simply gathering the `.c` files from the lib folder needed to build the library. The next line tells CMake that it is to build a static library from the source files that were just globbed. During the build process you will see make compiling a separate target `ESPL_LIB` which will generate a library file (`.a`) in the build directory. The final command is quite self-explanatory and handles the linking of the library to the executable. + +Now that we have our patch and understand it, continue gathering the library files and the `CMakeLists.patch` from this branch and merge them to merging. Once there you are to modify your main function to do the following (you should copy this so when you change branches you don't loose it). + +# Coding Challenge II + +We will now modify our existing code from coding challenge I to write a small program that does the following: + + * Prompt the user from the command line for a number input, instructions should be displayed + * Call the `num_to_words` function from the `espl_lib` on the inputted numbers (look at the header file to see how this function should be called) + * Display the returned string to the terminal + * Prompt the user if they wish to either exit the program or run another number and handle their decision accordingly. + +Unlike the first challenge, this challenge will make up part of the assessment for this tutorial. + +So once your program is performing the above functions and is building using your patched CMake project in the merging branch. Merge it all to master and create a `git tag` (information on how to found [here](https://git-scm.com/book/en/v2/Git-Basics-Tagging)) with the annotation "Coding Challenge 2". This will be used as part of the exercise submissions. + +In the rest of the tutorial you will create another little program that will also find itself ending up in your root folder with the same standard sub-directories, ie. src etc. Now we are using tags because they mark points in the repositories history (usually used for marking release versions of software) and as such when marking this tutorial I should be able to check out each tag and find the correct "release" responding to each challenge. + +Following the completion of this go to the `conflicts` branch where we will look at how to deal with merge conflicts, merging the provided code to create a program that you will merge into the code for coding challenge 2, essentially replacing it. This will then be taged again. From 0dfdb314f7548fcdc99c1e0e6e6d2d009fbb3af1 Mon Sep 17 00:00:00 2001 From: Alex Hoffman Date: Thu, 16 Apr 2020 15:40:36 +0200 Subject: [PATCH 4/8] All praise Linus --- His_holyness.jpg | Bin 0 -> 35902 bytes YOUR_NEXT_INSTRUCTIONS.md | 111 -------------------------------------- 2 files changed, 111 deletions(-) create mode 100644 His_holyness.jpg delete mode 100644 YOUR_NEXT_INSTRUCTIONS.md diff --git a/His_holyness.jpg b/His_holyness.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ee2c0aebe47712d30c92db95cbac829cc341c09 GIT binary patch literal 35902 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%0Dq6~OH9gMk@gGB9{$<-ZU1=&{VX**mG6>5 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 literal 0 HcmV?d00001 diff --git a/YOUR_NEXT_INSTRUCTIONS.md b/YOUR_NEXT_INSTRUCTIONS.md deleted file mode 100644 index 9a40be4d..00000000 --- a/YOUR_NEXT_INSTRUCTIONS.md +++ /dev/null @@ -1,111 +0,0 @@ -Now that you should have found the following: -- Library style code that exposes the function `num_to_words` -- A `.patch` file for CMake - -We will discuss what patches are as this will also help strengthen your understanding of commits as well as exposing you to what has the be the most important and legacy method for version control in the software industry. The patch will enable your CMake script to compile the `espl_lib` as a static library which we will then link into your project, using it's functions in your main function. - -# Patches - -A patch, is a record of the changes made to a set of files. Patch files can then be used to apply the changes to an unmodified sets of files. As such, Git uses patch style diffs (read `man diff` to understand this) to show the changes that have occurred in the repo since the last commit. Open the file where your main function is and add in another print statement directly below the one printing the "Hello ESPL" message. Now `git status` tells us that we have modified that one file but it does not tell us the changes. The command `git diff` will do this for us. You should have an output similar to - -``` bash -diff --git a/src/main.c b/src/main.c -index 82e0743..cca099a 100644 ---- a/src/main.c -+++ b/src/main.c -@@ -5,5 +5,6 @@ - int main() - { - printf("Hello ESPL"); -+ printf("This is a new print"); - return 0; - } -``` - -Now this is a Git diff. Git being the smart software it is, and as it was created by Linus Torvalds to maintain the Linux kernel, it makes sense that Git uses/creates patches to handle changes. As the Linux kernel uses email and patch files to handle developer submissions to the mainline kernel. What `git diff` produces is actually a unified format patch, read [here](https://en.wikipedia.org/wiki/Diff#Unified_format) for more info. - -## Creating Patches - -We can therefore create a unified format patch by simply saving the diff output to an appropriately named file. In this case we are patching the file where our main function lives, in my case this is `main.c` and as such I will name my match `main.patch`. - -``` bash -git diff > main.patch -``` - -You should now have a patch file that contains the output of diff. Let's go through the pieces of the patch file so you can better understand it. Having a knowledge of patch files will be essential if you plan to work in any industry that deals with code bases that are handled by more than one person. - -The first line tells us that we are dealing with a Git diff generated patch and the files that were changed was the main.c. The second line gives us the hashes of the before and after files as well as the mode of the given file, in this case an ordinary file. The following line shows the before and after file names, this is useful if a file changes its name or if a file is deleted (becomes `/dev/null`). Now comes the more important information. The line starting with `@@` tells us the statistics of the following diff hunk. A patch file can contain multiple of these. `@@ -5,5 +5,6 @@` has the format `@@ -, +, @@`. Below I have now included the modified file with line numbers. - -``` C - 1 #include - 2 - 3 #include "espl_lib.h" - 4 - 5 int main() - 6 { - 7 printf("Hello ESPL"); - 8 printf("This is a new print"); - 9 return 0; -10 } -``` -From the patch we can see that the modification starts at line 5, meaning the main function and the previous version contained 5 lines. The modified version also started at 5 but now contained 6 lines. The rest of the patch shows where the lines were added within that range, as we can see the line `+ printf("This is a new print");` was added, indicated by the +. - -## Applying Patches - -Now that we have our patch file we will want to try it out. To do this remove the line you added when generating your patch. Your file should now look the same as it did before. Running `git status` should show that you have a new untracked file which is your patch file but you `.c` file containing your main function should not be appearing as it has not changed, since you reverted the changes manually. - -Now we have two ways to apply a patch, either running the patch hoping that the exact file names exist that the patch file specifies (which they do in our case) or you can apply the patch file to a specific file. Both methods are shown below. Pick one and apply your patch. `man patch` will give you more info on patching. - -``` bash -patch < main.patch -``` -or -``` bash -patch main.c < main.patch -``` - -Now you should be able to see your changes back in your `.c` file. - -Now in this commit there is a `CMakeLists.patch` that contains a patch that will modify your pervious CMake script to build and link the `espl_lib` library you have either already found or need to find. Open the patch and go through it. - -``` bash -CMakeLists.patch ---- CMakeLists.txt 2019-03-20 10:25:46.547529531 +0100 -+++ CMakeLists.txt 2019-03-20 10:28:36.907537321 +0100 -@@ -5,8 +5,12 @@ - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin) - - include_directories(include) -+include_directories(lib) - - file(GLOB SOURCES "src/*.c") - - add_executable(foo ${SOURCES}) - -+file(GLOB ESPL_LIB_SRCS "lib/*.c") -+add_library(ESPL_LIB ${ESPL_LIB_SRCS}) -+target_link_libraries(foo ESPL_LIB) -``` - -We can see that there has been 4 lines added. The first line has added the lib directory to our project's includes. This is such that the espl_lib.h can be found during building. The header file for a library exposes the libraries API, in this case it exposes the function `num_to_words` whilst keeping the inner workings of the library inaccessible to the programmer. As such the library ensures the programmer cannot call `get_digit_word` directly. This is good practice to employ. A `.c` and `.h` file combo should implement a black box of code. Your implemented functions inside the `.c` function don't necessarily need to be exposed via the `.h` file. The exposed functions should give as simple and easy to use interface as possible. Such that as much of the programming logic related to the "module" the files implement is maintained within the `.c` file, not necessarily being exposed via the `.h` if unnecessary. A common mistake of beginner programmers to no not properly modularize their code. You want to write you code such that you can make "modules" for different portions of you code, this way they are reusable and more easily tested as you can test them independently. - -Now back to the patch. The three lines at the end of the patch handle the building and linking of the library to our executable. The first line should look familiar in that it is simply gathering the `.c` files from the lib folder needed to build the library. The next line tells CMake that it is to build a static library from the source files that were just globbed. During the build process you will see make compiling a separate target `ESPL_LIB` which will generate a library file (`.a`) in the build directory. The final command is quite self-explanatory and handles the linking of the library to the executable. - -Now that we have our patch and understand it, continue gathering the library files and the `CMakeLists.patch` from this branch and merge them to merging. Once there you are to modify your main function to do the following (you should copy this so when you change branches you don't loose it). - -# Coding Challenge II - -We will now modify our existing code from coding challenge I to write a small program that does the following: - - * Prompt the user from the command line for a number input, instructions should be displayed - * Call the `num_to_words` function from the `espl_lib` on the inputted numbers (look at the header file to see how this function should be called) - * Display the returned string to the terminal - * Prompt the user if they wish to either exit the program or run another number and handle their decision accordingly. - -Unlike the first challenge, this challenge will make up part of the assessment for this tutorial. - -So once your program is performing the above functions and is building using your patched CMake project in the merging branch. Merge it all to master and create a `git tag` (information on how to found [here](https://git-scm.com/book/en/v2/Git-Basics-Tagging)) with the annotation "Coding Challenge 2". This will be used as part of the exercise submissions. - -In the rest of the tutorial you will create another little program that will also find itself ending up in your root folder with the same standard sub-directories, ie. src etc. Now we are using tags because they mark points in the repositories history (usually used for marking release versions of software) and as such when marking this tutorial I should be able to check out each tag and find the correct "release" responding to each challenge. - -Following the completion of this go to the `conflicts` branch where we will look at how to deal with merge conflicts, merging the provided code to create a program that you will merge into the code for coding challenge 2, essentially replacing it. This will then be taged again. From eeabd42a4da46047e3648c60e0f7de6d673c02a3 Mon Sep 17 00:00:00 2001 From: Alex Hoffman Date: Thu, 16 Apr 2020 15:41:20 +0200 Subject: [PATCH 5/8] CMakeLists patch to include, build and link ESPL library --- CMakeLists.patch | 15 +++++++++++++++ His_holyness.jpg | Bin 35902 -> 0 bytes 2 files changed, 15 insertions(+) create mode 100644 CMakeLists.patch delete mode 100644 His_holyness.jpg diff --git a/CMakeLists.patch b/CMakeLists.patch new file mode 100644 index 00000000..39c4a25a --- /dev/null +++ b/CMakeLists.patch @@ -0,0 +1,15 @@ +--- CMakeLists.txt 2019-03-20 10:25:46.547529531 +0100 ++++ CMakeLists.txt 2019-03-20 10:28:36.907537321 +0100 +@@ -5,8 +5,12 @@ + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin) + + include_directories(include) ++include_directories(lib) + + file(GLOB SOURCES "src/*.c") + + add_executable(foo ${SOURCES}) + ++file(GLOB ESPL_LIB_SRCS "lib/*.c") ++add_library(ESPL_LIB ${ESPL_LIB_SRCS}) ++target_link_libraries(foo ESPL_LIB) diff --git a/His_holyness.jpg b/His_holyness.jpg deleted file mode 100644 index 5ee2c0aebe47712d30c92db95cbac829cc341c09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35902 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%0Dq6~OH9gMk@gGB9{$<-ZU1=&{VX**mG6>5 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 From 4c606f015042c384cbef0ff1d6ef4260a24f51a5 Mon Sep 17 00:00:00 2001 From: Alex Hoffman Date: Thu, 16 Apr 2020 15:42:01 +0200 Subject: [PATCH 6/8] A library of sorts --- CMakeLists.patch | 15 --------------- not_here.jpg | Bin 0 -> 22813 bytes 2 files changed, 15 deletions(-) delete mode 100644 CMakeLists.patch create mode 100644 not_here.jpg diff --git a/CMakeLists.patch b/CMakeLists.patch deleted file mode 100644 index 39c4a25a..00000000 --- a/CMakeLists.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- CMakeLists.txt 2019-03-20 10:25:46.547529531 +0100 -+++ CMakeLists.txt 2019-03-20 10:28:36.907537321 +0100 -@@ -5,8 +5,12 @@ - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin) - - include_directories(include) -+include_directories(lib) - - file(GLOB SOURCES "src/*.c") - - add_executable(foo ${SOURCES}) - -+file(GLOB ESPL_LIB_SRCS "lib/*.c") -+add_library(ESPL_LIB ${ESPL_LIB_SRCS}) -+target_link_libraries(foo ESPL_LIB) diff --git a/not_here.jpg b/not_here.jpg new file mode 100644 index 0000000000000000000000000000000000000000..246c727b4cfe0386ea0d68f29cf8a398ba2cfc75 GIT binary patch literal 22813 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 biYdq9V74btpN&S}dA_Il(M2b@pHu(YR;z?P literal 0 HcmV?d00001 From 4afd7e7268fcdbedc716824b510e966f6e150f7e Mon Sep 17 00:00:00 2001 From: Alex Hoffman Date: Thu, 16 Apr 2020 15:42:25 +0200 Subject: [PATCH 7/8] The ESPL library --- lib/espl_lib.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++ lib/espl_lib.h | 6 ++++ not_here.jpg | Bin 22813 -> 0 bytes 3 files changed, 96 insertions(+) create mode 100644 lib/espl_lib.c create mode 100644 lib/espl_lib.h delete mode 100644 not_here.jpg diff --git a/lib/espl_lib.c b/lib/espl_lib.c new file mode 100644 index 00000000..40525533 --- /dev/null +++ b/lib/espl_lib.c @@ -0,0 +1,90 @@ +#include +#include +#include +#include + +#define ALLOC_DIGIT_STRING(STRING) \ + ret = calloc(strlen(#STRING) + 1, sizeof(char)); \ + if (!ret) \ + return NULL; \ + strcpy(ret, #STRING); + +char* get_digit_word(unsigned char digit) +{ + char* ret = NULL; + switch (digit) { + case 0: + ALLOC_DIGIT_STRING(zero) + break; + case 1: + ALLOC_DIGIT_STRING(one) + break; + case 2: + ALLOC_DIGIT_STRING(two) + break; + case 3: + ALLOC_DIGIT_STRING(three) + break; + case 4: + ALLOC_DIGIT_STRING(four) + break; + case 5: + ALLOC_DIGIT_STRING(five) + break; + case 6: + ALLOC_DIGIT_STRING(six) + break; + case 7: + ALLOC_DIGIT_STRING(seven) + break; + case 8: + ALLOC_DIGIT_STRING(eight) + break; + case 9: + ALLOC_DIGIT_STRING(nine) + break; + default: + break; + } + return ret; +} + +char* num_to_words(unsigned int num) +{ + char* ret = NULL; + char space[] = " "; + char* tmp; + + if (!num) + return ret; + + while (num) { + tmp = get_digit_word(num % 10); + if (!tmp) + goto error; + + if (!ret) + ret = calloc(1, sizeof(char) * (strlen(tmp) + 1)); + else + ret = realloc(ret, sizeof(char) * (strlen(ret) + strlen(tmp) + 1)); + + if (!ret) + goto error; + + strcat(ret, tmp); + free(tmp); + + num /= 10; + if (num) { + ret = realloc(ret, sizeof(char) * (strlen(ret) + 2)); + strcat(ret, space); + } + } + return ret; +error: + if (!ret) + free(ret); + if (!tmp) + free(tmp); + return NULL; +} diff --git a/lib/espl_lib.h b/lib/espl_lib.h new file mode 100644 index 00000000..984172e3 --- /dev/null +++ b/lib/espl_lib.h @@ -0,0 +1,6 @@ +#ifndef __ESPL_LIB_H__ +#define __ESPL_LIB_H__ + +char* num_to_words(unsigned int num); + +#endif diff --git a/not_here.jpg b/not_here.jpg deleted file mode 100644 index 246c727b4cfe0386ea0d68f29cf8a398ba2cfc75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22813 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 biYdq9V74btpN&S}dA_Il(M2b@pHu(YR;z?P From 6210f0fbf10207d9e99bc15727d89d1948949d31 Mon Sep 17 00:00:00 2001 From: Alex Hoffman Date: Thu, 16 Apr 2020 15:42:49 +0200 Subject: [PATCH 8/8] This guy is proud of you --- is_proud_of_you.jpg | Bin 0 -> 72515 bytes lib/espl_lib.c | 90 -------------------------------------------- lib/espl_lib.h | 6 --- 3 files changed, 96 deletions(-) create mode 100644 is_proud_of_you.jpg delete mode 100644 lib/espl_lib.c delete mode 100644 lib/espl_lib.h diff --git a/is_proud_of_you.jpg b/is_proud_of_you.jpg new file mode 100644 index 0000000000000000000000000000000000000000..147c4b6b8437d4420f065188414cd20fcaa61706 GIT binary patch literal 72515 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 z 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 H)qnrl5>*dD literal 0 HcmV?d00001 diff --git a/lib/espl_lib.c b/lib/espl_lib.c deleted file mode 100644 index 40525533..00000000 --- a/lib/espl_lib.c +++ /dev/null @@ -1,90 +0,0 @@ -#include -#include -#include -#include - -#define ALLOC_DIGIT_STRING(STRING) \ - ret = calloc(strlen(#STRING) + 1, sizeof(char)); \ - if (!ret) \ - return NULL; \ - strcpy(ret, #STRING); - -char* get_digit_word(unsigned char digit) -{ - char* ret = NULL; - switch (digit) { - case 0: - ALLOC_DIGIT_STRING(zero) - break; - case 1: - ALLOC_DIGIT_STRING(one) - break; - case 2: - ALLOC_DIGIT_STRING(two) - break; - case 3: - ALLOC_DIGIT_STRING(three) - break; - case 4: - ALLOC_DIGIT_STRING(four) - break; - case 5: - ALLOC_DIGIT_STRING(five) - break; - case 6: - ALLOC_DIGIT_STRING(six) - break; - case 7: - ALLOC_DIGIT_STRING(seven) - break; - case 8: - ALLOC_DIGIT_STRING(eight) - break; - case 9: - ALLOC_DIGIT_STRING(nine) - break; - default: - break; - } - return ret; -} - -char* num_to_words(unsigned int num) -{ - char* ret = NULL; - char space[] = " "; - char* tmp; - - if (!num) - return ret; - - while (num) { - tmp = get_digit_word(num % 10); - if (!tmp) - goto error; - - if (!ret) - ret = calloc(1, sizeof(char) * (strlen(tmp) + 1)); - else - ret = realloc(ret, sizeof(char) * (strlen(ret) + strlen(tmp) + 1)); - - if (!ret) - goto error; - - strcat(ret, tmp); - free(tmp); - - num /= 10; - if (num) { - ret = realloc(ret, sizeof(char) * (strlen(ret) + 2)); - strcat(ret, space); - } - } - return ret; -error: - if (!ret) - free(ret); - if (!tmp) - free(tmp); - return NULL; -} diff --git a/lib/espl_lib.h b/lib/espl_lib.h deleted file mode 100644 index 984172e3..00000000 --- a/lib/espl_lib.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __ESPL_LIB_H__ -#define __ESPL_LIB_H__ - -char* num_to_words(unsigned int num); - -#endif