Compare commits
34 Commits
f322ce3655
...
Developmen
| Author | SHA1 | Date | |
|---|---|---|---|
| fbbd71b7d8 | |||
| 44041b6408 | |||
| 92f56a60d5 | |||
| 84c85949cf | |||
| 048bb8109f | |||
| c510fb8885 | |||
| 742af1ae59 | |||
| 3fbb05a9bb | |||
| 218e235ef3 | |||
| 04923344bc | |||
| 5c004994cf | |||
| 542186bff4 | |||
| a8d77cf9fa | |||
| 8627e197db | |||
| 27e4fdbfd4 | |||
| 00f512d7b1 | |||
| 7e273f922a | |||
| 0f66bd95fa | |||
| 56954e8bd0 | |||
| 51afc4d228 | |||
| 8a3df93a3f | |||
| e27fd9a424 | |||
| 31b7878766 | |||
| 23ab0eaa48 | |||
| 104a85c98e | |||
| 49a035b160 | |||
| 03d633fb04 | |||
| b1c3349814 | |||
| 286bfa1d7b | |||
| 1b8c2cd3e8 | |||
| 554bdcad92 | |||
| 2fcbb868e5 | |||
| a116731e46 | |||
| f727e2f1ed |
@@ -6,9 +6,6 @@ on:
|
||||
- '**'
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
CCACHE_BASEDIR: ${{ github.workspace }}
|
||||
|
||||
jobs:
|
||||
build-and-test:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -19,7 +16,7 @@ jobs:
|
||||
matrix:
|
||||
build_type: ["Debug", "RelWithDebInfo", "Release"]
|
||||
unity_build: ["ON", "OFF"]
|
||||
conan_profile: ["./ConanProfiles/clang", "./ConanProfiles/clangd", "./ConanProfiles/clangd_asan"]
|
||||
conan_profile: ["./ConanProfiles/clang", "./ConanProfiles/clang_asan"]
|
||||
name: "Build & Test ${{ matrix.build_type }} with ${{ matrix.conan_profile }} (Unity Build: ${{ matrix.unity_build }})"
|
||||
steps:
|
||||
- name: Install Node.js
|
||||
@@ -32,9 +29,11 @@ jobs:
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
conan install . --deployer=full_deploy --deployer-folder=build --remote=bigfootpackages -pr:h=${{ matrix.conan_profile }} -pr:b=${{ matrix.conan_profile }} --build=missing -s build_type=${{ matrix.build_type }}
|
||||
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: |
|
||||
|
||||
@@ -6,9 +6,6 @@ on:
|
||||
- '**'
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
CCACHE_BASEDIR: ${{ github.workspace }}
|
||||
|
||||
jobs:
|
||||
conan-packages:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -31,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"
|
||||
@@ -43,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
|
||||
|
||||
@@ -26,9 +26,11 @@ jobs:
|
||||
- name: Generate
|
||||
run: |
|
||||
conan profile detect
|
||||
conan install . --deployer=full_deploy --deployer-folder=build --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
|
||||
|
||||
@@ -40,14 +40,24 @@ set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER Bin2CPP/${ParentFolder})
|
||||
##################ASAN SETUP###################
|
||||
|
||||
if(${ASAN})
|
||||
if (MSVC)
|
||||
if(MSVC)
|
||||
get_filename_component(MSVC_BIN_DIR "${CMAKE_CXX_COMPILER}" DIRECTORY)
|
||||
set(ASAN_DLL "${MSVC_BIN_DIR}/clang_rt.asan_dynamic-x86_64.dll")
|
||||
|
||||
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E echo "Copying ASan DLL: ${ASAN_DLL} to $<TARGET_FILE_DIR:${PROJECT_NAME}>"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${ASAN_DLL}" "$<TARGET_FILE_DIR:${PROJECT_NAME}>"
|
||||
add_custom_command(
|
||||
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-asan.timestamp"
|
||||
DEPENDS "${ASAN_DLL}"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${ASAN_DLL}" "$<TARGET_FILE_DIR:${PROJECT_NAME}>"
|
||||
COMMAND ${CMAKE_COMMAND} -E touch "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-asan.timestamp"
|
||||
COMMENT "Copying ASan DLL for ${PROJECT_NAME}"
|
||||
)
|
||||
|
||||
add_custom_target(${PROJECT_NAME}Asan
|
||||
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-asan.timestamp"
|
||||
)
|
||||
|
||||
add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}Asan)
|
||||
set_target_properties(${PROJECT_NAME}Asan PROPERTIES FOLDER UtilityTargets/Bin2CPP/${ParentFolder})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
@@ -35,14 +35,11 @@ target_link_libraries(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
Bin2CPPCompileAndLinkFlags
|
||||
PUBLIC
|
||||
$<IF:$<BOOL:${ASAN}>,mimalloc-asan,mimalloc-static>
|
||||
quill::quill
|
||||
$<$<CONFIG:Debug,RelWithDebInfo>:cpptrace::cpptrace>
|
||||
magic_enum::magic_enum)
|
||||
|
||||
target_compile_definitions(${PROJECT_NAME}
|
||||
PUBLIC
|
||||
QUILL_NO_EXCEPTIONS
|
||||
QUILL_DISABLE_NON_PREFIXED_MACROS)
|
||||
|
||||
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/MimallocImpl.cpp PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
|
||||
|
||||
@@ -139,7 +139,7 @@ bool Generator::ComputeMappings()
|
||||
bool Generator::ComputeFilename()
|
||||
{
|
||||
std::filesystem::path file {m_inputFile.data()};
|
||||
m_mappingTable[magic_enum::enum_index(MappingKey::FILENAME).value()] = file.filename().string().c_str();
|
||||
m_mappingTable[magic_enum::enum_index(MappingKey::FILENAME).value()] = file.filename().string();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
|
||||
#if defined BIN2CPP_NOT_OPTIMIZED
|
||||
|
||||
#include <cpptrace/cpptrace.hpp>
|
||||
|
||||
#include <source_location>
|
||||
#include <string>
|
||||
|
||||
@@ -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<typename... ARGS>
|
||||
static void Handle(const std::source_location& p_location,
|
||||
const std::string_view p_stacktrace,
|
||||
std::format_string<ARGS...> p_format,
|
||||
ARGS&&... p_args)
|
||||
static void Handle(const std::source_location& p_location, std::format_string<ARGS...> 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<ARGS>(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<Bin2CPP::Log>::HasInstance()) \
|
||||
{ \
|
||||
Bin2CPP::Singleton<Bin2CPP::Log>::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<Bin2CPP::Log>::HasInstance()) \
|
||||
{ \
|
||||
Bin2CPP::Singleton<Bin2CPP::Log>::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<Bin2CPP::Log>::HasInstance()) \
|
||||
{ \
|
||||
Bin2CPP::Singleton<Bin2CPP::Log>::Instance().Flush(); \
|
||||
|
||||
@@ -62,18 +62,24 @@ class Log
|
||||
#define BIN2CPP_LOG_DEBUG(fmt, ...) \
|
||||
do \
|
||||
{ \
|
||||
if (quill::Logger* logger = Bin2CPP::Singleton<Bin2CPP::Log>::Instance().GetLogger()) \
|
||||
if (Bin2CPP::Singleton<Bin2CPP::Log>::HasInstance()) \
|
||||
{ \
|
||||
QUILL_LOG_DEBUG(logger, fmt __VA_OPT__(, ) __VA_ARGS__); \
|
||||
if (quill::Logger* logger = Bin2CPP::Singleton<Bin2CPP::Log>::Instance().GetLogger()) \
|
||||
{ \
|
||||
QUILL_LOG_DEBUG(logger, fmt __VA_OPT__(, ) __VA_ARGS__); \
|
||||
} \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define BIN2CPP_LOG_TRACE(fmt, ...) \
|
||||
do \
|
||||
{ \
|
||||
if (quill::Logger* logger = Bin2CPP::Singleton<Bin2CPP::Log>::Instance().GetLogger()) \
|
||||
if (Bin2CPP::Singleton<Bin2CPP::Log>::HasInstance()) \
|
||||
{ \
|
||||
QUILL_LOG_TRACE_L3(logger, fmt __VA_OPT__(, ) __VA_ARGS__); \
|
||||
if (quill::Logger* logger = Bin2CPP::Singleton<Bin2CPP::Log>::Instance().GetLogger()) \
|
||||
{ \
|
||||
QUILL_LOG_TRACE_L3(logger, fmt __VA_OPT__(, ) __VA_ARGS__); \
|
||||
} \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
||||
@@ -39,6 +39,8 @@ void Log::Flush()
|
||||
|
||||
Log::~Log()
|
||||
{
|
||||
Flush();
|
||||
|
||||
for (quill::Logger* logger: quill::Frontend::get_all_loggers())
|
||||
{
|
||||
quill::Frontend::remove_logger(logger);
|
||||
|
||||
@@ -1,96 +0,0 @@
|
||||
/*********************************************************************
|
||||
* \file MimallocImpl.cpp
|
||||
*
|
||||
* \author Romain BOULLARD
|
||||
* \date February 2026
|
||||
*********************************************************************/
|
||||
#if defined BIN2CPP_WINDOWS
|
||||
#pragma comment(linker, "/include:mi_version")
|
||||
#pragma warning(disable: 4100 4559)
|
||||
#elif defined BIN2CPP_LINUX
|
||||
#if defined(__GNUC__) && !defined(__llvm__) && !defined(__INTEL_COMPILER)
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||
#else
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wunused-parameter"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Taken from mimalloc-new-delete.h
|
||||
|
||||
// clang-format off
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// This header provides convenient overrides for the new and
|
||||
// delete operations in C++.
|
||||
//
|
||||
// This header should be included in only one source file!
|
||||
//
|
||||
// On Windows, or when linking dynamically with mimalloc, these
|
||||
// can be more performant than the standard new-delete operations.
|
||||
// See <https://en.cppreference.com/w/cpp/memory/new/operator_new>
|
||||
// ---------------------------------------------------------------------------
|
||||
#if defined(__cplusplus)
|
||||
#include <new>
|
||||
#include <mimalloc.h>
|
||||
|
||||
#if defined(_MSC_VER) && defined(_Ret_notnull_) && defined(_Post_writable_byte_size_)
|
||||
// stay consistent with VCRT definitions
|
||||
#define mi_decl_new(n) mi_decl_nodiscard mi_decl_restrict _Ret_notnull_ _Post_writable_byte_size_(n)
|
||||
#define mi_decl_new_nothrow(n) mi_decl_nodiscard mi_decl_restrict _Ret_maybenull_ _Success_(return != NULL) _Post_writable_byte_size_(n)
|
||||
#else
|
||||
#define mi_decl_new(n) mi_decl_nodiscard mi_decl_restrict
|
||||
#define mi_decl_new_nothrow(n) mi_decl_nodiscard mi_decl_restrict
|
||||
#endif
|
||||
|
||||
void operator delete(void* p) noexcept { mi_free(p); };
|
||||
void operator delete[](void* p) noexcept { mi_free(p); };
|
||||
|
||||
void operator delete (void* p, const std::nothrow_t&) noexcept { mi_free(p); }
|
||||
void operator delete[](void* p, const std::nothrow_t&) noexcept { mi_free(p); }
|
||||
|
||||
mi_decl_new(n) void* operator new(std::size_t n) noexcept(false) { return mi_new(n); }
|
||||
mi_decl_new(n) void* operator new[](std::size_t n) noexcept(false) { return mi_new(n); }
|
||||
|
||||
mi_decl_new_nothrow(n) void* operator new (std::size_t n, const std::nothrow_t& tag) noexcept { (void)(tag); return mi_new_nothrow(n); }
|
||||
mi_decl_new_nothrow(n) void* operator new[](std::size_t n, const std::nothrow_t& tag) noexcept { (void)(tag); return mi_new_nothrow(n); }
|
||||
|
||||
// Not from mimalloc-new-delete.h, but necessary for EASTL
|
||||
void* operator new[](size_t size, const char* name, int flags, unsigned debugFlags, const char* file, int line) noexcept(false) { return mi_new(size); }
|
||||
|
||||
#if (__cplusplus >= 201402L || _MSC_VER >= 1916)
|
||||
void operator delete (void* p, std::size_t n) noexcept { mi_free_size(p,n); };
|
||||
void operator delete[](void* p, std::size_t n) noexcept { mi_free_size(p,n); };
|
||||
#endif
|
||||
|
||||
#if (__cplusplus > 201402L || defined(__cpp_aligned_new))
|
||||
void operator delete (void* p, std::align_val_t al) noexcept { mi_free_aligned(p, static_cast<size_t>(al)); }
|
||||
void operator delete[](void* p, std::align_val_t al) noexcept { mi_free_aligned(p, static_cast<size_t>(al)); }
|
||||
void operator delete (void* p, std::size_t n, std::align_val_t al) noexcept { mi_free_size_aligned(p, n, static_cast<size_t>(al)); };
|
||||
void operator delete[](void* p, std::size_t n, std::align_val_t al) noexcept { mi_free_size_aligned(p, n, static_cast<size_t>(al)); };
|
||||
void operator delete (void* p, std::align_val_t al, const std::nothrow_t&) noexcept { mi_free_aligned(p, static_cast<size_t>(al)); }
|
||||
void operator delete[](void* p, std::align_val_t al, const std::nothrow_t&) noexcept { mi_free_aligned(p, static_cast<size_t>(al)); }
|
||||
|
||||
void* operator new (std::size_t n, std::align_val_t al) noexcept(false) { return mi_new_aligned(n, static_cast<size_t>(al)); }
|
||||
void* operator new[](std::size_t n, std::align_val_t al) noexcept(false) { return mi_new_aligned(n, static_cast<size_t>(al)); }
|
||||
void* operator new (std::size_t n, std::align_val_t al, const std::nothrow_t&) noexcept { return mi_new_aligned_nothrow(n, static_cast<size_t>(al)); }
|
||||
void* operator new[](std::size_t n, std::align_val_t al, const std::nothrow_t&) noexcept { return mi_new_aligned_nothrow(n, static_cast<size_t>(al)); }
|
||||
|
||||
// Not from mimalloc-new-delete.h, but necessary for EASTL
|
||||
void* operator new[](size_t size, size_t alignment, size_t alignmentOffset, const char* pName, int flags, unsigned debugFlags, const char* file, int line) noexcept(false) { return mi_new_aligned(size, alignment); }
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
// clang-format on
|
||||
|
||||
#if defined BIN2CPP_WINDOWS
|
||||
#pragma warning(default: 4100 4559)
|
||||
#elif defined BIN2CPP_LINUX
|
||||
#if defined(__GNUC__) && !defined(__llvm__) && !defined(__INTEL_COMPILER)
|
||||
#pragma GCC diagnostic pop
|
||||
#else
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
#endif
|
||||
@@ -42,24 +42,49 @@ set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER Tests/Bin2CPP/${ParentFo
|
||||
##################ASAN SETUP###################
|
||||
|
||||
if(${ASAN})
|
||||
if (MSVC)
|
||||
if(MSVC)
|
||||
get_filename_component(MSVC_BIN_DIR "${CMAKE_CXX_COMPILER}" DIRECTORY)
|
||||
set(ASAN_DLL "${MSVC_BIN_DIR}/clang_rt.asan_dynamic-x86_64.dll")
|
||||
|
||||
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E echo "Copying ASan DLL: ${ASAN_DLL} to $<TARGET_FILE_DIR:${PROJECT_NAME}>"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${ASAN_DLL}" "$<TARGET_FILE_DIR:${PROJECT_NAME}>"
|
||||
add_custom_command(
|
||||
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-asan.timestamp"
|
||||
DEPENDS "${ASAN_DLL}"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${ASAN_DLL}" "$<TARGET_FILE_DIR:${PROJECT_NAME}>"
|
||||
COMMAND ${CMAKE_COMMAND} -E touch "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-asan.timestamp"
|
||||
COMMENT "Copying ASan DLL for ${PROJECT_NAME}"
|
||||
)
|
||||
|
||||
add_custom_target(${PROJECT_NAME}Asan
|
||||
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-asan.timestamp"
|
||||
)
|
||||
|
||||
add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}Asan)
|
||||
set_target_properties(${PROJECT_NAME}Asan PROPERTIES FOLDER UtilityTargets/Tests/Bin2CPP)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
##################COPY FIXTURE FOLDER###################
|
||||
|
||||
if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Fixture)
|
||||
file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Fixture)
|
||||
endif()
|
||||
|
||||
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_CURRENT_SOURCE_DIR}/Fixture $<TARGET_FILE_DIR:${PROJECT_NAME}>/Fixture
|
||||
COMMENT "Copying Fixture folder ${CMAKE_CURRENT_SOURCE_DIR}/Fixture to $<TARGET_FILE_DIR:${PROJECT_NAME}>/Fixture"
|
||||
)
|
||||
file(GLOB_RECURSE FIXTURE_FILES
|
||||
CONFIGURE_DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/Fixture/*
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-fixture.timestamp"
|
||||
DEPENDS ${FIXTURE_FILES}
|
||||
COMMAND ${CMAKE_COMMAND} -E remove_directory $<TARGET_FILE_DIR:${PROJECT_NAME}>/Fixture
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/Fixture $<TARGET_FILE_DIR:${PROJECT_NAME}>/Fixture
|
||||
COMMAND ${CMAKE_COMMAND} -E touch "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-fixture.timestamp"
|
||||
COMMENT "Copying Fixture folder for ${PROJECT_NAME}"
|
||||
)
|
||||
|
||||
add_custom_target(${PROJECT_NAME}Fixture
|
||||
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-fixture.timestamp"
|
||||
)
|
||||
|
||||
add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}Fixture)
|
||||
set_target_properties(${PROJECT_NAME}Fixture PROPERTIES FOLDER UtilityTargets/Tests/Bin2CPP)
|
||||
@@ -39,9 +39,7 @@ TEST_F(GeneratorFixture, GenerateDefault)
|
||||
namespace
|
||||
{
|
||||
inline constexpr std::array<std::byte, 11> g_toto_txt = {
|
||||
std::byte{0x48}, std::byte{0x65}, std::byte{0x6C}, std::byte{0x6C}, std::byte{0x6F},
|
||||
std::byte{0x20}, std::byte{0x57}, std::byte{0x6F}, std::byte{0x72}, std::byte{0x6C},
|
||||
std::byte{0x64}
|
||||
std::byte{0x48}, std::byte{0x65}, std::byte{0x6C}, std::byte{0x6C}, std::byte{0x6F}, std::byte{0x20}, std::byte{0x57}, std::byte{0x6F}, std::byte{0x72}, std::byte{0x6C}, std::byte{0x64}
|
||||
};
|
||||
|
||||
} // namespace
|
||||
@@ -73,9 +71,7 @@ TEST_F(GeneratorFixture, GenerateNamespace)
|
||||
namespace Test
|
||||
{
|
||||
inline constexpr std::array<std::byte, 11> g_toto_txt = {
|
||||
std::byte{0x48}, std::byte{0x65}, std::byte{0x6C}, std::byte{0x6C}, std::byte{0x6F},
|
||||
std::byte{0x20}, std::byte{0x57}, std::byte{0x6F}, std::byte{0x72}, std::byte{0x6C},
|
||||
std::byte{0x64}
|
||||
std::byte{0x48}, std::byte{0x65}, std::byte{0x6C}, std::byte{0x6C}, std::byte{0x6F}, std::byte{0x20}, std::byte{0x57}, std::byte{0x6F}, std::byte{0x72}, std::byte{0x6C}, std::byte{0x64}
|
||||
};
|
||||
|
||||
} // namespace Test
|
||||
@@ -109,9 +105,7 @@ TEST_F(GeneratorFixture, GenerateCustomArray)
|
||||
namespace
|
||||
{
|
||||
inline constexpr eastl::array<std::byte, 11> g_myArray = {
|
||||
std::byte{0x48}, std::byte{0x65}, std::byte{0x6C}, std::byte{0x6C}, std::byte{0x6F},
|
||||
std::byte{0x20}, std::byte{0x57}, std::byte{0x6F}, std::byte{0x72}, std::byte{0x6C},
|
||||
std::byte{0x64}
|
||||
std::byte{0x48}, std::byte{0x65}, std::byte{0x6C}, std::byte{0x6C}, std::byte{0x6F}, std::byte{0x20}, std::byte{0x57}, std::byte{0x6F}, std::byte{0x72}, std::byte{0x6C}, std::byte{0x64}
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -1,16 +1,3 @@
|
||||
foreach(CONFIG DEBUG RELWITHDEBINFO)
|
||||
if("${CMAKE_EXE_LINKER_FLAGS_${CONFIG}}" MATCHES "/INCREMENTAL:NO")
|
||||
string(REGEX REPLACE "/INCREMENTAL([^:]|$)" ""
|
||||
CMAKE_EXE_LINKER_FLAGS_${CONFIG}
|
||||
"${CMAKE_EXE_LINKER_FLAGS_${CONFIG}}")
|
||||
endif()
|
||||
if("${CMAKE_SHARED_LINKER_FLAGS_${CONFIG}}" MATCHES "/INCREMENTAL:NO")
|
||||
string(REGEX REPLACE "/INCREMENTAL([^:]|$)" ""
|
||||
CMAKE_SHARED_LINKER_FLAGS_${CONFIG}
|
||||
"${CMAKE_SHARED_LINKER_FLAGS_${CONFIG}}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
add_library(Bin2CPPCompileAndLinkFlags INTERFACE)
|
||||
|
||||
target_compile_options(Bin2CPPCompileAndLinkFlags INTERFACE
|
||||
|
||||
@@ -9,14 +9,6 @@ find_package(magic_enum REQUIRED)
|
||||
find_package(CLI11 REQUIRED)
|
||||
find_package(quill REQUIRED)
|
||||
|
||||
if(${ASAN})
|
||||
find_package(mimalloc-asan REQUIRED)
|
||||
else()
|
||||
find_package(mimalloc REQUIRED)
|
||||
endif()
|
||||
|
||||
find_package(cpptrace REQUIRED)
|
||||
|
||||
if(BUILD_TESTS)
|
||||
find_package(GTest REQUIRED)
|
||||
endif()
|
||||
@@ -1,6 +1,6 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(Bin2CPP VERSION 0.1.0
|
||||
project(Bin2CPP VERSION 1.0.0
|
||||
DESCRIPTION "Bin2CPP"
|
||||
LANGUAGES CXX)
|
||||
|
||||
|
||||
5
ConanProfiles/Toolchains/ipo.cmake
Normal file
5
ConanProfiles/Toolchains/ipo.cmake
Normal file
@@ -0,0 +1,5 @@
|
||||
include_guard()
|
||||
|
||||
set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)
|
||||
|
||||
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
|
||||
2
ConanProfiles/Toolchains/ipo.ini
Normal file
2
ConanProfiles/Toolchains/ipo.ini
Normal file
@@ -0,0 +1,2 @@
|
||||
[built-in options]
|
||||
b_lto = true
|
||||
9
ConanProfiles/Toolchains/mold.cmake
Normal file
9
ConanProfiles/Toolchains/mold.cmake
Normal file
@@ -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 ()
|
||||
19
ConanProfiles/Tools/clang
Normal file
19
ConanProfiles/Tools/clang
Normal file
@@ -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++"}
|
||||
18
ConanProfiles/Tools/msvc
Normal file
18
ConanProfiles/Tools/msvc
Normal file
@@ -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
|
||||
@@ -10,23 +10,21 @@ compiler.runtime=static
|
||||
build_type=Release
|
||||
|
||||
[conf]
|
||||
tools.cmake.cmaketoolchain:extra_variables={'CMAKE_CXX_COMPILER_LAUNCHER': 'ccache', 'CMAKE_C_COMPILER_LAUNCHER': 'ccache'}
|
||||
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", "-flto"]
|
||||
tools.build:sharedlinkflags=["-fuse-ld=mold", "-flto"]
|
||||
|
||||
tools.build:cflags=["-flto"]
|
||||
tools.build:cxxflags=["-flto"]
|
||||
|
||||
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
|
||||
bin2cpp/*:build_tests=True
|
||||
|
||||
@@ -10,13 +10,13 @@ compiler.runtime=static
|
||||
build_type=Debug
|
||||
|
||||
[conf]
|
||||
tools.cmake.cmaketoolchain:extra_variables={'CMAKE_CXX_COMPILER_LAUNCHER': 'ccache', 'CMAKE_C_COMPILER_LAUNCHER': 'ccache'}
|
||||
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,8 +26,10 @@ 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
|
||||
Bin2CPP/*:build_tests=True
|
||||
bin2cpp/*:asan=True
|
||||
bin2cpp/*:build_tests=True
|
||||
@@ -10,21 +10,20 @@ compiler.runtime=static
|
||||
build_type=Debug
|
||||
|
||||
[conf]
|
||||
tools.cmake.cmaketoolchain:extra_variables={'CMAKE_CXX_COMPILER_LAUNCHER': 'ccache', 'CMAKE_C_COMPILER_LAUNCHER': 'ccache'}
|
||||
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
|
||||
Bin2CPP/*:coverage=True
|
||||
bin2cpp/*:build_tests=True
|
||||
bin2cpp/*:coverage=True
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
[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=Debug
|
||||
|
||||
[conf]
|
||||
tools.cmake.cmaketoolchain:extra_variables={'CMAKE_CXX_COMPILER_LAUNCHER': 'ccache', 'CMAKE_C_COMPILER_LAUNCHER': 'ccache'}
|
||||
|
||||
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]
|
||||
|
||||
[options]
|
||||
Bin2CPP/*:build_tests=True
|
||||
@@ -9,16 +9,16 @@ compiler.runtime=static
|
||||
build_type=Release
|
||||
|
||||
[conf]
|
||||
tools.cmake.cmaketoolchain:user_toolchain+={{profile_dir}}/msvc_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:exelinkflags=["/LTCG", "/INCREMENTAL:NO"]
|
||||
tools.build:sharedlinkflags=["/LTCG", "/INCREMENTAL:NO"]
|
||||
|
||||
tools.build:cflags=["/Zc:preprocessor", "/Zc:__STDC__", "/D_CRT_DECLARE_NONSTDC_NAMES=1", "/GL"]
|
||||
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
|
||||
bin2cpp/*:build_tests=True
|
||||
|
||||
@@ -9,12 +9,14 @@ compiler.runtime=static
|
||||
build_type=Debug
|
||||
|
||||
[conf]
|
||||
tools.cmake.cmaketoolchain:user_toolchain+={{profile_dir}}/msvc_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
|
||||
|
||||
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"]
|
||||
[tool_requires]
|
||||
!cmake/*: cmake/[>=4.2]
|
||||
!cmake/*: cmake/4.3.2
|
||||
|
||||
[options]
|
||||
Bin2CPP/*:build_tests=True
|
||||
bin2cpp/*:asan=True
|
||||
bin2cpp/*:build_tests=True
|
||||
@@ -1,19 +0,0 @@
|
||||
# https://github.com/ccache/ccache/wiki/MS-Visual-Studio#usage-with-cmake
|
||||
|
||||
find_program(ccache_exe ccache)
|
||||
if(ccache_exe)
|
||||
file(COPY_FILE
|
||||
${ccache_exe} ${CMAKE_BINARY_DIR}/cl.exe
|
||||
ONLY_IF_DIFFERENT)
|
||||
|
||||
# By default Visual Studio generators will use /Zi which is not compatible
|
||||
# with ccache, so tell Visual Studio to use /Z7 instead.
|
||||
message(STATUS "Setting MSVC debug information format to 'Embedded'")
|
||||
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<$<CONFIG:Debug,RelWithDebInfo>:Embedded>")
|
||||
|
||||
set(CMAKE_VS_GLOBALS
|
||||
"CLToolExe=cl.exe"
|
||||
"CLToolPath=${CMAKE_BINARY_DIR}"
|
||||
"UseMultiToolTask=true"
|
||||
)
|
||||
endif()
|
||||
@@ -1,25 +0,0 @@
|
||||
[settings]
|
||||
os=Windows
|
||||
arch=x86_64
|
||||
compiler=msvc
|
||||
compiler.version=195
|
||||
compiler.cppstd=20
|
||||
compiler.cstd=17
|
||||
compiler.runtime=static
|
||||
build_type=Debug
|
||||
|
||||
[conf]
|
||||
tools.cmake.cmaketoolchain:user_toolchain+={{profile_dir}}/msvc_ccache.cmake
|
||||
|
||||
tools.build:exelinkflags=["/INCREMENTAL:NO"]
|
||||
tools.build:sharedlinkflags=["/INCREMENTAL:NO"]
|
||||
|
||||
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"]
|
||||
|
||||
[tool_requires]
|
||||
!cmake/*: cmake/[>=4.2]
|
||||
|
||||
[options]
|
||||
Bin2CPP/*:asan=True
|
||||
Bin2CPP/*:build_tests=True
|
||||
@@ -45,17 +45,11 @@ class Bin2CPP(ConanFile):
|
||||
if self.settings.os == "Windows":
|
||||
del self.options.fPIC
|
||||
|
||||
if(self.options.asan):
|
||||
self.options["mimalloc"].asan = True
|
||||
|
||||
def requirements(self):
|
||||
self.requires("quill/11.0.2", transitive_headers=True)
|
||||
self.requires("magic_enum/0.9.7", transitive_headers=True)
|
||||
self.requires("mimalloc/3.2.8@bigfootdev/main", 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")
|
||||
|
||||
|
||||
@@ -1 +1,60 @@
|
||||
cmake -S . -B build --toolchain build/generators/conan_toolchain.cmake --graphviz=graphviz/graph.dot
|
||||
@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
|
||||
@@ -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
|
||||
#!/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."
|
||||
@@ -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 . --deployer=full_deploy --remote=bigfootpackages -pr:h=./ConanProfiles/msvc -pr:b=./ConanProfiles/msvc %build_option% -of build -s build_type=Release
|
||||
conan install . --deployer=full_deploy --remote=bigfootpackages -pr:h=./ConanProfiles/msvcd -pr:b=./ConanProfiles/msvcd %build_option% -of build -s build_type=RelWithDebInfo
|
||||
conan install . --deployer=full_deploy --remote=bigfootpackages -pr:h=./ConanProfiles/msvcd -pr:b=./ConanProfiles/msvcd %build_option% -of build -s build_type=Debug
|
||||
|
||||
endlocal
|
||||
@@ -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 . --deployer=full_deploy --remote=bigfootpackages -pr:h=./ConanProfiles/clang -pr:b=./ConanProfiles/clang --build='*' -of build -s build_type=Release
|
||||
conan install . --deployer=full_deploy --remote=bigfootpackages -pr:h=./ConanProfiles/clangd -pr:b=./ConanProfiles/clangd --build='*' -of build -s build_type=RelWithDebInfo
|
||||
conan install . --deployer=full_deploy --remote=bigfootpackages -pr:h=./ConanProfiles/clangd -pr:b=./ConanProfiles/clangd --build='*' -of build -s build_type=Debug
|
||||
elif [ "$1" == "missing" ]; then
|
||||
conan install . --deployer=full_deploy --remote=bigfootpackages -pr:h=./ConanProfiles/clang -pr:b=./ConanProfiles/clang --build=missing -of build -s build_type=Release
|
||||
conan install . --deployer=full_deploy --remote=bigfootpackages -pr:h=./ConanProfiles/clangd -pr:b=./ConanProfiles/clangd --build=missing -of build -s build_type=RelWithDebInfo
|
||||
conan install . --deployer=full_deploy --remote=bigfootpackages -pr:h=./ConanProfiles/clangd -pr:b=./ConanProfiles/clangd --build=missing -of build -s build_type=Debug
|
||||
else
|
||||
echo "Invalid argument: $1"
|
||||
echo "Usage: $0 [force|missing]"
|
||||
exit 1
|
||||
fi
|
||||
@@ -1,6 +1,6 @@
|
||||
sonar.projectKey=Bin2CPP
|
||||
|
||||
sonar.projectVersion=0.1.0
|
||||
sonar.projectVersion=1.0.0
|
||||
|
||||
sonar.sourceEncoding=UTF-8
|
||||
|
||||
|
||||
Reference in New Issue
Block a user