31 Commits

Author SHA1 Message Date
5397d358f6 Updated Bin2CPP
Some checks failed
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Failing after 16m44s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Failing after 3h0m2s
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Failing after 3h0m3s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Failing after 15m9s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Failing after 8m51s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Failing after 7m37s
Bigfoot / Clang Format Checks (push) Failing after 11s
2026-03-29 13:28:29 +02:00
9c59bd6ab8 Bin2CPP
Some checks failed
Bigfoot / Clang Format Checks (push) Failing after 9s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Failing after 16m30s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Failing after 3h0m50s
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Failing after 3h1m54s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Failing after 14m59s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Failing after 8m41s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Failing after 7m26s
2026-03-29 03:03:13 +02:00
ab96945192 Use profiles from repo instead
Some checks failed
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Failing after 3m50s
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Failing after 3m53s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Failing after 2m31s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Failing after 2m34s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Failing after 2m12s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Failing after 2m13s
Bigfoot / Clang Format Checks (push) Successful in 29s
2026-02-20 16:54:11 +01:00
45342a3555 Rework AssetContainer; adding references 2026-02-14 12:26:26 +01:00
a21354b4b4 AssetContainer semantic
Some checks failed
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Failing after 2m58s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Failing after 1m10s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Failing after 1m47s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Failing after 1m38s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Failing after 1m36s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Failing after 1m23s
Bigfoot / Clang Format Checks (push) Successful in 11s
2026-02-13 18:43:21 +01:00
d6df6d8a71 unordered_dense link 2026-02-13 18:40:39 +01:00
bbc8aa3e80 update dependencies 2026-02-13 18:40:30 +01:00
75bd0bf441 AssetContainer concept
Some checks failed
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 43s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 36s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Failing after 10s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Failing after 9s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Failing after 19s
Bigfoot / Clang Format Checks (push) Successful in 10s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Failing after 11m40s
2026-02-11 12:03:15 +01:00
e4bcf5563c Correct TypeID and TypeName
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 2m31s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 36s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 1m8s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 1m4s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 59s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 54s
Bigfoot / Clang Format Checks (push) Successful in 10s
2026-02-11 01:10:45 +01:00
46c3034ea6 FlatAssetWrapper
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 2m25s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 35s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 1m9s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 1m3s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 1m3s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 59s
Bigfoot / Clang Format Checks (push) Successful in 11s
2026-02-10 17:52:07 +01:00
f5ad5adff6 Fix clang-format
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 28s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 24s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 26s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 25s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 29s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 26s
Bigfoot / Clang Format Checks (push) Successful in 9s
2026-02-10 00:43:44 +01:00
0ef2f842cb AssetTypeID;No circular Dependency;AssetHeader
Some checks failed
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 2m17s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 26s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 25s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 26s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 27s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 26s
Bigfoot / Clang Format Checks (push) Failing after 11s
2026-02-10 00:37:55 +01:00
5f8643538b Asset layout
Some checks failed
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Failing after 2m24s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Failing after 29s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Failing after 27s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Failing after 30s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 29s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 27s
Bigfoot / Clang Format Checks (push) Successful in 10s
2026-02-08 18:22:06 +01:00
a886b4da8a Version in Bigfile 2026-02-08 18:04:28 +01:00
a41c732808 FlatTime 2026-02-08 18:04:18 +01:00
6317604bd2 use std forward
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 28s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 27s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 24s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 26s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 30s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 27s
Bigfoot / Clang Format Checks (push) Successful in 10s
2026-02-03 15:13:51 +01:00
b2f3b095be Merge branch 'Development' of https://git.romainboullard.com/BigfootDev/Bigfoot into BigFile
Some checks failed
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Failing after 2m15s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Failing after 19s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Failing after 21s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Failing after 18s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Failing after 17s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Failing after 16s
Bigfoot / Clang Format Checks (push) Successful in 11s
2026-02-03 13:53:52 +01:00
5829530652 Use optional for Singleton
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 26s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 25s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 24s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 25s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 20s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 19s
Bigfoot / Clang Format Checks (push) Successful in 10s
Bigfoot / Sonarqube (push) Successful in 1m4s
2026-02-02 08:13:26 +01:00
a062a058cd Reworked SonarQube trigger
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 25s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 23s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 25s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 24s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 21s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 19s
Bigfoot / Clang Format Checks (push) Successful in 11s
Bigfoot / Sonarqube (push) Successful in 1m5s
2026-02-02 07:46:58 +01:00
46b8095c6a Reworked SonarQube trigger
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 26s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 24s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 28s
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 24s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 19s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 20s
Bigfoot / Clang Format Checks (push) Successful in 9s
Bigfoot / Sonarqube (push) Successful in 1m18s
2026-02-02 07:38:15 +01:00
63fd92c584 Reworked SonarQube trigger
Some checks failed
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 24s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 25s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 25s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Has been cancelled
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Has been cancelled
Bigfoot / Build & Test Release (Unity Build: ON) (push) Has been cancelled
Bigfoot / Clang Format Checks (push) Has been cancelled
2026-02-02 07:36:46 +01:00
3466469440 Merge branch 'main' of https://git.romainboullard.com/BigfootDev/Bigfoot into Development
All checks were successful
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 18s
Bigfoot / Clang Format Checks (push) Successful in 9s
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 26s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 24s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 23s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 25s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 20s
# Conflicts:
#	.clang-tidy
#	.gitea/workflows/sonarqube.yml
#	sonar-project.properties
2026-02-02 07:33:27 +01:00
b5c2e4936b StaticAnalysis (#11)
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 26s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 24s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 25s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 26s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 19s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 20s
Bigfoot / Clang Format Checks (push) Successful in 9s
SonarQube step only on push to main
Trigger Infer/Clang-Tidy also in PR

Reviewed-on: #11
Co-authored-by: Romain BOULLARD <romain.boullard@protonmail.com>
Co-committed-by: Romain BOULLARD <romain.boullard@protonmail.com>
2026-02-02 06:18:26 +00:00
02a08012d0 Static Analysis (#8)
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 26s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 24s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 26s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 25s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 19s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 18s
Bigfoot / Clang Format Checks (push) Successful in 8s
Reviewed-on: #8
Co-authored-by: Romain BOULLARD <romain.boullard@protonmail.com>
Co-committed-by: Romain BOULLARD <romain.boullard@protonmail.com>
2026-02-01 23:50:29 +00:00
3d4394765b StaticAnalysis (#7)
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 23s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 22s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 24s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 24s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 17s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 17s
Bigfoot / Clang Format Checks (push) Successful in 7s
Bigfoot / Sonarqube (push) Successful in 58s
Reviewed-on: #7
2026-01-30 15:50:56 +00:00
063645fae3 Merge branch 'main' into Development
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 24s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 24s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 23s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 23s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 18s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 18s
Bigfoot / Clang Format Checks (push) Successful in 7s
Bigfoot / Sonarqube (push) Successful in 1m2s
2026-01-30 15:47:31 +00:00
6c8979684d StaticAnalysis (#6)
Some checks failed
Bigfoot / Sonarqube (push) Has been cancelled
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 24s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 24s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Has been cancelled
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Has been cancelled
Bigfoot / Build & Test Release (Unity Build: ON) (push) Has been cancelled
Bigfoot / Clang Format Checks (push) Has been cancelled
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Has been cancelled
Reviewed-on: #6
Co-authored-by: Romain BOULLARD <romain.boullard@protonmail.com>
Co-committed-by: Romain BOULLARD <romain.boullard@protonmail.com>
2026-01-30 15:46:40 +00:00
245867da3b Update README (#5)
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 25s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 24s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 24s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 24s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 21s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 18s
Bigfoot / Clang Format Checks (push) Successful in 8s
Reviewed-on: #5
2026-01-28 18:31:29 +00:00
c6b84168d8 Merge branch 'main' into Development
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 25s
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 24s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 25s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 26s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 20s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 18s
Bigfoot / Clang Format Checks (push) Successful in 9s
2026-01-28 18:28:59 +00:00
b638b2c223 Update README (#4)
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 24s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 24s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 24s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 25s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 18s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 18s
Bigfoot / Clang Format Checks (push) Successful in 9s
Reviewed-on: #4
Co-authored-by: Romain BOULLARD <romain.boullard@protonmail.com>
Co-committed-by: Romain BOULLARD <romain.boullard@protonmail.com>
2026-01-28 18:26:04 +00:00
53a053de27 GiteaCI (#3)
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 24s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 25s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 25s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 25s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 21s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 20s
Bigfoot / Clang Format Checks (push) Successful in 9s
Reviewed-on: #3
Co-authored-by: Romain BOULLARD <romain.boullard@protonmail.com>
Co-committed-by: Romain BOULLARD <romain.boullard@protonmail.com>
2026-01-28 16:50:26 +00:00
65 changed files with 2445 additions and 242 deletions

22
.clang-tidy Normal file
View File

@@ -0,0 +1,22 @@
# .clang-tidy
---
Checks: >
-*,
bugprone-*,
clang-analyzer-*,
cppcoreguidelines-*,
modernize-*,
performance-*,
readability-*,
portability-*,
-modernize-use-trailing-return-type,
-readability-avoid-const-params-in-decls,
-cppcoreguidelines-macro-usage,
-cppcoreguidelines-avoid-do-while
ExcludeHeaderFilterRegex: '_generated.*'
CheckOptions:
- key: readability-implicit-bool-conversion.AllowPointerConditions
value: true

View File

@@ -34,7 +34,7 @@ jobs:
- name: Build - name: Build
run: | run: |
conan install . --deployer=full_deploy --deployer-folder=build --remote=bigfootpackages -pr:h=clang -pr:b=clang --build=missing -s build_type=${{ matrix.build_type }} -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=False -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/clang -pr:b=./ConanProfiles/clang --build=missing -s build_type=${{ matrix.build_type }} -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=False -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True
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 -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) cmake --build build/${{ matrix.build_type }} --parallel $(nproc)

View File

@@ -0,0 +1,47 @@
name: Bigfoot
on:
push:
branches:
- main
- Development
jobs:
build-and-test:
runs-on: ubuntu-latest
timeout-minutes: 120
container:
image: git.romainboullard.com/bigfootdev/linuxbigfootbuilder:main
name: "Sonarqube"
steps:
- name: Install Node.js
run: apt-get update && apt-get install -y nodejs
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0
submodules: recursive
- name: Generate
run: |
conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/clang_coverage -pr:b=./ConanProfiles/clang_coverage --build=missing -s build_type=Debug -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=False -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True
cmake -S . -B ./build/Debug --toolchain ./build/Debug/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug -G "Ninja"
cmake --build build/Debug --parallel $(nproc)
- name: Clang-Tidy
run: run-clang-tidy -p ./build/Debug/ >> tidy_result.txt
- name: Infer
run: infer run --compilation-database build/Debug/compile_commands.json
- name: SonarQube Scan
if: github.head_ref == 'main' || github.ref_name == 'main'
uses: SonarSource/sonarqube-scan-action@v7.0.0
with:
args: >
-Dsonar.cxx.jsonCompilationDatabase=./build/Debug/compile_commands.json
-Dsonar.verbose=true
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST }}

3
.inferconfig Normal file
View File

@@ -0,0 +1,3 @@
{
}

View File

@@ -0,0 +1,22 @@
/*********************************************************************
* \file AssetTypeID.cpp
*
* \author Romain BOULLARD
* \date February 2026
*********************************************************************/
#include <Engine/BigFile/Asset/AssetTypeID.hpp>
namespace flatbuffers
{
Bigfoot::Flat::AssetTypeID Pack(const Bigfoot::AssetTypeID& p_assetTypeID)
{
return Bigfoot::Flat::AssetTypeID {p_assetTypeID};
}
/****************************************************************************************/
Bigfoot::AssetTypeID UnPack(const Bigfoot::Flat::AssetTypeID& p_flatAssetTypeID)
{
return Bigfoot::AssetTypeID {p_flatAssetTypeID.value()};
}
} // namespace flatbuffers

View File

@@ -0,0 +1,122 @@
/*********************************************************************
* \file Asset.hpp
*
* \author Romain BOULLARD
* \date February 2026
*********************************************************************/
#ifndef BIGFOOT_ENGINE_ASSET_HPP
#define BIGFOOT_ENGINE_ASSET_HPP
#include <Engine/BigFile/Asset/AssetHeader_generated.hpp>
#include <Engine/EngineAssertHandler.hpp>
#include <EASTL/vector.h>
#include <rapidhash.h>
namespace Bigfoot
{
template<typename FLAT_ASSET>
concept FlatAssetConcept = requires(FLAT_ASSET p_flatAsset) {
requires std::is_base_of_v<::flatbuffers::Table, FLAT_ASSET> &&
std::derived_from<typename FLAT_ASSET::NativeTableType, ::flatbuffers::NativeTable>;
{ FLAT_ASSET::GetFullyQualifiedName() } -> std::convertible_to<const char*>;
{ p_flatAsset.asset_header() } -> std::same_as<const Bigfoot::Flat::AssetHeader*>;
};
template<FlatAssetConcept FLAT_ASSET>
class FlatAssetWrapper
{
private:
using FLAT_ASSET_NATIVE = FLAT_ASSET::NativeTableType;
using FLAT_ASSET_BUILDER = FLAT_ASSET::Builder;
public:
FlatAssetWrapper()
{
m_asset.asset_header = eastl::make_unique<Flat::AssetHeaderT>();
m_asset.asset_header->type_id = TypeID();
m_asset.asset_header->type_name = TypeName();
}
FlatAssetWrapper(const eastl::span<const std::byte> p_flatBuffer)
{
flatbuffers::Verifier::Options verifierOptions;
flatbuffers::Verifier verifier {std::bit_cast<const std::uint8_t*>(p_flatBuffer.data()),
p_flatBuffer.size(),
verifierOptions};
CRITICAL_ASSERT(EngineAssertHandler,
verifier.VerifyBuffer<FLAT_ASSET>(),
"Flatbuffer verifier failed for FLAT_ASSET!");
const FLAT_ASSET* flatAsset = flatbuffers::GetRoot<FLAT_ASSET>(p_flatBuffer.data());
CRITICAL_ASSERT(EngineAssertHandler,
flatAsset->asset_header()->type_id()->value() == TypeID() &&
(std::strcmp(flatAsset->asset_header()->type_name()->c_str(), TypeName().data()) == 0),
"Mismatch between flatbufer type and actual type! flatbuffer = {}/{}; expected = {}/{}",
flatAsset->asset_header()->type_name()->c_str(),
flatAsset->asset_header()->type_id()->value(),
TypeName(),
TypeID());
flatAsset->UnPackTo(&m_asset);
}
FlatAssetWrapper(const FlatAssetWrapper& p_assetWrapper) = delete;
FlatAssetWrapper(FlatAssetWrapper&& p_assetWrapper) = delete;
~FlatAssetWrapper() = default;
eastl::vector<std::byte> Pack() const
{
flatbuffers::FlatBufferBuilder builder;
builder.Finish(FLAT_ASSET::Pack(builder, &m_asset));
eastl::vector<std::byte> result {builder.GetSize()};
eastl::transform(builder.GetBufferSpan().begin(),
builder.GetBufferSpan().end(),
result.begin(),
[](const std::uint8_t p_value)
{
return static_cast<std::byte>(p_value);
});
return result;
}
[[nodiscard]]
FLAT_ASSET_NATIVE& Asset()
{
return m_asset;
}
[[nodiscard]]
const FLAT_ASSET_NATIVE& Asset() const
{
return m_asset;
}
static AssetTypeID TypeID()
{
static eastl::string_view typeName = TypeName();
static AssetTypeID typeID = rapidhash(typeName.data(), typeName.size());
return typeID;
}
static eastl::string_view TypeName()
{
static eastl::string_view typeName {FLAT_ASSET::GetFullyQualifiedName()};
return typeName;
}
FlatAssetWrapper& operator=(const FlatAssetWrapper p_assetWrapper) = delete;
FlatAssetWrapper& operator=(FlatAssetWrapper&& p_assetWrapper) = delete;
private:
FLAT_ASSET_NATIVE m_asset;
};
} // namespace Bigfoot
#endif

View File

@@ -0,0 +1,115 @@
/*********************************************************************
* \file AssetContainer.hpp
*
* \author Romain BOULLARD
* \date February 2026
*********************************************************************/
#ifndef BIGFOOT_ENGINE_ASSETCONTAINER_HPP
#define BIGFOOT_ENGINE_ASSETCONTAINER_HPP
#include <Engine/BigFile/Asset/Asset.hpp>
#include <Engine/EngineAssertHandler.hpp>
#include <ankerl/unordered_dense.h>
namespace Bigfoot
{
template<typename ASSET>
concept BigfootAssetConcept = requires(ASSET p_asset, const ASSET p_constAsset) {
requires FlatAssetConcept<typename ASSET::FLAT_ASSET> &&
std::constructible_from<ASSET, FlatAssetWrapper<typename ASSET::FLAT_ASSET>*>;
};
template<BigfootAssetConcept ASSET>
class AssetContainer
{
public:
AssetContainer() = default;
AssetContainer(const AssetContainer& p_container) = delete;
AssetContainer(AssetContainer&& p_container) = delete;
[[nodiscard]]
bool Add(const UUID& p_uuid)
{
return m_assets.emplace(p_uuid, AssetHandle {}).second;
}
[[nodiscard]]
bool Load(const UUID& p_uuid, const eastl::span<const std::byte> p_flatBuffer)
{
if (!m_assets.contains(p_uuid))
{
const bool added = Add(p_uuid);
ASSERT(EngineAssertHandler, added, "{} not added to AssetContainer! Already in container ?", p_uuid);
}
AssetHandle& assetHandle = m_assets.at(p_uuid);
if (assetHandle.m_assetPair)
{
SOFT_ASSERT(EngineAssertHandler, false, "{} already loaded!", p_uuid);
return true;
}
assetHandle.m_assetPair = eastl::make_unique<AssetHandle::Data>(p_flatBuffer);
CRITICAL_ASSERT(EngineAssertHandler,
assetHandle.m_assetPair->m_flatAsset.Asset().asset_header->uuid == p_uuid,
"Mismatch between expected UUID and deserialized UUID ! Got {}; Expected {}",
assetHandle.m_assetPair->m_flatAsset.Asset().asset_header->uuid,
p_uuid);
return true;
}
void UnloadUnreferenced()
{
for (auto& keyValue: m_assets)
{
if (keyValue.second.m_hardRefCount == 0 && keyValue.second.m_assetPair)
{
keyValue.second.m_assetPair.reset();
}
}
}
~AssetContainer() = default;
AssetContainer& operator=(const AssetContainer& p_container) = delete;
AssetContainer& operator=(AssetContainer&& p_container) = delete;
private:
struct AssetHandle
{
struct Data
{
Data(const eastl::span<const std::byte> p_flatBuffer):
m_flatAsset(p_flatBuffer),
m_asset(&m_flatAsset)
{
}
FlatAssetWrapper<typename ASSET::FLAT_ASSET> m_flatAsset;
ASSET m_asset;
};
eastl::unique_ptr<Data> m_assetPair = nullptr;
std::uint32_t m_hardRefCount = 0;
std::uint32_t m_softRefCount = 0;
};
// We use a segmented_map here to keep stable references
ankerl::unordered_dense::segmented_map<UUID, AssetHandle> m_assets;
};
template<BigfootAssetConcept ASSET>
class HardRef
{
};
template<BigfootAssetConcept ASSET>
class SoftRef
{
};
} // namespace Bigfoot
#endif

View File

@@ -0,0 +1,18 @@
include "Engine/BigFile/Asset/AssetTypeID.fbs";
native_include "Engine/BigFile/Asset/AssetTypeID.hpp";
include "System/UUID/UUID.fbs";
native_include "System/UUID/UUID.hpp";
namespace Bigfoot.Flat;
table AssetHeader
{
uuid: UUID (required, native_inline);
name: string (required);
type_id: AssetTypeID (required, native_inline);
type_name: string (required);
version: uint;
}
root_type AssetHeader;

View File

@@ -0,0 +1,45 @@
/**
* Auto-generated header from: AssetHeader.fbs
* Generated by Bin2CPP
*
* DO NOT TOUCH
*/
#ifndef ASSETHEADER_FBS_HPP
#define ASSETHEADER_FBS_HPP
#include <EASTL/array.h>
#include <cstddef>
namespace Bigfoot
{
inline constexpr eastl::array<std::byte, 407> g_AssetHeader_fbs = {
std::byte{0x69}, std::byte{0x6E}, std::byte{0x63}, std::byte{0x6C}, std::byte{0x75}, std::byte{0x64}, std::byte{0x65}, std::byte{0x20}, std::byte{0x22}, std::byte{0x45}, std::byte{0x6E}, std::byte{0x67}, std::byte{0x69}, std::byte{0x6E}, std::byte{0x65}, std::byte{0x2F},
std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x46}, std::byte{0x69}, std::byte{0x6C}, std::byte{0x65}, std::byte{0x2F}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x2F}, std::byte{0x41}, std::byte{0x73},
std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x54}, std::byte{0x79}, std::byte{0x70}, std::byte{0x65}, std::byte{0x49}, std::byte{0x44}, std::byte{0x2E}, std::byte{0x66}, std::byte{0x62}, std::byte{0x73}, std::byte{0x22}, std::byte{0x3B}, std::byte{0x0A},
std::byte{0x6E}, std::byte{0x61}, std::byte{0x74}, std::byte{0x69}, std::byte{0x76}, std::byte{0x65}, std::byte{0x5F}, std::byte{0x69}, std::byte{0x6E}, std::byte{0x63}, std::byte{0x6C}, std::byte{0x75}, std::byte{0x64}, std::byte{0x65}, std::byte{0x20}, std::byte{0x22},
std::byte{0x45}, std::byte{0x6E}, std::byte{0x67}, std::byte{0x69}, std::byte{0x6E}, std::byte{0x65}, std::byte{0x2F}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x46}, std::byte{0x69}, std::byte{0x6C}, std::byte{0x65}, std::byte{0x2F}, std::byte{0x41},
std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x2F}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x54}, std::byte{0x79}, std::byte{0x70}, std::byte{0x65}, std::byte{0x49}, std::byte{0x44},
std::byte{0x2E}, std::byte{0x68}, std::byte{0x70}, std::byte{0x70}, std::byte{0x22}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x0A}, std::byte{0x69}, std::byte{0x6E}, std::byte{0x63}, std::byte{0x6C}, std::byte{0x75}, std::byte{0x64}, std::byte{0x65}, std::byte{0x20},
std::byte{0x22}, std::byte{0x53}, std::byte{0x79}, std::byte{0x73}, std::byte{0x74}, std::byte{0x65}, std::byte{0x6D}, std::byte{0x2F}, std::byte{0x55}, std::byte{0x55}, std::byte{0x49}, std::byte{0x44}, std::byte{0x2F}, std::byte{0x55}, std::byte{0x55}, std::byte{0x49},
std::byte{0x44}, std::byte{0x2E}, std::byte{0x66}, std::byte{0x62}, std::byte{0x73}, std::byte{0x22}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x6E}, std::byte{0x61}, std::byte{0x74}, std::byte{0x69}, std::byte{0x76}, std::byte{0x65}, std::byte{0x5F}, std::byte{0x69},
std::byte{0x6E}, std::byte{0x63}, std::byte{0x6C}, std::byte{0x75}, std::byte{0x64}, std::byte{0x65}, std::byte{0x20}, std::byte{0x22}, std::byte{0x53}, std::byte{0x79}, std::byte{0x73}, std::byte{0x74}, std::byte{0x65}, std::byte{0x6D}, std::byte{0x2F}, std::byte{0x55},
std::byte{0x55}, std::byte{0x49}, std::byte{0x44}, std::byte{0x2F}, std::byte{0x55}, std::byte{0x55}, std::byte{0x49}, std::byte{0x44}, std::byte{0x2E}, std::byte{0x68}, std::byte{0x70}, std::byte{0x70}, std::byte{0x22}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x0A},
std::byte{0x6E}, std::byte{0x61}, std::byte{0x6D}, std::byte{0x65}, std::byte{0x73}, std::byte{0x70}, std::byte{0x61}, std::byte{0x63}, std::byte{0x65}, std::byte{0x20}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F}, std::byte{0x6F},
std::byte{0x74}, std::byte{0x2E}, std::byte{0x46}, std::byte{0x6C}, std::byte{0x61}, std::byte{0x74}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x0A}, std::byte{0x74}, std::byte{0x61}, std::byte{0x62}, std::byte{0x6C}, std::byte{0x65}, std::byte{0x20}, std::byte{0x41},
std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x48}, std::byte{0x65}, std::byte{0x61}, std::byte{0x64}, std::byte{0x65}, std::byte{0x72}, std::byte{0x0A}, std::byte{0x7B}, std::byte{0x0A}, std::byte{0x09}, std::byte{0x75}, std::byte{0x75},
std::byte{0x69}, std::byte{0x64}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x55}, std::byte{0x55}, std::byte{0x49}, std::byte{0x44}, std::byte{0x20}, std::byte{0x28}, std::byte{0x72}, std::byte{0x65}, std::byte{0x71}, std::byte{0x75}, std::byte{0x69}, std::byte{0x72},
std::byte{0x65}, std::byte{0x64}, std::byte{0x2C}, std::byte{0x20}, std::byte{0x6E}, std::byte{0x61}, std::byte{0x74}, std::byte{0x69}, std::byte{0x76}, std::byte{0x65}, std::byte{0x5F}, std::byte{0x69}, std::byte{0x6E}, std::byte{0x6C}, std::byte{0x69}, std::byte{0x6E},
std::byte{0x65}, std::byte{0x29}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x09}, std::byte{0x6E}, std::byte{0x61}, std::byte{0x6D}, std::byte{0x65}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x73}, std::byte{0x74}, std::byte{0x72}, std::byte{0x69}, std::byte{0x6E},
std::byte{0x67}, std::byte{0x20}, std::byte{0x28}, std::byte{0x72}, std::byte{0x65}, std::byte{0x71}, std::byte{0x75}, std::byte{0x69}, std::byte{0x72}, std::byte{0x65}, std::byte{0x64}, std::byte{0x29}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x09}, std::byte{0x74},
std::byte{0x79}, std::byte{0x70}, std::byte{0x65}, std::byte{0x5F}, std::byte{0x69}, std::byte{0x64}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x54}, std::byte{0x79}, std::byte{0x70},
std::byte{0x65}, std::byte{0x49}, std::byte{0x44}, std::byte{0x20}, std::byte{0x28}, std::byte{0x72}, std::byte{0x65}, std::byte{0x71}, std::byte{0x75}, std::byte{0x69}, std::byte{0x72}, std::byte{0x65}, std::byte{0x64}, std::byte{0x2C}, std::byte{0x20}, std::byte{0x6E},
std::byte{0x61}, std::byte{0x74}, std::byte{0x69}, std::byte{0x76}, std::byte{0x65}, std::byte{0x5F}, std::byte{0x69}, std::byte{0x6E}, std::byte{0x6C}, std::byte{0x69}, std::byte{0x6E}, std::byte{0x65}, std::byte{0x29}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x09},
std::byte{0x74}, std::byte{0x79}, std::byte{0x70}, std::byte{0x65}, std::byte{0x5F}, std::byte{0x6E}, std::byte{0x61}, std::byte{0x6D}, std::byte{0x65}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x73}, std::byte{0x74}, std::byte{0x72}, std::byte{0x69}, std::byte{0x6E},
std::byte{0x67}, std::byte{0x20}, std::byte{0x28}, std::byte{0x72}, std::byte{0x65}, std::byte{0x71}, std::byte{0x75}, std::byte{0x69}, std::byte{0x72}, std::byte{0x65}, std::byte{0x64}, std::byte{0x29}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x09}, std::byte{0x76},
std::byte{0x65}, std::byte{0x72}, std::byte{0x73}, std::byte{0x69}, std::byte{0x6F}, std::byte{0x6E}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x75}, std::byte{0x69}, std::byte{0x6E}, std::byte{0x74}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x7D}, std::byte{0x0A},
std::byte{0x0A}, std::byte{0x72}, std::byte{0x6F}, std::byte{0x6F}, std::byte{0x74}, std::byte{0x5F}, std::byte{0x74}, std::byte{0x79}, std::byte{0x70}, std::byte{0x65}, std::byte{0x20}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74},
std::byte{0x48}, std::byte{0x65}, std::byte{0x61}, std::byte{0x64}, std::byte{0x65}, std::byte{0x72}, std::byte{0x3B}
};
} // namespace Bigfoot
#endif // ASSETHEADER_FBS_HPP

View File

@@ -0,0 +1,262 @@
// automatically generated by the FlatBuffers compiler, do not modify
#ifndef FLATBUFFERS_GENERATED_ASSETHEADER_BIGFOOT_FLAT_H_
#define FLATBUFFERS_GENERATED_ASSETHEADER_BIGFOOT_FLAT_H_
#include "flatbuffers/flatbuffers.h"
// Ensure the included flatbuffers.h is the same version as when this file was
// generated, otherwise it may not be compatible.
static_assert(FLATBUFFERS_VERSION_MAJOR == 25 &&
FLATBUFFERS_VERSION_MINOR == 12 &&
FLATBUFFERS_VERSION_REVISION == 19,
"Non-compatible flatbuffers version included");
#include "Engine/BigFile/Asset/AssetTypeID.hpp"
#include "Engine/BigFile/Asset/AssetTypeID.hpp"
#include "System/UUID/UUID.hpp"
#include "Engine/BigFile/Asset/AssetTypeID_generated.hpp"
#include "System/UUID/UUID_generated.hpp"
#include "EASTL/unique_ptr.h"
#include "EASTL/string.h"
namespace Bigfoot {
namespace Flat {
struct AssetHeader;
struct AssetHeaderBuilder;
struct AssetHeaderT;
inline const ::flatbuffers::TypeTable *AssetHeaderTypeTable();
struct AssetHeaderT : public ::flatbuffers::NativeTable {
typedef AssetHeader TableType;
static FLATBUFFERS_CONSTEXPR_CPP11 const char *GetFullyQualifiedName() {
return "Bigfoot.Flat.AssetHeaderT";
}
::Bigfoot::UUID uuid{};
eastl::string name{};
::Bigfoot::AssetTypeID type_id{};
eastl::string type_name{};
uint32_t version = 0;
};
struct AssetHeader FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef AssetHeaderT NativeTableType;
typedef AssetHeaderBuilder Builder;
struct Traits;
static const ::flatbuffers::TypeTable *MiniReflectTypeTable() {
return AssetHeaderTypeTable();
}
static FLATBUFFERS_CONSTEXPR_CPP11 const char *GetFullyQualifiedName() {
return "Bigfoot.Flat.AssetHeader";
}
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_UUID = 4,
VT_NAME = 6,
VT_TYPE_ID = 8,
VT_TYPE_NAME = 10,
VT_VERSION = 12
};
const Bigfoot::Flat::UUID *uuid() const {
return GetStruct<const Bigfoot::Flat::UUID *>(VT_UUID);
}
const ::flatbuffers::String *name() const {
return GetPointer<const ::flatbuffers::String *>(VT_NAME);
}
const Bigfoot::Flat::AssetTypeID *type_id() const {
return GetStruct<const Bigfoot::Flat::AssetTypeID *>(VT_TYPE_ID);
}
const ::flatbuffers::String *type_name() const {
return GetPointer<const ::flatbuffers::String *>(VT_TYPE_NAME);
}
uint32_t version() const {
return GetField<uint32_t>(VT_VERSION, 0);
}
template <bool B = false>
bool Verify(::flatbuffers::VerifierTemplate<B> &verifier) const {
return VerifyTableStart(verifier) &&
VerifyFieldRequired<Bigfoot::Flat::UUID>(verifier, VT_UUID, 1) &&
VerifyOffsetRequired(verifier, VT_NAME) &&
verifier.VerifyString(name()) &&
VerifyFieldRequired<Bigfoot::Flat::AssetTypeID>(verifier, VT_TYPE_ID, 8) &&
VerifyOffsetRequired(verifier, VT_TYPE_NAME) &&
verifier.VerifyString(type_name()) &&
VerifyField<uint32_t>(verifier, VT_VERSION, 4) &&
verifier.EndTable();
}
AssetHeaderT *UnPack(const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
void UnPackTo(AssetHeaderT *_o, const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
static ::flatbuffers::Offset<AssetHeader> Pack(::flatbuffers::FlatBufferBuilder &_fbb, const AssetHeaderT* _o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);
};
struct AssetHeaderBuilder {
typedef AssetHeader Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_uuid(const Bigfoot::Flat::UUID *uuid) {
fbb_.AddStruct(AssetHeader::VT_UUID, uuid);
}
void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
fbb_.AddOffset(AssetHeader::VT_NAME, name);
}
void add_type_id(const Bigfoot::Flat::AssetTypeID *type_id) {
fbb_.AddStruct(AssetHeader::VT_TYPE_ID, type_id);
}
void add_type_name(::flatbuffers::Offset<::flatbuffers::String> type_name) {
fbb_.AddOffset(AssetHeader::VT_TYPE_NAME, type_name);
}
void add_version(uint32_t version) {
fbb_.AddElement<uint32_t>(AssetHeader::VT_VERSION, version, 0);
}
explicit AssetHeaderBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<AssetHeader> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<AssetHeader>(end);
fbb_.Required(o, AssetHeader::VT_UUID);
fbb_.Required(o, AssetHeader::VT_NAME);
fbb_.Required(o, AssetHeader::VT_TYPE_ID);
fbb_.Required(o, AssetHeader::VT_TYPE_NAME);
return o;
}
};
inline ::flatbuffers::Offset<AssetHeader> CreateAssetHeader(
::flatbuffers::FlatBufferBuilder &_fbb,
const Bigfoot::Flat::UUID *uuid = nullptr,
::flatbuffers::Offset<::flatbuffers::String> name = 0,
const Bigfoot::Flat::AssetTypeID *type_id = nullptr,
::flatbuffers::Offset<::flatbuffers::String> type_name = 0,
uint32_t version = 0) {
AssetHeaderBuilder builder_(_fbb);
builder_.add_version(version);
builder_.add_type_name(type_name);
builder_.add_type_id(type_id);
builder_.add_name(name);
builder_.add_uuid(uuid);
return builder_.Finish();
}
struct AssetHeader::Traits {
using type = AssetHeader;
static auto constexpr Create = CreateAssetHeader;
};
::flatbuffers::Offset<AssetHeader> CreateAssetHeader(::flatbuffers::FlatBufferBuilder &_fbb, const AssetHeaderT *_o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);
inline AssetHeaderT *AssetHeader::UnPack(const ::flatbuffers::resolver_function_t *_resolver) const {
auto _o = std::make_unique<AssetHeaderT>();
UnPackTo(_o.get(), _resolver);
return _o.release();
}
inline void AssetHeader::UnPackTo(AssetHeaderT *_o, const ::flatbuffers::resolver_function_t *_resolver) const {
(void)_o;
(void)_resolver;
{ auto _e = uuid(); if (_e) _o->uuid = ::flatbuffers::UnPack(*_e); }
{ auto _e = name(); if (_e) _o->name = eastl::string(_e->c_str(), _e->size()); }
{ auto _e = type_id(); if (_e) _o->type_id = ::flatbuffers::UnPack(*_e); }
{ auto _e = type_name(); if (_e) _o->type_name = eastl::string(_e->c_str(), _e->size()); }
{ auto _e = version(); _o->version = _e; }
}
inline ::flatbuffers::Offset<AssetHeader> CreateAssetHeader(::flatbuffers::FlatBufferBuilder &_fbb, const AssetHeaderT *_o, const ::flatbuffers::rehasher_function_t *_rehasher) {
return AssetHeader::Pack(_fbb, _o, _rehasher);
}
inline ::flatbuffers::Offset<AssetHeader> AssetHeader::Pack(::flatbuffers::FlatBufferBuilder &_fbb, const AssetHeaderT* _o, const ::flatbuffers::rehasher_function_t *_rehasher) {
(void)_rehasher;
(void)_o;
struct _VectorArgs { ::flatbuffers::FlatBufferBuilder *__fbb; const AssetHeaderT* __o; const ::flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
auto _uuid = ::flatbuffers::Pack(_o->uuid);
auto _name = _fbb.CreateString(_o->name);
auto _type_id = ::flatbuffers::Pack(_o->type_id);
auto _type_name = _fbb.CreateString(_o->type_name);
auto _version = _o->version;
return Bigfoot::Flat::CreateAssetHeader(
_fbb,
&_uuid,
_name,
&_type_id,
_type_name,
_version);
}
inline const ::flatbuffers::TypeTable *AssetHeaderTypeTable() {
static const ::flatbuffers::TypeCode type_codes[] = {
{ ::flatbuffers::ET_SEQUENCE, 0, 0 },
{ ::flatbuffers::ET_STRING, 0, -1 },
{ ::flatbuffers::ET_SEQUENCE, 0, 1 },
{ ::flatbuffers::ET_STRING, 0, -1 },
{ ::flatbuffers::ET_UINT, 0, -1 }
};
static const ::flatbuffers::TypeFunction type_refs[] = {
Bigfoot::Flat::UUIDTypeTable,
Bigfoot::Flat::AssetTypeIDTypeTable
};
static const char * const names[] = {
"uuid",
"name",
"type_id",
"type_name",
"version"
};
static const ::flatbuffers::TypeTable tt = {
::flatbuffers::ST_TABLE, 5, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
inline const Bigfoot::Flat::AssetHeader *GetAssetHeader(const void *buf) {
return ::flatbuffers::GetRoot<Bigfoot::Flat::AssetHeader>(buf);
}
inline const Bigfoot::Flat::AssetHeader *GetSizePrefixedAssetHeader(const void *buf) {
return ::flatbuffers::GetSizePrefixedRoot<Bigfoot::Flat::AssetHeader>(buf);
}
template <bool B = false>
inline bool VerifyAssetHeaderBuffer(
::flatbuffers::VerifierTemplate<B> &verifier) {
return verifier.template VerifyBuffer<Bigfoot::Flat::AssetHeader>(nullptr);
}
template <bool B = false>
inline bool VerifySizePrefixedAssetHeaderBuffer(
::flatbuffers::VerifierTemplate<B> &verifier) {
return verifier.template VerifySizePrefixedBuffer<Bigfoot::Flat::AssetHeader>(nullptr);
}
inline void FinishAssetHeaderBuffer(
::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Bigfoot::Flat::AssetHeader> root) {
fbb.Finish(root);
}
inline void FinishSizePrefixedAssetHeaderBuffer(
::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Bigfoot::Flat::AssetHeader> root) {
fbb.FinishSizePrefixed(root);
}
inline eastl::unique_ptr<Bigfoot::Flat::AssetHeaderT> UnPackAssetHeader(
const void *buf,
const ::flatbuffers::resolver_function_t *res = nullptr) {
return eastl::unique_ptr<Bigfoot::Flat::AssetHeaderT>(GetAssetHeader(buf)->UnPack(res));
}
inline eastl::unique_ptr<Bigfoot::Flat::AssetHeaderT> UnPackSizePrefixedAssetHeader(
const void *buf,
const ::flatbuffers::resolver_function_t *res = nullptr) {
return eastl::unique_ptr<Bigfoot::Flat::AssetHeaderT>(GetSizePrefixedAssetHeader(buf)->UnPack(res));
}
} // namespace Flat
} // namespace Bigfoot
#endif // FLATBUFFERS_GENERATED_ASSETHEADER_BIGFOOT_FLAT_H_

View File

@@ -0,0 +1,6 @@
namespace Bigfoot.Flat;
struct AssetTypeID (native_type: "::Bigfoot::AssetTypeID")
{
value: ulong;
}

View File

@@ -0,0 +1,26 @@
/**
* Auto-generated header from: AssetTypeID.fbs
* Generated by Bin2CPP
*
* DO NOT TOUCH
*/
#ifndef ASSETTYPEID_FBS_HPP
#define ASSETTYPEID_FBS_HPP
#include <EASTL/array.h>
#include <cstddef>
namespace Bigfoot
{
inline constexpr eastl::array<std::byte, 105> g_AssetTypeID_fbs = {
std::byte{0x6E}, std::byte{0x61}, std::byte{0x6D}, std::byte{0x65}, std::byte{0x73}, std::byte{0x70}, std::byte{0x61}, std::byte{0x63}, std::byte{0x65}, std::byte{0x20}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F}, std::byte{0x6F},
std::byte{0x74}, std::byte{0x2E}, std::byte{0x46}, std::byte{0x6C}, std::byte{0x61}, std::byte{0x74}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x0A}, std::byte{0x73}, std::byte{0x74}, std::byte{0x72}, std::byte{0x75}, std::byte{0x63}, std::byte{0x74}, std::byte{0x20},
std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x54}, std::byte{0x79}, std::byte{0x70}, std::byte{0x65}, std::byte{0x49}, std::byte{0x44}, std::byte{0x20}, std::byte{0x28}, std::byte{0x6E}, std::byte{0x61}, std::byte{0x74},
std::byte{0x69}, std::byte{0x76}, std::byte{0x65}, std::byte{0x5F}, std::byte{0x74}, std::byte{0x79}, std::byte{0x70}, std::byte{0x65}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x22}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67},
std::byte{0x66}, std::byte{0x6F}, std::byte{0x6F}, std::byte{0x74}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x54}, std::byte{0x79}, std::byte{0x70}, std::byte{0x65}, std::byte{0x49},
std::byte{0x44}, std::byte{0x22}, std::byte{0x29}, std::byte{0x0A}, std::byte{0x7B}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x76}, std::byte{0x61}, std::byte{0x6C}, std::byte{0x75}, std::byte{0x65}, std::byte{0x3A},
std::byte{0x20}, std::byte{0x75}, std::byte{0x6C}, std::byte{0x6F}, std::byte{0x6E}, std::byte{0x67}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x7D}
};
} // namespace Bigfoot
#endif // ASSETTYPEID_FBS_HPP

View File

@@ -0,0 +1,24 @@
/*********************************************************************
* \file AssetTypeID.hpp
*
* \author Romain BOULLARD
* \date February 2026
*********************************************************************/
#ifndef BIGFOOT_ENGINE_ASSETTYPEID_HPP
#define BIGFOOT_ENGINE_ASSETTYPEID_HPP
#include <Engine/BigFile/Asset/AssetTypeID_generated.hpp>
#include <cstdint>
namespace Bigfoot
{
using AssetTypeID = std::uint64_t;
}
namespace flatbuffers
{
Bigfoot::Flat::AssetTypeID Pack(const Bigfoot::AssetTypeID& p_assetTypeID);
Bigfoot::AssetTypeID UnPack(const Bigfoot::Flat::AssetTypeID& p_flatAssetTypeID);
} // namespace flatbuffers
#endif

View File

@@ -0,0 +1,71 @@
// automatically generated by the FlatBuffers compiler, do not modify
#ifndef FLATBUFFERS_GENERATED_ASSETTYPEID_BIGFOOT_FLAT_H_
#define FLATBUFFERS_GENERATED_ASSETTYPEID_BIGFOOT_FLAT_H_
#include "flatbuffers/flatbuffers.h"
// Ensure the included flatbuffers.h is the same version as when this file was
// generated, otherwise it may not be compatible.
static_assert(FLATBUFFERS_VERSION_MAJOR == 25 &&
FLATBUFFERS_VERSION_MINOR == 12 &&
FLATBUFFERS_VERSION_REVISION == 19,
"Non-compatible flatbuffers version included");
#include "EASTL/unique_ptr.h"
#include "EASTL/string.h"
namespace Bigfoot {
namespace Flat {
struct AssetTypeID;
inline const ::flatbuffers::TypeTable *AssetTypeIDTypeTable();
FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(8) AssetTypeID FLATBUFFERS_FINAL_CLASS {
private:
uint64_t value_;
public:
struct Traits;
static const ::flatbuffers::TypeTable *MiniReflectTypeTable() {
return AssetTypeIDTypeTable();
}
static FLATBUFFERS_CONSTEXPR_CPP11 const char *GetFullyQualifiedName() {
return "Bigfoot.Flat.AssetTypeID";
}
AssetTypeID()
: value_(0) {
}
AssetTypeID(uint64_t _value)
: value_(::flatbuffers::EndianScalar(_value)) {
}
uint64_t value() const {
return ::flatbuffers::EndianScalar(value_);
}
};
FLATBUFFERS_STRUCT_END(AssetTypeID, 8);
struct AssetTypeID::Traits {
using type = AssetTypeID;
};
inline const ::flatbuffers::TypeTable *AssetTypeIDTypeTable() {
static const ::flatbuffers::TypeCode type_codes[] = {
{ ::flatbuffers::ET_ULONG, 0, -1 }
};
static const int64_t values[] = { 0, 8 };
static const char * const names[] = {
"value"
};
static const ::flatbuffers::TypeTable tt = {
::flatbuffers::ST_STRUCT, 1, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
} // namespace Flat
} // namespace Bigfoot
#endif // FLATBUFFERS_GENERATED_ASSETTYPEID_BIGFOOT_FLAT_H_

View File

@@ -45,7 +45,7 @@ class EngineAssertHandler
{ {
BIGFOOT_LOG_FATAL(ENGINE_LOGGER, BIGFOOT_LOG_FATAL(ENGINE_LOGGER,
"Assert: {} (File:{}, Line:{}, Function:{}\n{}", "Assert: {} (File:{}, Line:{}, Function:{}\n{}",
std::format(p_format, eastl::forward<ARGS>(p_args)...), std::format(p_format, std::forward<ARGS>(p_args)...),
p_location.file_name(), p_location.file_name(),
p_location.line(), p_location.line(),
p_location.function_name(), p_location.function_name(),

View File

@@ -3,7 +3,7 @@ project(${PackageName})
set(PublicDependencies set(PublicDependencies
$<$<CONFIG:Debug,RelWithDebInfo>:quill::quill> $<$<CONFIG:Debug,RelWithDebInfo>:quill::quill>
mimalloc $<IF:$<BOOL:${ASAN}>,mimalloc-asan,mimalloc-static>
stduuid::stduuid) stduuid::stduuid)
set(PrivateDependencies) set(PrivateDependencies)
set(BigfootPublicDependencies set(BigfootPublicDependencies
@@ -20,9 +20,9 @@ bigfoot_create_package_lib(
bigfoot_create_logger() bigfoot_create_logger()
target_compile_definitions(${PROJECT_NAME} target_compile_definitions(${PROJECT_NAME}
PUBLIC $<$<CONFIG:Debug,RelWithDebInfo>:QUILL_NO_EXCEPTIONS> PUBLIC
PUBLIC $<$<CONFIG:Debug,RelWithDebInfo>:QUILL_DISABLE_NON_PREFIXED_MACROS> $<$<CONFIG:Debug,RelWithDebInfo>:QUILL_NO_EXCEPTIONS>
$<$<CONFIG:Debug,RelWithDebInfo>:QUILL_DISABLE_NON_PREFIXED_MACROS>
PUBLIC MI_SHARED_LIB) MI_SHARED_LIB )
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/MimallocImpl.cpp PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON) set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/MimallocImpl.cpp PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)

View File

@@ -0,0 +1,50 @@
/**
* Auto-generated header from: Log.fbs
* Generated by Bin2CPP
*
* DO NOT TOUCH
*/
#ifndef LOG_FBS_HPP
#define LOG_FBS_HPP
#include <EASTL/array.h>
#include <cstddef>
namespace Bigfoot
{
inline constexpr eastl::array<std::byte, 154> g_Log_fbs = {
std::byte{0x6E}, std::byte{0x61}, std::byte{0x6D}, std::byte{0x65}, std::byte{0x73},
std::byte{0x70}, std::byte{0x61}, std::byte{0x63}, std::byte{0x65}, std::byte{0x20},
std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F},
std::byte{0x6F}, std::byte{0x74}, std::byte{0x2E}, std::byte{0x46}, std::byte{0x6C},
std::byte{0x61}, std::byte{0x74}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x0A},
std::byte{0x65}, std::byte{0x6E}, std::byte{0x75}, std::byte{0x6D}, std::byte{0x20},
std::byte{0x4C}, std::byte{0x6F}, std::byte{0x67}, std::byte{0x53}, std::byte{0x69},
std::byte{0x6E}, std::byte{0x6B}, std::byte{0x54}, std::byte{0x79}, std::byte{0x70},
std::byte{0x65}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x62}, std::byte{0x79},
std::byte{0x74}, std::byte{0x65}, std::byte{0x0A}, std::byte{0x7B}, std::byte{0x0A},
std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x43},
std::byte{0x6F}, std::byte{0x6E}, std::byte{0x73}, std::byte{0x6F}, std::byte{0x6C},
std::byte{0x65}, std::byte{0x0A}, std::byte{0x7D}, std::byte{0x0A}, std::byte{0x0A},
std::byte{0x65}, std::byte{0x6E}, std::byte{0x75}, std::byte{0x6D}, std::byte{0x20},
std::byte{0x4C}, std::byte{0x6F}, std::byte{0x67}, std::byte{0x4C}, std::byte{0x65},
std::byte{0x76}, std::byte{0x65}, std::byte{0x6C}, std::byte{0x3A}, std::byte{0x20},
std::byte{0x62}, std::byte{0x79}, std::byte{0x74}, std::byte{0x65}, std::byte{0x0A},
std::byte{0x7B}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20},
std::byte{0x20}, std::byte{0x44}, std::byte{0x65}, std::byte{0x62}, std::byte{0x75},
std::byte{0x67}, std::byte{0x2C}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20},
std::byte{0x20}, std::byte{0x20}, std::byte{0x54}, std::byte{0x72}, std::byte{0x61},
std::byte{0x63}, std::byte{0x65}, std::byte{0x2C}, std::byte{0x0A}, std::byte{0x20},
std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x49}, std::byte{0x6E},
std::byte{0x66}, std::byte{0x6F}, std::byte{0x2C}, std::byte{0x0A}, std::byte{0x20},
std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x57}, std::byte{0x61},
std::byte{0x72}, std::byte{0x6E}, std::byte{0x2C}, std::byte{0x0A}, std::byte{0x20},
std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x45}, std::byte{0x72},
std::byte{0x72}, std::byte{0x6F}, std::byte{0x72}, std::byte{0x2C}, std::byte{0x0A},
std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x43},
std::byte{0x72}, std::byte{0x69}, std::byte{0x74}, std::byte{0x69}, std::byte{0x63},
std::byte{0x61}, std::byte{0x6C}, std::byte{0x0A}, std::byte{0x7D}
};
} // namespace Bigfoot
#endif // LOG_FBS_HPP

View File

@@ -0,0 +1,29 @@
/**
* Auto-generated header from: Log.fbs
* Generated by Bin2CPP
*
* DO NOT TOUCH
*/
#ifndef LOG_FBS_HPP
#define LOG_FBS_HPP
#include <EASTL/array.h>
#include <cstddef>
namespace Bigfoot
{
inline constexpr eastl::array<std::byte, 154> g_Log_fbs = {
std::byte{0x6E}, std::byte{0x61}, std::byte{0x6D}, std::byte{0x65}, std::byte{0x73}, std::byte{0x70}, std::byte{0x61}, std::byte{0x63}, std::byte{0x65}, std::byte{0x20}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F}, std::byte{0x6F},
std::byte{0x74}, std::byte{0x2E}, std::byte{0x46}, std::byte{0x6C}, std::byte{0x61}, std::byte{0x74}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x0A}, std::byte{0x65}, std::byte{0x6E}, std::byte{0x75}, std::byte{0x6D}, std::byte{0x20}, std::byte{0x4C}, std::byte{0x6F},
std::byte{0x67}, std::byte{0x53}, std::byte{0x69}, std::byte{0x6E}, std::byte{0x6B}, std::byte{0x54}, std::byte{0x79}, std::byte{0x70}, std::byte{0x65}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x62}, std::byte{0x79}, std::byte{0x74}, std::byte{0x65}, std::byte{0x0A},
std::byte{0x7B}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x43}, std::byte{0x6F}, std::byte{0x6E}, std::byte{0x73}, std::byte{0x6F}, std::byte{0x6C}, std::byte{0x65}, std::byte{0x0A}, std::byte{0x7D}, std::byte{0x0A},
std::byte{0x0A}, std::byte{0x65}, std::byte{0x6E}, std::byte{0x75}, std::byte{0x6D}, std::byte{0x20}, std::byte{0x4C}, std::byte{0x6F}, std::byte{0x67}, std::byte{0x4C}, std::byte{0x65}, std::byte{0x76}, std::byte{0x65}, std::byte{0x6C}, std::byte{0x3A}, std::byte{0x20},
std::byte{0x62}, std::byte{0x79}, std::byte{0x74}, std::byte{0x65}, std::byte{0x0A}, std::byte{0x7B}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x44}, std::byte{0x65}, std::byte{0x62}, std::byte{0x75}, std::byte{0x67},
std::byte{0x2C}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x54}, std::byte{0x72}, std::byte{0x61}, std::byte{0x63}, std::byte{0x65}, std::byte{0x2C}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20},
std::byte{0x20}, std::byte{0x49}, std::byte{0x6E}, std::byte{0x66}, std::byte{0x6F}, std::byte{0x2C}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x57}, std::byte{0x61}, std::byte{0x72}, std::byte{0x6E}, std::byte{0x2C},
std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x45}, std::byte{0x72}, std::byte{0x72}, std::byte{0x6F}, std::byte{0x72}, std::byte{0x2C}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20},
std::byte{0x43}, std::byte{0x72}, std::byte{0x69}, std::byte{0x74}, std::byte{0x69}, std::byte{0x63}, std::byte{0x61}, std::byte{0x6C}, std::byte{0x0A}, std::byte{0x7D}
};
} // namespace Bigfoot
#endif // LOG_FBS_HPP

View File

@@ -45,7 +45,7 @@ class SystemAssertHandler
{ {
BIGFOOT_LOG_FATAL(SYSTEM_LOGGER, BIGFOOT_LOG_FATAL(SYSTEM_LOGGER,
"Assert: {} (File:{}, Line:{}, Function:{}\n{}", "Assert: {} (File:{}, Line:{}, Function:{}\n{}",
std::format(p_format, eastl::forward<ARGS>(p_args)...), std::format(p_format, std::forward<ARGS>(p_args)...),
p_location.file_name(), p_location.file_name(),
p_location.line(), p_location.line(),
p_location.function_name(), p_location.function_name(),

View File

@@ -0,0 +1,6 @@
namespace Bigfoot.Flat;
struct Time (native_type: "::Bigfoot::Time")
{
epoch:ulong;
}

View File

@@ -0,0 +1,25 @@
/**
* Auto-generated header from: Time.fbs
* Generated by Bin2CPP
*
* DO NOT TOUCH
*/
#ifndef TIME_FBS_HPP
#define TIME_FBS_HPP
#include <EASTL/array.h>
#include <cstddef>
namespace Bigfoot
{
inline constexpr eastl::array<std::byte, 88> g_Time_fbs = {
std::byte{0x6E}, std::byte{0x61}, std::byte{0x6D}, std::byte{0x65}, std::byte{0x73}, std::byte{0x70}, std::byte{0x61}, std::byte{0x63}, std::byte{0x65}, std::byte{0x20}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F}, std::byte{0x6F},
std::byte{0x74}, std::byte{0x2E}, std::byte{0x46}, std::byte{0x6C}, std::byte{0x61}, std::byte{0x74}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x0A}, std::byte{0x73}, std::byte{0x74}, std::byte{0x72}, std::byte{0x75}, std::byte{0x63}, std::byte{0x74}, std::byte{0x20},
std::byte{0x54}, std::byte{0x69}, std::byte{0x6D}, std::byte{0x65}, std::byte{0x20}, std::byte{0x28}, std::byte{0x6E}, std::byte{0x61}, std::byte{0x74}, std::byte{0x69}, std::byte{0x76}, std::byte{0x65}, std::byte{0x5F}, std::byte{0x74}, std::byte{0x79}, std::byte{0x70},
std::byte{0x65}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x22}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F}, std::byte{0x6F}, std::byte{0x74}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x54},
std::byte{0x69}, std::byte{0x6D}, std::byte{0x65}, std::byte{0x22}, std::byte{0x29}, std::byte{0x0A}, std::byte{0x7B}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x65}, std::byte{0x70}, std::byte{0x6F}, std::byte{0x63}, std::byte{0x68}, std::byte{0x3A},
std::byte{0x75}, std::byte{0x6C}, std::byte{0x6F}, std::byte{0x6E}, std::byte{0x67}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x7D}
};
} // namespace Bigfoot
#endif // TIME_FBS_HPP

View File

@@ -6,6 +6,8 @@
*********************************************************************/ *********************************************************************/
#ifndef BIGFOOT_SYSTEM_TIME_HPP #ifndef BIGFOOT_SYSTEM_TIME_HPP
#define BIGFOOT_SYSTEM_TIME_HPP #define BIGFOOT_SYSTEM_TIME_HPP
#include <System/Time/Time_generated.hpp>
#include <chrono> #include <chrono>
#include <compare> #include <compare>
#include <cstdint> #include <cstdint>
@@ -65,4 +67,12 @@ class Time
}; };
} // namespace Bigfoot } // namespace Bigfoot
/****************************************************************************************/
namespace flatbuffers
{
Bigfoot::Flat::Time Pack(const Bigfoot::Time& p_time);
Bigfoot::Time UnPack(const Bigfoot::Flat::Time& p_flatTime);
} // namespace flatbuffers
#endif #endif

View File

@@ -0,0 +1,71 @@
// automatically generated by the FlatBuffers compiler, do not modify
#ifndef FLATBUFFERS_GENERATED_TIME_BIGFOOT_FLAT_H_
#define FLATBUFFERS_GENERATED_TIME_BIGFOOT_FLAT_H_
#include "flatbuffers/flatbuffers.h"
// Ensure the included flatbuffers.h is the same version as when this file was
// generated, otherwise it may not be compatible.
static_assert(FLATBUFFERS_VERSION_MAJOR == 25 &&
FLATBUFFERS_VERSION_MINOR == 12 &&
FLATBUFFERS_VERSION_REVISION == 19,
"Non-compatible flatbuffers version included");
#include "EASTL/unique_ptr.h"
#include "EASTL/string.h"
namespace Bigfoot {
namespace Flat {
struct Time;
inline const ::flatbuffers::TypeTable *TimeTypeTable();
FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(8) Time FLATBUFFERS_FINAL_CLASS {
private:
uint64_t epoch_;
public:
struct Traits;
static const ::flatbuffers::TypeTable *MiniReflectTypeTable() {
return TimeTypeTable();
}
static FLATBUFFERS_CONSTEXPR_CPP11 const char *GetFullyQualifiedName() {
return "Bigfoot.Flat.Time";
}
Time()
: epoch_(0) {
}
Time(uint64_t _epoch)
: epoch_(::flatbuffers::EndianScalar(_epoch)) {
}
uint64_t epoch() const {
return ::flatbuffers::EndianScalar(epoch_);
}
};
FLATBUFFERS_STRUCT_END(Time, 8);
struct Time::Traits {
using type = Time;
};
inline const ::flatbuffers::TypeTable *TimeTypeTable() {
static const ::flatbuffers::TypeCode type_codes[] = {
{ ::flatbuffers::ET_ULONG, 0, -1 }
};
static const int64_t values[] = { 0, 8 };
static const char * const names[] = {
"epoch"
};
static const ::flatbuffers::TypeTable tt = {
::flatbuffers::ST_STRUCT, 1, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
} // namespace Flat
} // namespace Bigfoot
#endif // FLATBUFFERS_GENERATED_TIME_BIGFOOT_FLAT_H_

View File

@@ -1,18 +0,0 @@
/*********************************************************************
* \file FlatUUID.hpp
*
* \author Romain BOULLARD
* \date December 2025
*********************************************************************/
#ifndef BIGFOOT_SYSTEM_FLATUUID_HPP
#define BIGFOOT_SYSTEM_FLATUUID_HPP
#include <System/UUID/UUID.hpp>
#include <System/UUID/UUID_generated.hpp>
namespace flatbuffers
{
Bigfoot::Flat::UUID Pack(const Bigfoot::UUID& p_uuid);
Bigfoot::UUID UnPack(const Bigfoot::Flat::UUID& p_flatUUID);
} // namespace flatbuffers
#endif

View File

@@ -1,5 +1,3 @@
native_include "System/UUID/FlatUUID.hpp";
namespace Bigfoot.Flat; namespace Bigfoot.Flat;
struct UUID (native_type: "::Bigfoot::UUID") struct UUID (native_type: "::Bigfoot::UUID")

View File

@@ -0,0 +1,25 @@
/**
* Auto-generated header from: UUID.fbs
* Generated by Bin2CPP
*
* DO NOT TOUCH
*/
#ifndef UUID_FBS_HPP
#define UUID_FBS_HPP
#include <EASTL/array.h>
#include <cstddef>
namespace Bigfoot
{
inline constexpr eastl::array<std::byte, 93> g_UUID_fbs = {
std::byte{0x6E}, std::byte{0x61}, std::byte{0x6D}, std::byte{0x65}, std::byte{0x73}, std::byte{0x70}, std::byte{0x61}, std::byte{0x63}, std::byte{0x65}, std::byte{0x20}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F}, std::byte{0x6F},
std::byte{0x74}, std::byte{0x2E}, std::byte{0x46}, std::byte{0x6C}, std::byte{0x61}, std::byte{0x74}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x0A}, std::byte{0x73}, std::byte{0x74}, std::byte{0x72}, std::byte{0x75}, std::byte{0x63}, std::byte{0x74}, std::byte{0x20},
std::byte{0x55}, std::byte{0x55}, std::byte{0x49}, std::byte{0x44}, std::byte{0x20}, std::byte{0x28}, std::byte{0x6E}, std::byte{0x61}, std::byte{0x74}, std::byte{0x69}, std::byte{0x76}, std::byte{0x65}, std::byte{0x5F}, std::byte{0x74}, std::byte{0x79}, std::byte{0x70},
std::byte{0x65}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x22}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F}, std::byte{0x6F}, std::byte{0x74}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x55},
std::byte{0x55}, std::byte{0x49}, std::byte{0x44}, std::byte{0x22}, std::byte{0x29}, std::byte{0x0A}, std::byte{0x7B}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x62}, std::byte{0x79}, std::byte{0x74}, std::byte{0x65}, std::byte{0x73}, std::byte{0x3A},
std::byte{0x5B}, std::byte{0x75}, std::byte{0x62}, std::byte{0x79}, std::byte{0x74}, std::byte{0x65}, std::byte{0x3A}, std::byte{0x31}, std::byte{0x36}, std::byte{0x5D}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x7D}
};
} // namespace Bigfoot
#endif // UUID_FBS_HPP

View File

@@ -6,6 +6,7 @@
*********************************************************************/ *********************************************************************/
#ifndef BIGFOOT_SYSTEM_UUID_HPP #ifndef BIGFOOT_SYSTEM_UUID_HPP
#define BIGFOOT_SYSTEM_UUID_HPP #define BIGFOOT_SYSTEM_UUID_HPP
#include <System/UUID/UUID_generated.hpp>
#include <uuid.h> #include <uuid.h>
@@ -118,6 +119,8 @@ struct std::formatter<Bigfoot::UUID, char>
} }
}; };
/****************************************************************************************/
#if defined BIGFOOT_NOT_OPTIMIZED #if defined BIGFOOT_NOT_OPTIMIZED
#include <quill/DeferredFormatCodec.h> #include <quill/DeferredFormatCodec.h>
@@ -141,4 +144,12 @@ struct quill::Codec<Bigfoot::UUID>: quill::DeferredFormatCodec<Bigfoot::UUID>
}; };
#endif #endif
/****************************************************************************************/
namespace flatbuffers
{
Bigfoot::Flat::UUID Pack(const Bigfoot::UUID& p_uuid);
Bigfoot::UUID UnPack(const Bigfoot::Flat::UUID& p_flatUUID);
} // namespace flatbuffers
#endif #endif

View File

@@ -13,8 +13,6 @@ static_assert(FLATBUFFERS_VERSION_MAJOR == 25 &&
FLATBUFFERS_VERSION_REVISION == 19, FLATBUFFERS_VERSION_REVISION == 19,
"Non-compatible flatbuffers version included"); "Non-compatible flatbuffers version included");
#include "System/UUID/FlatUUID.hpp"
#include "EASTL/unique_ptr.h" #include "EASTL/unique_ptr.h"
#include "EASTL/string.h" #include "EASTL/string.h"

View File

@@ -4,7 +4,7 @@
* \author Romain BOULLARD * \author Romain BOULLARD
* \date December 2025 * \date December 2025
*********************************************************************/ *********************************************************************/
#include <System/Time.hpp> #include <System/Time/Time.hpp>
#include <System/SystemAssertHandler.hpp> #include <System/SystemAssertHandler.hpp>
@@ -119,3 +119,20 @@ Time Time::Now()
return Time {epochInMicroSeconds}; return Time {epochInMicroSeconds};
} }
} // namespace Bigfoot } // namespace Bigfoot
/****************************************************************************************/
namespace flatbuffers
{
Bigfoot::Flat::Time Pack(const Bigfoot::Time& p_time)
{
return Bigfoot::Flat::Time {p_time.Epoch()};
}
/****************************************************************************************/
Bigfoot::Time UnPack(const Bigfoot::Flat::Time& p_flatTime)
{
return Bigfoot::Time {p_flatTime.epoch()};
}
} // namespace flatbuffers

View File

@@ -1,27 +0,0 @@
/*********************************************************************
* \file FlatUUID.cpp
*
* \author Romain BOULLARD
* \date December 2025
*********************************************************************/
#include <System/UUID/FlatUUID.hpp>
namespace flatbuffers
{
Bigfoot::Flat::UUID Pack(const Bigfoot::UUID& p_uuid)
{
const std::span<const std::byte, Bigfoot::UUID::UUID_BYTE_SIZE> bytes = p_uuid;
return Bigfoot::Flat::UUID {
std::span<const std::uint8_t, Bigfoot::UUID::UUID_BYTE_SIZE> {reinterpret_cast<const std::uint8_t*>(bytes.data()),
bytes.size()}};
}
/****************************************************************************************/
Bigfoot::UUID UnPack(const Bigfoot::Flat::UUID& p_flatUUID)
{
const std::span<const std::uint8_t, Bigfoot::UUID::UUID_BYTE_SIZE> bytesView {p_flatUUID.bytes()->data(),
p_flatUUID.bytes()->size()};
return Bigfoot::UUID {std::as_bytes(bytesView)};
}
} // namespace flatbuffers

View File

@@ -85,3 +85,25 @@ uuids::uuid_random_generator UUID::GetUUIDGenerator()
return uuids::uuid_random_generator {ms_randomGenerator}; return uuids::uuid_random_generator {ms_randomGenerator};
} }
} // namespace Bigfoot } // namespace Bigfoot
/****************************************************************************************/
namespace flatbuffers
{
Bigfoot::Flat::UUID Pack(const Bigfoot::UUID& p_uuid)
{
const std::span<const std::byte, Bigfoot::UUID::UUID_BYTE_SIZE> bytes = p_uuid;
return Bigfoot::Flat::UUID {
std::span<const std::uint8_t, Bigfoot::UUID::UUID_BYTE_SIZE> {reinterpret_cast<const std::uint8_t*>(bytes.data()),
bytes.size()}};
}
/****************************************************************************************/
Bigfoot::UUID UnPack(const Bigfoot::Flat::UUID& p_flatUUID)
{
const std::span<const std::uint8_t, Bigfoot::UUID::UUID_BYTE_SIZE> bytesView {p_flatUUID.bytes()->data(),
p_flatUUID.bytes()->size()};
return Bigfoot::UUID {std::as_bytes(bytesView)};
}
} // namespace flatbuffers

View File

@@ -2,7 +2,8 @@ get_filename_component(PackageName ${CMAKE_CURRENT_SOURCE_DIR} NAME)
project(${PackageName}) project(${PackageName})
set(PublicDependencies set(PublicDependencies
$<$<CONFIG:Debug,RelWithDebInfo>:cpptrace::cpptrace>) $<$<CONFIG:Debug,RelWithDebInfo>:cpptrace::cpptrace>
unordered_dense::unordered_dense)
set(PrivateDependencies) set(PrivateDependencies)
set(BigfootPublicDependencies) set(BigfootPublicDependencies)
set(BigfootPrivateDependencies) set(BigfootPrivateDependencies)

View File

@@ -9,6 +9,7 @@
#include <EASTL/array.h> #include <EASTL/array.h>
#include <EASTL/bit.h> #include <EASTL/bit.h>
#include <EASTL/optional.h>
#include <EASTL/type_traits.h> #include <EASTL/type_traits.h>
#include <EASTL/utility.h> #include <EASTL/utility.h>
@@ -32,7 +33,7 @@ class Singleton
*/ */
static constexpr TYPE& Instance() static constexpr TYPE& Instance()
{ {
return *eastl::bit_cast<TYPE*>(ms_instance.data()); return ms_instance.value();
} }
/** /**
@@ -42,7 +43,7 @@ class Singleton
*/ */
static constexpr bool HasInstance() static constexpr bool HasInstance()
{ {
return ms_initialized; return ms_instance.has_value();
} }
class Lifetime class Lifetime
@@ -53,11 +54,10 @@ class Singleton
* *
* \param p_args Arguments for the singleton * \param p_args Arguments for the singleton
*/ */
template<typename... ARGS, template<typename... ARGS>
typename = eastl::enable_if_t<!(eastl::is_same_v<Lifetime, eastl::decay_t<ARGS>> || ...)>>
explicit Lifetime(ARGS&&... p_args) explicit Lifetime(ARGS&&... p_args)
{ {
Initialize(eastl::forward<ARGS>(p_args)...); Initialize(std::forward<ARGS>(p_args)...);
} }
Lifetime(const Lifetime& p_lifetime) = delete; Lifetime(const Lifetime& p_lifetime) = delete;
@@ -88,9 +88,7 @@ class Singleton
template<typename... ARGS> template<typename... ARGS>
static void Initialize(ARGS&&... p_args) static void Initialize(ARGS&&... p_args)
{ {
new (ms_instance.data()) TYPE(eastl::forward<ARGS>(p_args)...); ms_instance.emplace(std::forward<ARGS>(p_args)...);
ms_initialized = true;
} }
/** /**
@@ -99,20 +97,13 @@ class Singleton
*/ */
static void Finalize() static void Finalize()
{ {
eastl::bit_cast<TYPE*>(ms_instance.data())->~TYPE(); ms_instance.reset();
ms_initialized = false;
} }
/** /**
* The singleton. * The singleton.
*/ */
alignas(alignof(TYPE)) inline static eastl::array<std::byte, sizeof(TYPE)> ms_instance; inline static eastl::optional<TYPE> ms_instance;
/**
* Is the singleton initialized?
*/
inline static bool ms_initialized = false;
}; };
} // namespace Bigfoot } // namespace Bigfoot
#endif #endif

View File

@@ -92,7 +92,7 @@ class Version
return m_combined; return m_combined;
} }
[[nodiscard]] operator std::string() const; operator std::string() const;
constexpr Version& operator=(const Version& p_version) = default; constexpr Version& operator=(const Version& p_version) = default;

View File

@@ -6,13 +6,17 @@
*********************************************************************/ *********************************************************************/
#include <Engine/BigFile/BigFile.hpp> #include <Engine/BigFile/BigFile.hpp>
#include <Engine/BigFile/Asset/Asset.hpp>
#include <System/Log/Log.hpp> #include <System/Log/Log.hpp>
#include <System/Time.hpp> #include <System/Time/Time.hpp>
#include <System/UUID/UUID.hpp> #include <System/UUID/UUID.hpp>
#include <Utils/Singleton.hpp> #include <Utils/Singleton.hpp>
#include <Utils/TargetMacros.h> #include <Utils/TargetMacros.h>
#include <EngineTests/BigFile/Asset/AssetA.hpp>
#include <EngineTests/BigFile/Asset/AssetB.hpp>
#include <EngineTests/BigFileInfo_generated.hpp> #include <EngineTests/BigFileInfo_generated.hpp>
#include <gtest/gtest.h> #include <gtest/gtest.h>
@@ -33,6 +37,9 @@ class BigFileFixture: public ::testing::Test
m_bigFile.CommitTransaction(); m_bigFile.CommitTransaction();
} }
AssetAContainer m_assetAContainer;
AssetBContainer m_assetBContainer;
BIGFOOT_NOT_OPTIMIZED_ONLY(Singleton<Log>::Lifetime m_loggerLifetime;) BIGFOOT_NOT_OPTIMIZED_ONLY(Singleton<Log>::Lifetime m_loggerLifetime;)
BigFile m_bigFile {File {BIGFILE_ENGINETESTS_LOCATION}}; BigFile m_bigFile {File {BIGFILE_ENGINETESTS_LOCATION}};
@@ -42,6 +49,51 @@ class BigFileFixture: public ::testing::Test
TEST_F(BigFileFixture, Lol) TEST_F(BigFileFixture, Lol)
{ {
{
EXPECT_STREQ(FlatAssetWrapper<Flat::AssetA>::TypeName().data(), "Bigfoot.Flat.AssetA");
EXPECT_EQ(FlatAssetWrapper<Flat::AssetA>::TypeID(),
rapidhash(FlatAssetWrapper<Flat::AssetA>::TypeName().data(),
FlatAssetWrapper<Flat::AssetA>::TypeName().size()));
UUID uuid;
std::ignore = m_assetAContainer.Add(uuid);
FlatAssetWrapper<Flat::AssetA> test {};
test.Asset().asset_header->name = "Instance";
test.Asset().asset_header->uuid = uuid;
const eastl::vector<std::byte> flatBuffer = test.Pack();
std::ignore = m_assetAContainer.Load(uuid, flatBuffer);
m_assetAContainer.UnloadUnreferenced();
// UUID uuid;
// std::ignore = m_assetAContainer.Add(uuid, "Instance");
// AssetA* test = m_assetAContainer.Get(uuid);
// test->Health() = 100;
// test->Mana() = 42;
// const eastl::vector<std::byte> flatbuffer = m_assetAContainer.Pack(uuid);
// m_assetAContainer.Remove(uuid);
// std::ignore = m_assetAContainer.Add(uuid, flatbuffer);
// std::ignore = m_assetAContainer.Add(UUID {}, "Instance2");
// std::ignore = m_assetAContainer.Add(UUID {}, "Instance3");
// AssetA* test2 = m_assetAContainer.Get(uuid);
// EXPECT_EQ(test2->Health(), 100);
// EXPECT_EQ(test2->Mana(), 42);
// EXPECT_STREQ(test2->AssetHeader()->name.c_str(), "Instance");
// EXPECT_EQ(test2->AssetHeader()->type_id, FlatAssetWrapper<Flat::AssetA>::TypeID());
// EXPECT_STREQ(test2->AssetHeader()->type_name.c_str(), FlatAssetWrapper<Flat::AssetA>::TypeName().data());
// EXPECT_EQ(test2->AssetHeader()->uuid, uuid);
// EXPECT_EQ(test2->AssetHeader()->version, 2);
}
UUID uuid; UUID uuid;
UUID uuid2; UUID uuid2;

View File

@@ -11,5 +11,3 @@ bigfoot_create_bigfile("Tests/Bigfoot")
bigfoot_create_package_tests( bigfoot_create_package_tests(
"" ""
"${BigfootDependencies}") "${BigfootDependencies}")
bigfoot_setup_dependencies("Tests/Bigfoot")

View File

@@ -0,0 +1,23 @@
include "Engine/BigFile/Asset/AssetHeader.fbs";
namespace Bigfoot.Flat;
struct AssetAHardRef (native_type: "::Bigfoot::HardRef<::Bigfoot::AssetA>")
{
uuid: UUID;
}
struct AssetASoftRef (native_type: "::Bigfoot::SoftRef<::Bigfoot::AssetA>")
{
uuid: UUID;
}
table AssetA
{
asset_header: AssetHeader;
health: uint;
mana: uint;
}
root_type AssetA;

View File

@@ -0,0 +1,43 @@
/**
* Auto-generated header from: AssetA.fbs
* Generated by Bin2CPP
*
* DO NOT TOUCH
*/
#ifndef ASSETA_FBS_HPP
#define ASSETA_FBS_HPP
#include <EASTL/array.h>
#include <cstddef>
namespace Bigfoot
{
inline constexpr eastl::array<std::byte, 369> g_AssetA_fbs = {
std::byte{0x69}, std::byte{0x6E}, std::byte{0x63}, std::byte{0x6C}, std::byte{0x75}, std::byte{0x64}, std::byte{0x65}, std::byte{0x20}, std::byte{0x22}, std::byte{0x45}, std::byte{0x6E}, std::byte{0x67}, std::byte{0x69}, std::byte{0x6E}, std::byte{0x65}, std::byte{0x2F},
std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x46}, std::byte{0x69}, std::byte{0x6C}, std::byte{0x65}, std::byte{0x2F}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x2F}, std::byte{0x41}, std::byte{0x73},
std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x48}, std::byte{0x65}, std::byte{0x61}, std::byte{0x64}, std::byte{0x65}, std::byte{0x72}, std::byte{0x2E}, std::byte{0x66}, std::byte{0x62}, std::byte{0x73}, std::byte{0x22}, std::byte{0x3B}, std::byte{0x0A},
std::byte{0x0A}, std::byte{0x6E}, std::byte{0x61}, std::byte{0x6D}, std::byte{0x65}, std::byte{0x73}, std::byte{0x70}, std::byte{0x61}, std::byte{0x63}, std::byte{0x65}, std::byte{0x20}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F},
std::byte{0x6F}, std::byte{0x74}, std::byte{0x2E}, std::byte{0x46}, std::byte{0x6C}, std::byte{0x61}, std::byte{0x74}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x0A}, std::byte{0x73}, std::byte{0x74}, std::byte{0x72}, std::byte{0x75}, std::byte{0x63}, std::byte{0x74},
std::byte{0x20}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x41}, std::byte{0x48}, std::byte{0x61}, std::byte{0x72}, std::byte{0x64}, std::byte{0x52}, std::byte{0x65}, std::byte{0x66}, std::byte{0x20}, std::byte{0x28},
std::byte{0x6E}, std::byte{0x61}, std::byte{0x74}, std::byte{0x69}, std::byte{0x76}, std::byte{0x65}, std::byte{0x5F}, std::byte{0x74}, std::byte{0x79}, std::byte{0x70}, std::byte{0x65}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x22}, std::byte{0x3A}, std::byte{0x3A},
std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F}, std::byte{0x6F}, std::byte{0x74}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x48}, std::byte{0x61}, std::byte{0x72}, std::byte{0x64}, std::byte{0x52}, std::byte{0x65}, std::byte{0x66},
std::byte{0x3C}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F}, std::byte{0x6F}, std::byte{0x74}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65},
std::byte{0x74}, std::byte{0x41}, std::byte{0x3E}, std::byte{0x22}, std::byte{0x29}, std::byte{0x0A}, std::byte{0x7B}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x75}, std::byte{0x75}, std::byte{0x69}, std::byte{0x64},
std::byte{0x3A}, std::byte{0x20}, std::byte{0x55}, std::byte{0x55}, std::byte{0x49}, std::byte{0x44}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x7D}, std::byte{0x0A}, std::byte{0x0A}, std::byte{0x73}, std::byte{0x74}, std::byte{0x72}, std::byte{0x75}, std::byte{0x63},
std::byte{0x74}, std::byte{0x20}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x41}, std::byte{0x53}, std::byte{0x6F}, std::byte{0x66}, std::byte{0x74}, std::byte{0x52}, std::byte{0x65}, std::byte{0x66}, std::byte{0x20},
std::byte{0x28}, std::byte{0x6E}, std::byte{0x61}, std::byte{0x74}, std::byte{0x69}, std::byte{0x76}, std::byte{0x65}, std::byte{0x5F}, std::byte{0x74}, std::byte{0x79}, std::byte{0x70}, std::byte{0x65}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x22}, std::byte{0x3A},
std::byte{0x3A}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F}, std::byte{0x6F}, std::byte{0x74}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x53}, std::byte{0x6F}, std::byte{0x66}, std::byte{0x74}, std::byte{0x52}, std::byte{0x65},
std::byte{0x66}, std::byte{0x3C}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F}, std::byte{0x6F}, std::byte{0x74}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73},
std::byte{0x65}, std::byte{0x74}, std::byte{0x41}, std::byte{0x3E}, std::byte{0x22}, std::byte{0x29}, std::byte{0x0A}, std::byte{0x7B}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x75}, std::byte{0x75}, std::byte{0x69},
std::byte{0x64}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x55}, std::byte{0x55}, std::byte{0x49}, std::byte{0x44}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x7D}, std::byte{0x0A}, std::byte{0x0A}, std::byte{0x74}, std::byte{0x61}, std::byte{0x62}, std::byte{0x6C},
std::byte{0x65}, std::byte{0x20}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x41}, std::byte{0x0A}, std::byte{0x7B}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x61},
std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x5F}, std::byte{0x68}, std::byte{0x65}, std::byte{0x61}, std::byte{0x64}, std::byte{0x65}, std::byte{0x72}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73},
std::byte{0x65}, std::byte{0x74}, std::byte{0x48}, std::byte{0x65}, std::byte{0x61}, std::byte{0x64}, std::byte{0x65}, std::byte{0x72}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x68},
std::byte{0x65}, std::byte{0x61}, std::byte{0x6C}, std::byte{0x74}, std::byte{0x68}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x75}, std::byte{0x69}, std::byte{0x6E}, std::byte{0x74}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20},
std::byte{0x20}, std::byte{0x6D}, std::byte{0x61}, std::byte{0x6E}, std::byte{0x61}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x75}, std::byte{0x69}, std::byte{0x6E}, std::byte{0x74}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x7D}, std::byte{0x0A}, std::byte{0x0A},
std::byte{0x72}, std::byte{0x6F}, std::byte{0x6F}, std::byte{0x74}, std::byte{0x5F}, std::byte{0x74}, std::byte{0x79}, std::byte{0x70}, std::byte{0x65}, std::byte{0x20}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x41},
std::byte{0x3B}
};
} // namespace Bigfoot
#endif // ASSETA_FBS_HPP

View File

@@ -0,0 +1,69 @@
/*********************************************************************
* \file AssetA.hpp
*
* \author Romain BOULLARD
* \date February 2026
*********************************************************************/
#ifndef BIGFOOT_ENGINETESTS_ASSETA_HPP
#define BIGFOOT_ENGINETESTS_ASSETA_HPP
#include <Engine/BigFile/Asset/AssetContainer.hpp>
#include <EngineTests/BigFile/Asset/AssetA_generated.hpp>
namespace Bigfoot
{
class AssetA
{
public:
using FLAT_ASSET = Flat::AssetA;
AssetA(FlatAssetWrapper<Flat::AssetA>* p_flatAsset):
m_flatAsset(p_flatAsset)
{
// deprecation...
if (m_flatAsset->Asset().asset_header->version < 2)
{
m_flatAsset->Asset().asset_header->version = 2;
}
}
AssetA(const AssetA& p_assetA) = default;
AssetA(AssetA&& p_assetA) = default;
[[nodiscard]]
std::uint32_t& Health()
{
return m_flatAsset->Asset().health;
}
[[nodiscard]]
std::uint32_t& Mana()
{
return m_flatAsset->Asset().mana;
}
[[nodiscard]]
Flat::AssetHeaderT* AssetHeader()
{
return m_flatAsset->Asset().asset_header.get();
}
[[nodiscard]]
const Flat::AssetHeaderT* AssetHeader() const
{
return m_flatAsset->Asset().asset_header.get();
}
~AssetA() = default;
AssetA& operator=(const AssetA& p_assetA) = default;
AssetA& operator=(AssetA&& p_assetA) = default;
private:
FlatAssetWrapper<Flat::AssetA>* m_flatAsset;
};
using AssetAContainer = AssetContainer<AssetA>;
} // namespace Bigfoot
#endif

View File

@@ -0,0 +1,338 @@
// automatically generated by the FlatBuffers compiler, do not modify
#ifndef FLATBUFFERS_GENERATED_ASSETA_BIGFOOT_FLAT_H_
#define FLATBUFFERS_GENERATED_ASSETA_BIGFOOT_FLAT_H_
#include "flatbuffers/flatbuffers.h"
// Ensure the included flatbuffers.h is the same version as when this file was
// generated, otherwise it may not be compatible.
static_assert(FLATBUFFERS_VERSION_MAJOR == 25 &&
FLATBUFFERS_VERSION_MINOR == 12 &&
FLATBUFFERS_VERSION_REVISION == 19,
"Non-compatible flatbuffers version included");
#include "Engine/BigFile/Asset/AssetTypeID.hpp"
#include "Engine/BigFile/Asset/AssetTypeID.hpp"
#include "System/UUID/UUID.hpp"
#include "Engine/BigFile/Asset/AssetHeader_generated.hpp"
#include "EASTL/unique_ptr.h"
#include "EASTL/string.h"
namespace Bigfoot {
namespace Flat {
struct AssetAHardRef;
struct AssetASoftRef;
struct AssetA;
struct AssetABuilder;
struct AssetAT;
inline const ::flatbuffers::TypeTable *AssetAHardRefTypeTable();
inline const ::flatbuffers::TypeTable *AssetASoftRefTypeTable();
inline const ::flatbuffers::TypeTable *AssetATypeTable();
FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(1) AssetAHardRef FLATBUFFERS_FINAL_CLASS {
private:
Bigfoot::Flat::UUID uuid_;
public:
struct Traits;
static const ::flatbuffers::TypeTable *MiniReflectTypeTable() {
return AssetAHardRefTypeTable();
}
static FLATBUFFERS_CONSTEXPR_CPP11 const char *GetFullyQualifiedName() {
return "Bigfoot.Flat.AssetAHardRef";
}
AssetAHardRef()
: uuid_() {
}
AssetAHardRef(const Bigfoot::Flat::UUID &_uuid)
: uuid_(_uuid) {
}
const Bigfoot::Flat::UUID &uuid() const {
return uuid_;
}
};
FLATBUFFERS_STRUCT_END(AssetAHardRef, 16);
struct AssetAHardRef::Traits {
using type = AssetAHardRef;
};
FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(1) AssetASoftRef FLATBUFFERS_FINAL_CLASS {
private:
Bigfoot::Flat::UUID uuid_;
public:
struct Traits;
static const ::flatbuffers::TypeTable *MiniReflectTypeTable() {
return AssetASoftRefTypeTable();
}
static FLATBUFFERS_CONSTEXPR_CPP11 const char *GetFullyQualifiedName() {
return "Bigfoot.Flat.AssetASoftRef";
}
AssetASoftRef()
: uuid_() {
}
AssetASoftRef(const Bigfoot::Flat::UUID &_uuid)
: uuid_(_uuid) {
}
const Bigfoot::Flat::UUID &uuid() const {
return uuid_;
}
};
FLATBUFFERS_STRUCT_END(AssetASoftRef, 16);
struct AssetASoftRef::Traits {
using type = AssetASoftRef;
};
struct AssetAT : public ::flatbuffers::NativeTable {
typedef AssetA TableType;
static FLATBUFFERS_CONSTEXPR_CPP11 const char *GetFullyQualifiedName() {
return "Bigfoot.Flat.AssetAT";
}
eastl::unique_ptr<Bigfoot::Flat::AssetHeaderT> asset_header{};
uint32_t health = 0;
uint32_t mana = 0;
AssetAT() = default;
AssetAT(const AssetAT &o);
AssetAT(AssetAT&&) FLATBUFFERS_NOEXCEPT = default;
AssetAT &operator=(AssetAT o) FLATBUFFERS_NOEXCEPT;
};
struct AssetA FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef AssetAT NativeTableType;
typedef AssetABuilder Builder;
struct Traits;
static const ::flatbuffers::TypeTable *MiniReflectTypeTable() {
return AssetATypeTable();
}
static FLATBUFFERS_CONSTEXPR_CPP11 const char *GetFullyQualifiedName() {
return "Bigfoot.Flat.AssetA";
}
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_ASSET_HEADER = 4,
VT_HEALTH = 6,
VT_MANA = 8
};
const Bigfoot::Flat::AssetHeader *asset_header() const {
return GetPointer<const Bigfoot::Flat::AssetHeader *>(VT_ASSET_HEADER);
}
uint32_t health() const {
return GetField<uint32_t>(VT_HEALTH, 0);
}
uint32_t mana() const {
return GetField<uint32_t>(VT_MANA, 0);
}
template <bool B = false>
bool Verify(::flatbuffers::VerifierTemplate<B> &verifier) const {
return VerifyTableStart(verifier) &&
VerifyOffset(verifier, VT_ASSET_HEADER) &&
verifier.VerifyTable(asset_header()) &&
VerifyField<uint32_t>(verifier, VT_HEALTH, 4) &&
VerifyField<uint32_t>(verifier, VT_MANA, 4) &&
verifier.EndTable();
}
AssetAT *UnPack(const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
void UnPackTo(AssetAT *_o, const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
static ::flatbuffers::Offset<AssetA> Pack(::flatbuffers::FlatBufferBuilder &_fbb, const AssetAT* _o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);
};
struct AssetABuilder {
typedef AssetA Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_asset_header(::flatbuffers::Offset<Bigfoot::Flat::AssetHeader> asset_header) {
fbb_.AddOffset(AssetA::VT_ASSET_HEADER, asset_header);
}
void add_health(uint32_t health) {
fbb_.AddElement<uint32_t>(AssetA::VT_HEALTH, health, 0);
}
void add_mana(uint32_t mana) {
fbb_.AddElement<uint32_t>(AssetA::VT_MANA, mana, 0);
}
explicit AssetABuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<AssetA> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<AssetA>(end);
return o;
}
};
inline ::flatbuffers::Offset<AssetA> CreateAssetA(
::flatbuffers::FlatBufferBuilder &_fbb,
::flatbuffers::Offset<Bigfoot::Flat::AssetHeader> asset_header = 0,
uint32_t health = 0,
uint32_t mana = 0) {
AssetABuilder builder_(_fbb);
builder_.add_mana(mana);
builder_.add_health(health);
builder_.add_asset_header(asset_header);
return builder_.Finish();
}
struct AssetA::Traits {
using type = AssetA;
static auto constexpr Create = CreateAssetA;
};
::flatbuffers::Offset<AssetA> CreateAssetA(::flatbuffers::FlatBufferBuilder &_fbb, const AssetAT *_o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);
inline AssetAT::AssetAT(const AssetAT &o)
: asset_header((o.asset_header) ? new Bigfoot::Flat::AssetHeaderT(*o.asset_header) : nullptr),
health(o.health),
mana(o.mana) {
}
inline AssetAT &AssetAT::operator=(AssetAT o) FLATBUFFERS_NOEXCEPT {
std::swap(asset_header, o.asset_header);
std::swap(health, o.health);
std::swap(mana, o.mana);
return *this;
}
inline AssetAT *AssetA::UnPack(const ::flatbuffers::resolver_function_t *_resolver) const {
auto _o = std::make_unique<AssetAT>();
UnPackTo(_o.get(), _resolver);
return _o.release();
}
inline void AssetA::UnPackTo(AssetAT *_o, const ::flatbuffers::resolver_function_t *_resolver) const {
(void)_o;
(void)_resolver;
{ auto _e = asset_header(); if (_e) { if(_o->asset_header) { _e->UnPackTo(_o->asset_header.get(), _resolver); } else { _o->asset_header = eastl::unique_ptr<Bigfoot::Flat::AssetHeaderT>(_e->UnPack(_resolver)); } } else if (_o->asset_header) { _o->asset_header.reset(); } }
{ auto _e = health(); _o->health = _e; }
{ auto _e = mana(); _o->mana = _e; }
}
inline ::flatbuffers::Offset<AssetA> CreateAssetA(::flatbuffers::FlatBufferBuilder &_fbb, const AssetAT *_o, const ::flatbuffers::rehasher_function_t *_rehasher) {
return AssetA::Pack(_fbb, _o, _rehasher);
}
inline ::flatbuffers::Offset<AssetA> AssetA::Pack(::flatbuffers::FlatBufferBuilder &_fbb, const AssetAT* _o, const ::flatbuffers::rehasher_function_t *_rehasher) {
(void)_rehasher;
(void)_o;
struct _VectorArgs { ::flatbuffers::FlatBufferBuilder *__fbb; const AssetAT* __o; const ::flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
auto _asset_header = _o->asset_header ? CreateAssetHeader(_fbb, _o->asset_header.get(), _rehasher) : 0;
auto _health = _o->health;
auto _mana = _o->mana;
return Bigfoot::Flat::CreateAssetA(
_fbb,
_asset_header,
_health,
_mana);
}
inline const ::flatbuffers::TypeTable *AssetAHardRefTypeTable() {
static const ::flatbuffers::TypeCode type_codes[] = {
{ ::flatbuffers::ET_SEQUENCE, 0, 0 }
};
static const ::flatbuffers::TypeFunction type_refs[] = {
Bigfoot::Flat::UUIDTypeTable
};
static const int64_t values[] = { 0, 16 };
static const char * const names[] = {
"uuid"
};
static const ::flatbuffers::TypeTable tt = {
::flatbuffers::ST_STRUCT, 1, type_codes, type_refs, nullptr, values, names
};
return &tt;
}
inline const ::flatbuffers::TypeTable *AssetASoftRefTypeTable() {
static const ::flatbuffers::TypeCode type_codes[] = {
{ ::flatbuffers::ET_SEQUENCE, 0, 0 }
};
static const ::flatbuffers::TypeFunction type_refs[] = {
Bigfoot::Flat::UUIDTypeTable
};
static const int64_t values[] = { 0, 16 };
static const char * const names[] = {
"uuid"
};
static const ::flatbuffers::TypeTable tt = {
::flatbuffers::ST_STRUCT, 1, type_codes, type_refs, nullptr, values, names
};
return &tt;
}
inline const ::flatbuffers::TypeTable *AssetATypeTable() {
static const ::flatbuffers::TypeCode type_codes[] = {
{ ::flatbuffers::ET_SEQUENCE, 0, 0 },
{ ::flatbuffers::ET_UINT, 0, -1 },
{ ::flatbuffers::ET_UINT, 0, -1 }
};
static const ::flatbuffers::TypeFunction type_refs[] = {
Bigfoot::Flat::AssetHeaderTypeTable
};
static const char * const names[] = {
"asset_header",
"health",
"mana"
};
static const ::flatbuffers::TypeTable tt = {
::flatbuffers::ST_TABLE, 3, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
inline const Bigfoot::Flat::AssetA *GetAssetA(const void *buf) {
return ::flatbuffers::GetRoot<Bigfoot::Flat::AssetA>(buf);
}
inline const Bigfoot::Flat::AssetA *GetSizePrefixedAssetA(const void *buf) {
return ::flatbuffers::GetSizePrefixedRoot<Bigfoot::Flat::AssetA>(buf);
}
template <bool B = false>
inline bool VerifyAssetABuffer(
::flatbuffers::VerifierTemplate<B> &verifier) {
return verifier.template VerifyBuffer<Bigfoot::Flat::AssetA>(nullptr);
}
template <bool B = false>
inline bool VerifySizePrefixedAssetABuffer(
::flatbuffers::VerifierTemplate<B> &verifier) {
return verifier.template VerifySizePrefixedBuffer<Bigfoot::Flat::AssetA>(nullptr);
}
inline void FinishAssetABuffer(
::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Bigfoot::Flat::AssetA> root) {
fbb.Finish(root);
}
inline void FinishSizePrefixedAssetABuffer(
::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Bigfoot::Flat::AssetA> root) {
fbb.FinishSizePrefixed(root);
}
inline eastl::unique_ptr<Bigfoot::Flat::AssetAT> UnPackAssetA(
const void *buf,
const ::flatbuffers::resolver_function_t *res = nullptr) {
return eastl::unique_ptr<Bigfoot::Flat::AssetAT>(GetAssetA(buf)->UnPack(res));
}
inline eastl::unique_ptr<Bigfoot::Flat::AssetAT> UnPackSizePrefixedAssetA(
const void *buf,
const ::flatbuffers::resolver_function_t *res = nullptr) {
return eastl::unique_ptr<Bigfoot::Flat::AssetAT>(GetSizePrefixedAssetA(buf)->UnPack(res));
}
} // namespace Flat
} // namespace Bigfoot
#endif // FLATBUFFERS_GENERATED_ASSETA_BIGFOOT_FLAT_H_

View File

@@ -0,0 +1,22 @@
include "EngineTests/BigFile/Asset/AssetA.fbs";
namespace Bigfoot.Flat;
struct AssetBHardRef (native_type: "::Bigfoot::HardRef<::Bigfoot::AssetB>")
{
uuid: UUID;
}
struct AssetBSoftRef (native_type: "::Bigfoot::SoftRef<::Bigfoot::AssetB>")
{
uuid: UUID;
}
table AssetB
{
asset_header: AssetHeader;
asset_a_hard_ref: AssetAHardRef (native_inline);
}
root_type AssetB;

View File

@@ -0,0 +1,44 @@
/**
* Auto-generated header from: AssetB.fbs
* Generated by Bin2CPP
*
* DO NOT TOUCH
*/
#ifndef ASSETB_FBS_HPP
#define ASSETB_FBS_HPP
#include <EASTL/array.h>
#include <cstddef>
namespace Bigfoot
{
inline constexpr eastl::array<std::byte, 388> g_AssetB_fbs = {
std::byte{0x69}, std::byte{0x6E}, std::byte{0x63}, std::byte{0x6C}, std::byte{0x75}, std::byte{0x64}, std::byte{0x65}, std::byte{0x20}, std::byte{0x22}, std::byte{0x45}, std::byte{0x6E}, std::byte{0x67}, std::byte{0x69}, std::byte{0x6E}, std::byte{0x65}, std::byte{0x54},
std::byte{0x65}, std::byte{0x73}, std::byte{0x74}, std::byte{0x73}, std::byte{0x2F}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x46}, std::byte{0x69}, std::byte{0x6C}, std::byte{0x65}, std::byte{0x2F}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73},
std::byte{0x65}, std::byte{0x74}, std::byte{0x2F}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x41}, std::byte{0x2E}, std::byte{0x66}, std::byte{0x62}, std::byte{0x73}, std::byte{0x22}, std::byte{0x3B}, std::byte{0x0A},
std::byte{0x0A}, std::byte{0x6E}, std::byte{0x61}, std::byte{0x6D}, std::byte{0x65}, std::byte{0x73}, std::byte{0x70}, std::byte{0x61}, std::byte{0x63}, std::byte{0x65}, std::byte{0x20}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F},
std::byte{0x6F}, std::byte{0x74}, std::byte{0x2E}, std::byte{0x46}, std::byte{0x6C}, std::byte{0x61}, std::byte{0x74}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x0A}, std::byte{0x73}, std::byte{0x74}, std::byte{0x72}, std::byte{0x75}, std::byte{0x63}, std::byte{0x74},
std::byte{0x20}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x42}, std::byte{0x48}, std::byte{0x61}, std::byte{0x72}, std::byte{0x64}, std::byte{0x52}, std::byte{0x65}, std::byte{0x66}, std::byte{0x20}, std::byte{0x28},
std::byte{0x6E}, std::byte{0x61}, std::byte{0x74}, std::byte{0x69}, std::byte{0x76}, std::byte{0x65}, std::byte{0x5F}, std::byte{0x74}, std::byte{0x79}, std::byte{0x70}, std::byte{0x65}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x22}, std::byte{0x3A}, std::byte{0x3A},
std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F}, std::byte{0x6F}, std::byte{0x74}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x48}, std::byte{0x61}, std::byte{0x72}, std::byte{0x64}, std::byte{0x52}, std::byte{0x65}, std::byte{0x66},
std::byte{0x3C}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F}, std::byte{0x6F}, std::byte{0x74}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65},
std::byte{0x74}, std::byte{0x42}, std::byte{0x3E}, std::byte{0x22}, std::byte{0x29}, std::byte{0x0A}, std::byte{0x7B}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x75}, std::byte{0x75}, std::byte{0x69}, std::byte{0x64},
std::byte{0x3A}, std::byte{0x20}, std::byte{0x55}, std::byte{0x55}, std::byte{0x49}, std::byte{0x44}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x7D}, std::byte{0x0A}, std::byte{0x0A}, std::byte{0x73}, std::byte{0x74}, std::byte{0x72}, std::byte{0x75}, std::byte{0x63},
std::byte{0x74}, std::byte{0x20}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x42}, std::byte{0x53}, std::byte{0x6F}, std::byte{0x66}, std::byte{0x74}, std::byte{0x52}, std::byte{0x65}, std::byte{0x66}, std::byte{0x20},
std::byte{0x28}, std::byte{0x6E}, std::byte{0x61}, std::byte{0x74}, std::byte{0x69}, std::byte{0x76}, std::byte{0x65}, std::byte{0x5F}, std::byte{0x74}, std::byte{0x79}, std::byte{0x70}, std::byte{0x65}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x22}, std::byte{0x3A},
std::byte{0x3A}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F}, std::byte{0x6F}, std::byte{0x74}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x53}, std::byte{0x6F}, std::byte{0x66}, std::byte{0x74}, std::byte{0x52}, std::byte{0x65},
std::byte{0x66}, std::byte{0x3C}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x42}, std::byte{0x69}, std::byte{0x67}, std::byte{0x66}, std::byte{0x6F}, std::byte{0x6F}, std::byte{0x74}, std::byte{0x3A}, std::byte{0x3A}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73},
std::byte{0x65}, std::byte{0x74}, std::byte{0x42}, std::byte{0x3E}, std::byte{0x22}, std::byte{0x29}, std::byte{0x0A}, std::byte{0x7B}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x75}, std::byte{0x75}, std::byte{0x69},
std::byte{0x64}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x55}, std::byte{0x55}, std::byte{0x49}, std::byte{0x44}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x7D}, std::byte{0x0A}, std::byte{0x0A}, std::byte{0x74}, std::byte{0x61}, std::byte{0x62}, std::byte{0x6C},
std::byte{0x65}, std::byte{0x20}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x42}, std::byte{0x0A}, std::byte{0x7B}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x61},
std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x5F}, std::byte{0x68}, std::byte{0x65}, std::byte{0x61}, std::byte{0x64}, std::byte{0x65}, std::byte{0x72}, std::byte{0x3A}, std::byte{0x20}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73},
std::byte{0x65}, std::byte{0x74}, std::byte{0x48}, std::byte{0x65}, std::byte{0x61}, std::byte{0x64}, std::byte{0x65}, std::byte{0x72}, std::byte{0x3B}, std::byte{0x0A}, std::byte{0x0A}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x20}, std::byte{0x61},
std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x5F}, std::byte{0x61}, std::byte{0x5F}, std::byte{0x68}, std::byte{0x61}, std::byte{0x72}, std::byte{0x64}, std::byte{0x5F}, std::byte{0x72}, std::byte{0x65}, std::byte{0x66}, std::byte{0x3A},
std::byte{0x20}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73}, std::byte{0x65}, std::byte{0x74}, std::byte{0x41}, std::byte{0x48}, std::byte{0x61}, std::byte{0x72}, std::byte{0x64}, std::byte{0x52}, std::byte{0x65}, std::byte{0x66}, std::byte{0x20}, std::byte{0x28},
std::byte{0x6E}, std::byte{0x61}, std::byte{0x74}, std::byte{0x69}, std::byte{0x76}, std::byte{0x65}, std::byte{0x5F}, std::byte{0x69}, std::byte{0x6E}, std::byte{0x6C}, std::byte{0x69}, std::byte{0x6E}, std::byte{0x65}, std::byte{0x29}, std::byte{0x3B}, std::byte{0x0A},
std::byte{0x7D}, std::byte{0x0A}, std::byte{0x0A}, std::byte{0x72}, std::byte{0x6F}, std::byte{0x6F}, std::byte{0x74}, std::byte{0x5F}, std::byte{0x74}, std::byte{0x79}, std::byte{0x70}, std::byte{0x65}, std::byte{0x20}, std::byte{0x41}, std::byte{0x73}, std::byte{0x73},
std::byte{0x65}, std::byte{0x74}, std::byte{0x42}, std::byte{0x3B}
};
} // namespace Bigfoot
#endif // ASSETB_FBS_HPP

View File

@@ -0,0 +1,59 @@
/*********************************************************************
* \file AssetB.hpp
*
* \author Romain BOULLARD
* \date February 2026
*********************************************************************/
#ifndef BIGFOOT_ENGINETESTS_ASSETB_HPP
#define BIGFOOT_ENGINETESTS_ASSETB_HPP
#include <Engine/BigFile/Asset/AssetContainer.hpp>
#include <EngineTests/BigFile/Asset/AssetA.hpp>
#include <EngineTests/BigFile/Asset/AssetB_generated.hpp>
namespace Bigfoot
{
class AssetB
{
public:
using FLAT_ASSET = Flat::AssetB;
AssetB(FlatAssetWrapper<Flat::AssetB>* p_flatAsset):
m_flatAsset(p_flatAsset)
{
}
AssetB(const AssetB& p_assetB) = default;
AssetB(AssetB&& p_assetB) = default;
[[nodiscard]]
HardRef<AssetA> Health()
{
return m_flatAsset->Asset().asset_a_hard_ref;
}
[[nodiscard]]
Flat::AssetHeaderT* AssetHeader()
{
return m_flatAsset->Asset().asset_header.get();
}
[[nodiscard]]
const Flat::AssetHeaderT* AssetHeader() const
{
return m_flatAsset->Asset().asset_header.get();
}
~AssetB() = default;
AssetB& operator=(const AssetB& p_assetB) = default;
AssetB& operator=(AssetB&& p_assetB) = default;
private:
FlatAssetWrapper<Flat::AssetB>* m_flatAsset;
};
using AssetBContainer = AssetContainer<AssetB>;
} // namespace Bigfoot
#endif

View File

@@ -0,0 +1,321 @@
// automatically generated by the FlatBuffers compiler, do not modify
#ifndef FLATBUFFERS_GENERATED_ASSETB_BIGFOOT_FLAT_H_
#define FLATBUFFERS_GENERATED_ASSETB_BIGFOOT_FLAT_H_
#include "flatbuffers/flatbuffers.h"
// Ensure the included flatbuffers.h is the same version as when this file was
// generated, otherwise it may not be compatible.
static_assert(FLATBUFFERS_VERSION_MAJOR == 25 &&
FLATBUFFERS_VERSION_MINOR == 12 &&
FLATBUFFERS_VERSION_REVISION == 19,
"Non-compatible flatbuffers version included");
#include "Engine/BigFile/Asset/AssetTypeID.hpp"
#include "Engine/BigFile/Asset/AssetTypeID.hpp"
#include "System/UUID/UUID.hpp"
#include "EngineTests/BigFile/Asset/AssetA_generated.hpp"
#include "EASTL/unique_ptr.h"
#include "EASTL/string.h"
namespace Bigfoot {
namespace Flat {
struct AssetBHardRef;
struct AssetBSoftRef;
struct AssetB;
struct AssetBBuilder;
struct AssetBT;
inline const ::flatbuffers::TypeTable *AssetBHardRefTypeTable();
inline const ::flatbuffers::TypeTable *AssetBSoftRefTypeTable();
inline const ::flatbuffers::TypeTable *AssetBTypeTable();
FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(1) AssetBHardRef FLATBUFFERS_FINAL_CLASS {
private:
Bigfoot::Flat::UUID uuid_;
public:
struct Traits;
static const ::flatbuffers::TypeTable *MiniReflectTypeTable() {
return AssetBHardRefTypeTable();
}
static FLATBUFFERS_CONSTEXPR_CPP11 const char *GetFullyQualifiedName() {
return "Bigfoot.Flat.AssetBHardRef";
}
AssetBHardRef()
: uuid_() {
}
AssetBHardRef(const Bigfoot::Flat::UUID &_uuid)
: uuid_(_uuid) {
}
const Bigfoot::Flat::UUID &uuid() const {
return uuid_;
}
};
FLATBUFFERS_STRUCT_END(AssetBHardRef, 16);
struct AssetBHardRef::Traits {
using type = AssetBHardRef;
};
FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(1) AssetBSoftRef FLATBUFFERS_FINAL_CLASS {
private:
Bigfoot::Flat::UUID uuid_;
public:
struct Traits;
static const ::flatbuffers::TypeTable *MiniReflectTypeTable() {
return AssetBSoftRefTypeTable();
}
static FLATBUFFERS_CONSTEXPR_CPP11 const char *GetFullyQualifiedName() {
return "Bigfoot.Flat.AssetBSoftRef";
}
AssetBSoftRef()
: uuid_() {
}
AssetBSoftRef(const Bigfoot::Flat::UUID &_uuid)
: uuid_(_uuid) {
}
const Bigfoot::Flat::UUID &uuid() const {
return uuid_;
}
};
FLATBUFFERS_STRUCT_END(AssetBSoftRef, 16);
struct AssetBSoftRef::Traits {
using type = AssetBSoftRef;
};
struct AssetBT : public ::flatbuffers::NativeTable {
typedef AssetB TableType;
static FLATBUFFERS_CONSTEXPR_CPP11 const char *GetFullyQualifiedName() {
return "Bigfoot.Flat.AssetBT";
}
eastl::unique_ptr<Bigfoot::Flat::AssetHeaderT> asset_header{};
::Bigfoot::HardRef<::Bigfoot::AssetA> asset_a_hard_ref{};
AssetBT() = default;
AssetBT(const AssetBT &o);
AssetBT(AssetBT&&) FLATBUFFERS_NOEXCEPT = default;
AssetBT &operator=(AssetBT o) FLATBUFFERS_NOEXCEPT;
};
struct AssetB FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef AssetBT NativeTableType;
typedef AssetBBuilder Builder;
struct Traits;
static const ::flatbuffers::TypeTable *MiniReflectTypeTable() {
return AssetBTypeTable();
}
static FLATBUFFERS_CONSTEXPR_CPP11 const char *GetFullyQualifiedName() {
return "Bigfoot.Flat.AssetB";
}
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_ASSET_HEADER = 4,
VT_ASSET_A_HARD_REF = 6
};
const Bigfoot::Flat::AssetHeader *asset_header() const {
return GetPointer<const Bigfoot::Flat::AssetHeader *>(VT_ASSET_HEADER);
}
const Bigfoot::Flat::AssetAHardRef *asset_a_hard_ref() const {
return GetStruct<const Bigfoot::Flat::AssetAHardRef *>(VT_ASSET_A_HARD_REF);
}
template <bool B = false>
bool Verify(::flatbuffers::VerifierTemplate<B> &verifier) const {
return VerifyTableStart(verifier) &&
VerifyOffset(verifier, VT_ASSET_HEADER) &&
verifier.VerifyTable(asset_header()) &&
VerifyField<Bigfoot::Flat::AssetAHardRef>(verifier, VT_ASSET_A_HARD_REF, 1) &&
verifier.EndTable();
}
AssetBT *UnPack(const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
void UnPackTo(AssetBT *_o, const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
static ::flatbuffers::Offset<AssetB> Pack(::flatbuffers::FlatBufferBuilder &_fbb, const AssetBT* _o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);
};
struct AssetBBuilder {
typedef AssetB Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_asset_header(::flatbuffers::Offset<Bigfoot::Flat::AssetHeader> asset_header) {
fbb_.AddOffset(AssetB::VT_ASSET_HEADER, asset_header);
}
void add_asset_a_hard_ref(const Bigfoot::Flat::AssetAHardRef *asset_a_hard_ref) {
fbb_.AddStruct(AssetB::VT_ASSET_A_HARD_REF, asset_a_hard_ref);
}
explicit AssetBBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<AssetB> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<AssetB>(end);
return o;
}
};
inline ::flatbuffers::Offset<AssetB> CreateAssetB(
::flatbuffers::FlatBufferBuilder &_fbb,
::flatbuffers::Offset<Bigfoot::Flat::AssetHeader> asset_header = 0,
const Bigfoot::Flat::AssetAHardRef *asset_a_hard_ref = nullptr) {
AssetBBuilder builder_(_fbb);
builder_.add_asset_a_hard_ref(asset_a_hard_ref);
builder_.add_asset_header(asset_header);
return builder_.Finish();
}
struct AssetB::Traits {
using type = AssetB;
static auto constexpr Create = CreateAssetB;
};
::flatbuffers::Offset<AssetB> CreateAssetB(::flatbuffers::FlatBufferBuilder &_fbb, const AssetBT *_o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);
inline AssetBT::AssetBT(const AssetBT &o)
: asset_header((o.asset_header) ? new Bigfoot::Flat::AssetHeaderT(*o.asset_header) : nullptr),
asset_a_hard_ref(o.asset_a_hard_ref) {
}
inline AssetBT &AssetBT::operator=(AssetBT o) FLATBUFFERS_NOEXCEPT {
std::swap(asset_header, o.asset_header);
std::swap(asset_a_hard_ref, o.asset_a_hard_ref);
return *this;
}
inline AssetBT *AssetB::UnPack(const ::flatbuffers::resolver_function_t *_resolver) const {
auto _o = std::make_unique<AssetBT>();
UnPackTo(_o.get(), _resolver);
return _o.release();
}
inline void AssetB::UnPackTo(AssetBT *_o, const ::flatbuffers::resolver_function_t *_resolver) const {
(void)_o;
(void)_resolver;
{ auto _e = asset_header(); if (_e) { if(_o->asset_header) { _e->UnPackTo(_o->asset_header.get(), _resolver); } else { _o->asset_header = eastl::unique_ptr<Bigfoot::Flat::AssetHeaderT>(_e->UnPack(_resolver)); } } else if (_o->asset_header) { _o->asset_header.reset(); } }
{ auto _e = asset_a_hard_ref(); if (_e) _o->asset_a_hard_ref = ::flatbuffers::UnPack(*_e); }
}
inline ::flatbuffers::Offset<AssetB> CreateAssetB(::flatbuffers::FlatBufferBuilder &_fbb, const AssetBT *_o, const ::flatbuffers::rehasher_function_t *_rehasher) {
return AssetB::Pack(_fbb, _o, _rehasher);
}
inline ::flatbuffers::Offset<AssetB> AssetB::Pack(::flatbuffers::FlatBufferBuilder &_fbb, const AssetBT* _o, const ::flatbuffers::rehasher_function_t *_rehasher) {
(void)_rehasher;
(void)_o;
struct _VectorArgs { ::flatbuffers::FlatBufferBuilder *__fbb; const AssetBT* __o; const ::flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
auto _asset_header = _o->asset_header ? CreateAssetHeader(_fbb, _o->asset_header.get(), _rehasher) : 0;
auto _asset_a_hard_ref = ::flatbuffers::Pack(_o->asset_a_hard_ref);
return Bigfoot::Flat::CreateAssetB(
_fbb,
_asset_header,
&_asset_a_hard_ref);
}
inline const ::flatbuffers::TypeTable *AssetBHardRefTypeTable() {
static const ::flatbuffers::TypeCode type_codes[] = {
{ ::flatbuffers::ET_SEQUENCE, 0, 0 }
};
static const ::flatbuffers::TypeFunction type_refs[] = {
Bigfoot::Flat::UUIDTypeTable
};
static const int64_t values[] = { 0, 16 };
static const char * const names[] = {
"uuid"
};
static const ::flatbuffers::TypeTable tt = {
::flatbuffers::ST_STRUCT, 1, type_codes, type_refs, nullptr, values, names
};
return &tt;
}
inline const ::flatbuffers::TypeTable *AssetBSoftRefTypeTable() {
static const ::flatbuffers::TypeCode type_codes[] = {
{ ::flatbuffers::ET_SEQUENCE, 0, 0 }
};
static const ::flatbuffers::TypeFunction type_refs[] = {
Bigfoot::Flat::UUIDTypeTable
};
static const int64_t values[] = { 0, 16 };
static const char * const names[] = {
"uuid"
};
static const ::flatbuffers::TypeTable tt = {
::flatbuffers::ST_STRUCT, 1, type_codes, type_refs, nullptr, values, names
};
return &tt;
}
inline const ::flatbuffers::TypeTable *AssetBTypeTable() {
static const ::flatbuffers::TypeCode type_codes[] = {
{ ::flatbuffers::ET_SEQUENCE, 0, 0 },
{ ::flatbuffers::ET_SEQUENCE, 0, 1 }
};
static const ::flatbuffers::TypeFunction type_refs[] = {
Bigfoot::Flat::AssetHeaderTypeTable,
Bigfoot::Flat::AssetAHardRefTypeTable
};
static const char * const names[] = {
"asset_header",
"asset_a_hard_ref"
};
static const ::flatbuffers::TypeTable tt = {
::flatbuffers::ST_TABLE, 2, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
inline const Bigfoot::Flat::AssetB *GetAssetB(const void *buf) {
return ::flatbuffers::GetRoot<Bigfoot::Flat::AssetB>(buf);
}
inline const Bigfoot::Flat::AssetB *GetSizePrefixedAssetB(const void *buf) {
return ::flatbuffers::GetSizePrefixedRoot<Bigfoot::Flat::AssetB>(buf);
}
template <bool B = false>
inline bool VerifyAssetBBuffer(
::flatbuffers::VerifierTemplate<B> &verifier) {
return verifier.template VerifyBuffer<Bigfoot::Flat::AssetB>(nullptr);
}
template <bool B = false>
inline bool VerifySizePrefixedAssetBBuffer(
::flatbuffers::VerifierTemplate<B> &verifier) {
return verifier.template VerifySizePrefixedBuffer<Bigfoot::Flat::AssetB>(nullptr);
}
inline void FinishAssetBBuffer(
::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Bigfoot::Flat::AssetB> root) {
fbb.Finish(root);
}
inline void FinishSizePrefixedAssetBBuffer(
::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Bigfoot::Flat::AssetB> root) {
fbb.FinishSizePrefixed(root);
}
inline eastl::unique_ptr<Bigfoot::Flat::AssetBT> UnPackAssetB(
const void *buf,
const ::flatbuffers::resolver_function_t *res = nullptr) {
return eastl::unique_ptr<Bigfoot::Flat::AssetBT>(GetAssetB(buf)->UnPack(res));
}
inline eastl::unique_ptr<Bigfoot::Flat::AssetBT> UnPackSizePrefixedAssetB(
const void *buf,
const ::flatbuffers::resolver_function_t *res = nullptr) {
return eastl::unique_ptr<Bigfoot::Flat::AssetBT>(GetSizePrefixedAssetB(buf)->UnPack(res));
}
} // namespace Flat
} // namespace Bigfoot
#endif // FLATBUFFERS_GENERATED_ASSETB_BIGFOOT_FLAT_H_

View File

@@ -10,5 +10,3 @@ bigfoot_create_package_tests(
"${BigfootDependencies}") "${BigfootDependencies}")
bigfoot_create_logger() bigfoot_create_logger()
bigfoot_setup_dependencies("Tests/Bigfoot")

View File

@@ -4,7 +4,7 @@
* \author Romain BOULLARD * \author Romain BOULLARD
* \date December 2025 * \date December 2025
*********************************************************************/ *********************************************************************/
#include <System/Time.hpp> #include <System/Time/Time.hpp>
#include <gtest/gtest.h> #include <gtest/gtest.h>

View File

@@ -7,5 +7,3 @@ set(BigfootDependencies
bigfoot_create_package_tests( bigfoot_create_package_tests(
"" ""
"${BigfootDependencies}") "${BigfootDependencies}")
bigfoot_setup_dependencies("Tests/Bigfoot")

32
CMake/CustomTargets.cmake Normal file
View File

@@ -0,0 +1,32 @@
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(BigfootCompileAndLinkFlags INTERFACE)
target_compile_options(BigfootCompileAndLinkFlags INTERFACE
$<$<CXX_COMPILER_ID:MSVC>:/W4 /WX>
$<$<CXX_COMPILER_ID:Clang,GNU>:-Wall -Wextra -Wpedantic -Werror>
$<$<AND:$<BOOL:${COVERAGE}>,$<CXX_COMPILER_ID:Clang>>:-fprofile-instr-generate -fcoverage-mapping>
)
target_link_options(BigfootCompileAndLinkFlags INTERFACE
$<$<AND:$<BOOL:${COVERAGE}>,$<CXX_COMPILER_ID:Clang>>:-fprofile-instr-generate>
)
target_compile_definitions(BigfootCompileAndLinkFlags INTERFACE
$<$<PLATFORM_ID:Windows>:NOMINMAX>
$<$<PLATFORM_ID:Windows>:WIN32_LEAN_AND_MEAN>
$<$<PLATFORM_ID:Windows>:BIGFOOT_WINDOWS>
$<$<PLATFORM_ID:Linux>:BIGFOOT_LINUX>
$<$<CONFIG:Release>:BIGFOOT_OPTIMIZED>
$<$<CONFIG:Debug,RelWithDebInfo>:BIGFOOT_NOT_OPTIMIZED>)

View File

@@ -7,7 +7,11 @@ endif()
find_package(EASTL REQUIRED) find_package(EASTL REQUIRED)
find_package(unordered_dense REQUIRED) find_package(unordered_dense REQUIRED)
find_package(mimalloc REQUIRED) if(${ASAN})
find_package(mimalloc-asan REQUIRED)
else()
find_package(mimalloc REQUIRED)
endif()
find_package(stduuid REQUIRED) find_package(stduuid REQUIRED)
find_package(SQLite3 REQUIRED) find_package(SQLite3 REQUIRED)
find_package(CLI11 REQUIRED) find_package(CLI11 REQUIRED)

View File

@@ -1,69 +1,110 @@
function(bigfoot_create_package_lib PackagePublicDependencies PackagePrivateDependencies PackageBigfootPublicDependencies PackageBigfootPrivateDependencies ParentFolder) function(bigfoot_create_package_lib PackagePublicDependencies PackagePrivateDependencies PackageBigfootPublicDependencies PackageBigfootPrivateDependencies ParentFolder)
add_library(${PROJECT_NAME} STATIC) add_library(${PROJECT_NAME} STATIC)
set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/Include) target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_20)
bigfoot_compile_flatbuffers("${PackageBigfootPublicDependencies}") bigfoot_compile_flatbuffers("${PackageBigfootPublicDependencies}")
# collect sources (reconfigure when files are added/removed) file(GLOB_RECURSE _SOURCES
file(GLOB_RECURSE _BF_SOURCES CONFIGURE_DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
)
file(GLOB_RECURSE _HEADERS
CONFIGURE_DEPENDS CONFIGURE_DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_SOURCE_DIR}/*.h
${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp
)
file(GLOB_RECURSE _OTHERS
CONFIGURE_DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/*.hpp.in ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp.in
${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/*.fbs ${CMAKE_CURRENT_SOURCE_DIR}/*.fbs
${CMAKE_CURRENT_SOURCE_DIR}/*.sql ${CMAKE_CURRENT_SOURCE_DIR}/*.sql
) )
target_sources(${PROJECT_NAME} target_sources(${PROJECT_NAME}
PRIVATE PRIVATE
${_BF_SOURCES} ${_SOURCES}
${_OTHERS}
PUBLIC
FILE_SET HEADERS
BASE_DIRS
${CMAKE_CURRENT_SOURCE_DIR}/Include
FILES
${_HEADERS}
) )
target_link_libraries(${PROJECT_NAME} PUBLIC unordered_dense::unordered_dense EASTL::EASTL flatbuffers::flatbuffers rapidhash::rapidhash) target_link_libraries(${PROJECT_NAME}
target_link_libraries(${PROJECT_NAME} PRIVATE ${CMAKE_DL_LIBS}) PRIVATE
BigfootCompileAndLinkFlags
PUBLIC
unordered_dense::unordered_dense
EASTL::EASTL
flatbuffers::flatbuffers
rapidhash::rapidhash
target_link_libraries(${PROJECT_NAME} PUBLIC ${PackagePublicDependencies}) ${PackagePublicDependencies}
target_link_libraries(${PROJECT_NAME} PRIVATE ${PackagePrivateDependencies}) $<LINK_LIBRARY:WHOLE_ARCHIVE,${PackageBigfootPublicDependencies}>
target_link_libraries(${PROJECT_NAME} PUBLIC $<LINK_LIBRARY:WHOLE_ARCHIVE,${PackageBigfootPublicDependencies}>)
target_link_libraries(${PROJECT_NAME} PRIVATE $<LINK_LIBRARY:WHOLE_ARCHIVE,${PackageBigfootPrivateDependencies}>)
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX Src FILES ${_BF_SOURCES}) PRIVATE
${PackagePrivateDependencies}
$<LINK_LIBRARY:WHOLE_ARCHIVE,${PackageBigfootPrivateDependencies}>)
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX Src FILES ${_SOURCES} ${_HEADERS} ${_OTHERS})
set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER Bigfoot/${ParentFolder}) set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER Bigfoot/${ParentFolder})
endfunction() endfunction()
function(bigfoot_create_package_tests ParentFolder BigfootDependencies) function(bigfoot_create_package_tests ParentFolder BigfootDependencies)
add_executable(${PROJECT_NAME}) add_executable(${PROJECT_NAME})
set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX)
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_20)
bigfoot_compile_flatbuffers("${BigfootDependencies}") bigfoot_compile_flatbuffers("${BigfootDependencies}")
file(GLOB_RECURSE _BF_TEST_SOURCES file(GLOB_RECURSE _SOURCES
CONFIGURE_DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
)
file(GLOB_RECURSE _HEADERS
CONFIGURE_DEPENDS CONFIGURE_DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_SOURCE_DIR}/*.h
${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp
)
file(GLOB_RECURSE _OTHERS
CONFIGURE_DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/*.hpp.in ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp.in
${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/*.fbs ${CMAKE_CURRENT_SOURCE_DIR}/*.fbs
${CMAKE_CURRENT_SOURCE_DIR}/*.sql
) )
target_sources(${PROJECT_NAME} target_sources(${PROJECT_NAME}
PRIVATE PRIVATE
${_BF_TEST_SOURCES} ${_SOURCES}
${_OTHERS}
PUBLIC
FILE_SET HEADERS
BASE_DIRS
${CMAKE_CURRENT_SOURCE_DIR}/Include
FILES
${_HEADERS}
) )
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/Include) target_link_libraries(${PROJECT_NAME}
PRIVATE
BigfootCompileAndLinkFlags
target_link_libraries(${PROJECT_NAME} PRIVATE $<LINK_LIBRARY:WHOLE_ARCHIVE,${PackageName}>) PRIVATE
target_link_libraries(${PROJECT_NAME} PRIVATE gtest::gtest) $<LINK_LIBRARY:WHOLE_ARCHIVE,${PackageName}>
gtest::gtest)
include(GoogleTest) include(GoogleTest)
gtest_discover_tests(${PROJECT_NAME} XML_OUTPUT_DIR ${CMAKE_BINARY_DIR}/TestResults/) gtest_discover_tests(${PROJECT_NAME} XML_OUTPUT_DIR ${CMAKE_BINARY_DIR}/TestResults/)
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX Src/ FILES ${_BF_TEST_SOURCES}) source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX Src/ FILES ${_SOURCES} ${_HEADERS} ${_OTHERS})
set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER Tests/Bigfoot/${ParentFolder}) set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER Tests/Bigfoot/${ParentFolder})
@@ -89,5 +130,4 @@ function(bigfoot_create_package_tests ParentFolder BigfootDependencies)
add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}Fixture) add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}Fixture)
set_target_properties(${PROJECT_NAME}Fixture PROPERTIES FOLDER UtilityTargets/Tests/Bigfoot/${ParentFolder}) set_target_properties(${PROJECT_NAME}Fixture PROPERTIES FOLDER UtilityTargets/Tests/Bigfoot/${ParentFolder})
endfunction() endfunction()

View File

@@ -38,15 +38,22 @@ endfunction()
function(bigfoot_compile_flatbuffers BigfootDependencies) function(bigfoot_compile_flatbuffers BigfootDependencies)
set(IncludeFolders "") set(IncludeFolders "")
get_target_property(CurrentTargetDependencyInclude ${PROJECT_NAME} INCLUDE_DIRECTORIES) list(APPEND IncludeFolders ${CMAKE_CURRENT_SOURCE_DIR}/Include)
if(CurrentTargetDependencyInclude)
list(APPEND IncludeFolders ${CurrentTargetDependencyInclude})
endif()
foreach(Dependency IN LISTS BigfootDependencies) foreach(Dependency IN LISTS BigfootDependencies)
get_target_property(DependencyInclude ${Dependency} INCLUDE_DIRECTORIES) if(TARGET ${Dependency})
if(DependencyInclude) get_target_property(DependencyIncludeDirs ${Dependency} INTERFACE_INCLUDE_DIRECTORIES)
list(APPEND IncludeFolders ${DependencyInclude}) if(DependencyIncludeDirs)
foreach(Dir IN LISTS DependencyIncludeDirs)
# Strip $<BUILD_INTERFACE:...> generator expression
if(Dir MATCHES "^\\$<BUILD_INTERFACE:(.+)>$")
list(APPEND IncludeFolders "${CMAKE_MATCH_1}")
elseif(NOT Dir MATCHES "^\\$<")
# Pass through plain paths, skip other generator expressions
list(APPEND IncludeFolders "${Dir}")
endif()
endforeach()
endif()
endif() endif()
endforeach() endforeach()
@@ -58,7 +65,7 @@ function(bigfoot_compile_flatbuffers BigfootDependencies)
file(GLOB_RECURSE SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/Include/*.fbs") file(GLOB_RECURSE SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/Include/*.fbs")
foreach(SOURCE_FILE IN LISTS SOURCES) foreach(SOURCE_FILE IN LISTS SOURCES)
get_filename_component(SOURCE_DIRECTORY ${SOURCE_FILE} DIRECTORY) get_filename_component(SOURCE_DIRECTORY ${SOURCE_FILE} DIRECTORY)
get_filename_component(SOURCE_NAME_WE ${SOURCE_FILE} NAME_WE)
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${SOURCE_FILE}) set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${SOURCE_FILE})
execute_process( execute_process(
@@ -82,64 +89,14 @@ function(bigfoot_compile_flatbuffers BigfootDependencies)
-o "${SOURCE_DIRECTORY}" -o "${SOURCE_DIRECTORY}"
"${SOURCE_FILE}" "${SOURCE_FILE}"
) )
execute_process(
COMMAND ${BIN2CPP_EXECUTABLE}
--input "${SOURCE_FILE}"
--output "${SOURCE_DIRECTORY}/${SOURCE_NAME_WE}.fbs_generated.hpp"
--arrayType eastl::array
--arrayInclude <EASTL/array.h>
--namespace Bigfoot
)
endforeach() endforeach()
endfunction() endfunction()
function(bigfoot_setup_dependencies ParentFolder)
set(CONAN_DEPLOYER_DIR "${CMAKE_SOURCE_DIR}/build/full_deploy/host")
if(EXISTS ${CONAN_DEPLOYER_DIR})
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
file(GLOB_RECURSE SHARED_BINARIES ${CONAN_DEPLOYER_DIR}/*mimalloc*.dll)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
file(GLOB_RECURSE SHARED_BINARIES ${CONAN_DEPLOYER_DIR}/*mimalloc*.so*)
endif()
if(${IS_MULTI_CONFIG})
foreach(CONFIG ${CMAKE_CONFIGURATION_TYPES})
foreach(file ${SHARED_BINARIES})
if(file MATCHES "/${CONFIG}/")
list(APPEND SHARED_BINARIES_${CONFIG} ${file})
endif()
endforeach()
endforeach()
add_custom_target(${PROJECT_NAME}CopySharedBinaries
ALL DEPENDS SHARED_BINARIES
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:${PROJECT_NAME}>
COMMAND ${CMAKE_COMMAND} -E $<IF:$<CONFIG:Debug>,copy_if_different,true> ${SHARED_BINARIES_Debug} $<TARGET_FILE_DIR:${PROJECT_NAME}>
COMMAND ${CMAKE_COMMAND} -E $<IF:$<CONFIG:Release>,copy_if_different,true> ${SHARED_BINARIES_Release} $<TARGET_FILE_DIR:${PROJECT_NAME}>
COMMAND ${CMAKE_COMMAND} -E $<IF:$<CONFIG:RelWithDebInfo>,copy_if_different,true> ${SHARED_BINARIES_RelWithDebInfo} $<TARGET_FILE_DIR:${PROJECT_NAME}>
COMMENT "Copy shared binaries for ${PROJECT_NAME}"
)
add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}CopySharedBinaries)
set_target_properties(${PROJECT_NAME}CopySharedBinaries PROPERTIES FOLDER UtilityTargets/${ParentFolder})
else()
foreach(file ${SHARED_BINARIES})
if(file MATCHES "/${CMAKE_BUILD_TYPE}/")
list(APPEND SHARED_BINARIES_${CMAKE_BUILD_TYPE} ${file})
endif()
endforeach()
add_custom_target(${PROJECT_NAME}CopySharedBinaries ALL
DEPENDS ${SHARED_BINARIES_${CMAKE_BUILD_TYPE}}
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:${PROJECT_NAME}>
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SHARED_BINARIES_${CMAKE_BUILD_TYPE}} $<TARGET_FILE_DIR:${PROJECT_NAME}>
COMMENT "Copy shared binaries for ${PROJECT_NAME}"
)
add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}CopySharedBinaries)
set_target_properties(${PROJECT_NAME}CopySharedBinaries PROPERTIES FOLDER UtilityTargets/${ParentFolder})
endif()
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
add_custom_target(${PROJECT_NAME}PatchMinject ALL
COMMAND ${MINJECT_EXECUTABLE} -i -f $<TARGET_FILE:${PROJECT_NAME}>
COMMENT "Patching ${PROJECT_NAME} to ensure mimalloc dynamic override"
)
add_dependencies(${PROJECT_NAME}PatchMinject ${PROJECT_NAME})
set_target_properties(${PROJECT_NAME}PatchMinject PROPERTIES FOLDER "UtilityTargets/${ParentFolder}")
endif()
endfunction()

View File

@@ -1,20 +1,17 @@
cmake_minimum_required(VERSION 3.24) cmake_minimum_required(VERSION 3.26)
string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
project(Bigfoot VERSION 0.1.0 project(Bigfoot VERSION 0.1.0
DESCRIPTION "The Bigfoot engine" DESCRIPTION "The Bigfoot engine"
LANGUAGES CXX) LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
set(CMAKE_CONFIGURATION_TYPES "Release;RelWithDebInfo;Debug" CACHE STRING "" FORCE) set(CMAKE_CONFIGURATION_TYPES "Release;RelWithDebInfo;Debug" CACHE STRING "" FORCE)
option(BUILD_TESTS OFF) option(BUILD_TESTS OFF)
option(ASAN OFF)
option(COVERAGE OFF)
option(TRACY ON) option(TRACY ON)
option(BUILD_TOOLS ON) option(BUILD_TOOLS ON)
option(VULKAN ON) option(VULKAN ON)
@@ -22,6 +19,7 @@ option(BUILD_BENCHMARKS OFF)
set(AUTO_GENERATED_COMMENT "// AUTO-GENERATED DO NOT TOUCH") set(AUTO_GENERATED_COMMENT "// AUTO-GENERATED DO NOT TOUCH")
include(${CMAKE_SOURCE_DIR}/CMake/CustomTargets.cmake)
include(${CMAKE_SOURCE_DIR}/CMake/FindDependencies.cmake) include(${CMAKE_SOURCE_DIR}/CMake/FindDependencies.cmake)
include(${CMAKE_SOURCE_DIR}/CMake/Utils.cmake) include(${CMAKE_SOURCE_DIR}/CMake/Utils.cmake)
include(${CMAKE_SOURCE_DIR}/CMake/Package.cmake) include(${CMAKE_SOURCE_DIR}/CMake/Package.cmake)
@@ -29,18 +27,11 @@ include(${CMAKE_SOURCE_DIR}/CMake/Package.cmake)
find_program(FLATBUFFERS_FLATC_EXECUTABLE NAMES flatc) find_program(FLATBUFFERS_FLATC_EXECUTABLE NAMES flatc)
find_program(SQLITE3_EXECUTABLE NAMES sqlite3) find_program(SQLITE3_EXECUTABLE NAMES sqlite3)
find_program(MINJECT_EXECUTABLE NAMES minject) find_program(MINJECT_EXECUTABLE NAMES minject)
find_program(BIN2CPP_EXECUTABLE NAMES Bin2CPP)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_OPTIMIZE_DEPENDENCIES 1) set(CMAKE_OPTIMIZE_DEPENDENCIES 1)
add_compile_definitions(
$<$<PLATFORM_ID:Windows>:NOMINMAX>
$<$<PLATFORM_ID:Windows>:WIN32_LEAN_AND_MEAN>
$<$<PLATFORM_ID:Windows>:BIGFOOT_WINDOWS>
$<$<PLATFORM_ID:Linux>:BIGFOOT_LINUX>
$<$<CONFIG:Release>:BIGFOOT_OPTIMIZED>
$<$<CONFIG:Debug,RelWithDebInfo>:BIGFOOT_NOT_OPTIMIZED>)
if(BUILD_TESTS) if(BUILD_TESTS)
enable_testing() enable_testing()
endif() endif()

32
ConanProfiles/clang Normal file
View File

@@ -0,0 +1,32 @@
[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: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", "-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]
[options]
Bin2CPP/*:build_tests=True

View File

@@ -0,0 +1,30 @@
[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
Bin2CPP/*:coverage=True

29
ConanProfiles/clangd Normal file
View File

@@ -0,0 +1,29 @@
[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

33
ConanProfiles/clangd_asan Normal file
View File

@@ -0,0 +1,33 @@
[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", "-fsanitize=address,undefined,leak"]
tools.build:sharedlinkflags=["-fuse-ld=mold", "-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"]
tools.cmake.cmaketoolchain:generator=Ninja
tools.build:compiler_executables={"c": "clang", "cpp": "clang++"}
[tool_requires]
!cmake/*: cmake/[>=4.2]
[options]
Bin2CPP/*:asan=True
Bin2CPP/*:build_tests=True

24
ConanProfiles/msvc Normal file
View File

@@ -0,0 +1,24 @@
[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}}/msvc_ccache.cmake
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:cxxflags=["/Zc:preprocessor", "/permissive-", "/Zc:__cplusplus", "/Zc:enumTypes", "/Zc:templateScope", "/Zc:throwingNew"]
[tool_requires]
!cmake/*: cmake/[>=4.2]
[options]
Bin2CPP/*:build_tests=True

View File

@@ -0,0 +1,19 @@
# 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()

20
ConanProfiles/msvcd Normal file
View File

@@ -0,0 +1,20 @@
[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: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/*:build_tests=True

25
ConanProfiles/msvcd_asan Normal file
View File

@@ -0,0 +1,25 @@
[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

View File

@@ -11,11 +11,9 @@ The goal is to build a multiplatform, API agnostic, 3D engine. Since this is a l
### Requirements ### Requirements
1. [ConanV2](https://conan.io/) 1. [ConanV2](https://conan.io/)
2. [SQLite3 tools](https://www.sqlite.org/download.html) available from the command line
3. [Vulkan SDK](https://www.lunarg.com/vulkan-sdk/) (If you target Vulkan) 3. [Vulkan SDK](https://www.lunarg.com/vulkan-sdk/) (If you target Vulkan)
4. [CMake](https://cmake.org/) 4. [CMake](https://cmake.org/)
5. [Git](https://git-scm.com/) 5. [Git](https://git-scm.com/)
6. [RenderDoc](https://renderdoc.org/) (If you want to use the integrated RenderDoc API)
7. [Python3](https://www.python.org/) 7. [Python3](https://www.python.org/)
#### Additional requirements for Linux #### Additional requirements for Linux
@@ -50,16 +48,14 @@ You can customize these scripts to opt-out of some Bigfoot features
'Just' modify these lines to disable them (I promise to one day modify the script to do it from the command line) 'Just' modify these lines to disable them (I promise to one day modify the script to do it from the command line)
``` ```
bigfoot/*:unity_build=True -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True -o bigfoot/*:render_doc=True -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True
``` ```
1. unity_build: Enable/Disable [unity builds](https://cmake.org/cmake/help/latest/variable/CMAKE_UNITY_BUILD.html) feature (will slow down compilation times) 1. build_tests: Enable/Disable the tests
2. build_tests: Enable/Disable the tests 2. tracy: Enable/Disable profiling using [Tracy](https://github.com/wolfpld/tracy)
3. tracy: Enable/Disable profiling using [Tracy](https://github.com/wolfpld/tracy) 3. build_tools: Enable/Disable the tools (I'd absolutely recommand not disabling this)
4. build_tools: Enable/Disable the tools (I'd absolutely recommand not disabling this if you are building benchamrks or tests) 4. vulkan: Enable/Disable Vulkan renderer (No point disabling it, since for now only Vulkan is available in Bigfoot)
5. vulkan: Enable/Disable Vulkan renderer (No point disabling it, since for now only Vulkan is available in Bigfoot) 5. build_benchmarks: Enable/Disable the benchmarks
6. build_benchmarks: Enable/Disable the benchmarks
7. render_doc: Enable/Disable the possitbility to use [RenderDoc](https://renderdoc.org/) API to capture from code
### Generating Bigfoot ### Generating Bigfoot

View File

@@ -18,6 +18,8 @@ class Bigfoot(ConanFile):
options = { options = {
"shared": [True, False], "shared": [True, False],
"fPIC": [True, False], "fPIC": [True, False],
"asan": [True, False],
"coverage": [True, False],
"build_tests": [True, False], "build_tests": [True, False],
"tracy": [True, False], "tracy": [True, False],
"build_tools": [True, False], "build_tools": [True, False],
@@ -27,6 +29,8 @@ class Bigfoot(ConanFile):
default_options = { default_options = {
"shared": False, "shared": False,
"fPIC": True, "fPIC": True,
"asan": False,
"coverage": False,
"build_tests": False, "build_tests": False,
"tracy": False, "tracy": False,
"build_tools": True, "build_tools": True,
@@ -43,10 +47,8 @@ class Bigfoot(ConanFile):
if self.settings.os == "Windows": if self.settings.os == "Windows":
del self.options.fPIC del self.options.fPIC
self.options['mimalloc'].override = True if(self.options.asan):
self.options['mimalloc'].shared = True self.options["mimalloc"].asan = True
if(self.settings.os == "Windows"):
self.options["mimalloc"].win_redirect = True
self.options['stduuid'].with_cxx20_span = True self.options['stduuid'].with_cxx20_span = True
self.options['flatbuffers'].header_only = True self.options['flatbuffers'].header_only = True
@@ -59,15 +61,17 @@ class Bigfoot(ConanFile):
if(self.options.build_benchmarks): if(self.options.build_benchmarks):
self.options["benchmark"].enable_exceptions = False self.options["benchmark"].enable_exceptions = False
self.options["benchmark"].enable_lto = True
def build_requirements(self):
self.tool_requires("bin2cpp/1.0.0@bigfootdev/main")
def requirements(self): def requirements(self):
self.requires("eastl/3.27.01@bigfootdev/main", transitive_headers=True) self.requires("eastl/3.27.01@bigfootdev/main", transitive_headers=True)
self.requires("unordered_dense/4.8.1@bigfootdev/main", transitive_headers=True) self.requires("unordered_dense/4.8.1@bigfootdev/main", transitive_headers=True)
self.requires("mimalloc/3.1.5@bigfootdev/main", transitive_headers=True) self.requires("mimalloc/3.2.8@bigfootdev/main", transitive_headers=True)
self.requires("stduuid/1.2.3", transitive_headers=True) self.requires("stduuid/1.2.3@bigfootdev/main", transitive_headers=True)
self.requires("sqlite3/3.51.0@bigfootdev/main", transitive_headers=True) self.requires("sqlite3/3.51.2@bigfootdev/main", transitive_headers=True)
self.requires("cli11/2.6.0") self.requires("cli11/2.6.1@bigfootdev/main")
self.requires("rapidhash/3.0@bigfootdev/main", transitive_headers=True) self.requires("rapidhash/3.0@bigfootdev/main", transitive_headers=True)
self.requires("effolkronium-random/1.5.0", transitive_headers=True) self.requires("effolkronium-random/1.5.0", transitive_headers=True)
self.requires("flatbuffers/25.12.19@bigfootdev/main", transitive_headers=True) self.requires("flatbuffers/25.12.19@bigfootdev/main", transitive_headers=True)
@@ -77,10 +81,10 @@ class Bigfoot(ConanFile):
self.requires("cpptrace/1.0.4", transitive_headers=True) self.requires("cpptrace/1.0.4", transitive_headers=True)
if(self.options.tracy): if(self.options.tracy):
self.requires("tracy/0.12.2", transitive_headers=True) self.requires("tracy/0.13.1", transitive_headers=True)
self.requires("glm/1.0.1", transitive_headers=True) self.requires("glm/1.0.1", transitive_headers=True)
self.requires("lodepng/cci.20250727@bigfootdev/main", transitive_headers=True) self.requires("lodepng/cci.20260210@bigfootdev/main", transitive_headers=True)
self.requires("imgui/1.92.5-docking", transitive_headers=True) self.requires("imgui/1.92.5-docking", transitive_headers=True)
if(self.options.vulkan): if(self.options.vulkan):
@@ -100,7 +104,7 @@ class Bigfoot(ConanFile):
self.requires("spirv-cross/1.4.313.0") self.requires("spirv-cross/1.4.313.0")
self.requires("shaderc/2025.3@bigfootdev/main") self.requires("shaderc/2025.3@bigfootdev/main")
self.requires("stb/cci.20240531", override=True) self.requires("stb/cci.20240531", override=True)
self.requires("assimp/6.0.2") self.requires("assimp/6.0.4@bigfootdev/main")
self.requires("meshoptimizer/1.0@bigfootdev/main") self.requires("meshoptimizer/1.0@bigfootdev/main")
self.requires("libsquish/1.15") self.requires("libsquish/1.15")
@@ -110,6 +114,8 @@ class Bigfoot(ConanFile):
def generate(self): def generate(self):
tc = CMakeToolchain(self) tc = CMakeToolchain(self)
tc.variables["ASAN"] = self.options.asan
tc.variables["COVERAGE"] = self.options.coverage
tc.variables["BUILD_TESTS"] = self.options.build_tests tc.variables["BUILD_TESTS"] = self.options.build_tests
tc.variables["TRACY"] = self.options.tracy tc.variables["TRACY"] = self.options.tracy
tc.variables["BUILD_TOOLS"] = self.options.build_tools tc.variables["BUILD_TOOLS"] = self.options.build_tools

View File

@@ -22,12 +22,9 @@ if "%~1"=="force" (
REM Add the remote REM Add the remote
conan remote add bigfootpackages https://conan.romainboullard.com/artifactory/api/conan/BigfootPackages conan remote add bigfootpackages https://conan.romainboullard.com/artifactory/api/conan/BigfootPackages
REM Install the conan configuration
conan config install https://git.romainboullard.com/BigfootDev/ConanProfiles.git
REM Install dependencies with the specified build option REM Install dependencies with the specified build option
conan install . --deployer=full_deploy --remote=bigfootpackages -pr:h=msvc -pr:b=msvc %build_option% -of build -s build_type=Release -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/msvc -pr:b=./ConanProfiles/msvc %build_option% -of build -s build_type=Release -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True
conan install . --deployer=full_deploy --remote=bigfootpackages -pr:h=msvcd -pr:b=msvcd %build_option% -of build -s build_type=RelWithDebInfo -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/msvcd -pr:b=./ConanProfiles/msvcd %build_option% -of build -s build_type=RelWithDebInfo -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True
conan install . --deployer=full_deploy --remote=bigfootpackages -pr:h=msvcd -pr:b=msvcd %build_option% -of build -s build_type=Debug -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/msvcd -pr:b=./ConanProfiles/msvcd %build_option% -of build -s build_type=Debug -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True
endlocal endlocal

View File

@@ -9,18 +9,15 @@ fi
# Add the remote # Add the remote
conan remote add bigfootpackages https://conan.romainboullard.com/artifactory/api/conan/BigfootPackages conan remote add bigfootpackages https://conan.romainboullard.com/artifactory/api/conan/BigfootPackages
# Install the conan configuration
conan config install https://git.romainboullard.com/BigfootDev/ConanProfiles.git
# Set the build option based on the argument # Set the build option based on the argument
if [ "$1" == "force" ]; then if [ "$1" == "force" ]; then
conan install . --deployer=full_deploy --remote=bigfootpackages -pr:h=clang -pr:b=clang --build='*' -of build -s build_type=Release -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/clang -pr:b=./ConanProfiles/clang --build='*' -of build -s build_type=Release -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True
conan install . --deployer=full_deploy --remote=bigfootpackages -pr:h=clangd -pr:b=clangd --build='*' -of build -s build_type=RelWithDebInfo -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/clangd -pr:b=./ConanProfiles/clangd --build='*' -of build -s build_type=RelWithDebInfo -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True
conan install . --deployer=full_deploy --remote=bigfootpackages -pr:h=clangd -pr:b=clangd --build='*' -of build -s build_type=Debug -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/clangd -pr:b=./ConanProfiles/clangd --build='*' -of build -s build_type=Debug -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True
elif [ "$1" == "missing" ]; then elif [ "$1" == "missing" ]; then
conan install . --deployer=full_deploy --remote=bigfootpackages -pr:h=clang -pr:b=clang --build=missing -of build -s build_type=Release -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/clang -pr:b=./ConanProfiles/clang --build=missing -of build -s build_type=Release -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True
conan install . --deployer=full_deploy --remote=bigfootpackages -pr:h=clangd -pr:b=clangd --build=missing -of build -s build_type=RelWithDebInfo -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/clangd -pr:b=./ConanProfiles/clangd --build=missing -of build -s build_type=RelWithDebInfo -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True
conan install . --deployer=full_deploy --remote=bigfootpackages -pr:h=clangd -pr:b=clangd --build=missing -of build -s build_type=Debug -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/clangd -pr:b=./ConanProfiles/clangd --build=missing -of build -s build_type=Debug -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True
else else
echo "Invalid argument: $1" echo "Invalid argument: $1"
echo "Usage: $0 [force|missing]" echo "Usage: $0 [force|missing]"

14
sonar-project.properties Normal file
View File

@@ -0,0 +1,14 @@
sonar.projectKey=Bigfoot
sonar.projectVersion=0.1.0
sonar.sourceEncoding=UTF-8
sonar.sources=Bigfoot/Sources
sonar.tests=Bigfoot/Tests
sonar.cxx.file.suffixes=.hpp,.cpp,.h
sonar.cxx.clangtidy.reportPaths=tidy_result.txt
sonar.cxx.infer.reportPaths=infer-out/report.json
sonar.cxx.jsonCompilationDatabase.analyzeOnlyContainedFiles=True