From a78a17fddee16279f68201bf364539b134846265 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Wed, 7 Oct 2026 13:24:28 +0200 Subject: [PATCH] Tweaked the action --- .gitea/workflows/build_linux.yaml | 116 +++++------------------ CMakeLists.txt | 71 ++++++++++---- flake.nix | 148 +++++++++++++++++------------- 3 files changed, 157 insertions(+), 178 deletions(-) diff --git a/.gitea/workflows/build_linux.yaml b/.gitea/workflows/build_linux.yaml index 36c9cf4..274ca9a 100644 --- a/.gitea/workflows/build_linux.yaml +++ b/.gitea/workflows/build_linux.yaml @@ -12,66 +12,13 @@ on: jobs: build: runs-on: ubuntu-latest + container: git.alexdelcamp.fr/alexandre_1a/flake-actions:latest + steps: - name: Update apt run: sudo apt update - - name: Install dependencies - run: | - sudo apt install -y \ - cmake \ - ninja-build \ - libvulkan-memory-allocator-dev \ - libvulkan-volk-dev \ - pkg-config \ - g++ \ - libvulkan1 \ - glslang-tools \ - libglfw3-dev \ - libcli11-dev \ - libglm-dev \ - libpulse-dev \ - libwayland-dev \ - wayland-protocols \ - libxkbcommon-dev - - - name: Install Slang - run: | - SLANG_VERSION="2026.19" - - curl -fL \ - "https://github.com/shader-slang/slang/releases/download/v${SLANG_VERSION}/slang-${SLANG_VERSION}-linux-x86_64.tar.gz" \ - -o /tmp/slang.tar.gz - - sudo tar \ - -xzf /tmp/slang.tar.gz \ - -C /usr/local - - echo "Slang installed:" - ls -la /usr/local/bin/slangc - - - - name: Install Vulkan SDK - uses: humbletim/setup-vulkan-sdk@v1.2.1 - with: - vulkan-query-version: 1.4.335.0 - vulkan-components: Vulkan-Headers, Vulkan-Loader - vulkan-use-cache: true - - - - name: Check dependencies - run: | - cmake --version - ninja --version - g++ --version - - echo "glslang:" - glslangValidator --version - - echo "Slang:" - slangc -v - - name: Checkout uses: actions/checkout@v4 with: @@ -81,51 +28,30 @@ jobs: - name: Configure run: | - cmake \ - --preset release - - - name: Debug Vulkan headers - run: | - echo - echo "=== System Vulkan ===" - find /usr/include/vulkan -maxdepth 1 -type f \ - -name '*.h' -print | head -20 - - echo - echo "=== Header versions ===" - grep -R \ - -E 'VK_HEADER_VERSION(_COMPLETE)?' \ - bin/release/_deps 2>/dev/null | head -20 || true - - grep -E 'VK_HEADER_VERSION(_COMPLETE)?' \ - /usr/include/vulkan/vulkan_core.h - - - name: Check Vulkan versions - run: | - echo "System:" - grep -E 'VK_HEADER_VERSION|VK_HEADER_VERSION_COMPLETE' \ - /usr/include/vulkan/vulkan_core.h - - echo "enum helper:" - grep -E 'VK_HEADER_VERSION' \ - /usr/include/vulkan/vk_enum_string_helper.h || true + nix develop --command cmake -S . -B build \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=Release - name: Build run: | - cmake \ - --build \ - --preset release \ - --parallel + nix develop --command cmake --build build \ + --parallel 2 - - name: Upload des artefacts - if: success() - uses: actions/upload-artifact@v3 + - name: Check binary + run: | + find build -type f -executable + find build -type f -executable \ + -exec sh -c ' + file "$1" + readelf -l "$1" | grep interpreter || true + readelf -d "$1" | grep -E "RPATH|RUNPATH|NEEDED" || true + ' _ {} \; + + - name: Upload build + uses: actions/upload-artifact@v4 with: - name: vulkan-engine - path: | - ./engine-bundle - if-no-files-found: warn - archive: false + name: VulkanEngine-linux-x86_64 + path: build/ - name: Notify routine if: always() diff --git a/CMakeLists.txt b/CMakeLists.txt index 19fc722..e5db6f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,10 +9,44 @@ include(FetchContent) include(CheckIPOSupported) check_ipo_supported(RESULT LTO_SUPPORTED OUTPUT LTO_ERROR) +option(VULKANENGINE_PORTABLE + "Build a Linux binary without Nix-specific runtime paths" + OFF +) + +option(VULKANENGINE_BUNDLE + "Build a Linux bundle using libraries from the bundle directory" + OFF +) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +# RPATH / runtime paths +if(VULKANENGINE_PORTABLE) + message(STATUS "VulkanEngine: PORTABLE build") + + set(CMAKE_SKIP_BUILD_RPATH TRUE) + set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) + set(CMAKE_INSTALL_RPATH "") + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) + +elseif(VULKANENGINE_BUNDLE) + message(STATUS "VulkanEngine: BUNDLE build") + + set(CMAKE_SKIP_BUILD_RPATH FALSE) + set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) + + # Executables are installed in bin/ + # Libraries are installed in lib/ + set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib") + + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) + +else() + message(STATUS "VulkanEngine: normal build") +endif() + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") find_program(GCC_AR NAMES gcc-ar REQUIRED) find_program(GCC_RANLIB NAMES gcc-ranlib REQUIRED) @@ -29,26 +63,13 @@ FetchContent_Declare( ) FetchContent_MakeAvailable(fastgltf) -FetchContent_Declare( - vk_bootstrap - GIT_REPOSITORY https://github.com/charles-lunarg/vk-bootstrap - GIT_TAG v1.4.321 -) -FetchContent_MakeAvailable(vk_bootstrap) - -FetchContent_Declare( - fmt - GIT_REPOSITORY https://github.com/fmtlib/fmt.git - GIT_TAG 11.2.0 -) -FetchContent_MakeAvailable(fmt) - - # Find all package dependencies find_package( glfw3 REQUIRED ) find_package( glm REQUIRED ) find_package( VulkanMemoryAllocator CONFIG REQUIRED ) find_package( CLI11 REQUIRED ) +find_package( simdjson REQUIRED ) + # Shader compilers add_executable (glslang::validator IMPORTED) find_program ( @@ -116,8 +137,20 @@ function ( addBinary BINARY_NAME ) target_include_directories( ${BINARY_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src ) # Sets the output dir to have clear separation between binaries - set_target_properties ( ${BINARY_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${BINARY_NAME} ) - set_target_properties ( ${BINARY_NAME} PROPERTIES CXX_STANDARD 20 ) # Uses C++20 + set_target_properties ( + ${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}/${BINARY_NAME} + CXX_STANDARD + 20 # C++ 20 + CXX_STANDARD_REQUIRED + ON + CXX_EXTENSIONS + OFF + CXX_SCAN_FOR_MODULES + OFF + ) # Sets per binary LTO if(LTO_SUPPORTED AND CMAKE_BUILD_TYPE STREQUAL "Release") set_target_properties(${BINARY_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE) @@ -234,8 +267,8 @@ list( lib_list # Libs used glfw - fmt::fmt - vk-bootstrap::vk-bootstrap + fmt + vk-bootstrap #Vulkan::UtilityHeaders vulkan CLI11::CLI11 diff --git a/flake.nix b/flake.nix index ba23137..c5ae0b7 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "General Vulkan dev environment"; + description = "VulkanEngine development environment"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; @@ -13,77 +13,97 @@ inherit system; config.allowUnfree = true; }; + + vulkanPackages = with pkgs; [ + vulkan-headers + vulkan-loader + vulkan-validation-layers + vulkan-tools + vulkan-utility-libraries + vulkan-memory-allocator + vulkan-volk + vk-bootstrap + ]; + + developmentPackages = with pkgs; [ + # Shaders + shader-slang + glslang + + # Vulkan + vulkan-headers + vulkan-loader + vulkan-validation-layers + vulkan-tools + vulkan-utility-libraries + vulkan-memory-allocator + vulkan-volk + vk-bootstrap + + # Windowing + glfw3 + wayland + wayland-protocols + wayland-scanner + libxkbcommon + + # Audio + libpulseaudio + libpulseaudio.dev + + # Libraries + fmt + cli11 + simdjson + glm + nlohmann_json + tinyobjloader + tinygltf + stb + + # Build + cmake + ninja + pkg-config + + # Debug + gdb + renderdoc + ]; + in { devShells.default = pkgs.mkShell { - name = "vulkan"; - hardeningDisable = [ "fortify" ]; + name = "vulkan-engine"; - packages = with pkgs; [ - # Shader compile - shader-slang - glslang - # Vulkan - vulkan-headers - vulkan-loader - vulkan-validation-layers - vulkan-tools - vulkan-utility-libraries - vk-bootstrap - vulkan-memory-allocator - vulkan-volk - # Wayland - wayland - wayland-protocols - wayland-scanner - libxkbcommon - # Miniaudio - libpulseaudio - libpulseaudio.dev - # Other libraries - glfw3 - SDL2 - sdl3 - fmt - cli11 - simdjson - #imgui - tinyobjloader - nlohmann_json - tinygltf -# fastgltf - stb - #ktx-tools - glm - cmake - ninja - pkg-config - # Debug - gdb - renderdoc -# git + hardeningDisable = [ + "fortify" ]; - # Environment Variables - LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [ - pkgs.vulkan-loader - pkgs.shaderc.lib - pkgs.SDL2 - pkgs.vk-bootstrap - #pkgs.sdl3 - ]; - VK_LAYER_PATH = "${pkgs.vulkan-validation-layers}/share/vulkan/explicit_layer.d"; - VULKAN_SDK = "${pkgs.vulkan-validation-layers}/share/vulkan/explicit_layer.d"; - GIT="${pkgs.git}"; + + packages = developmentPackages; + + VK_LAYER_PATH = + "${pkgs.vulkan-validation-layers}/share/vulkan/explicit_layer.d"; + + VULKAN_SDK = + "${pkgs.vulkan-validation-layers}"; shellHook = '' - echo "Vulkan loaded" - echo "MangoHud version: $(mangohud --version 2>/dev/null || echo 'non trouvée')" + echo "VulkanEngine development environment" + echo "CMake: $(cmake --version | head -n1)" + echo "Ninja: $(ninja --version)" + echo "GCC: $(g++ --version | head -n1)" + echo "GLSLang: $(glslangValidator --version | head -n1)" + echo "Slang: $(slangc -v | head -n1)" + unset SOURCE_DATE_EPOCH - #unset NIX_ENFORCE_NO_NATIVE - echo $LD_LIBRARY_PATH ''; }; - packages.engine = pkgs.callPackage ./package.nix { }; - packages.default = self.packages.${system}.engine; - }); + packages.engine = + pkgs.callPackage ./package.nix {}; + + packages.default = + self.packages.${system}.engine; + } + ); }