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() # ── DebugView logging toggle ──────────────────────────────────── # When ON, every ANS_DBG(...) call across the whole tree expands to an # OutputDebugStringA() call visible in Sysinternals DebugView (Dbgview.exe). # This is the single switch for verbose runtime diagnostics in ANSLPR, # ANSCV (RTSP lifecycle, HW decoder auto-config), ANSODEngine (NV12 fast # path, ORT/TRT engine selection), ANSFR (face recognizer state), etc. # # Enable it to diagnose field issues (e.g. "ALPR worked for a while then # stopped"), then turn it back OFF for production because every ANS_DBG # call adds a kernel round-trip and string formatting cost. # # Usage: # cmake -B build -DANSCORE_DEBUGVIEW=ON # enable # cmake -B build -DANSCORE_DEBUGVIEW=OFF # disable (default) # # Or toggle in CLion/VS: edit the cache variable ANSCORE_DEBUGVIEW. option(ANSCORE_DEBUGVIEW "Enable ANS_DBG OutputDebugString logging for DebugView" OFF) if(ANSCORE_DEBUGVIEW) add_compile_definitions(ANSCORE_DEBUGVIEW=1) message(STATUS "ANSCORE_DEBUGVIEW = ON — ANS_DBG verbose logging ENABLED (DebugView)") else() message(STATUS "ANSCORE_DEBUGVIEW = OFF — ANS_DBG verbose logging disabled (production)") 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)