|
| 1 | +#=============================================================================== |
| 2 | +# Basic Setup |
| 3 | +#=============================================================================== |
| 4 | +# CMake version |
| 5 | +cmake_minimum_required (VERSION 3.12) |
| 6 | +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) |
| 7 | +# Build type |
| 8 | +set(CMAKE_BUILD_TYPE Release) |
| 9 | +if (NOT CMAKE_BUILD_TYPE) |
| 10 | + set(CMAKE_BUILD_TYPE Release) |
| 11 | +endif() |
| 12 | +#=============================================================================== |
| 13 | +# Fetch |
| 14 | +#=============================================================================== |
| 15 | +include(FetchContent) |
| 16 | +set(FETCHCONTENT_UPDATES_DISCONNECTED TRUE) |
| 17 | +# Unit testing |
| 18 | +FetchContent_Declare(Catch2 |
| 19 | + GIT_REPOSITORY https://github.com/catchorg/Catch2 |
| 20 | + GIT_TAG v3.4.0) |
| 21 | +# Random number generation |
| 22 | +FetchContent_Declare(xoshiro |
| 23 | + GIT_REPOSITORY https://github.com/Reputeless/Xoshiro-cpp |
| 24 | + GIT_TAG v1.1) |
| 25 | +FetchContent_MakeAvailable(Catch2 xoshiro) |
| 26 | +# Include Xoshiro since it doesn't have a CMakeLists.txt |
| 27 | +include_directories(${xoshiro_SOURCE_DIR}) |
| 28 | +#=============================================================================== |
| 29 | +# Flags |
| 30 | +#=============================================================================== |
| 31 | +# Should set presets later on, but this is good enough for now |
| 32 | +set(CMAKE_CXX_FLAGS "-Wall -pedantic-errors") |
| 33 | +# Flags for debug |
| 34 | +set(CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb -Wextra -Wshadow -Werror") |
| 35 | +# Flags for thread-sanitizer |
| 36 | +set(CMAKE_CXX_FLAGS_THREAD "-O0 -ggdb -Wextra -Wshadow -Werror -fsanitize=thread -pthread") |
| 37 | +# Flags for Address sanitizer |
| 38 | +set(CMAKE_CXX_FLAGS_ADDRESS "-O0 -ggdb -Wextra -Wshadow -Werror -fsanitize=address -fno-omit-frame-pointer") |
| 39 | +# Flags for Memory sanitizer |
| 40 | +#set(CMAKE_CXX_FLAGS_MEMORY "-O0 -ggdb -Wextra -Wshadow -Werror -fsanitize=memory -fPIE -pie -fno-omit-frame-pointer") |
| 41 | +# Flags for release |
| 42 | +set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") |
| 43 | +#============================================================================== |
| 44 | +# sac-format |
| 45 | +#============================================================================== |
| 46 | +project(sac-format |
| 47 | + LANGUAGES CXX |
| 48 | + DESCRIPTION "C++20 Single-Header SAC File library" |
| 49 | + HOMEPAGE_URL https://arbCoding.github.io/sac-format |
| 50 | + VERSION 0.2.0) |
| 51 | + |
| 52 | +include_directories(${sac-format_SOURCE_DIR}/src) |
| 53 | + |
| 54 | +# Use C++20 |
| 55 | +set(CMAKE_CXX_STANDARD 20) |
| 56 | +set(CMAKE_CXX_STANDARD_REQUIRED ON) |
| 57 | +set(CMAKE_CXX_EXTENSIONS OFF) |
| 58 | + |
| 59 | +add_library(sac-format STATIC |
| 60 | + src/sac_format.hpp |
| 61 | + src/sac_format.cpp) |
| 62 | + |
| 63 | +set_target_properties(sac-format PROPERTIES VERSION ${PROJECT_VERSION}) |
| 64 | +set_target_properties(sac-format PROPERTIES PUBLIC_HEADER src/sac_format.hpp) |
| 65 | + |
| 66 | +#=============================================================================== |
| 67 | +# Example programs |
| 68 | +#=============================================================================== |
| 69 | +add_executable(list_sac |
| 70 | + src/sac_format.hpp |
| 71 | + src/examples/list_sac.cpp) |
| 72 | + |
| 73 | +target_link_libraries(list_sac |
| 74 | + sac-format) |
| 75 | +#=============================================================================== |
| 76 | +# Unit tests |
| 77 | +#=============================================================================== |
| 78 | +# Catch2 stuff |
| 79 | +add_executable(utests |
| 80 | + src/sac_format.hpp |
| 81 | + src/util.hpp |
| 82 | + src/utests.cpp) |
| 83 | + |
| 84 | +target_link_libraries(utests |
| 85 | + PRIVATE Catch2::Catch2WithMain |
| 86 | + sac-format) |
| 87 | + |
| 88 | +add_executable(benchmark |
| 89 | + src/sac_format.hpp |
| 90 | + src/util.hpp |
| 91 | + src/benchmark.cpp) |
| 92 | + |
| 93 | +target_link_libraries(benchmark |
| 94 | + PRIVATE Catch2::Catch2WithMain |
| 95 | + sac-format) |
| 96 | + |
| 97 | +list(APPEND CMAKE_MODULE_PATH ${catch2_SOURCE_DIR}/extras) |
| 98 | +include(CTest) |
| 99 | +include(Catch) |
| 100 | +catch_discover_tests(utests) |
0 commit comments