cmake_minimum_required(VERSION 3.24) project(hunjing_lingtai VERSION 0.1.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # 编译警告全开并视为错误(AGENTS.md 8.4) if(MSVC) add_compile_options(/W4 /WX) else() add_compile_options(-Wall -Wextra -Wpedantic -Wshadow -Wconversion -Wsign-conversion -Werror) endif() # 符号默认隐藏,仅导出 hj_*(API 卫生;由 HJ_API 宏显式导出) set(CMAKE_CXX_VISIBILITY_PRESET hidden) set(CMAKE_VISIBILITY_INLINES_HIDDEN ON) add_library(hunjing SHARED src/lingtai.cpp src/transform.cpp src/modules.cpp) target_include_directories(hunjing PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src) # 单元测试(doctest,ADR-025);单头直接引入,不用 FetchContent 拉网络 add_executable(lingtai_tests tests/test_main.cpp tests/test_core.cpp tests/test_transform.cpp tests/test_modules.cpp src/lingtai.cpp src/transform.cpp src/modules.cpp) target_include_directories(lingtai_tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/third_party) enable_testing() add_test(NAME lingtai_tests COMMAND lingtai_tests) # fuzz 目标(ADR-025:hj_transform 为必测目标;需要 clang libFuzzer) option(HJ_BUILD_FUZZER "Build libFuzzer targets" OFF) if(HJ_BUILD_FUZZER) add_executable(fuzz_transform fuzz/fuzz_transform.cpp src/lingtai.cpp src/transform.cpp src/modules.cpp) target_include_directories(fuzz_transform PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src) target_compile_options(fuzz_transform PRIVATE -fsanitize=fuzzer,address -g) target_link_options(fuzz_transform PRIVATE -fsanitize=fuzzer,address) endif()