Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
on:
workflow_dispatch:
release:
types: [published]
push:
Expand Down Expand Up @@ -35,7 +36,7 @@ jobs:
name: Build on ${{ matrix.name }}
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 1
Expand Down Expand Up @@ -90,6 +91,7 @@ jobs:
./LLGI_Test.exe test

- name: Upload
if: matrix.name == 'windows_x64'
uses: actions/upload-artifact@v4
with:
name: Test_Result_Windows
Expand Down
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@
/msvc/*.user
**/Debug
/build
/build_clangformat
/build-*
/build_*
/thirdparty/dawn/
/node_modules/

.DS_Store
136 changes: 133 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,26 @@ project(LLGI)

include(GNUInstallDirs)
include(ExternalProject)
include(CTest)

# linux flag
if(UNIX AND NOT APPLE)
set(LINUX TRUE)
endif()

option(BUILD_WEBGPU "build webgpu backend" OFF)
option(BUILD_WEBGPU_BROWSER_TEST
"build a WebAssembly browser smoke test for the WebGPU backend" OFF)
if(BUILD_WEBGPU_BROWSER_TEST AND NOT BUILD_WEBGPU)
message(FATAL_ERROR "BUILD_WEBGPU_BROWSER_TEST requires BUILD_WEBGPU=ON.")
endif()
set(WEBGPU_DAWN_SOURCE_DIR
""
CACHE PATH "Path to a Dawn source checkout used when BUILD_WEBGPU is ON")
option(WEBGPU_DAWN_BUILD_SAMPLES "Build Dawn sample executables" OFF)
option(WEBGPU_DAWN_FORCE_SYSTEM_COMPONENT_LOAD
"Let Dawn load required Windows system components from System32"
ON)
option(BUILD_VULKAN "build vulkan" OFF)
option(BUILD_VULKAN_COMPILER "build vulkan compiler" OFF)
option(BUILD_TEST "build test" OFF)
Expand All @@ -27,7 +41,7 @@ option(SPIRVCROSS_WITHOUT_INSTALL "Compile with spirv-cross without install"
OFF)
option(USE_CREATE_COMPILER_FUNCTION "Whether LLGI::CreateCompiler is used." ON)

if(LINUX)
if(LINUX AND NOT BUILD_WEBGPU)
set(BUILD_VULKAN TRUE)
endif()

Expand All @@ -43,7 +57,7 @@ if(MSVC)

cmake_policy(GET CMP0091 CMP0091_STATE)

if(CMP0091_STATE EQUAL NEW)
if(CMP0091_STATE STREQUAL "NEW")

if(USE_MSVC_RUNTIME_LIBRARY_DLL)
cmake_policy(SET CMP0091 NEW)
Expand Down Expand Up @@ -97,6 +111,8 @@ if(BUILD_VULKAN_COMPILER OR BUILD_TOOL)
${CMAKE_CURRENT_BINARY_DIR}/EP/Install/glslang/include)
list(APPEND LLGI_THIRDPARTY_LIBRARY_DIRECTORIES
${CMAKE_CURRENT_BINARY_DIR}/EP/Install/glslang/lib)
set(LLGI_GLSLANG_LIBRARY_DIR
${CMAKE_CURRENT_BINARY_DIR}/EP/Install/glslang/lib)

if ("${CMAKE_BUILD_TYPE}" STREQUAL "" AND NOT WIN32)
ExternalProject_Add(
Expand All @@ -107,6 +123,7 @@ if(BUILD_VULKAN_COMPILER OR BUILD_TOOL)
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/EP/Install/glslang
-DCMAKE_USER_MAKE_RULES_OVERRIDE=${CMAKE_CURRENT_SOURCE_DIR}/cmake/CFlagOverrides.cmake
-DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY}
-DUSE_MSVC_RUNTIME_LIBRARY_DLL=${USE_MSVC_RUNTIME_LIBRARY_DLL}
-DENABLE_OPT=OFF
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
Expand All @@ -133,6 +150,7 @@ if(BUILD_VULKAN_COMPILER OR BUILD_TOOL)
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/EP/Install/glslang
-DCMAKE_USER_MAKE_RULES_OVERRIDE=${CMAKE_CURRENT_SOURCE_DIR}/cmake/CFlagOverrides.cmake
-DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY}
-DUSE_MSVC_RUNTIME_LIBRARY_DLL=${USE_MSVC_RUNTIME_LIBRARY_DLL}
-DENABLE_OPT=OFF
-DCMAKE_DEBUG_POSTFIX=d
Expand Down Expand Up @@ -176,6 +194,7 @@ if(BUILD_VULKAN_COMPILER OR BUILD_TOOL)
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/EP/Install/SPIRV-Cross
-DCMAKE_USER_MAKE_RULES_OVERRIDE=${CMAKE_CURRENT_SOURCE_DIR}/cmake/CFlagOverrides.cmake
-DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY}
-DUSE_MSVC_RUNTIME_LIBRARY_DLL=${USE_MSVC_RUNTIME_LIBRARY_DLL}
-DCMAKE_DEBUG_POSTFIX=d
-DBUILD_SHARED_LIBS=OFF
Expand All @@ -189,6 +208,8 @@ if(BUILD_VULKAN_COMPILER OR BUILD_TOOL)
${CMAKE_CURRENT_BINARY_DIR}/EP/Install/SPIRV-Cross/include)
list(APPEND LLGI_THIRDPARTY_LIBRARY_DIRECTORIES
${CMAKE_CURRENT_BINARY_DIR}/EP/Install/SPIRV-Cross/lib)
set(LLGI_SPIRV_CROSS_LIBRARY_DIR
${CMAKE_CURRENT_BINARY_DIR}/EP/Install/SPIRV-Cross/lib)

list(
APPEND
Expand Down Expand Up @@ -226,6 +247,66 @@ if(BUILD_VULKAN_COMPILER OR BUILD_TOOL)
optimized
spirv-cross-util)

if(WIN32)
set(LLGI_THIRDPARTY_LIBRARY_FILES
debug
${LLGI_GLSLANG_LIBRARY_DIR}/glslangd.lib
debug
${LLGI_GLSLANG_LIBRARY_DIR}/glslang-default-resource-limitsd.lib
debug
${LLGI_GLSLANG_LIBRARY_DIR}/MachineIndependentd.lib
debug
${LLGI_GLSLANG_LIBRARY_DIR}/SPIRVd.lib
debug
${LLGI_GLSLANG_LIBRARY_DIR}/OSDependentd.lib
debug
${LLGI_GLSLANG_LIBRARY_DIR}/GenericCodeGend.lib
optimized
${LLGI_GLSLANG_LIBRARY_DIR}/glslang.lib
optimized
${LLGI_GLSLANG_LIBRARY_DIR}/glslang-default-resource-limits.lib
optimized
${LLGI_GLSLANG_LIBRARY_DIR}/MachineIndependent.lib
optimized
${LLGI_GLSLANG_LIBRARY_DIR}/SPIRV.lib
optimized
${LLGI_GLSLANG_LIBRARY_DIR}/OSDependent.lib
optimized
${LLGI_GLSLANG_LIBRARY_DIR}/GenericCodeGen.lib
debug
${LLGI_SPIRV_CROSS_LIBRARY_DIR}/spirv-cross-cored.lib
debug
${LLGI_SPIRV_CROSS_LIBRARY_DIR}/spirv-cross-cd.lib
debug
${LLGI_SPIRV_CROSS_LIBRARY_DIR}/spirv-cross-cppd.lib
debug
${LLGI_SPIRV_CROSS_LIBRARY_DIR}/spirv-cross-hlsld.lib
debug
${LLGI_SPIRV_CROSS_LIBRARY_DIR}/spirv-cross-glsld.lib
debug
${LLGI_SPIRV_CROSS_LIBRARY_DIR}/spirv-cross-msld.lib
debug
${LLGI_SPIRV_CROSS_LIBRARY_DIR}/spirv-cross-reflectd.lib
debug
${LLGI_SPIRV_CROSS_LIBRARY_DIR}/spirv-cross-utild.lib
optimized
${LLGI_SPIRV_CROSS_LIBRARY_DIR}/spirv-cross-core.lib
optimized
${LLGI_SPIRV_CROSS_LIBRARY_DIR}/spirv-cross-c.lib
optimized
${LLGI_SPIRV_CROSS_LIBRARY_DIR}/spirv-cross-cpp.lib
optimized
${LLGI_SPIRV_CROSS_LIBRARY_DIR}/spirv-cross-hlsl.lib
optimized
${LLGI_SPIRV_CROSS_LIBRARY_DIR}/spirv-cross-glsl.lib
optimized
${LLGI_SPIRV_CROSS_LIBRARY_DIR}/spirv-cross-msl.lib
optimized
${LLGI_SPIRV_CROSS_LIBRARY_DIR}/spirv-cross-reflect.lib
optimized
${LLGI_SPIRV_CROSS_LIBRARY_DIR}/spirv-cross-util.lib)
endif()

else()
list(APPEND LLGI_THIRDPARTY_INCLUDES ${GLSLANG_INCLUDE_DIR}
${SPIRVCROSS_INCLUDE_DIR})
Expand All @@ -236,7 +317,9 @@ endif()

if(BUILD_VULKAN)
add_compile_definitions(ENABLE_VULKAN)
endif()

if(BUILD_VULKAN OR BUILD_WEBGPU)
if(GLSLANG_WITHOUT_INSTALL)
add_compile_definitions(ENABLE_GLSLANG_WITHOUT_INSTALL)
endif()
Expand All @@ -246,13 +329,60 @@ if(BUILD_VULKAN)
endif()
endif()

if(BUILD_WEBGPU AND NOT EMSCRIPTEN)
set(DAWN_FETCH_DEPENDENCIES
OFF
CACHE BOOL
"Dawn dependencies should be fetched before configuring LLGI"
FORCE)
set(DAWN_BUILD_SAMPLES ${WEBGPU_DAWN_BUILD_SAMPLES}
CACHE BOOL "Build Dawn samples" FORCE)
set(DAWN_FORCE_SYSTEM_COMPONENT_LOAD
${WEBGPU_DAWN_FORCE_SYSTEM_COMPONENT_LOAD}
CACHE BOOL "Allow Dawn to load Windows system components from System32"
FORCE)
set(DAWN_BUILD_TESTS OFF CACHE BOOL "Build Dawn tests" FORCE)
set(DAWN_BUILD_PROTOBUF OFF CACHE BOOL "Build Dawn protobuf dependencies" FORCE)
set(TINT_BUILD_TESTS OFF CACHE BOOL "Build Tint tests" FORCE)
set(TINT_BUILD_IR_BINARY OFF CACHE BOOL "Build Tint IR binary support" FORCE)
set(DAWN_ENABLE_INSTALL ON CACHE BOOL "Install Dawn targets" FORCE)
if(USE_MSVC_RUNTIME_LIBRARY_DLL)
set(ABSL_MSVC_STATIC_RUNTIME OFF
CACHE BOOL "Use the static MSVC runtime for Abseil" FORCE)
else()
set(ABSL_MSVC_STATIC_RUNTIME ON
CACHE BOOL "Use the static MSVC runtime for Abseil" FORCE)
endif()

set(LLGI_DAWN_SOURCE_DIR "")
if(WEBGPU_DAWN_SOURCE_DIR)
set(LLGI_DAWN_SOURCE_DIR "${WEBGPU_DAWN_SOURCE_DIR}")
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/dawn/CMakeLists.txt")
set(LLGI_DAWN_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/dawn")
endif()

if(LLGI_DAWN_SOURCE_DIR)
add_subdirectory("${LLGI_DAWN_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/dawn"
EXCLUDE_FROM_ALL)
else()
message(
FATAL_ERROR
"Dawn source was not found. Run `python scripts/fetch_dawn.py`, add thirdparty/dawn, or set WEBGPU_DAWN_SOURCE_DIR to a prepared Dawn checkout."
)
endif()
endif()

if(APPLE)
add_compile_definitions(ENABLE_METAL)
endif()

add_subdirectory("src")

if(BUILD_TEST)
if(BUILD_WEBGPU AND NOT TARGET ShaderTranspilerCore)
add_subdirectory("tools/ShaderTranspilerCore")
endif()

if(BUILD_TEST OR BUILD_WEBGPU_BROWSER_TEST)
add_subdirectory("src_test")
endif()

Expand Down
Loading
Loading