From 9ea006ff37e9efac902cec6dd5b70fdb27aed148 Mon Sep 17 00:00:00 2001 From: j842 Date: Tue, 10 Jun 2025 17:01:43 +1200 Subject: [PATCH] Simpler - working! --- tests/ipdemo/CMakeLists.txt | 140 +++++++++--------------------------- 1 file changed, 34 insertions(+), 106 deletions(-) diff --git a/tests/ipdemo/CMakeLists.txt b/tests/ipdemo/CMakeLists.txt index f919761..2c1928d 100644 --- a/tests/ipdemo/CMakeLists.txt +++ b/tests/ipdemo/CMakeLists.txt @@ -1,149 +1,77 @@ -# Get the current date in yyyy.mmdd.hhmm format +cmake_minimum_required(VERSION 3.16) + +# Generate version from current date execute_process( COMMAND date "+%Y.%m%d.%H%M" OUTPUT_VARIABLE PROJECT_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE ) -cmake_minimum_required(VERSION 3.14) +# Project setup if(NOT DEFINED PROJECT_NAME) message(FATAL_ERROR "PROJECT_NAME is not defined. Pass it via -DPROJECT_NAME=") endif() -# Include required modules -include(FetchContent) - project(${PROJECT_NAME} VERSION ${PROJECT_VERSION} LANGUAGES CXX) -set(PROJECT_EXE_NAME ${PROJECT_NAME}) - -# Force static linking globally -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static") -set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") -set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared libraries" FORCE) -set(CMAKE_POSITION_INDEPENDENT_CODE OFF) -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static -rdynamic") -set(ZLIB_USE_STATIC_LIBS "ON") +# C++ standard and build configuration set(CMAKE_CXX_STANDARD 23) -set(CMAKE_C_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) -# Set default build type to Debug if not specified -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build (Debug or Release)" FORCE) -endif() +# Static linking configuration +set(CMAKE_EXE_LINKER_FLAGS "-static -Wl,--allow-multiple-definition") +set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") +set(BUILD_SHARED_LIBS OFF) -# Configure build-specific compiler flags -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -gdwarf-4 -fno-omit-frame-pointer") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG -g -gdwarf-4 -fno-omit-frame-pointer") - -# Configure version.hpp file +# Configure version.hpp configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/src/version.hpp.in" "${CMAKE_CURRENT_BINARY_DIR}/src/autogen/version.hpp" @ONLY ) -# Set CMAKE_MODULE_PATH to include our custom find modules -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) - -# Add custom target to run cmake_prebuild.sh at the start of the build process +# Pre-build script add_custom_target(run_prebuild_script ALL - COMMAND ${CMAKE_COMMAND} -E echo "Running cmake_prebuild.sh..." - COMMAND ${CMAKE_COMMAND} -E env bash ${CMAKE_CURRENT_SOURCE_DIR}/cmake_prebuild.sh + COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/cmake_prebuild.sh WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) +# Source files file(GLOB_RECURSE SOURCES "src/*.cpp") - -# Mark sources as GENERATED to defer existence check until build time set_source_files_properties(${SOURCES} PROPERTIES GENERATED TRUE) -# Add executable -add_executable(${PROJECT_EXE_NAME} ${SOURCES}) -add_dependencies(${PROJECT_EXE_NAME} run_prebuild_script) +# Create executable +add_executable(${PROJECT_NAME} ${SOURCES}) +add_dependencies(${PROJECT_NAME} run_prebuild_script) -# Set include directories -# build dir goes first so that we can use the generated version.hpp -target_include_directories(${PROJECT_EXE_NAME} PRIVATE - $ +# Include directories +target_include_directories(${PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}/src/autogen ${CMAKE_CURRENT_SOURCE_DIR}/src - ${CMAKE_CURRENT_SOURCE_DIR}/src/autogen ) - - -# Add nlohmann/json +# External dependencies +include(FetchContent) FetchContent_Declare( - nlohmann_json - GIT_REPOSITORY https://github.com/nlohmann/json.git - GIT_TAG v3.12.0 + nlohmann_json + GIT_REPOSITORY https://github.com/nlohmann/json.git + GIT_TAG v3.12.0 ) FetchContent_MakeAvailable(nlohmann_json) -# Find required libraries using pkg-config -find_package(PkgConfig REQUIRED) -pkg_check_modules(LIBUNWIND REQUIRED IMPORTED_TARGET libunwind) - -# Required libraries for basic stack tracing -set(EXTRA_LIBS - ${LIBUNWIND_LIBRARIES} - -lunwind - -lunwind-x86_64 - -llzma # Required by libunwind for debug info - -ldl # For dladdr -) - - -# Set paths for libraries before finding Drogon -set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} /usr/local) -set(OPENSSL_ROOT_DIR /usr/local) -set(OPENSSL_USE_STATIC_LIBS TRUE) - -# Find OpenSSL and create the targets that Trantor expects +# Find packages +set(CMAKE_PREFIX_PATH /usr/local) find_package(OpenSSL REQUIRED) - -# Ensure the OpenSSL imported targets exist for Trantor -if(NOT TARGET OpenSSL::SSL) - add_library(OpenSSL::SSL STATIC IMPORTED) - set_target_properties(OpenSSL::SSL PROPERTIES - IMPORTED_LOCATION "${OPENSSL_SSL_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}" - INTERFACE_LINK_LIBRARIES "OpenSSL::Crypto" - ) -endif() - -if(NOT TARGET OpenSSL::Crypto) - add_library(OpenSSL::Crypto STATIC IMPORTED) - set_target_properties(OpenSSL::Crypto PROPERTIES - IMPORTED_LOCATION "${OPENSSL_CRYPTO_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}" - ) -endif() - find_package(Drogon CONFIG REQUIRED) -target_link_libraries(${PROJECT_NAME} PRIVATE Drogon::Drogon) - -# Additional PostgreSQL libraries needed for static linking -set(POSTGRESQL_EXTRA_LIBS - /usr/local/lib/libpgcommon.a - /usr/local/lib/libpgport.a -) # Link libraries -target_link_libraries(${PROJECT_EXE_NAME} PRIVATE +target_link_libraries(${PROJECT_NAME} PRIVATE nlohmann_json::nlohmann_json Drogon::Drogon - ${POSTGRESQL_EXTRA_LIBS} - ${EXTRA_LIBS} -) - -# Set static linking flags -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static") -set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") -set(BUILD_SHARED_LIBS OFF) -set(CMAKE_POSITION_INDEPENDENT_CODE OFF) - -# Add musl's backtrace headers -include_directories(/usr/include/musl) \ No newline at end of file + /usr/lib/libunwind.a + /usr/lib/libunwind-x86_64.a + /usr/local/lib/libpgcommon.a + /usr/local/lib/libpgport.a + lzma + dl +) \ No newline at end of file