Naut-Tracker/CMakeLists.txt

51 lines
1.5 KiB
CMake

cmake_minimum_required(VERSION 3.16)
project(torrent_tracker C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
option(TRACKER_NATIVE "Optimize for the build host (-march=native)" ON)
option(TRACKER_ASAN "Build with AddressSanitizer/UBSan" OFF)
option(TRACKER_TESTS "Build protocol tests" ON)
add_library(torrenttracker SHARED
src/tracker_http.c
src/tracker_udp.c
src/tracker_store.c
src/dht.c
)
target_include_directories(torrenttracker PUBLIC include)
target_compile_options(torrenttracker PRIVATE
-O3 -Wall -Wextra -Wno-unused-parameter
)
if(TRACKER_NATIVE AND NOT TRACKER_ASAN)
target_compile_options(torrenttracker PRIVATE -march=native)
endif()
if(TRACKER_ASAN)
target_compile_options(torrenttracker PRIVATE -O1 -g -fsanitize=address,undefined -fno-omit-frame-pointer)
target_link_options(torrenttracker PRIVATE -fsanitize=address,undefined)
endif()
option(TRACKER_LTO "Enable link-time optimization" ON)
if(TRACKER_LTO AND NOT TRACKER_ASAN)
include(CheckIPOSupported)
check_ipo_supported(RESULT _ipo_ok OUTPUT _ipo_msg)
if(_ipo_ok)
set_target_properties(torrenttracker PROPERTIES INTERPROCEDURAL_OPTIMIZATION ON)
endif()
endif()
set_target_properties(torrenttracker PROPERTIES OUTPUT_NAME torrenttracker)
if(TRACKER_TESTS)
enable_testing()
add_executable(test_tracker tests/test_tracker.c)
target_link_libraries(test_tracker PRIVATE torrenttracker)
add_test(NAME tracker_protocols COMMAND test_tracker)
endif()