cmake_minimum_required(VERSION 3.28) cmake_policy(SET CMP0167 NEW) # Suppress FindBoost removal warning # ── CUDA is optional (not available on macOS) ─────────────────── include(CheckLanguage) check_language(CUDA) if(CMAKE_CUDA_COMPILER) project(ANSCORE LANGUAGES C CXX CUDA) set(ANSCORE_HAS_CUDA ON) set(CMAKE_CUDA_STANDARD 20) set(CMAKE_CUDA_STANDARD_REQUIRED ON) set(CMAKE_CUDA_ARCHITECTURES 75 80 86 87 88 89 90 100) if(MSVC) set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --use-fast-math -Xcompiler=/utf-8") else() set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --use-fast-math") endif() else() project(ANSCORE LANGUAGES C CXX) set(ANSCORE_HAS_CUDA OFF) message(WARNING "CUDA not found — GPU-accelerated modules will be limited") endif() # ── Platform detection ────────────────────────────────────────── if(WIN32) set(ANSCORE_PLATFORM "windows") elseif(APPLE) set(ANSCORE_PLATFORM "macos") else() set(ANSCORE_PLATFORM "linux") endif() message(STATUS "ANSCORE platform: ${ANSCORE_PLATFORM}, CUDA: ${ANSCORE_HAS_CUDA}") # ── Global Settings ────────────────────────────────────────────── set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) # Output all binaries to a single directory set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) # ── Compiler Configuration ────────────────────────────────────── if(MSVC) # Dynamic CRT (/MD) — matches original VS projects and prebuilt libs like HWiNFO set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") # Apply MSVC flags only to C/C++ (not CUDA — nvcc doesn't understand them) add_compile_options( "$<$:/W3>" "$<$:/utf-8>" "$<$,$>>:/Zi>" ) add_link_options( "$<$>:/DEBUG:FULL>" "$<$>:/OPT:REF>" "$<$>:/OPT:ICF>" ) add_compile_definitions(_CRT_SECURE_NO_WARNINGS _WINSOCK_DEPRECATED_NO_WARNINGS) elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") add_compile_options(-Wall -Wextra -Wno-unused-parameter) if(NOT APPLE) add_link_options(-Wl,--as-needed) endif() endif() # ── External Dependencies ─────────────────────────────────────── include(cmake/Dependencies.cmake) # ── Subprojects (ordered by dependency) ───────────────────────── # Core — licensing & infrastructure add_subdirectory(core/anslicensing) add_subdirectory(core/ANSLicensingSystem) add_subdirectory(core/ANSLibsLoader) # Modules — feature DLLs (cross-platform) add_subdirectory(modules/ANSMOT) add_subdirectory(modules/ANSUtilities) add_subdirectory(modules/ANSTrainingEngine) add_subdirectory(modules/ANSLLM) # Integrations — hardware & protocol DLLs if(WIN32) add_subdirectory(integrations/ANNHUB) add_subdirectory(integrations/ANSIO) add_subdirectory(integrations/ANSONVIF) endif() add_subdirectory(integrations/ANSPulsar) add_subdirectory(integrations/ANSRabbitMQ) # Modules — engine layer (CUDA + inference frameworks) if(ANSCORE_HAS_CUDA) add_subdirectory(modules/ANSODEngine) add_subdirectory(modules/ANSOCR) add_subdirectory(modules/ANSFR) add_subdirectory(modules/ANSLPR) endif() add_subdirectory(modules/ANSCV) # Facade add_subdirectory(ANSLIB) # Tests add_subdirectory(tests)