OS detection through Cmake

This commit is contained in:
Evan Burkey 2021-09-08 11:19:24 -07:00
parent dc8e8a27fe
commit 2e89a903ec
5 changed files with 26 additions and 3 deletions

View File

@ -16,5 +16,13 @@ file(GLOB SRC2020 src/2020/*.c)
file(COPY input DESTINATION ${CMAKE_BINARY_DIR}) file(COPY input DESTINATION ${CMAKE_BINARY_DIR})
add_executable(advent ${SRC} ${SRC2015} ${SRC2016} ${SRC2017} ${SRC2018} ${SRC2019} ${SRC2020}) add_executable(advent ${SRC} ${SRC2015} ${SRC2016} ${SRC2017} ${SRC2018} ${SRC2019} ${SRC2020})
target_link_libraries(advent PRIVATE bsd flint)
if ((${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD") OR (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD"))
message(WARNING "${CMAKE_SYSTEM_NAME}: Not linking libbsd")
target_link_libraries(advent PRIVATE flint)
else()
message(WARNING "${CMAKE_SYSTEM_NAME}: Linking libbsd")
target_link_libraries(advent PRIVATE bsd flint)
endif()
target_include_directories(advent PRIVATE include lib/libflint/include) target_include_directories(advent PRIVATE include lib/libflint/include)

View File

@ -6,7 +6,7 @@ Advent Of Code solutions using C99.
Be sure to clone the project with its submodules: Be sure to clone the project with its submodules:
git clone --recurse-submodules -j8 https://git.fputs.com/fputs/advent git clone --recurse-submodules https://git.fputs.com/fputs/advent
This project relies on several BSD extensions to the stdlib. BSDs should be able to build the project out of the box. Linux users will need `libbsd` installed. The package is called `libbsd-dev` on Debian-based systems. This project relies on several BSD extensions to the stdlib. BSDs should be able to build the project out of the box. Linux users will need `libbsd` installed. The package is called `libbsd-dev` on Debian-based systems.
@ -17,6 +17,8 @@ Build the project using Cmake:
cmake .. cmake ..
make make
The supplied `build.sh` script uses `scan-build` to build a compilation database. This is not neccesary for users.
## Inputs ## Inputs
Inputs can be generated from `get_input.sh`. You will need to get your session cookie from the Advent of Code website. The easiest way to do this is to inspect any input page in your browser. Inputs can be generated from `get_input.sh`. You will need to get your session cookie from the Advent of Code website. The easiest way to do this is to inspect any input page in your browser.

8
build.sh Executable file
View File

@ -0,0 +1,8 @@
#! /usr/bin/env sh
mkdir -p build
cd build
cmake ..
make
cp advent ..
cd ..

View File

@ -3,7 +3,9 @@
#include <string.h> #include <string.h>
#include <limits.h> #include <limits.h>
#ifdef __linux__
#include <bsd/stdlib.h> #include <bsd/stdlib.h>
#endif
#include "input.h" #include "input.h"

View File

@ -1,7 +1,10 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#ifdef __linux__
#include <bsd/stdlib.h> #include <bsd/stdlib.h>
#endif
#include "advent2015.h" #include "advent2015.h"
#include "advent2016.h" #include "advent2016.h"