diff options
Diffstat (limited to 'CMakeLists.txt')
| -rw-r--r-- | CMakeLists.txt | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..761929d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,100 @@ +cmake_minimum_required(VERSION 3.10) + +# Project and C standard configuration +project(bhlib LANGUAGES C) +set(CMAKE_C_STANDARD 90) +set(CMAKE_C_STANDARD_REQUIRED ON) + +# Project includes +include(CheckIPOSupported) +include(CheckIncludeFile) +include(CheckSymbolExists) + +# Check for IPO/LTO +check_ipo_supported(RESULT supported) + +# Unit testing and coverage configuration +set(TESTING ON CACHE BOOL "Enable unit-testing") +set(COVERAGE OFF CACHE BOOL "Enable coverage") + +if(supported) + message(STATUS "IPO/LTO enabled") + set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) +endif() + +if(TESTING) + # Enable testing + include(CTest) + enable_testing() +endif(TESTING) + +# Set library code +set(BH_SOURCE + src/algo.c + src/hashmap.c + src/io.c + src/math.c + src/queue.c +) + +set(BH_HEADER + include/bh/common.h + include/bh/algo.h + include/bh/hashmap.h + include/bh/io.h + include/bh/math.h + include/bh/queue.h +) + +set(BH_INCLUDE_DIRS + include + ${PROJECT_BINARY_DIR}/include +) + +# Determine platform +if(WIN32) + message(STATUS "Platform - Win32") + + # Add platform dependent files + list(APPEND BH_SOURCE + src/win32/file.c + ) +elseif(UNIX) + message(STATUS "Platform: Unix (Linux/BSD/MacOS X)") + + # Add platform dependent files + list(APPEND BH_SOURCE + src/posix/file.c + ) +else() + message(STATUS "Platform: Unknown") + + # Add platform dependent files + list(APPEND BH_SOURCE + src/dummy/file.c + ) +endif() + +# Library +add_library(bhlib STATIC ${BH_SOURCE} ${BH_HEADER}) +target_include_directories(bhlib PUBLIC ${BH_INCLUDE_DIRS}) +target_link_libraries(bhlib PUBLIC m) + +# Enable all compiler warnings +if(MSVC) + target_compile_options(bhlib PRIVATE /W4 /WX) +else() + target_compile_options(bhlib PRIVATE -Wall -Wextra -Wpedantic -Werror) +endif() + +# Coverage +if(COVERAGE) + target_compile_options(bhlib PRIVATE -coverage) + target_link_options(bhlib PRIVATE -coverage) +endif() + +# Tests +if(TESTING) + add_subdirectory(unit) + add_subdirectory(test) +endif() |
