Files
LumberJack_TUI/CMakeLists.txt
rapturate 42f50c9e9a 1) First draft of the TUI functionality
2) Added env_reader functions (env.hpp and env.cpp)
3) Program looks for a .env on startup and creates one based on user input if not found.
4) Refactored log_parsing and ip_to_geo to use the global env variables for parsing and ip lookup from the local .mmdb database
5) CMakeLists.txt is now cross platform functional
6) Added various cross platform checks for creating .env variables
2026-06-09 14:29:42 -04:00

105 lines
3.3 KiB
CMake

cmake_minimum_required(VERSION 3.15)
project(ParseLogCLI 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(parselog_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(parselog_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(parselog_core PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/maxminddb.lib
)
else()
# Windows via MinGW/GCC Toolchain
target_link_libraries(parselog_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(parselog_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(parselog_core PRIVATE ${MAXMIND_LIB})
else()
# Fallback to local static file repository boundary if brew package is missing
target_link_libraries(parselog_core PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/libmaxminddb.a
)
endif()
else()
# Standard Linux (Ubuntu, Arch Linux, Fedora, etc.)
target_link_libraries(parselog_core PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/libmaxminddb.a
)
endif()
# Version definitions needed by your GeoLite2PP wrapper
target_compile_definitions(parselog_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(parselog_cli main.cpp)
target_link_libraries(parselog_cli
PRIVATE
parselog_core
ftxui::screen
ftxui::dom
ftxui::component
)
# CROSS-PLATFORM FIXED: Output targets route uniformly into the root project space
set_target_properties(parselog_cli 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()