2025-07-26 00:46:46 +03:00
|
|
|
cmake_minimum_required(VERSION 3.10)
|
2025-07-24 21:25:16 +03:00
|
|
|
|
|
|
|
project(DCFG C)
|
|
|
|
|
2025-07-26 00:46:46 +03:00
|
|
|
set(CMAKE_C_STANDARD 99)
|
2025-07-24 21:25:16 +03:00
|
|
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
2025-07-27 23:23:34 +03:00
|
|
|
set(CMAKE_C_EXTENSIONS OFF)
|
2025-07-24 21:25:16 +03:00
|
|
|
|
2025-07-27 14:13:13 +03:00
|
|
|
option(DCFG_PTHREAD_SUPPORT "Enable pthreads support" ON)
|
|
|
|
option(DCFG_POSIX_SUPPORT "Enable POSIX support" ON)
|
|
|
|
option(DCFG_BUILD_PROGRAMS "Build DCFG example programs" ON)
|
2025-07-24 21:25:16 +03:00
|
|
|
|
2025-07-24 21:43:47 +03:00
|
|
|
find_package(Threads)
|
2025-07-24 21:25:16 +03:00
|
|
|
|
2025-07-24 21:43:47 +03:00
|
|
|
set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
|
2025-07-24 21:25:16 +03:00
|
|
|
set(INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
|
|
|
|
2025-07-27 14:13:13 +03:00
|
|
|
# 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")
|
2025-07-24 21:43:47 +03:00
|
|
|
|
2025-07-27 14:13:13 +03:00
|
|
|
# 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")
|
2025-07-24 21:25:16 +03:00
|
|
|
|
2025-07-27 14:13:13 +03:00
|
|
|
# Common settings for both libraries
|
|
|
|
foreach(TARGET ${PROJECT_NAME}_shared ${PROJECT_NAME}_static)
|
2025-07-24 21:43:47 +03:00
|
|
|
if(DCFG_PTHREAD_SUPPORT)
|
|
|
|
find_package(Threads REQUIRED)
|
2025-07-27 14:13:13 +03:00
|
|
|
target_link_libraries(${TARGET} PRIVATE Threads::Threads)
|
|
|
|
target_compile_definitions(${TARGET} PRIVATE DCFG_PTHREAD_SUPPORT)
|
2025-07-24 21:43:47 +03:00
|
|
|
endif()
|
2025-07-27 14:13:13 +03:00
|
|
|
if(DCFG_POSIX_SUPPORT)
|
|
|
|
target_compile_definitions(${TARGET} PRIVATE DCFG_POSIX_SUPPORT)
|
2025-07-25 23:21:33 +03:00
|
|
|
endif()
|
2025-07-24 21:43:47 +03:00
|
|
|
|
2025-07-27 14:13:13 +03:00
|
|
|
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()
|
2025-08-01 04:08:00 +03:00
|
|
|
|
|
|
|
if(NOT MSVC)
|
|
|
|
target_link_libraries(${TARGET} PRIVATE m)
|
|
|
|
endif()
|
2025-07-27 14:13:13 +03:00
|
|
|
endforeach()
|
2025-07-24 21:43:47 +03:00
|
|
|
|
2025-07-27 14:13:13 +03:00
|
|
|
# Install libraries
|
|
|
|
install(TARGETS ${PROJECT_NAME}_shared ${PROJECT_NAME}_static DESTINATION lib)
|
2025-07-24 21:25:16 +03:00
|
|
|
install(DIRECTORY ${INCLUDE_DIR}/ DESTINATION include)
|
2025-07-24 21:30:58 +03:00
|
|
|
|
2025-07-27 14:13:13 +03:00
|
|
|
# Build example programs
|
2025-07-26 23:41:34 +03:00
|
|
|
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})
|
2025-07-27 14:13:13 +03:00
|
|
|
target_link_libraries(${PROG_NAME} PRIVATE ${PROJECT_NAME}_shared)
|
2025-07-26 23:41:34 +03:00
|
|
|
if(DCFG_PTHREAD_SUPPORT)
|
|
|
|
target_link_libraries(${PROG_NAME} PRIVATE Threads::Threads)
|
|
|
|
endif()
|
|
|
|
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()
|
|
|
|
install(TARGETS ${PROG_NAME} DESTINATION bin)
|
|
|
|
endforeach()
|
|
|
|
endif()
|