diff --git a/dropshell-tool/CMakeLists.txt b/dropshell-tool/CMakeLists.txt index a7df71b..adce579 100644 --- a/dropshell-tool/CMakeLists.txt +++ b/dropshell-tool/CMakeLists.txt @@ -1,7 +1,13 @@ +# Get the current date in yyyy.mmdd.hhmm format +execute_process( + COMMAND date "+%Y.%m%d.%H%M" + OUTPUT_VARIABLE PROJECT_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE +) + cmake_minimum_required(VERSION 3.10) -set(PROJECT_EXE_NAME dropshell-tool) -project(${PROJECT_EXE_NAME} VERSION 1.0.0 LANGUAGES CXX) -cmake_policy(SET CMP0135 NEW) +get_filename_component(PROJECT_EXE_NAME "${CMAKE_CURRENT_SOURCE_DIR}" NAME) +project(${PROJECT_EXE_NAME} VERSION ${PROJECT_VERSION} LANGUAGES CXX) # Force static linking globally set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static") @@ -10,15 +16,7 @@ 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") -set(ZLIB_USE_STATIC_LIBS ON) - -# Ensure zlib is built as static only -set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) -set(ZLIB_BUILD_SHARED OFF CACHE BOOL "" FORCE) -set(ZLIB_BUILD_STATIC ON CACHE BOOL "" FORCE) -# Disable zlib examples and minigzip -set(ZLIB_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) -set(ZLIB_BUILD_MINIGZIP OFF CACHE BOOL "" FORCE) +set(ZLIB_USE_STATIC_LIBS "ON") set(CMAKE_CXX_STANDARD 23) set(CMAKE_C_STANDARD 23) @@ -33,15 +31,6 @@ endif() set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG") -# Configure version information -string(TIMESTAMP CURRENT_YEAR "%Y") -string(TIMESTAMP CURRENT_MONTH "%m") -string(TIMESTAMP CURRENT_DAY "%d") -string(TIMESTAMP CURRENT_HOUR "%H") -string(TIMESTAMP CURRENT_MINUTE "%M") -set(PROJECT_VERSION "${CURRENT_YEAR}.${CURRENT_MONTH}${CURRENT_DAY}.${CURRENT_HOUR}${CURRENT_MINUTE}") -string(TIMESTAMP RELEASE_DATE "%Y-%m-%d") - # Configure version.hpp file configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/src/version.hpp.in" @@ -55,6 +44,7 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) # Auto-detect source files file(GLOB_RECURSE SOURCES "src/*.cpp") file(GLOB_RECURSE HEADERS "src/*.hpp") +file(GLOB_RECURSE HEADERS "src/*.h") # Add custom target to run cmake_prebuild.sh at the start of the build process add_custom_target(run_prebuild_script ALL @@ -72,7 +62,6 @@ add_dependencies(${PROJECT_EXE_NAME} run_prebuild_script) target_include_directories(${PROJECT_EXE_NAME} PRIVATE $ ${CMAKE_CURRENT_SOURCE_DIR}/src - ${CMAKE_CURRENT_SOURCE_DIR}/src/autogen ) # Configure libassert @@ -96,37 +85,20 @@ FetchContent_MakeAvailable(cpptrace) FetchContent_Declare( nlohmann_json GIT_REPOSITORY https://github.com/nlohmann/json.git - GIT_TAG v3.12.0 + GIT_TAG v3.11.3 ) FetchContent_MakeAvailable(nlohmann_json) -# Fetch and build zlib from source (static) -FetchContent_Declare( - zlib - URL https://zlib.net/zlib-1.3.1.tar.gz -) -FetchContent_MakeAvailable(zlib) - # Link libraries target_link_libraries(${PROJECT_EXE_NAME} PRIVATE libassert::assert cpptrace::cpptrace nlohmann_json::nlohmann_json - zlibstatic + OpenSSL::SSL + OpenSSL::Crypto ) # Set static linking flags set_target_properties(${PROJECT_EXE_NAME} PROPERTIES LINK_FLAGS "-static" ) - -find_package(OpenSSL REQUIRED) -target_compile_definitions(${PROJECT_EXE_NAME} PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) -target_link_libraries(${PROJECT_EXE_NAME} PRIVATE OpenSSL::SSL OpenSSL::Crypto) - -# --- MUSL CROSS-COMPILATION --- -# To ensure all dependencies (including zlib) are built with musl, set your toolchain file or: -# set(CMAKE_C_COMPILER "/path/to/musl-gcc") -# set(CMAKE_CXX_COMPILER "/path/to/musl-g++") -# BEFORE the project() call above. - diff --git a/dropshell-tool/old_CMakeLists.txt b/dropshell-tool/old_CMakeLists.txt new file mode 100644 index 0000000..a7df71b --- /dev/null +++ b/dropshell-tool/old_CMakeLists.txt @@ -0,0 +1,132 @@ +cmake_minimum_required(VERSION 3.10) +set(PROJECT_EXE_NAME dropshell-tool) +project(${PROJECT_EXE_NAME} VERSION 1.0.0 LANGUAGES CXX) +cmake_policy(SET CMP0135 NEW) + +# 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") +set(ZLIB_USE_STATIC_LIBS ON) + +# Ensure zlib is built as static only +set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) +set(ZLIB_BUILD_SHARED OFF CACHE BOOL "" FORCE) +set(ZLIB_BUILD_STATIC ON CACHE BOOL "" FORCE) +# Disable zlib examples and minigzip +set(ZLIB_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) +set(ZLIB_BUILD_MINIGZIP OFF CACHE BOOL "" FORCE) + +set(CMAKE_CXX_STANDARD 23) +set(CMAKE_C_STANDARD 23) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# Set default build type to Release if not specified +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build (Debug or Release)" FORCE) +endif() + +# Configure build-specific compiler flags +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g") +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG") + +# Configure version information +string(TIMESTAMP CURRENT_YEAR "%Y") +string(TIMESTAMP CURRENT_MONTH "%m") +string(TIMESTAMP CURRENT_DAY "%d") +string(TIMESTAMP CURRENT_HOUR "%H") +string(TIMESTAMP CURRENT_MINUTE "%M") +set(PROJECT_VERSION "${CURRENT_YEAR}.${CURRENT_MONTH}${CURRENT_DAY}.${CURRENT_HOUR}${CURRENT_MINUTE}") +string(TIMESTAMP RELEASE_DATE "%Y-%m-%d") + +# Configure version.hpp file +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) + +# Auto-detect source files +file(GLOB_RECURSE SOURCES "src/*.cpp") +file(GLOB_RECURSE HEADERS "src/*.hpp") + +# Add custom target to run cmake_prebuild.sh at the start of the build process +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 + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) + +# Add executable +add_executable(${PROJECT_EXE_NAME} ${SOURCES}) +add_dependencies(${PROJECT_EXE_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 + $ + ${CMAKE_CURRENT_SOURCE_DIR}/src + ${CMAKE_CURRENT_SOURCE_DIR}/src/autogen +) + +# Configure libassert +include(FetchContent) +FetchContent_Declare( + libassert + GIT_REPOSITORY https://github.com/jeremy-rifkin/libassert.git + GIT_TAG v2.1.5 +) +FetchContent_MakeAvailable(libassert) + +# Add cpptrace +FetchContent_Declare( + cpptrace + GIT_REPOSITORY https://github.com/jeremy-rifkin/cpptrace.git + GIT_TAG v0.8.3 +) +FetchContent_MakeAvailable(cpptrace) + +# Add nlohmann/json +FetchContent_Declare( + nlohmann_json + GIT_REPOSITORY https://github.com/nlohmann/json.git + GIT_TAG v3.12.0 +) +FetchContent_MakeAvailable(nlohmann_json) + +# Fetch and build zlib from source (static) +FetchContent_Declare( + zlib + URL https://zlib.net/zlib-1.3.1.tar.gz +) +FetchContent_MakeAvailable(zlib) + +# Link libraries +target_link_libraries(${PROJECT_EXE_NAME} PRIVATE + libassert::assert + cpptrace::cpptrace + nlohmann_json::nlohmann_json + zlibstatic +) + +# Set static linking flags +set_target_properties(${PROJECT_EXE_NAME} PROPERTIES + LINK_FLAGS "-static" +) + +find_package(OpenSSL REQUIRED) +target_compile_definitions(${PROJECT_EXE_NAME} PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) +target_link_libraries(${PROJECT_EXE_NAME} PRIVATE OpenSSL::SSL OpenSSL::Crypto) + +# --- MUSL CROSS-COMPILATION --- +# To ensure all dependencies (including zlib) are built with musl, set your toolchain file or: +# set(CMAKE_C_COMPILER "/path/to/musl-gcc") +# set(CMAKE_CXX_COMPILER "/path/to/musl-g++") +# BEFORE the project() call above. +