From 9ae285afa791c3a8cba57a493da9603a1ef71a88 Mon Sep 17 00:00:00 2001 From: bjorn Date: Sun, 8 May 2022 14:06:18 -0700 Subject: [PATCH] Add glslang; --- .gitmodules | 3 +++ CMakeLists.txt | 17 ++++++++++++++++- Tupfile.lua | 33 +++++++++++++++++++++++++++++++++ deps/glslang | 1 + 4 files changed, 53 insertions(+), 1 deletion(-) create mode 160000 deps/glslang diff --git a/.gitmodules b/.gitmodules index 900d4693..49c0b6e6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,3 +19,6 @@ [submodule "deps/oculus-openxr"] path = deps/oculus-openxr url = https://github.com/lovr-org/ovr_openxr_mobile_sdk +[submodule "deps/glslang"] + path = deps/glslang + url = https://github.com/KhronosGroup/glslang diff --git a/CMakeLists.txt b/CMakeLists.txt index 94fd1a38..c26ab1ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,7 @@ option(LOVR_ENABLE_THREAD "Enable the thread module" ON) option(LOVR_ENABLE_TIMER "Enable the timer module" ON) option(LOVR_USE_LUAJIT "Use LuaJIT instead of Lua" ON) +option(LOVR_USE_GLSLANG "Use glslang to compile GLSL shaders" ON) option(LOVR_USE_VULKAN "Use the Vulkan renderer" ON) option(LOVR_USE_WEBGPU "Use the WebGPU renderer" OFF) option(LOVR_USE_OPENXR "Enable the OpenXR backend for the headset module" ON) @@ -170,6 +171,20 @@ if(LOVR_ENABLE_PHYSICS) endif() endif() +# glslang +if(LOVR_USE_GLSLANG) + set(ENABLE_HLSL OFF CACHE BOOL "") + set(ENABLE_SPVREMAPPER OFF CACHE BOOL "") + set(ENABLE_GLSLANG_BINARIES OFF CACHE BOOL "") + set(ENABLE_GLSLANG_INSTALL OFF CACHE BOOL "") + set(ENABLE_OPT OFF CACHE BOOL "") + set(ENABLE_CTEST OFF CACHE BOOL "") + set(BUILD_EXTERNAL OFF CACHE BOOL "") + add_subdirectory(deps/glslang glslang) + set_target_properties(SPIRV PROPERTIES EXCLUDE_FROM_ALL 1) + set(LOVR_GLSLANG glslang) +endif() + # Vulkan if(LOVR_USE_VULKAN) find_package(Vulkan REQUIRED) @@ -322,7 +337,6 @@ if(NOT LOVR_BUILD_EXE) target_compile_definitions(lovr PUBLIC LOVR_OMIT_MAIN) # specifically for win32 WinMain endif() - set_target_properties(lovr PROPERTIES C_VISIBILITY_PRESET ${LOVR_SYMBOL_VISIBILITY}) set_target_properties(lovr PROPERTIES C_STANDARD 11) target_include_directories(lovr PRIVATE src src/modules src/lib/stdatomic etc) @@ -331,6 +345,7 @@ target_link_libraries(lovr ${LOVR_LUA} ${LOVR_MSDF} ${LOVR_ODE} + ${LOVR_GLSLANG} ${LOVR_OPENXR} ${LOVR_OCULUS_AUDIO} ${LOVR_PTHREADS} diff --git a/Tupfile.lua b/Tupfile.lua index 743c6b90..c8e92603 100644 --- a/Tupfile.lua +++ b/Tupfile.lua @@ -6,6 +6,7 @@ config = { sanitize = false, strict = true, luajit = false, + glslang = true, modules = { audio = true, data = true, @@ -241,6 +242,38 @@ if target == 'win32' or target == 'macos' or target == 'linux' then tup.rule('.obj/glfw/*.o', '^ LD %o^ $(cc) $(flags) -o %o %f $(glfw_lflags)', lib('glfw')) end +if config.modules.graphics and config.glslang then + cflags_graphics += '-Ideps/glslang/glslang/Include' + cflags_graphics += '-Ideps/glslang/StandAlone' + cflags += '-DLOVR_USE_GLSLANG' + lflags += '-lglslang' + + glslang_cflags += '-fPIC' + glslang_cflags += '-fno-exceptions' + glslang_cflags += '-fno-rtti' + glslang_cflags += '-Ideps/glslang' + glslang_lflags += '-shared' + glslang_lflags += '-lstdc++' + glslang_src += 'deps/glslang/OGLCompilersDLL/*.cpp' + glslang_src += 'deps/glslang/glslang/CInterface/*.cpp' + glslang_src += 'deps/glslang/glslang/MachineIndependent/*.cpp' + glslang_src += 'deps/glslang/glslang/MachineIndependent/preprocessor/*.cpp' + glslang_src += ('deps/glslang/glslang/OSDependent/%s/ossource.cpp'):format(target == 'win32' and 'Windows' or 'Unix') + glslang_src += 'deps/glslang/glslang/GenericCodeGen/*.cpp' + glslang_src += 'deps/glslang/SPIRV/GlslangToSpv.cpp' + glslang_src += 'deps/glslang/SPIRV/Logger.cpp' + glslang_src += 'deps/glslang/SPIRV/SpvTools.cpp' + glslang_src += 'deps/glslang/SPIRV/SpvBuilder.cpp' + glslang_src += 'deps/glslang/SPIRV/SpvPostProcess.cpp' + glslang_src += 'deps/glslang/SPIRV/InReadableOrder.cpp' + glslang_src += 'deps/glslang/SPIRV/CInterface/spirv_c_interface.cpp' + glslang_src += 'deps/glslang/StandAlone/resource_limits_c.cpp' + glslang_src += 'deps/glslang/StandAlone/ResourceLimits.cpp' + + tup.foreach_rule(glslang_src, '^ CC glslang/%b^ $(cc) $(flags) $(glslang_cflags) -c %f -o %o', '.obj/glslang/%B.o') + tup.rule('.obj/glslang/*.o', '^ LD %o^ $(cxx) $(flags) -o %o %f $(glslang_lflags)', lib('glslang')) +end + if config.modules.data then cflags_rasterizer += '-Ideps/msdfgen' lflags += '-lmsdfgen' diff --git a/deps/glslang b/deps/glslang new file mode 160000 index 00000000..14f6e273 --- /dev/null +++ b/deps/glslang @@ -0,0 +1 @@ +Subproject commit 14f6e2730457bac14a64cb3d962d0a3da8c15ae4