Files
dcfg/CMakeLists.txt
Slendi ec3bf6061d
Some checks failed
CMake / ubuntu-latest - shared=OFF, pthread=OFF, posix=OFF (push) Successful in 14s
CMake / ubuntu-latest - shared=ON, pthread=OFF, posix=OFF (push) Successful in 15s
CMake / ubuntu-latest - shared=ON, pthread=OFF, posix=ON (push) Has been cancelled
CMake / ubuntu-latest - shared=OFF, pthread=ON, posix=ON (push) Has been cancelled
CMake / ubuntu-latest - shared=ON, pthread=ON, posix=ON (push) Has been cancelled
CMake / ubuntu-latest - shared=OFF, pthread=OFF, posix=ON (push) Has been cancelled
Remove pthreads
Signed-off-by: Slendi <slendi@socopon.com>
2025-08-09 08:39:55 +03:00

87 lines
2.7 KiB
CMake

cmake_minimum_required(VERSION 3.10)
project(DCFG C)
option(DCFG_POSIX_SUPPORT "Enable POSIX support" ON)
option(DCFG_BUILD_PROGRAMS "Build DCFG example programs" ON)
option(DCFG_ASAN "Enable AddressSanitizer" OFF)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
find_package(Threads)
set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
set(INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
if(DCFG_ASAN)
if(MSVC)
set(ASAN_COMPILE_FLAGS /fsanitize=address)
set(ASAN_LINK_FLAGS /fsanitize=address)
else()
set(ASAN_COMPILE_FLAGS -fsanitize=address -fno-omit-frame-pointer)
set(ASAN_LINK_FLAGS -fsanitize=address)
endif()
endif()
# Shared library
add_library(${PROJECT_NAME}_shared SHARED ${SRC_DIR}/dcfg.c)
target_include_directories(${PROJECT_NAME}_shared PUBLIC ${INCLUDE_DIR})
set_target_properties(${PROJECT_NAME}_shared PROPERTIES OUTPUT_NAME "dcfg")
# Static library
add_library(${PROJECT_NAME}_static STATIC ${SRC_DIR}/dcfg.c)
target_include_directories(${PROJECT_NAME}_static PUBLIC ${INCLUDE_DIR})
set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME "dcfg")
foreach(TARGET ${PROJECT_NAME}_shared ${PROJECT_NAME}_static)
if(DCFG_POSIX_SUPPORT)
target_compile_definitions(${TARGET} PRIVATE DCFG_POSIX_SUPPORT)
endif()
if(MSVC)
target_compile_options(${TARGET} PRIVATE /W4 /permissive-)
else()
target_compile_options(${TARGET} PRIVATE -Wall -Wextra -pedantic -Werror -Wno-newline-eof -Wno-language-extension-token)
endif()
if(NOT MSVC)
target_link_libraries(${TARGET} PRIVATE m)
endif()
# AddressSanitizer
if(DCFG_ASAN)
target_compile_options(${TARGET} PRIVATE ${ASAN_COMPILE_FLAGS})
target_link_libraries(${TARGET} PRIVATE ${ASAN_LINK_FLAGS})
endif()
endforeach()
install(TARGETS ${PROJECT_NAME}_shared ${PROJECT_NAME}_static DESTINATION lib)
install(DIRECTORY ${INCLUDE_DIR}/ DESTINATION include)
if(DCFG_BUILD_PROGRAMS)
set(PROGRAMS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/programs)
file(GLOB PROGRAM_SOURCES "${PROGRAMS_DIR}/*.c")
foreach(PROG_SRC ${PROGRAM_SOURCES})
get_filename_component(PROG_NAME ${PROG_SRC} NAME_WE)
add_executable(${PROG_NAME} ${PROG_SRC})
target_include_directories(${PROG_NAME} PRIVATE ${INCLUDE_DIR})
target_link_libraries(${PROG_NAME} PRIVATE ${PROJECT_NAME}_static)
if(MSVC)
target_compile_options(${PROG_NAME} PRIVATE /W4 /permissive-)
else()
target_compile_options(${PROG_NAME} PRIVATE -Wall -Wextra -pedantic -Werror -Wno-newline-eof -Wno-language-extension-token)
endif()
if(DCFG_ASAN)
target_compile_options(${PROG_NAME} PRIVATE ${ASAN_COMPILE_FLAGS})
target_link_libraries(${PROG_NAME} PRIVATE ${ASAN_LINK_FLAGS})
endif()
install(TARGETS ${PROG_NAME} DESTINATION bin)
endforeach()
endif()