from conan import ConanFile from conan.tools.cmake import CMakeToolchain, CMake, cmake_layout from conan.tools.files import copy, load import os required_conan_version = ">=1.33.0" class Bigfoot(ConanFile): name = "bigfoot" homepage = "https://git.romainboullard.com/BigfootDev/Bigfoot" description = "Bigfoot is a 3D game engine written in C++" topics = ("game engine", "3d") license = "MIT" def set_version(self): self.version = load(self, "VERSION").strip() # Binary configuration settings = "os", "compiler", "build_type", "arch" options = { "shared": [True, False], "fPIC": [True, False], "asan": [True, False], "coverage": [True, False], "build_tests": [True, False], "build_benchmarks": [True, False], "tracy": [True, False], "vulkan": [True, False], "toolmode": [True, False] } default_options = { "shared": False, "fPIC": True, "asan": False, "coverage": False, "build_tests": False, "build_benchmarks": False, "tracy": False, "vulkan": True, "toolmode": True, } generators = "CMakeDeps" def layout(self): cmake_layout(self) def configure(self): if self.settings.os == "Windows": del self.options.fPIC if(self.options.asan): self.options["mimalloc"].asan = True self.options['stduuid'].with_cxx20_span = True self.options['flatbuffers'].header_only = True if(self.options.tracy): self.options["tracy"].on_demand = True if(self.options.vulkan): self.options["spirv-cross"].exceptions = False if(self.options.build_tests): # Bigfoot only uses SDL for windowing/Vulkan surface creation, so every other # subsystem (audio, input devices, sensors, SDL's own 2D/GPU renderers, etc.) is # unneeded; "video" and "vulkan" are the only subsystems left at their default True. self.options["sdl"].audio = False self.options["sdl"].joystick = False self.options["sdl"].haptic = False self.options["sdl"].hidapi = False self.options["sdl"].power = False self.options["sdl"].sensor = False self.options["sdl"].camera = False self.options["sdl"].gpu = False self.options["sdl"].render = False self.options["sdl"].dialog = False self.options["sdl"].tray = False self.options["sdl"].opengl = False self.options["sdl"].opengles = False if(self.settings.os == "Linux"): self.options["sdl"].x11 = False self.options["sdl"].dbus = False self.options["sdl"].libudev = False if(self.settings.os == "Windows"): self.options["sdl"].directx = False def build_requirements(self): self.tool_requires("bin2cpp/1.0.0@bigfootdev/main") def requirements(self): self.requires("eastl/3.27.01@bigfootdev/main", transitive_headers=True) self.requires("eastdc/25082026@bigfootdev/main", transitive_headers=True) self.requires("unordered_dense/4.9.2", transitive_headers=True) self.requires("mimalloc/3.5.1@bigfootdev/main", transitive_headers=True) self.requires("stduuid/1.2.3@bigfootdev/main", transitive_headers=True) self.requires("sqlite3/3.53.3@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("fmt/12.2.0", transitive_headers=True) self.requires("flatbuffers/25.12.19-2026-02-06-03fffb2-bigfoot@bigfootdev/main", transitive_headers=True) self.requires("glm/1.0.3", transitive_headers=True) self.requires("lodepng/cci.20260210@bigfootdev/main", transitive_headers=True) self.requires("imgui/1.92.9b-docking", transitive_headers=True) self.requires("lyra/1.8.0", transitive_headers=True) if(self.settings.build_type == "RelWithDebInfo" or self.settings.build_type == "Debug"): self.requires("quill/12.1.0", transitive_headers=True) if(self.options.tracy): self.requires("tracy/0.13.1", transitive_headers=True) if(self.options.vulkan): self.requires("vulkan-headers/1.4.350.0") self.requires("vulkan-memory-allocator/3.3.0") if(self.options.build_tests): self.test_requires("gtest/1.18.0") self.test_requires("pixelmatch-cpp17/1.0.3@bigfootdev/main") self.test_requires("sdl/3.4.14") if(self.options.build_benchmarks): self.requires("benchmark/1.9.5") def generate(self): tc = CMakeToolchain(self) tc.presets_prefix = "bigfoot-tool" if self.options.toolmode else "bigfoot-game" tc.variables["ASAN"] = self.options.asan tc.variables["COVERAGE"] = self.options.coverage tc.variables["BUILD_TESTS"] = self.options.build_tests tc.variables["BUILD_BENCHMARKS"] = self.options.build_benchmarks tc.variables["TRACY"] = self.options.tracy tc.variables["VULKAN"] = self.options.vulkan tc.variables["TOOLMODE"] = self.options.toolmode tc.generate() def build(self): cmake = CMake(self) cmake.configure() cmake.build()