1
0
Fork 0
libfort/CMakeLists.txt

109 lines
2.9 KiB
CMake
Raw Normal View History

project(libfort)
# Required cmake version
2018-01-01 09:26:34 +01:00
cmake_minimum_required(VERSION 2.8)
2018-03-18 14:44:49 +01:00
# Built options
2018-03-18 14:56:14 +01:00
#option(FORT_GCC_BUILD "Build with gcc" ON)
#option(FORT_MSVC_BUILD "Build with msvc" OFF)
option(FORT_CXX_BUILD "Compile with c++ compiler instead of c" OFF)
2018-03-18 13:32:02 +01:00
option(FORT_COVERALLS_BUILD "Build for coveralls" OFF)
2018-03-18 14:44:49 +01:00
set(FORT_BUILD_TYPE "common" CACHE STRING "Built types (possible values: common, asan, ubsan, msan)")
2018-03-18 14:56:14 +01:00
set(FORT_COMPILER "gcc" CACHE STRING "Compiler (possible values: gcc, clang, msvc)")
2018-03-18 14:44:49 +01:00
2018-01-01 09:26:34 +01:00
set(CMAKE_VERBOSE_MAKEFILE ON)
include_directories(include)
include_directories(src)
2018-03-18 14:44:49 +01:00
# Turn on warnings
2018-03-18 14:56:14 +01:00
#if(FORT_MSVC_BUILD)
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -W4")
#else(FORT_MSVC_BUILD)
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -g")
#endif(FORT_MSVC_BUILD)
2018-03-18 14:56:14 +01:00
if(FORT_COMPILER STREQUAL "msvc")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -W4")
else(FORT_COMPILER STREQUAL "msvc")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -g")
endif(FORT_COMPILER STREQUAL "msvc")
2018-01-01 09:26:34 +01:00
2018-01-17 19:22:57 +01:00
FILE(GLOB_RECURSE FortHeaders "include/*.h" "tests/*.h" "src/*.h" "src/*.h" "src/*.h" "src/*.h" "src/*.h" "src/*.h")
2018-01-01 09:26:34 +01:00
add_custom_target(headers SOURCES ${FortHeaders})
2018-01-17 19:22:57 +01:00
set(FORT_SOURCES
src/fort.c
src/vector.c
src/string_buffer.c
src/options.c
src/cell.c
src/row.c
src/table.c
src/fort_impl.c)
2018-01-01 09:26:34 +01:00
2018-01-01 09:26:34 +01:00
2018-03-18 10:17:33 +01:00
set(EXAMPLE_SOURCES
example/main.c)
2018-03-09 13:21:18 +01:00
add_executable(${PROJECT_NAME}_example
2018-03-18 10:17:33 +01:00
${EXAMPLE_SOURCES}
2018-01-01 09:26:34 +01:00
${FORT_SOURCES})
2018-03-18 10:17:33 +01:00
set(TEST_SOURCES
2018-01-01 09:26:34 +01:00
tests/test.c
tests/test_vector.c
2018-01-21 09:19:18 +01:00
tests/test_table.c
tests/test_string_buffer.c)
2018-03-18 10:17:33 +01:00
add_executable(${PROJECT_NAME}_test
${FORT_SOURCES}
${TEST_SOURCES})
2018-01-01 09:26:34 +01:00
2018-03-18 10:17:33 +01:00
if(FORT_CXX_BUILD)
SET_SOURCE_FILES_PROPERTIES( ${FORT_SOURCES} PROPERTIES LANGUAGE CXX)
SET_SOURCE_FILES_PROPERTIES( ${EXAMPLE_SOURCES} PROPERTIES LANGUAGE CXX)
SET_SOURCE_FILES_PROPERTIES( ${TEST_SOURCES} PROPERTIES LANGUAGE CXX)
endif(FORT_CXX_BUILD)
2018-01-01 09:26:34 +01:00
2018-03-18 13:32:02 +01:00
2018-03-18 14:44:49 +01:00
# Adding sanitizers
2018-03-18 14:56:14 +01:00
if(FORT_COMPILER STREQUAL "gcc" OR FORT_COMPILER STREQUAL "clang")
2018-03-18 14:44:49 +01:00
if(FORT_BUILD_TYPE STREQUAL "asan")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
2018-03-18 14:56:14 +01:00
if(FORT_COMPILER STREQUAL "gcc")
2018-03-18 14:44:49 +01:00
target_link_libraries(${PROJECT_NAME}_example asan)
target_link_libraries(${PROJECT_NAME}_test asan)
2018-03-18 14:56:14 +01:00
endif(FORT_COMPILER STREQUAL "gcc")
2018-03-18 14:44:49 +01:00
endif(FORT_BUILD_TYPE STREQUAL "asan")
if(FORT_BUILD_TYPE STREQUAL "ubsan")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-sanitize-recover") #to force fail
2018-03-18 14:56:14 +01:00
if(FORT_COMPILER STREQUAL "gcc")
2018-03-18 14:44:49 +01:00
target_link_libraries(${PROJECT_NAME}_example ubsan)
target_link_libraries(${PROJECT_NAME}_test ubsan)
2018-03-18 14:56:14 +01:00
endif(FORT_COMPILER STREQUAL "gcc")
2018-03-18 14:44:49 +01:00
endif(FORT_BUILD_TYPE STREQUAL "ubsan")
2018-03-18 14:56:14 +01:00
endif(FORT_COMPILER STREQUAL "gcc" OR FORT_COMPILER STREQUAL "clang")
2018-03-18 14:44:49 +01:00
# Coveralls support
if(FORT_COVERALLS_BUILD)
2018-03-18 13:32:02 +01:00
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -fprofile-arcs -ftest-coverage")
endif(FORT_COVERALLS_BUILD)