Make pthread optional

Signed-off-by: Slendi <slendi@socopon.com>
This commit is contained in:
2025-07-24 21:43:47 +03:00
parent 750be23551
commit 3fdda1bbaa
2 changed files with 32 additions and 13 deletions

View File

@@ -6,34 +6,43 @@ set(CMAKE_C_STANDARD 23) # Would've done C99 but I need typeof (for now)
set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF) set(CMAKE_C_EXTENSIONS OFF)
option(DCFG_BUILD_SHARED "Build DCFG as a shared library" ON) option(DCFG_BUILD_SHARED "Build DCFG as a shared library" ON)
option(DCFG_BUILD_STATIC "Build DCFG as a static library" OFF) option(DCFG_BUILD_STATIC "Build DCFG as a static library" OFF)
option(DCFG_PTHREAD_SUPPORT "Enable pthreads support" ON)
find_package(Threads REQUIRED) find_package(Threads)
set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
set(INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include) set(INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
if(DCFG_BUILD_SHARED) if(DCFG_BUILD_SHARED)
add_library(${PROJECT_NAME} SHARED ${SRC_DIR}/dcfg.c) add_library(${PROJECT_NAME} SHARED ${SRC_DIR}/dcfg.c)
target_include_directories(${PROJECT_NAME} PUBLIC ${INCLUDE_DIR}) target_include_directories(${PROJECT_NAME} PUBLIC ${INCLUDE_DIR})
target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads)
if(DCFG_PTHREAD_SUPPORT)
find_package(Threads REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads)
target_compile_definitions(${PROJECT_NAME} PRIVATE DCFG_PTHREAD_SUPPORT)
endif()
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "dcfg") set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "dcfg")
install(TARGETS ${PROJECT_NAME} DESTINATION lib)
endif() endif()
if(DCFG_BUILD_STATIC) if(DCFG_BUILD_STATIC)
add_library(${PROJECT_NAME}_static STATIC ${SRC_DIR}/dcfg.c) add_library(${PROJECT_NAME}_static STATIC ${SRC_DIR}/dcfg.c)
target_include_directories(${PROJECT_NAME}_static PUBLIC ${INCLUDE_DIR}) target_include_directories(${PROJECT_NAME}_static PUBLIC ${INCLUDE_DIR})
target_link_libraries(${PROJECT_NAME}_static PRIVATE Threads::Threads)
set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME "dcfg")
endif()
if(DCFG_BUILD_SHARED) if(DCFG_PTHREAD_SUPPORT)
install(TARGETS ${PROJECT_NAME} DESTINATION lib) find_package(Threads REQUIRED)
endif() target_link_libraries(${PROJECT_NAME}_static PRIVATE Threads::Threads)
if(DCFG_BUILD_STATIC) target_compile_definitions(${PROJECT_NAME}_static PRIVATE DCFG_PTHREAD_SUPPORT)
endif()
set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME "dcfg")
install(TARGETS ${PROJECT_NAME}_static DESTINATION lib) install(TARGETS ${PROJECT_NAME}_static DESTINATION lib)
endif() endif()
install(DIRECTORY ${INCLUDE_DIR}/ DESTINATION include) install(DIRECTORY ${INCLUDE_DIR}/ DESTINATION include)
if(MSVC) if(MSVC)
@@ -41,4 +50,3 @@ if(MSVC)
else() else()
target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -pedantic -Werror -Wno-newline-eof) target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -pedantic -Werror -Wno-newline-eof)
endif() endif()

View File

@@ -11,7 +11,18 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#ifdef DCFG_PTHREAD_SUPPORT
#include <pthread.h> #include <pthread.h>
#else
typedef struct {
int unused;
} pthread_mutex_t;
void pthread_mutex_init(pthread_mutex_t *, void *);
void pthread_mutex_destroy(pthread_mutex_t *);
void pthread_mutex_lock(pthread_mutex_t *);
void pthread_mutex_unlock(pthread_mutex_t *);
#endif
int64_t dcfg_strtoll(const char *s, char **end, int base) { int64_t dcfg_strtoll(const char *s, char **end, int base) {
size_t n = strlen(s); size_t n = strlen(s);