light/tools/cmake/functions.cmake

141 lines
5.3 KiB
CMake
Raw Permalink Normal View History

2025-10-16 14:12:26 +03:30
function(add_library_module libname)
2025-07-20 04:46:15 +03:30
set(PUBLIC_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/public_includes")
file(MAKE_DIRECTORY "${PUBLIC_INCLUDE_DIR}")
2025-10-16 14:12:26 +03:30
file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/public/"
"${PUBLIC_INCLUDE_DIR}/${libname}" SYMBOLIC)
2025-07-20 04:46:15 +03:30
2025-10-16 14:12:26 +03:30
if("${ARGN}" STREQUAL "") # Header only library
2025-07-05 13:28:41 +03:30
message("Adding INTERFACE library ${libname}")
add_library(${libname} INTERFACE)
2025-07-20 04:46:15 +03:30
target_include_directories(${libname} INTERFACE ${PUBLIC_INCLUDE_DIR})
2025-07-05 13:28:41 +03:30
2025-10-05 10:07:48 +03:30
target_link_libraries(${libname} INTERFACE std)
2025-10-16 14:12:26 +03:30
else() # Compiled library
2025-07-05 13:28:41 +03:30
set(source_files)
2025-07-20 04:46:15 +03:30
set(source_directory "${CMAKE_CURRENT_SOURCE_DIR}/private")
2025-10-16 14:12:26 +03:30
foreach(source_file ${ARGN})
2025-07-05 13:28:41 +03:30
list(APPEND source_files "${source_directory}/${source_file}")
2025-10-16 14:12:26 +03:30
endforeach()
2025-07-05 13:28:41 +03:30
message("Adding library ${libname} with source files: ${source_files}")
add_library(${libname} ${source_files})
2025-07-20 04:46:15 +03:30
set(PRIVATE_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/private_includes")
file(MAKE_DIRECTORY "${PRIVATE_INCLUDE_DIR}")
2025-10-16 14:12:26 +03:30
file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/private/"
"${PRIVATE_INCLUDE_DIR}/${libname}" SYMBOLIC)
2025-07-20 04:46:15 +03:30
2025-10-16 14:12:26 +03:30
target_include_directories(
${libname}
2025-07-20 04:46:15 +03:30
PUBLIC ${PUBLIC_INCLUDE_DIR}
2025-10-16 14:12:26 +03:30
PRIVATE ${PRIVATE_INCLUDE_DIR})
2025-10-05 10:07:48 +03:30
target_link_libraries(${libname} PUBLIC std)
2025-10-16 14:12:26 +03:30
endif()
2025-10-05 10:07:48 +03:30
2025-10-16 14:12:26 +03:30
endfunction()
2025-07-05 13:28:41 +03:30
2025-10-16 14:12:26 +03:30
function(add_executable_module exename)
2025-07-05 13:28:41 +03:30
set(source_files)
2025-07-20 04:46:15 +03:30
set(source_directory "${CMAKE_CURRENT_SOURCE_DIR}/private")
2025-10-16 14:12:26 +03:30
foreach(source_file ${ARGN})
2025-07-05 13:28:41 +03:30
list(APPEND source_files "${source_directory}/${source_file}")
2025-10-16 14:12:26 +03:30
endforeach()
2025-07-05 13:28:41 +03:30
message("Adding executable ${exename} with source files: ${source_files}")
2025-07-20 04:46:15 +03:30
set(PUBLIC_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/public_includes")
file(MAKE_DIRECTORY "${PUBLIC_INCLUDE_DIR}")
2025-10-16 14:12:26 +03:30
file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/public/"
"${PUBLIC_INCLUDE_DIR}/${exename}" SYMBOLIC)
2025-07-20 04:46:15 +03:30
set(PRIVATE_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/private_includes")
file(MAKE_DIRECTORY "${PRIVATE_INCLUDE_DIR}")
2025-10-16 14:12:26 +03:30
file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/private/"
"${PRIVATE_INCLUDE_DIR}${exename}" SYMBOLIC)
2025-07-20 04:46:15 +03:30
2025-07-05 13:28:41 +03:30
add_executable(${exename} ${source_files})
2025-10-05 10:07:48 +03:30
target_link_libraries(${exename} PRIVATE std)
2025-10-16 14:12:26 +03:30
target_include_directories(${exename} PRIVATE ${PUBLIC_INCLUDE_DIR}
${PRIVATE_INCLUDE_DIR})
endfunction()
2025-10-16 14:12:26 +03:30
function(add_test_module target_lib_name)
if(NOT ${ENABLE_UNIT_TESTS})
return()
2025-10-16 14:12:26 +03:30
endif()
2025-07-16 10:36:07 +03:30
set(source_files)
2025-07-20 04:46:15 +03:30
set(source_directory "${CMAKE_CURRENT_SOURCE_DIR}/private")
2025-10-16 14:12:26 +03:30
foreach(source_file ${ARGN})
2025-07-16 10:36:07 +03:30
list(APPEND source_files "${source_directory}/${source_file}")
2025-10-16 14:12:26 +03:30
endforeach()
2025-07-16 10:36:07 +03:30
2025-10-16 14:12:26 +03:30
message(
"Adding test executable ${target_lib_name}_tests with source files: ${source_files}"
)
2025-07-20 04:46:15 +03:30
set(PUBLIC_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/public_includes")
file(MAKE_DIRECTORY "${PUBLIC_INCLUDE_DIR}")
2025-10-16 14:12:26 +03:30
file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/public/"
"${PUBLIC_INCLUDE_DIR}/${target_lib_name}" SYMBOLIC)
2025-07-20 04:46:15 +03:30
set(PRIVATE_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/private_includes")
file(MAKE_DIRECTORY "${PRIVATE_INCLUDE_DIR}")
2025-10-16 14:12:26 +03:30
file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/private/"
"${PRIVATE_INCLUDE_DIR}/${target_lib_name}" SYMBOLIC)
2025-07-20 04:46:15 +03:30
add_executable(${target_lib_name}_tests ${source_files})
2025-10-16 14:12:26 +03:30
target_link_libraries(${target_lib_name}_tests PRIVATE ${target_lib_name}
std test)
target_include_directories(
${target_lib_name}_tests
PRIVATE ${PUBLIC_INCLUDE_DIR}
2025-10-16 14:12:26 +03:30
PRIVATE ${PRIVATE_INCLUDE_DIR})
endfunction()
2025-10-16 14:12:26 +03:30
function(add_fuzz_module target_lib_name)
if(NOT ${ENABLE_FUZZ_TESTS})
2025-07-30 23:02:53 +03:30
return()
2025-10-16 14:12:26 +03:30
endif()
2025-07-30 23:02:53 +03:30
set(source_files)
set(source_directory "${CMAKE_CURRENT_SOURCE_DIR}/private")
2025-10-16 14:12:26 +03:30
foreach(source_file ${ARGN})
2025-07-30 23:02:53 +03:30
list(APPEND source_files "${source_directory}/${source_file}")
2025-10-16 14:12:26 +03:30
endforeach()
2025-07-30 23:02:53 +03:30
2025-10-16 14:12:26 +03:30
message(
"Adding fuzz executable ${target_lib_name}_fuzz with source files: ${source_files}"
)
2025-07-30 23:02:53 +03:30
set(PUBLIC_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/public_includes")
file(MAKE_DIRECTORY "${PUBLIC_INCLUDE_DIR}")
2025-10-16 14:12:26 +03:30
file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/public/"
"${PUBLIC_INCLUDE_DIR}/${target_lib_name}" SYMBOLIC)
2025-07-30 23:02:53 +03:30
set(PRIVATE_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/private_includes")
file(MAKE_DIRECTORY "${PRIVATE_INCLUDE_DIR}")
2025-10-16 14:12:26 +03:30
file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/private/"
"${PRIVATE_INCLUDE_DIR}/${target_lib_name}" SYMBOLIC)
2025-07-30 23:02:53 +03:30
add_executable(${target_lib_name}_fuzz ${source_files})
2025-10-16 14:12:26 +03:30
target_link_libraries(${target_lib_name}_fuzz PRIVATE ${target_lib_name}
std fuzz_test)
2025-07-30 23:02:53 +03:30
target_link_options(${target_lib_name}_fuzz PRIVATE -fsanitize=fuzzer)
target_compile_options(${target_lib_name}_fuzz PRIVATE -fsanitize=fuzzer)
2025-10-16 14:12:26 +03:30
target_include_directories(
${target_lib_name}_fuzz
2025-07-30 23:02:53 +03:30
PRIVATE ${PUBLIC_INCLUDE_DIR}
2025-10-16 14:12:26 +03:30
PRIVATE ${PRIVATE_INCLUDE_DIR})
endfunction()
2025-07-30 23:02:53 +03:30
2025-10-16 14:12:26 +03:30
function(add_option option help)
option(${option} ${help})
2025-10-16 14:12:26 +03:30
if(${option})
message(STATUS "${option}: ON")
add_compile_definitions(${option}=1)
2025-10-16 14:12:26 +03:30
else()
message(STATUS "${option}: OFF")
2025-10-16 14:12:26 +03:30
endif()
endfunction()