51 lines
1.5 KiB
CMake
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()
|