small-package/UA2F/CMakeLists.txt

208 lines
6.1 KiB
CMake
Raw Permalink Normal View History

2023-09-20 20:28:00 +08:00
cmake_minimum_required(VERSION 3.16)
project(UA2F LANGUAGES C CXX)
set(CMAKE_C_STANDARD 17)
2025-04-10 16:28:17 +08:00
cmake_policy(SET CMP0135 NEW)
2023-10-20 21:50:57 +08:00
OPTION(UA2F_BUILD_TESTS "Build tests" OFF)
2023-12-25 23:35:17 +08:00
OPTION(UA2F_ENABLE_UCI "Enable UCI support" ON)
2024-11-26 20:41:54 +08:00
OPTION(UA2F_NO_CACHE "Disable cache" OFF)
2025-03-06 20:41:12 +08:00
OPTION(UA2F_ENABLE_BACKTRACE "Enable libbacktrace support" ON)
2023-10-20 21:50:57 +08:00
2023-09-20 20:28:00 +08:00
find_package(Git)
2024-09-12 20:35:48 +08:00
if (GIT_FOUND)
2023-09-20 20:28:00 +08:00
execute_process(
COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=0
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_TAG
OUTPUT_STRIP_TRAILING_WHITESPACE
2024-09-12 20:35:48 +08:00
RESULT_VARIABLE GIT_TAG_RESULT
2023-09-20 20:28:00 +08:00
)
2024-09-12 20:35:48 +08:00
if ((NOT GIT_TAG_RESULT EQUAL 0) OR (GIT_TAG STREQUAL ""))
set(GIT_TAG "unknown")
endif ()
2023-09-20 20:28:00 +08:00
execute_process(
COMMAND ${GIT_EXECUTABLE} branch --show-current
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_BRANCH
OUTPUT_STRIP_TRAILING_WHITESPACE
2024-09-12 20:35:48 +08:00
RESULT_VARIABLE GIT_BRANCH_RESULT
2023-09-20 20:28:00 +08:00
)
2024-09-12 20:35:48 +08:00
if ((NOT GIT_BRANCH_RESULT EQUAL 0) OR (GIT_BRANCH STREQUAL ""))
set(GIT_BRANCH "unknown")
endif ()
2023-09-20 20:28:00 +08:00
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_COMMIT
OUTPUT_STRIP_TRAILING_WHITESPACE
2024-09-12 20:35:48 +08:00
RESULT_VARIABLE GIT_COMMIT_RESULT
2023-09-20 20:28:00 +08:00
)
2024-09-12 20:35:48 +08:00
if ((NOT GIT_COMMIT_RESULT EQUAL 0) OR (GIT_COMMIT STREQUAL ""))
set(GIT_COMMIT "unknown")
endif ()
2024-09-20 20:36:30 +08:00
execute_process(
COMMAND ${GIT_EXECUTABLE} status --porcelain
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_DIRTY_OUTPUT
OUTPUT_STRIP_TRAILING_WHITESPACE
RESULT_VARIABLE GIT_DIRTY_RESULT
)
if ((NOT GIT_DIRTY_RESULT EQUAL 0))
set(GIT_DIRTY "unknown")
elseif (GIT_DIRTY_OUTPUT STREQUAL "")
set(GIT_DIRTY "clean")
else ()
set(GIT_DIRTY "dirty")
endif ()
2024-09-12 20:35:48 +08:00
else ()
2023-09-20 20:28:00 +08:00
set(GIT_COMMIT "unknown")
set(GIT_BRANCH "unknown")
set(GIT_TAG "unknown")
2024-09-20 20:36:30 +08:00
set(GIT_DIRTY "unknown")
2024-09-12 20:35:48 +08:00
endif ()
2023-09-20 20:28:00 +08:00
2024-09-12 20:35:48 +08:00
if (UA2F_VERSION_STR)
2023-09-20 20:28:00 +08:00
message(STATUS "Using version string: ${UA2F_VERSION_STR}")
else ()
set(UA2F_VERSION_STR "unknown")
message(STATUS "Using version string: unknown")
2024-09-12 20:35:48 +08:00
endif ()
2023-09-20 20:28:00 +08:00
add_compile_definitions(UA2F_GIT_COMMIT="${GIT_COMMIT}")
add_compile_definitions(UA2F_GIT_BRANCH="${GIT_BRANCH}")
add_compile_definitions(UA2F_GIT_TAG="${GIT_TAG}")
2024-09-20 20:36:30 +08:00
add_compile_definitions(UA2F_GIT_DIRTY="${GIT_DIRTY}")
2023-09-20 20:28:00 +08:00
add_compile_definitions(UA2F_VERSION="${UA2F_VERSION_STR}")
2025-04-10 16:28:17 +08:00
add_compile_options(-fno-omit-frame-pointer -fno-strict-aliasing)
2024-09-12 20:35:48 +08:00
if (DEFINED ENV{UA2F_ENABLE_ASAN})
set(UA2F_ENABLE_ASAN $ENV{UA2F_ENABLE_ASAN})
message(STATUS "UA2F_ENABLE_ASAN set from environment: ${UA2F_ENABLE_ASAN}")
else ()
2024-09-20 20:36:30 +08:00
message(STATUS "UA2F_ENABLE_ASAN not set in environment")
2024-09-12 20:35:48 +08:00
endif ()
2024-06-19 04:19:29 +08:00
if (UA2F_ENABLE_ASAN)
2023-09-20 20:28:00 +08:00
add_compile_options(-fsanitize=address)
add_link_options(-fsanitize=address)
2024-09-12 20:35:48 +08:00
message(STATUS "AddressSanitizer is enabled.")
2023-09-20 20:28:00 +08:00
else ()
message(STATUS "AddressSanitizer is disabled.")
endif ()
2024-09-12 20:35:48 +08:00
if (UA2F_CUSTOM_USER_AGENT)
if (NOT UA2F_USER_AGENT_STRING)
2023-09-20 20:28:00 +08:00
message(FATAL_ERROR "UA2F_USER_AGENT_STRING is not set")
2024-09-12 20:35:48 +08:00
endif ()
2023-09-20 20:28:00 +08:00
message(STATUS "Using custom user agent string: ${UA2F_USER_AGENT_STRING}")
add_compile_definitions(UA2F_USE_CUSTOM_UA=1)
2024-09-12 20:35:48 +08:00
endif ()
2023-09-20 20:28:00 +08:00
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/custom.h.in ${CMAKE_CURRENT_BINARY_DIR}/custom.h)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_executable(ua2f
src/ua2f.c
src/statistics.c
src/util.c
src/cache.c
src/handler.c
src/cli.c
2023-10-20 21:50:57 +08:00
src/config.c
2025-03-06 20:41:12 +08:00
src/third/nfqueue-mnl/nfqueue-mnl.c)
2023-09-20 20:28:00 +08:00
2023-12-25 23:35:17 +08:00
target_link_libraries(ua2f mnl netfilter_queue pthread nfnetlink)
2025-03-06 20:41:12 +08:00
if (UA2F_ENABLE_BACKTRACE)
set(LIBBACKTRACE_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/libbacktrace)
2025-03-07 04:22:44 +08:00
execute_process(
COMMAND ${CMAKE_C_COMPILER} -dumpmachine
OUTPUT_VARIABLE LIBBACKTRACE_HOST
OUTPUT_STRIP_TRAILING_WHITESPACE
RESULT_VARIABLE DUMPMACHINE_RESULT
)
if(NOT DUMPMACHINE_RESULT EQUAL 0)
set(LIBBACKTRACE_HOST "")
endif()
message(STATUS "LIBBACKTRACE_HOST: ${LIBBACKTRACE_HOST}")
2025-03-06 20:41:12 +08:00
add_custom_target(libbacktrace
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR}/src/third/libbacktrace &&
autoreconf -i &&
2025-03-07 04:22:44 +08:00
./configure --prefix=${LIBBACKTRACE_BUILD_DIR} --host=${LIBBACKTRACE_HOST} &&
2025-03-06 20:41:12 +08:00
make &&
make install
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/third/libbacktrace
)
target_include_directories(ua2f PRIVATE ${LIBBACKTRACE_BUILD_DIR}/include)
target_link_directories(ua2f PRIVATE ${LIBBACKTRACE_BUILD_DIR}/lib)
target_link_libraries(ua2f backtrace)
add_dependencies(ua2f libbacktrace)
add_compile_definitions(UA2F_ENABLE_BACKTRACE=1)
message(STATUS "libbacktrace support is enabled.")
else()
message(STATUS "libbacktrace support is disabled.")
endif()
2023-12-25 23:35:17 +08:00
if (UA2F_ENABLE_UCI)
add_compile_definitions(UA2F_ENABLE_UCI=1)
target_link_libraries(ua2f uci)
else ()
message(STATUS "UCI support is disabled.")
endif ()
2023-09-20 20:28:00 +08:00
2024-11-26 20:41:54 +08:00
if (UA2F_NO_CACHE)
add_compile_definitions(UA2F_NO_CACHE=1)
message(STATUS "Cache is disabled.")
else ()
message(STATUS "Cache is auto.")
endif ()
2023-09-20 20:28:00 +08:00
install(TARGETS ua2f RUNTIME DESTINATION bin)
if (UA2F_BUILD_TESTS)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include(FetchContent)
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip
)
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
enable_testing()
add_executable(
ua2f_test
test/util_test.cc
2024-06-19 04:19:29 +08:00
test/cache_test.cc
2023-09-20 20:28:00 +08:00
src/util.c
src/cache.c
)
target_link_libraries(
ua2f_test
GTest::gtest_main
)
target_include_directories(ua2f_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
include(GoogleTest)
gtest_discover_tests(ua2f_test)
else ()
message(STATUS "Tests are disabled.")
2025-04-10 16:28:17 +08:00
endif ()