Files

99 lines
3.4 KiB
CMake

cmake_minimum_required(VERSION 3.10)
cmake_policy(SET CMP0074 NEW)
project(unswsc LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
# Force-fPIC (For .so libraries)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
add_compile_options(-Wno-literal-suffix)
endif()
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
endif()
find_package(OpenSSL REQUIRED)
find_package(fmt CONFIG REQUIRED)
find_package(jsoncpp CONFIG REQUIRED)
find_package(unofficial-sodium CONFIG REQUIRED)
# find_package(stduuid CONFIG REQUIRED)
# find_package(ICU REQUIRED COMPONENTS i18n uc io tu data)
add_library(webcc STATIC IMPORTED)
set_target_properties(webcc PROPERTIES
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/lib/libwebcc.a"
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/webcc"
)
add_library(uohash SHARED IMPORTED)
set_target_properties(uohash PROPERTIES
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/so/libuohash.so"
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/uohash"
)
add_library(utextcodec SHARED IMPORTED)
set_target_properties(utextcodec PROPERTIES
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/so/libutextcodec.so"
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/utextcodec"
)
add_library(unswsc SHARED
CORSConfig.cpp # 跨域访问配置
SessionManager.cpp # 会话管理器
WebFileInfo.cpp # 文件信息封装类
ServerProcessor.cpp # 原始业务处理类
CORSProcessor.cpp # 跨域访问处理器
UNSResponseBuilder.cpp # HTTP相应构造器
SyncFileReceiver.cpp # 同步文件上传
DateTime.cpp # 日期和时间
IPTable.cpp # IP表
IPList.cpp # IP列表
Global.cpp # 全局变量/函数
FileReceiver.cpp # 异步文件上传
#JsonUnicodeWriter.cpp # 关闭Unicode自动转义的Writer
DataTransfer.cpp # 数据转移器
ServerLogger.cpp # 服务器日志类
LogArg.cpp # 服务器日志参数类型转换
ServerCore.cpp # 服务器内核
SafeRNG.cpp # 安全随机数生成器
HTTPObjects.cpp # webcc对象包装兼容层
PathTraversal.cpp # 路径穿越防御
TempFileManager.cpp # 临时文件管理器
)
# target_link_libraries(unswsc PRIVATE stduuid)
target_link_libraries(unswsc PRIVATE webcc)
target_link_libraries(unswsc PRIVATE uohash)
target_link_libraries(unswsc PRIVATE utextcodec)
target_link_libraries(unswsc PRIVATE fmt::fmt)
target_link_libraries(unswsc PRIVATE OpenSSL::Crypto)
target_link_libraries(unswsc PRIVATE JsonCpp::JsonCpp)
target_link_libraries(unswsc PRIVATE unofficial-sodium::sodium)
# target_link_libraries(unswsc PRIVATE ICU::i18n ICU::uc ICU::io ICU::tu ICU::data)
add_executable(logger_test
ServerLogger.cpp # 服务器日志类
LogArg.cpp # 服务器日志参数类型转换
TestLogger.cpp # 服务器日志测试
)
target_link_libraries(logger_test PRIVATE utextcodec)
target_link_libraries(logger_test PRIVATE fmt::fmt)
add_executable(core_distributor
CoreDistributor.cpp
)
target_link_libraries(core_distributor PRIVATE OpenSSL::Crypto)
target_link_libraries(core_distributor PRIVATE JsonCpp::JsonCpp)
if(NOT TARGET rebuild)
add_custom_target(rebuild
COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target clean
COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --parallel 10 --config Release
COMMENT ">>> Rebuilding entire project (clean + all) <<<"
)
endif()