124 lines
4.0 KiB
CMake
124 lines
4.0 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 Cross-Toolchain (FIXED: Points to your new library file)
|
|
target_link_libraries(LumberJack_core PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/mingw_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.)
|
|
# OPTIMIZATION: Try finding system-installed libmaxminddb first, fallback to local file if missing
|
|
find_library(MAXMIND_LINUX maxminddb)
|
|
if(MAXMIND_LINUX)
|
|
target_link_libraries(LumberJack_core PRIVATE ${MAXMIND_LINUX})
|
|
else()
|
|
target_link_libraries(LumberJack_core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/libmaxminddb.a)
|
|
endif()
|
|
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)
|
|
|
|
# Second: Link your internal libraries and FTXUI
|
|
target_link_libraries(LumberJack PRIVATE
|
|
LumberJack_core
|
|
ftxui::screen
|
|
ftxui::dom
|
|
ftxui::component
|
|
)
|
|
|
|
# Third: Apply your static linking flags (Target now exists safely!)
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Release")
|
|
if(WIN32)
|
|
if(MSVC)
|
|
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded")
|
|
else()
|
|
target_link_options(LumberJack PRIVATE -static)
|
|
endif()
|
|
elseif(APPLE)
|
|
set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN YES)
|
|
else()
|
|
target_link_options(LumberJack PRIVATE -static-libgcc -static-libstdc++)
|
|
endif()
|
|
endif()
|
|
|
|
# Fourth: Set directory runtime properties
|
|
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()
|