This commit is contained in:
parent
9515c4293e
commit
a78a17fdde
@ -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()
|
||||
|
||||
@ -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
|
||||
|
||||
148
flake.nix
148
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;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user