cmake_minimum_required(VERSION 3.12) set(PROJECT_NAME libguf) project(${PROJECT_NAME}) set(SOURCES src/guf_str.c src/guf_dict.c) add_library(${PROJECT_NAME} STATIC ${SOURCES}) # target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}}/lib/guf) # target_include_directories(${PROJECT_NAME} PRIVATE src) add_executable(libguf_test ${SOURCES} src/guf_test.c) target_include_directories(libguf_test PRIVATE src) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS OFF) set(CMAKE_C_STANDARD 99) if (TARGET libguf_test) message("-- Configure libguf_test...") set(CMAKE_DEBUG_POSTFIX _dbg) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin) if (APPLE OR UNIX OR LINUX) set(WARNING_FLAGS_C -Wall -Wextra -Wpedantic -Wvla -Wshadow -Wundef -Wmisleading-indentation -Wnull-dereference -Wswitch-default -Wno-newline-eof -Wno-unused-function -Wno-unused-parameter) endif () set_target_properties(libguf_test PROPERTIES DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}) if (APPLE OR UNIX OR LINUX) set(DBG_FLAGS -fsanitize=undefined,address -g3 -glldb -Og) else () set(DBG_FLAGS /fsanitize=address) endif() target_compile_options(libguf_test PRIVATE ${WARNING_FLAGS_C} $<$: ${DBG_FLAGS}>) # Note: no higher optimisations at all for debugger to work... target_link_options(libguf_test PRIVATE ${WARNING_FLAGS_C} $<$: ${DBG_FLAGS}> ) include(CheckIPOSupported) check_ipo_supported(RESULT ipo_available) if (ipo_available AND (CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")) message(STATUS "LTO enabled") set_target_properties(${PROJECT_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE) else() message(STATUS "LTO disabled") endif() message("-- Configured libguf_test") endif()