diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 1b11fce..3d3025e 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -6,13 +6,6 @@ on: - '**' workflow_dispatch: -env: - CCACHE_DIR: /ccache - CCACHE_MAXSIZE: 10G - CCACHE_BASEDIR: /root/.conan2 - CCACHE_NOHASHDIR: "true" - CCACHE_COMPILERCHECK: "%compiler% -dumpversion" - jobs: build-and-test: runs-on: ubuntu-latest @@ -36,9 +29,11 @@ jobs: - name: Build run: | - conan install . --remote=bigfootpackages -pr:h=${{ matrix.conan_profile }} -pr:b=${{ matrix.conan_profile }} --build=missing -s build_type=${{ matrix.build_type }} -o bin2cpp/*:build_tests=True + conan install . --remote=bigfootpackages -pr:h=${{ matrix.conan_profile }} -pr:b=./ConanProfiles/Tools/clang --build=* -s:h build_type=${{ matrix.build_type }} + . ./build/${{ matrix.build_type }}/generators/conanbuild.sh cmake -S . -B ./build/${{ matrix.build_type }} --toolchain ./build/${{ matrix.build_type }}/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DCMAKE_UNITY_BUILD=${{ matrix.unity_build }} -G "Ninja" cmake --build build/${{ matrix.build_type }} --parallel $(nproc) + . ./build/${{ matrix.build_type }}/generators/deactivate_conanbuild.sh - name: Unit Tests run: | diff --git a/.gitea/workflows/package.yml b/.gitea/workflows/package.yml index 8567c5a..36ea486 100644 --- a/.gitea/workflows/package.yml +++ b/.gitea/workflows/package.yml @@ -6,13 +6,6 @@ on: - '**' workflow_dispatch: -env: - CCACHE_DIR: /ccache - CCACHE_MAXSIZE: 10G - CCACHE_BASEDIR: /root/.conan2 - CCACHE_NOHASHDIR: "true" - CCACHE_COMPILERCHECK: "%compiler% -dumpversion" - jobs: conan-packages: runs-on: ubuntu-latest @@ -35,9 +28,6 @@ jobs: with: submodules: recursive - - name: Show ccache stats before - run: ccache --zero-stats - - name: Run Conan packaging run: | echo "Building Bin2CPP@$1.0.0" @@ -47,13 +37,10 @@ jobs: --version=1.0.0 \ --user=bigfootdev \ --channel=${{ env.BRANCH_NAME }} \ - -pr:b=./ConanProfiles/clang -pr:h=./ConanProfiles/clang \ - --build=missing --remote=bigfootpackages + -pr:b=./ConanProfiles/Tools/clang -pr:h=./ConanProfiles/clang \ + --build=* --remote=bigfootpackages CONAN_LOGIN_USERNAME=${ARTIFACTORY_USER} \ CONAN_PASSWORD=${ARTIFACTORY_PASSWORD} \ conan upload bin2cpp/1.0.0@bigfootdev/${{ env.BRANCH_NAME }} \ --only-recipe --remote=bigfootpackages - - - name: Show ccache stats after - run: ccache --show-stats diff --git a/.gitea/workflows/sonarqube.yml b/.gitea/workflows/sonarqube.yml index 8d2be35..b58d3b3 100644 --- a/.gitea/workflows/sonarqube.yml +++ b/.gitea/workflows/sonarqube.yml @@ -6,13 +6,6 @@ on: - main - Development -env: - CCACHE_DIR: /ccache - CCACHE_MAXSIZE: 10G - CCACHE_BASEDIR: /root/.conan2 - CCACHE_NOHASHDIR: "true" - CCACHE_COMPILERCHECK: "%compiler% -dumpversion" - jobs: build-and-test: runs-on: ubuntu-latest @@ -33,9 +26,11 @@ jobs: - name: Generate run: | conan profile detect - conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/clang_coverage -pr:b=./ConanProfiles/clang_coverage --build=missing -s build_type=Debug + conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/clang_coverage -pr:b=./ConanProfiles/Tools/clang --build=* -s:h build_type=Debug + . ./build/Debug/generators/conanbuild.sh cmake -S . -B ./build/Debug --toolchain ./build/Debug/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug -G "Ninja" cmake --build build/Debug --parallel $(nproc) + . ./build/Debug/generators/deactivate_conanbuild.sh - name: Clang-Tidy run: run-clang-tidy -p ./build/Debug/ >> tidy_result.txt diff --git a/Bin2CPP/Sources/Bin2CPPLib/CMakeLists.txt b/Bin2CPP/Sources/Bin2CPPLib/CMakeLists.txt index 144c20d..fcfad89 100644 --- a/Bin2CPP/Sources/Bin2CPPLib/CMakeLists.txt +++ b/Bin2CPP/Sources/Bin2CPPLib/CMakeLists.txt @@ -36,7 +36,6 @@ target_link_libraries(${PROJECT_NAME} Bin2CPPCompileAndLinkFlags PUBLIC quill::quill - $<$:cpptrace::cpptrace> magic_enum::magic_enum) target_compile_definitions(${PROJECT_NAME} diff --git a/Bin2CPP/Sources/Bin2CPPLib/Include/Assert.hpp b/Bin2CPP/Sources/Bin2CPPLib/Include/Assert.hpp index cd07ce1..e740fd4 100644 --- a/Bin2CPP/Sources/Bin2CPPLib/Include/Assert.hpp +++ b/Bin2CPP/Sources/Bin2CPPLib/Include/Assert.hpp @@ -10,8 +10,6 @@ #if defined BIN2CPP_NOT_OPTIMIZED -#include - #include #include @@ -35,22 +33,17 @@ class AssertHandler * Handle an assertion. * * \param p_location Location of the assertion. - * \param p_stacktrace The stack trace * \param p_format Format string for the assertion message. * \param p_args Arguments for the format string. */ template - static void Handle(const std::source_location& p_location, - const std::string_view p_stacktrace, - std::format_string p_format, - ARGS&&... p_args) + static void Handle(const std::source_location& p_location, std::format_string p_format, ARGS&&... p_args) { - BIN2CPP_LOG_FATAL("Assert: {} (File:{}, Line:{}, Function:{})\n{}", + BIN2CPP_LOG_FATAL("Assert: {} (File:{}, Line:{}, Function:{})", std::format(p_format, std::forward(p_args)...), p_location.file_name(), p_location.line(), - p_location.function_name(), - p_stacktrace); + p_location.function_name()); } AssertHandler& operator=(const AssertHandler& p_handler) = delete; @@ -78,9 +71,7 @@ class AssertHandler constexpr std::source_location location = std::source_location::current(); \ if (!(p_assert)) [[unlikely]] \ { \ - Bin2CPP::AssertHandler::Handle(location, \ - cpptrace::generate_trace().to_string(), \ - p_message __VA_OPT__(, ) __VA_ARGS__); \ + Bin2CPP::AssertHandler::Handle(location, p_message __VA_OPT__(, ) __VA_ARGS__); \ if (Bin2CPP::Singleton::HasInstance()) \ { \ Bin2CPP::Singleton::Instance().Flush(); \ @@ -95,9 +86,7 @@ class AssertHandler constexpr std::source_location location = std::source_location::current(); \ if (!(p_assert)) [[unlikely]] \ { \ - Bin2CPP::AssertHandler::Handle(location, \ - cpptrace::generate_trace().to_string(), \ - p_message __VA_OPT__(, ) __VA_ARGS__); \ + Bin2CPP::AssertHandler::Handle(location, p_message __VA_OPT__(, ) __VA_ARGS__); \ if (Bin2CPP::Singleton::HasInstance()) \ { \ Bin2CPP::Singleton::Instance().Flush(); \ @@ -112,9 +101,7 @@ class AssertHandler constexpr std::source_location location = std::source_location::current(); \ if (!(p_assert)) [[unlikely]] \ { \ - Bin2CPP::AssertHandler::Handle(location, \ - cpptrace::generate_trace().to_string(), \ - p_message __VA_OPT__(, ) __VA_ARGS__); \ + Bin2CPP::AssertHandler::Handle(location, p_message __VA_OPT__(, ) __VA_ARGS__); \ if (Bin2CPP::Singleton::HasInstance()) \ { \ Bin2CPP::Singleton::Instance().Flush(); \ diff --git a/CMake/FindDependencies.cmake b/CMake/FindDependencies.cmake index 6c2d188..1b7f2da 100644 --- a/CMake/FindDependencies.cmake +++ b/CMake/FindDependencies.cmake @@ -9,8 +9,6 @@ find_package(magic_enum REQUIRED) find_package(CLI11 REQUIRED) find_package(quill REQUIRED) -find_package(cpptrace REQUIRED) - if(BUILD_TESTS) find_package(GTest REQUIRED) endif() \ No newline at end of file diff --git a/ConanProfiles/Toolchains/ccache.cmake b/ConanProfiles/Toolchains/ccache.cmake deleted file mode 100644 index 5fce6ee..0000000 --- a/ConanProfiles/Toolchains/ccache.cmake +++ /dev/null @@ -1,30 +0,0 @@ -include_guard() - -# Find ccache executable -find_program(CCACHE_PROGRAM NAMES ccache) - -if(CCACHE_PROGRAM) - message(STATUS "ccache found: ${CCACHE_PROGRAM}, enabling via CMake launcher and environment.") - if (CMAKE_GENERATOR MATCHES "Visual Studio") - # Copy original ccache.exe and rename to cl.exe, this way intermediate cmd file is not needed - file(COPY_FILE ${CCACHE_PROGRAM} ${CMAKE_BINARY_DIR}/cl.exe ONLY_IF_DIFFERENT) - - # Set Visual Studio global variables: - # - Use above cl.exe (ccache.exe) as a compiler - # - Enable parallel compilation - list(APPEND CMAKE_VS_GLOBALS - "CLToolExe=cl.exe" - "CLToolPath=${CMAKE_BINARY_DIR}" - "UseMultiToolTask=true" - "UseStructuredOutput=false" - ) - elseif(CMAKE_GENERATOR MATCHES "Ninja" OR CMAKE_GENERATOR MATCHES "Unix Makefiles") - message(STATUS "Using ccache as compiler launcher for Ninja or Makefiles.") - set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_PROGRAM} CACHE FILEPATH "CXX compiler cache used" FORCE) - set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_PROGRAM} CACHE FILEPATH "C compiler cache used" FORCE) - else() - message(WARNING "Unsupported generator for ccache integration: ${CMAKE_GENERATOR}. ccache will not be used.") - endif() -else() - message(WARNING "ccache not found. Not enabling ccache integration.") -endif() \ No newline at end of file diff --git a/ConanProfiles/Toolchains/mold.cmake b/ConanProfiles/Toolchains/mold.cmake new file mode 100644 index 0000000..8d48ddf --- /dev/null +++ b/ConanProfiles/Toolchains/mold.cmake @@ -0,0 +1,9 @@ +include_guard() + +find_program(MOLD_PROGRAM mold) +if (MOLD_PROGRAM) + set(CMAKE_LINKER_TYPE MOLD) + message(STATUS "mold linker found: ${MOLD_PROGRAM}") +else () + message(WARNING "mold linker not found") +endif () \ No newline at end of file diff --git a/ConanProfiles/Tools/clang b/ConanProfiles/Tools/clang new file mode 100644 index 0000000..a840b7c --- /dev/null +++ b/ConanProfiles/Tools/clang @@ -0,0 +1,19 @@ +[settings] +os=Linux +arch=x86_64 +compiler=clang +compiler.version=20 +compiler.libcxx=libstdc++11 +compiler.cppstd=20 +compiler.cstd=17 +compiler.runtime=static +build_type=Release + +[conf] +tools.cmake.cmaketoolchain:user_toolchain+={{profile_dir}}/../Toolchains/ipo.cmake +tools.meson.mesontoolchain:extra_machine_files+={{profile_dir}}/../Toolchains/ipo.ini + +tools.system.package_manager:mode=install +tools.system.package_manager:sudo=True + +tools.build:compiler_executables={"c": "clang", "cpp": "clang++"} \ No newline at end of file diff --git a/ConanProfiles/Tools/msvc b/ConanProfiles/Tools/msvc new file mode 100644 index 0000000..9485978 --- /dev/null +++ b/ConanProfiles/Tools/msvc @@ -0,0 +1,18 @@ +[settings] +os=Windows +arch=x86_64 +compiler=msvc +compiler.version=195 +compiler.cppstd=20 +compiler.cstd=17 +compiler.runtime=static +build_type=Release + +[conf] +tools.cmake.cmaketoolchain:user_toolchain+={{profile_dir}}/../Toolchains/ipo.cmake +tools.meson.mesontoolchain:extra_machine_files+={{profile_dir}}/../Toolchains/ipo.ini + +tools.build:cflags=["/Zc:preprocessor", "/Zc:__STDC__", "/D_CRT_DECLARE_NONSTDC_NAMES=1"] +tools.build:cxxflags=["/Zc:preprocessor", "/permissive-", "/Zc:__cplusplus", "/Zc:enumTypes", "/Zc:templateScope"] + +tools.env.virtualenv:powershell=powershell.exe \ No newline at end of file diff --git a/ConanProfiles/clang b/ConanProfiles/clang index 3691ac0..06c841f 100644 --- a/ConanProfiles/clang +++ b/ConanProfiles/clang @@ -10,22 +10,21 @@ compiler.runtime=static build_type=Release [conf] -tools.cmake.cmaketoolchain:user_toolchain+={{profile_dir}}/Toolchains/ccache.cmake +tools.cmake.cmaketoolchain:user_toolchain+={{profile_dir}}/Toolchains/mold.cmake tools.cmake.cmaketoolchain:user_toolchain+={{profile_dir}}/Toolchains/ipo.cmake tools.meson.mesontoolchain:extra_machine_files+={{profile_dir}}/Toolchains/ipo.ini tools.system.package_manager:mode=install tools.system.package_manager:sudo=True -tools.build:exelinkflags=["-fuse-ld=mold"] -tools.build:sharedlinkflags=["-fuse-ld=mold"] - tools.build:compiler_executables={"c": "clang", "cpp": "clang++"} tools.cmake.cmaketoolchain:generator=Ninja [tool_requires] -!cmake/*: cmake/[>=4.2] +!cmake/*: cmake/4.3.2 +!mold/*: mold/2.41.0@bigfootdev/main +!ninja/*: ninja/1.13.2 [options] bin2cpp/*:build_tests=True diff --git a/ConanProfiles/clang_asan b/ConanProfiles/clang_asan index fbbce46..7a2ce47 100644 --- a/ConanProfiles/clang_asan +++ b/ConanProfiles/clang_asan @@ -10,13 +10,13 @@ compiler.runtime=static build_type=Debug [conf] -tools.cmake.cmaketoolchain:user_toolchain+={{profile_dir}}/Toolchains/ccache.cmake +tools.cmake.cmaketoolchain:user_toolchain+={{profile_dir}}/Toolchains/mold.cmake tools.system.package_manager:mode=install tools.system.package_manager:sudo=True -tools.build:exelinkflags=["-fuse-ld=mold", "-fsanitize=address,undefined,leak"] -tools.build:sharedlinkflags=["-fuse-ld=mold", "-fsanitize=address,undefined,leak"] +tools.build:exelinkflags=["-fsanitize=address,undefined,leak"] +tools.build:sharedlinkflags=["-fsanitize=address,undefined,leak"] tools.build:cflags=["-fsanitize=address,undefined,leak", "-fno-sanitize-recover=all"] tools.build:cxxflags=["-fsanitize=address,undefined,leak", "-fno-sanitize-recover=all"] @@ -26,7 +26,9 @@ tools.cmake.cmaketoolchain:generator=Ninja tools.build:compiler_executables={"c": "clang", "cpp": "clang++"} [tool_requires] -!cmake/*: cmake/[>=4.2] +!cmake/*: cmake/4.3.2 +!mold/*: mold/2.41.0@bigfootdev/main +!ninja/*: ninja/1.13.2 [options] bin2cpp/*:asan=True diff --git a/ConanProfiles/clang_coverage b/ConanProfiles/clang_coverage index 55d7c5a..986975d 100644 --- a/ConanProfiles/clang_coverage +++ b/ConanProfiles/clang_coverage @@ -10,20 +10,19 @@ compiler.runtime=static build_type=Debug [conf] -tools.cmake.cmaketoolchain:user_toolchain+={{profile_dir}}/Toolchains/ccache.cmake +tools.cmake.cmaketoolchain:user_toolchain+={{profile_dir}}/Toolchains/mold.cmake tools.system.package_manager:mode=install tools.system.package_manager:sudo=True -tools.build:exelinkflags=["-fuse-ld=mold"] -tools.build:sharedlinkflags=["-fuse-ld=mold"] - tools.cmake.cmaketoolchain:generator=Ninja tools.build:compiler_executables={"c": "clang", "cpp": "clang++"} [tool_requires] -!cmake/*: cmake/[>=4.2] +!cmake/*: cmake/4.3.2 +!mold/*: mold/2.41.0@bigfootdev/main +!ninja/*: ninja/1.13.2 [options] bin2cpp/*:build_tests=True diff --git a/ConanProfiles/msvc b/ConanProfiles/msvc index a1b2415..216c0fe 100644 --- a/ConanProfiles/msvc +++ b/ConanProfiles/msvc @@ -9,15 +9,16 @@ compiler.runtime=static build_type=Release [conf] -tools.cmake.cmaketoolchain:user_toolchain+={{profile_dir}}/Toolchains/ccache.cmake tools.cmake.cmaketoolchain:user_toolchain+={{profile_dir}}/Toolchains/ipo.cmake tools.meson.mesontoolchain:extra_machine_files+={{profile_dir}}/Toolchains/ipo.ini tools.build:cflags=["/Zc:preprocessor", "/Zc:__STDC__", "/D_CRT_DECLARE_NONSTDC_NAMES=1"] tools.build:cxxflags=["/Zc:preprocessor", "/permissive-", "/Zc:__cplusplus", "/Zc:enumTypes", "/Zc:templateScope", "/Zc:throwingNew"] +tools.env.virtualenv:powershell=powershell.exe + [tool_requires] -!cmake/*: cmake/[>=4.2] +!cmake/*: cmake/4.3.2 [options] bin2cpp/*:build_tests=True diff --git a/ConanProfiles/msvc_asan b/ConanProfiles/msvc_asan index a1c9fdb..cd32bdf 100644 --- a/ConanProfiles/msvc_asan +++ b/ConanProfiles/msvc_asan @@ -9,13 +9,13 @@ compiler.runtime=static build_type=Debug [conf] -tools.cmake.cmaketoolchain:user_toolchain+={{profile_dir}}/Toolchains/ccache.cmake - tools.build:cflags=["/Zc:preprocessor", "/Zc:__STDC__", "/D_CRT_DECLARE_NONSTDC_NAMES=1", "/fsanitize=address"] tools.build:cxxflags=["/Zc:preprocessor", "/permissive-", "/Zc:__cplusplus", "/Zc:enumTypes", "/Zc:templateScope", "/Zc:throwingNew", "/fsanitize=address"] +tools.env.virtualenv:powershell=powershell.exe + [tool_requires] -!cmake/*: cmake/[>=4.2] +!cmake/*: cmake/4.3.2 [options] bin2cpp/*:asan=True diff --git a/conanfile.py b/conanfile.py index 428e5da..b4752e4 100644 --- a/conanfile.py +++ b/conanfile.py @@ -50,8 +50,6 @@ class Bin2CPP(ConanFile): self.requires("magic_enum/0.9.7", transitive_headers=True) self.requires("cli11/2.6.1@bigfootdev/main") - self.requires("cpptrace/1.0.4", transitive_headers=True) - if(self.options.build_tests): self.test_requires("gtest/1.17.0") diff --git a/generate_bin2cpp.bat b/generate_bin2cpp.bat index 0f4298f..d996fbf 100644 --- a/generate_bin2cpp.bat +++ b/generate_bin2cpp.bat @@ -1 +1,60 @@ -cmake -S . -B build --toolchain build/generators/conan_toolchain.cmake --graphviz=graphviz/graph.dot \ No newline at end of file +@echo off +setlocal + +REM ─── Validate argument ─────────────────────────────────────────────────────── +if "%~1"=="force" set "build_option=--build=*" & goto :start +if "%~1"=="missing" set "build_option=--build=missing" & goto :start + +echo Usage: %~n0 [force^|missing] +echo force - Rebuild all packages from source +echo missing - Only build packages not already cached +exit /b 1 + +:start +REM ─── Register remote (skip if already registered) ──────────────────────────── +conan remote list | findstr /i "bigfootpackages" >nul 2>&1 +if errorlevel 1 ( + echo Adding Conan remote: bigfootpackages + conan remote add bigfootpackages https://conan.romainboullard.com/artifactory/api/conan/BigfootPackages + if errorlevel 1 ( + echo ERROR: Failed to add Conan remote. + exit /b 1 + ) +) else ( + echo Conan remote 'bigfootpackages' already registered, skipping. +) + +REM ─── Shared flags ──────────────────────────────────────────────────────────── +set "conan_common=--remote=bigfootpackages -pr:h=./ConanProfiles/msvc -pr:b=./ConanProfiles/Tools/msvc -of build" + +REM ─── Install dependencies for each build type ──────────────────────────────── +for %%C in (Release RelWithDebInfo Debug) do ( + echo. + echo [%%C] Installing dependencies... + conan install . %conan_common% %build_option% -s:h build_type=%%C + if errorlevel 1 ( + echo ERROR: conan install failed for build type %%C + exit /b 1 + ) + echo [%%C] Done. +) + +echo. +echo All build types installed successfully. + +REM ─── Activate build environment and run CMake ──────────────────────────────── +echo. +echo Activating build environment and configuring CMake... +mkdir graphviz 2>nul + +powershell -ExecutionPolicy Bypass -Command "& 'build/build/generators/conanbuild.ps1'; cmake -S . -B build --toolchain build/build/generators/conan_toolchain.cmake --graphviz=graphviz/graph.dot; if ($LASTEXITCODE -ne 0) { Write-Host 'ERROR: CMake configuration failed'; exit 1 }" + +if errorlevel 1 ( + echo ERROR: Build environment or CMake step failed. + exit /b 1 +) + +echo. +echo CMake configuration successful. + +endlocal \ No newline at end of file diff --git a/generate_bin2cpp.sh b/generate_bin2cpp.sh index 1b72527..a91f6b8 100755 --- a/generate_bin2cpp.sh +++ b/generate_bin2cpp.sh @@ -1,3 +1,100 @@ -cmake -S . -B build/Debug --toolchain build/build/Debug/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE="Debug" -G "Ninja" --graphviz=graphviz/Debug/graph.dot -cmake -S . -B build/Release --toolchain build/build/Release/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE="Release" -G "Ninja" --graphviz=graphviz/Release/graph.dot -cmake -S . -B build/RelWithDebInfo --toolchain build/build/RelWithDebInfo/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE="RelWithDebInfo" -G "Ninja" --graphviz=graphviz/RelWithDebInfo/graph.dot \ No newline at end of file +#!/usr/bin/env bash +set -euo pipefail + +# ─── Validate arguments ─────────────────────────────────────────────────────── +if [[ $# -lt 1 ]]; then + echo "Usage: $(basename "$0") [force|missing] [Release|RelWithDebInfo|Debug]" + echo " force - Rebuild all packages from source" + echo " missing - Only build packages not already cached" + echo " build_type (optional) - One of: Release, RelWithDebInfo, Debug" + echo " If omitted, all build types are processed" + exit 1 +fi + +case "${1:-}" in + force) build_option="--build=*" ;; + missing) build_option="--build=missing" ;; + *) + echo "Usage: $(basename "$0") [force|missing] [Release|RelWithDebInfo|Debug]" + echo " force - Rebuild all packages from source" + echo " missing - Only build packages not already cached" + exit 1 + ;; +esac + +# ─── Validate optional build_type argument ──────────────────────────────────── +all_build_types=(Release RelWithDebInfo Debug) + +if [[ -n "${2:-}" ]]; then + case "${2}" in + Release|RelWithDebInfo|Debug) + build_types=("${2}") + ;; + *) + echo "ERROR: Invalid build type '${2}'. Must be one of: Release, RelWithDebInfo, Debug" + exit 1 + ;; + esac +else + build_types=("${all_build_types[@]}") +fi + +# ─── Register remote (skip if already registered) ───────────────────────────── +if conan remote list 2>/dev/null | grep -qi "bigfootpackages"; then + echo "Conan remote 'bigfootpackages' already registered, skipping." +else + echo "Adding Conan remote: bigfootpackages" + if ! conan remote add bigfootpackages https://conan.romainboullard.com/artifactory/api/conan/BigfootPackages; then + echo "ERROR: Failed to add Conan remote." + exit 1 + fi +fi + +# ─── Shared flags ───────────────────────────────────────────────────────────── +conan_common=( + --remote=bigfootpackages + -pr:h=./ConanProfiles/clang + -pr:b=./ConanProfiles/Tools/clang + -of build +) + +# ─── Install dependencies for each build type ───────────────────────────────── +for build_type in "${build_types[@]}"; do + echo + echo "[${build_type}] Installing dependencies..." + if ! conan install . "${conan_common[@]}" ${build_option} -s:h "build_type=${build_type}"; then + echo "ERROR: conan install failed for build type ${build_type}" + exit 1 + fi + echo "[${build_type}] Done." +done + +echo +echo "All selected build types installed successfully." + +# ─── Configure CMake for each build type ───────────────────────────────────── +echo +echo "Configuring CMake for each build type..." + +for build_type in "${build_types[@]}"; do + echo + echo "[${build_type}] Activating build environment..." + # shellcheck disable=SC1090 + source "build/build/${build_type}/generators/conanbuild.sh" + + mkdir -p "graphviz/${build_type}" + + echo "[${build_type}] Running CMake..." + if ! cmake -S . -B "build/${build_type}" \ + --toolchain "build/build/${build_type}/generators/conan_toolchain.cmake" \ + -DCMAKE_BUILD_TYPE="${build_type}" \ + -G "Ninja" \ + --graphviz="graphviz/${build_type}/graph.dot"; then + echo "ERROR: CMake configuration failed for build type ${build_type}." + exit 1 + fi + echo "[${build_type}] Done." +done + +echo +echo "CMake configuration successful." \ No newline at end of file diff --git a/generate_dependencies.bat b/generate_dependencies.bat deleted file mode 100644 index 74fb9c5..0000000 --- a/generate_dependencies.bat +++ /dev/null @@ -1,30 +0,0 @@ -@echo off -setlocal - -REM Check if the correct number of arguments is provided -if "%~1"=="" ( - echo Usage: %0 "[force|missing]" - exit /b 1 -) - -REM Set the build option based on the argument -set build_option= -if "%~1"=="force" ( - set build_option=--build="*" -) else if "%~1"=="missing" ( - set build_option=--build=missing -) else ( - echo Invalid argument: %~1 - echo Usage: %0 "[force|missing]" - exit /b 1 -) - -REM Add the remote -conan remote add bigfootpackages https://conan.romainboullard.com/artifactory/api/conan/BigfootPackages - -REM Install dependencies with the specified build option -conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/msvc -pr:b=./ConanProfiles/msvc %build_option% -of build -s build_type=Release -conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/msvc -pr:b=./ConanProfiles/msvc %build_option% -of build -s build_type=RelWithDebInfo -conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/msvc -pr:b=./ConanProfiles/msvc %build_option% -of build -s build_type=Debug - -endlocal diff --git a/generate_dependencies.sh b/generate_dependencies.sh deleted file mode 100755 index 18311d4..0000000 --- a/generate_dependencies.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -# Check if the correct number of arguments is provided -if [ -z "$1" ]; then - echo "Usage: $0 [force|missing]" - exit 1 -fi - -# Add the remote -conan remote add bigfootpackages https://conan.romainboullard.com/artifactory/api/conan/BigfootPackages - -# Set the build option based on the argument -if [ "$1" == "force" ]; then - conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/clang -pr:b=./ConanProfiles/clang --build='*' -of build -s build_type=Release - conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/clang -pr:b=./ConanProfiles/clang --build='*' -of build -s build_type=RelWithDebInfo - conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/clang -pr:b=./ConanProfiles/clang --build='*' -of build -s build_type=Debug -elif [ "$1" == "missing" ]; then - conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/clang -pr:b=./ConanProfiles/clang --build=missing -of build -s build_type=Release - conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/clang -pr:b=./ConanProfiles/clang --build=missing -of build -s build_type=RelWithDebInfo - conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/clang -pr:b=./ConanProfiles/clang --build=missing -of build -s build_type=Debug -else - echo "Invalid argument: $1" - echo "Usage: $0 [force|missing]" - exit 1 -fi