105 lines
3.3 KiB
CMake
105 lines
3.3 KiB
CMake
cmake_minimum_required(VERSION 3.15)
|
|
project(LumberJack LANGUAGES CXX)
|
|
|
|
# System and compiler configurations
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
include(FetchContent)
|
|
|
|
# ==========================================
|
|
# 1. CORE LIBRARY TARGET
|
|
# ==========================================
|
|
add_library(LumberJack_core
|
|
log_parsing/log_parsing.cpp
|
|
ip_to_geo/ip_to_geo.cpp
|
|
env_reader/env.cpp
|
|
third_party/src/GeoLite2PP.cpp
|
|
third_party/src/GeoLite2PP_error_category.cpp
|
|
)
|
|
|
|
# Include paths for your modules and MaxMind headers
|
|
target_include_directories(LumberJack_core PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/log_parsing
|
|
${CMAKE_CURRENT_SOURCE_DIR}/ip_to_geo
|
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party/include
|
|
)
|
|
|
|
# CROSS-PLATFORM FIXED: Automatically links appropriate binary dependencies based on OS
|
|
if(WIN32)
|
|
if(MSVC)
|
|
# Windows via Visual Studio Compiler
|
|
target_link_libraries(LumberJack_core PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/maxminddb.lib
|
|
)
|
|
else()
|
|
# Windows via MinGW/GCC Toolchain
|
|
target_link_libraries(LumberJack_core PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/libmaxminddb.a
|
|
)
|
|
endif()
|
|
|
|
# Windows requires Windows Sockets API linked for libmaxminddb network resolutions
|
|
target_link_libraries(LumberJack_core PRIVATE ws2_32)
|
|
|
|
elseif(APPLE)
|
|
# macOS Specific Path Integrations (Handles Intel /opt/local and Apple Silicon /opt/homebrew)
|
|
find_library(MAXMIND_LIB maxminddb HINTS /opt/homebrew/lib /usr/local/lib /opt/local/lib)
|
|
|
|
if(MAXMIND_LIB)
|
|
target_link_libraries(LumberJack_core PRIVATE ${MAXMIND_LIB})
|
|
else()
|
|
# Fallback to local static file repository boundary if brew package is missing
|
|
target_link_libraries(LumberJack_core PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/libmaxminddb.a
|
|
)
|
|
endif()
|
|
|
|
else()
|
|
# Standard Linux (Ubuntu, Arch Linux, Fedora, etc.)
|
|
target_link_libraries(LumberJack_core PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/libmaxminddb.a
|
|
)
|
|
endif()
|
|
|
|
# Version definitions needed by your GeoLite2PP wrapper
|
|
target_compile_definitions(LumberJack_core PRIVATE
|
|
GEOLITE2PP_VERSION="0.0.1"
|
|
)
|
|
|
|
# ==========================================
|
|
# 2. FTXUI Library Download
|
|
# ==========================================
|
|
FetchContent_Declare(
|
|
ftxui
|
|
GIT_REPOSITORY https://github.com/ArthurSonzogni/FTXUI.git
|
|
GIT_TAG v6.1.9
|
|
)
|
|
FetchContent_MakeAvailable(ftxui)
|
|
|
|
# ==========================================
|
|
# 3. APPLICATION EXECUTABLE
|
|
# ==========================================
|
|
add_executable(LumberJack main.cpp)
|
|
|
|
target_link_libraries(LumberJack
|
|
PRIVATE
|
|
LumberJack_core
|
|
ftxui::screen
|
|
ftxui::dom
|
|
ftxui::component
|
|
)
|
|
|
|
# CROSS-PLATFORM FIXED: Output targets route uniformly into the root project space
|
|
set_target_properties(LumberJack PROPERTIES
|
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
)
|
|
|
|
# ==========================================
|
|
# 4. TEST SUITE
|
|
# ==========================================
|
|
enable_testing()
|