From 16c3a414bb2f495107c669e3213a25ea2740cc65 Mon Sep 17 00:00:00 2001 From: rapturate Date: Sun, 14 Jun 2026 18:00:31 -0400 Subject: [PATCH] random updates including various forms of compiled libmaxminddb files for different operating systems --- .gitignore | 1 + CMakeLists.txt | 51 ++++++++++++++++++-------- raspberrypi.toolchain.cmake | 21 +++++++++++ third_party/lib/libmaxminddb.exp | 14 +++++++ third_party/lib/libmaxminddb.la | 1 + third_party/lib/libmaxminddb.lai | 41 +++++++++++++++++++++ third_party/lib/libmaxminddb.so.0 | 1 + third_party/lib/libmaxminddb.so.0.0.7 | Bin 0 -> 126928 bytes third_party/lib/libmaxminddb.ver | 16 ++++++++ 9 files changed, 131 insertions(+), 15 deletions(-) create mode 100644 raspberrypi.toolchain.cmake create mode 100644 third_party/lib/libmaxminddb.exp create mode 120000 third_party/lib/libmaxminddb.la create mode 100644 third_party/lib/libmaxminddb.lai create mode 120000 third_party/lib/libmaxminddb.so.0 create mode 100755 third_party/lib/libmaxminddb.so.0.0.7 create mode 100644 third_party/lib/libmaxminddb.ver diff --git a/.gitignore b/.gitignore index 426ba9d..cf3d80d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ # Ignores all variation of build folders (build, build_ninja, build-release, etc.) [Bb]uild*/ cmake-build-*/ +build_pi*/ # Ignore CMake generated artifacts if they accidentally land in the root CMakeCache.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index f1377e8..ddce2fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ target_include_directories(LumberJack_core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/third_party/include ) -# CROSS-PLATFORM FIXED: Automatically links appropriate binary dependencies based on OS +# CROSS-PLATFORM FIXED: Automatically links appropriate binary dependencies based on OS/Architecture if(WIN32) if(MSVC) # Windows via Visual Studio Compiler @@ -34,7 +34,7 @@ if(WIN32) ${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/maxminddb.lib ) else() - # Windows via MinGW/GCC Cross-Toolchain (FIXED: Points to your new library file) + # Windows via MinGW/GCC Cross-Toolchain target_link_libraries(LumberJack_core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/mingw_libmaxminddb.a ) @@ -44,26 +44,35 @@ if(WIN32) target_link_libraries(LumberJack_core PRIVATE ws2_32) elseif(APPLE) - # macOS Specific Path Integrations (Handles Intel /opt/local and Apple Silicon /opt/homebrew) + # macOS Specific Path Integrations 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}) + # Standard Linux (Ubuntu, Arch Linux, Fedora, or Cross-Compiling to Raspberry Pi) + if(CMAKE_CROSSCOMPILING) + # ─────────────── RASPBERRY PI TARGETING MODE ─────────────── + # Forces CMake to ignore your system paths and use your ARM .so file explicitly! + message(STATUS "[LumberJack] Cross-compiling detected! Explicitly forcing ARM .so dependency.") + target_link_libraries(LumberJack_core PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/libmaxminddb.so" + ) else() - target_link_libraries(LumberJack_core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/libmaxminddb.a) + # ─────────────── NATIVE ARCH LINUX HOST MODE ─────────────── + # Standard configuration behavior when compiling to run on your local Arch computer + 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() endif() @@ -106,18 +115,30 @@ if(CMAKE_BUILD_TYPE STREQUAL "Release") elseif(APPLE) set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN YES) else() - target_link_options(LumberJack PRIVATE -static-libgcc -static-libstdc++) + # RASPBERRY PI FIXED: Static linking libstdc++ can cause issues when cross-compiling + # without a complete sysroot. We wrap this safely. + # FORCE complete compiler runtime embedding during cross-compilation + if(CMAKE_CROSSCOMPILING) + target_link_options(LumberJack PRIVATE -static-libgcc -static-libstdc++) + else() + target_link_options(LumberJack PRIVATE -static-libgcc -static-libstdc++) + endif() + 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}" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin" + RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_BINARY_DIR}/bin/debug" + RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_BINARY_DIR}/bin/release" ) # ========================================== # 4. TEST SUITE # ========================================== -enable_testing() +# Disable testing during cross-compilation because your Arch Linux computer +# cannot execute compiled ARM/AArch64 test binaries locally. +if(NOT CMAKE_CROSSCOMPILING) + enable_testing() +endif() \ No newline at end of file diff --git a/raspberrypi.toolchain.cmake b/raspberrypi.toolchain.cmake new file mode 100644 index 0000000..57e5014 --- /dev/null +++ b/raspberrypi.toolchain.cmake @@ -0,0 +1,21 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR aarch64) + +# Force the cross-compiler binaries +set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) +set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) + +# Explicitly redirect root path searching away from your host OS paths +set(CMAKE_SYSROOT /usr/aarch64-linux-gnu) +set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu) + +# CRITICAL EXCLUSIONS: Force CMake to ONLY look inside the cross-compiler directories +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +# Ensure Ninja is mapped properly +find_program(NINJA_PATH ninja REQUIRED) +set(CMAKE_MAKE_PROGRAM ${NINJA_PATH} CACHE FILEPATH "Path to Ninja" FORCE) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--allow-shlib-undefined") \ No newline at end of file diff --git a/third_party/lib/libmaxminddb.exp b/third_party/lib/libmaxminddb.exp new file mode 100644 index 0000000..dcb34fb --- /dev/null +++ b/third_party/lib/libmaxminddb.exp @@ -0,0 +1,14 @@ +MMDB_aget_value +MMDB_close +MMDB_dump_entry_data_list +MMDB_free_entry_data_list +MMDB_get_entry_data_list +MMDB_get_metadata_as_entry_data_list +MMDB_get_value +MMDB_lib_version +MMDB_lookup_sockaddr +MMDB_lookup_string +MMDB_open +MMDB_read_node +MMDB_strerror +MMDB_vget_value diff --git a/third_party/lib/libmaxminddb.la b/third_party/lib/libmaxminddb.la new file mode 120000 index 0000000..0f12036 --- /dev/null +++ b/third_party/lib/libmaxminddb.la @@ -0,0 +1 @@ +../libmaxminddb.la \ No newline at end of file diff --git a/third_party/lib/libmaxminddb.lai b/third_party/lib/libmaxminddb.lai new file mode 100644 index 0000000..37b3f4b --- /dev/null +++ b/third_party/lib/libmaxminddb.lai @@ -0,0 +1,41 @@ +# libmaxminddb.la - a libtool library file +# Generated by libtool (GNU libtool) 2.5.4 Debian-2.5.4-4build1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='libmaxminddb.so.0' + +# Names of this library. +library_names='libmaxminddb.so.0.0.7 libmaxminddb.so.0 libmaxminddb.so' + +# The name of the static archive. +old_library='libmaxminddb.a' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='' + +# Libraries that this one depends upon. +dependency_libs=' -lm' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libmaxminddb. +current=0 +age=0 +revision=7 + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/usr/local/lib' diff --git a/third_party/lib/libmaxminddb.so.0 b/third_party/lib/libmaxminddb.so.0 new file mode 120000 index 0000000..a4bdc02 --- /dev/null +++ b/third_party/lib/libmaxminddb.so.0 @@ -0,0 +1 @@ +libmaxminddb.so.0.0.7 \ No newline at end of file diff --git a/third_party/lib/libmaxminddb.so.0.0.7 b/third_party/lib/libmaxminddb.so.0.0.7 new file mode 100755 index 0000000000000000000000000000000000000000..f5f58d9216005b78bedeaed8c1a35222512e254e GIT binary patch literal 126928 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 literal 0 HcmV?d00001 diff --git a/third_party/lib/libmaxminddb.ver b/third_party/lib/libmaxminddb.ver new file mode 100644 index 0000000..09c55d8 --- /dev/null +++ b/third_party/lib/libmaxminddb.ver @@ -0,0 +1,16 @@ +{ global: +MMDB_aget_value; +MMDB_close; +MMDB_dump_entry_data_list; +MMDB_free_entry_data_list; +MMDB_get_entry_data_list; +MMDB_get_metadata_as_entry_data_list; +MMDB_get_value; +MMDB_lib_version; +MMDB_lookup_sockaddr; +MMDB_lookup_string; +MMDB_open; +MMDB_read_node; +MMDB_strerror; +MMDB_vget_value; +local: *; };