This commit is contained in:
parent
9515c4293e
commit
a78a17fdde
@ -12,66 +12,13 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
container: git.alexdelcamp.fr/alexandre_1a/flake-actions:latest
|
||||||
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Update apt
|
- name: Update apt
|
||||||
run: sudo apt update
|
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
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
@ -81,51 +28,30 @@ jobs:
|
|||||||
|
|
||||||
- name: Configure
|
- name: Configure
|
||||||
run: |
|
run: |
|
||||||
cmake \
|
nix develop --command cmake -S . -B build \
|
||||||
--preset release
|
-G Ninja \
|
||||||
|
-DCMAKE_BUILD_TYPE=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
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
cmake \
|
nix develop --command cmake --build build \
|
||||||
--build \
|
--parallel 2
|
||||||
--preset release \
|
|
||||||
--parallel
|
|
||||||
|
|
||||||
- name: Upload des artefacts
|
- name: Check binary
|
||||||
if: success()
|
run: |
|
||||||
uses: actions/upload-artifact@v3
|
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:
|
with:
|
||||||
name: vulkan-engine
|
name: VulkanEngine-linux-x86_64
|
||||||
path: |
|
path: build/
|
||||||
./engine-bundle
|
|
||||||
if-no-files-found: warn
|
|
||||||
archive: false
|
|
||||||
|
|
||||||
- name: Notify routine
|
- name: Notify routine
|
||||||
if: always()
|
if: always()
|
||||||
|
|||||||
@ -9,10 +9,44 @@ include(FetchContent)
|
|||||||
include(CheckIPOSupported)
|
include(CheckIPOSupported)
|
||||||
check_ipo_supported(RESULT LTO_SUPPORTED OUTPUT LTO_ERROR)
|
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)
|
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")
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
find_program(GCC_AR NAMES gcc-ar REQUIRED)
|
find_program(GCC_AR NAMES gcc-ar REQUIRED)
|
||||||
find_program(GCC_RANLIB NAMES gcc-ranlib REQUIRED)
|
find_program(GCC_RANLIB NAMES gcc-ranlib REQUIRED)
|
||||||
@ -29,26 +63,13 @@ FetchContent_Declare(
|
|||||||
)
|
)
|
||||||
FetchContent_MakeAvailable(fastgltf)
|
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 all package dependencies
|
||||||
find_package( glfw3 REQUIRED )
|
find_package( glfw3 REQUIRED )
|
||||||
find_package( glm REQUIRED )
|
find_package( glm REQUIRED )
|
||||||
find_package( VulkanMemoryAllocator CONFIG REQUIRED )
|
find_package( VulkanMemoryAllocator CONFIG REQUIRED )
|
||||||
find_package( CLI11 REQUIRED )
|
find_package( CLI11 REQUIRED )
|
||||||
|
find_package( simdjson REQUIRED )
|
||||||
|
|
||||||
# Shader compilers
|
# Shader compilers
|
||||||
add_executable (glslang::validator IMPORTED)
|
add_executable (glslang::validator IMPORTED)
|
||||||
find_program (
|
find_program (
|
||||||
@ -116,8 +137,20 @@ function ( addBinary BINARY_NAME )
|
|||||||
|
|
||||||
target_include_directories( ${BINARY_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src )
|
target_include_directories( ${BINARY_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src )
|
||||||
# Sets the output dir to have clear separation between binaries
|
# 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 (
|
||||||
set_target_properties ( ${BINARY_NAME} PROPERTIES CXX_STANDARD 20 ) # Uses C++20
|
${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
|
# Sets per binary LTO
|
||||||
if(LTO_SUPPORTED AND CMAKE_BUILD_TYPE STREQUAL "Release")
|
if(LTO_SUPPORTED AND CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||||
set_target_properties(${BINARY_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE)
|
set_target_properties(${BINARY_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE)
|
||||||
@ -234,8 +267,8 @@ list(
|
|||||||
lib_list
|
lib_list
|
||||||
# Libs used
|
# Libs used
|
||||||
glfw
|
glfw
|
||||||
fmt::fmt
|
fmt
|
||||||
vk-bootstrap::vk-bootstrap
|
vk-bootstrap
|
||||||
#Vulkan::UtilityHeaders
|
#Vulkan::UtilityHeaders
|
||||||
vulkan
|
vulkan
|
||||||
CLI11::CLI11
|
CLI11::CLI11
|
||||||
|
|||||||
148
flake.nix
148
flake.nix
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
description = "General Vulkan dev environment";
|
description = "VulkanEngine development environment";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
@ -13,77 +13,97 @@
|
|||||||
inherit system;
|
inherit system;
|
||||||
config.allowUnfree = true;
|
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 {
|
in {
|
||||||
devShells.default = pkgs.mkShell {
|
devShells.default = pkgs.mkShell {
|
||||||
name = "vulkan";
|
name = "vulkan-engine";
|
||||||
hardeningDisable = [ "fortify" ];
|
|
||||||
|
|
||||||
packages = with pkgs; [
|
hardeningDisable = [
|
||||||
# Shader compile
|
"fortify"
|
||||||
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
|
|
||||||
];
|
];
|
||||||
# Environment Variables
|
|
||||||
LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [
|
packages = developmentPackages;
|
||||||
pkgs.vulkan-loader
|
|
||||||
pkgs.shaderc.lib
|
VK_LAYER_PATH =
|
||||||
pkgs.SDL2
|
"${pkgs.vulkan-validation-layers}/share/vulkan/explicit_layer.d";
|
||||||
pkgs.vk-bootstrap
|
|
||||||
#pkgs.sdl3
|
VULKAN_SDK =
|
||||||
];
|
"${pkgs.vulkan-validation-layers}";
|
||||||
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}";
|
|
||||||
|
|
||||||
shellHook = ''
|
shellHook = ''
|
||||||
echo "Vulkan loaded"
|
echo "VulkanEngine development environment"
|
||||||
echo "MangoHud version: $(mangohud --version 2>/dev/null || echo 'non trouvée')"
|
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 SOURCE_DATE_EPOCH
|
||||||
#unset NIX_ENFORCE_NO_NATIVE
|
|
||||||
echo $LD_LIBRARY_PATH
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
packages.engine = pkgs.callPackage ./package.nix { };
|
packages.engine =
|
||||||
packages.default = self.packages.${system}.engine;
|
pkgs.callPackage ./package.nix {};
|
||||||
});
|
|
||||||
|
packages.default =
|
||||||
|
self.packages.${system}.engine;
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user