Skip to content

Commit 351b3fb

Browse files
committed
[Chore] (3rdparty): Compile glslang & SPIRV-Cross from source code. Downgrade Spirv to 1.5
1 parent 90c4873 commit 351b3fb

78 files changed

Lines changed: 111 additions & 121 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitmodules

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,9 @@
1010
[submodule "MobileGlues-cpp/include/FastSTL"]
1111
path = MobileGlues-cpp/include/FastSTL
1212
url = https://github.com/MobileGL-Dev/FastSTL.git
13+
[submodule "MobileGlues-cpp/3rdparty/glslang"]
14+
path = MobileGlues-cpp/3rdparty/glslang
15+
url = https://github.com/KhronosGroup/glslang.git
16+
[submodule "MobileGlues-cpp/3rdparty/SPIRV-Cross"]
17+
path = MobileGlues-cpp/3rdparty/SPIRV-Cross
18+
url = https://github.com/KhronosGroup/SPIRV-Cross.git
Submodule SPIRV-Cross added at a0fba56

MobileGlues-cpp/3rdparty/glslang

Submodule glslang added at f5f664d

MobileGlues-cpp/CMakeLists.txt

Lines changed: 102 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,41 @@
11
cmake_minimum_required(VERSION 3.22.1)
2-
32
project("mobileglues")
4-
53
enable_language(CXX)
6-
74
set(CMAKE_CXX_STANDARD 20)
8-
95
set(CMAKE_CXX_STANDARD_REQUIRED ON)
10-
116
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
127

8+
9+
# glslang & SPIRV-Cross
10+
set(ENABLE_RTTI ON CACHE BOOL "Enables RTTI (will be took by glslang)" FORCE)
11+
set(ENABLE_HLSL OFF CACHE BOOL "Disable HLSL input for glslang" FORCE)
12+
set(BUILD_EXTERNAL OFF CACHE BOOL "Disable build external dependencies for glslang" FORCE)
13+
set(ENABLE_GLSLANG_BINARIES OFF CACHE BOOL "Disable glslangValidator/spirv-remap" FORCE)
14+
set(ENABLE_OPT OFF CACHE BOOL "Disable SPIRV-Tools opt usage in glslang" FORCE)
15+
set(BUILD_EXTERNAL OFF CACHE BOOL "Don't build external deps in External/" FORCE)
16+
17+
set(SPIRV_CROSS_ENABLE_C_API ON CACHE BOOL "Enable C API" FORCE)
18+
set(SPIRV_CROSS_ENABLE_GLSL ON CACHE BOOL "Enable GLSL backend" FORCE)
19+
set(SPIRV_CROSS_ENABLE_REFLECT OFF CACHE BOOL "Disable reflect" FORCE)
20+
set(SPIRV_CROSS_ENABLE_HLSL OFF CACHE BOOL "Disable HLSL backend" FORCE)
21+
set(SPIRV_CROSS_ENABLE_MSL OFF CACHE BOOL "Disable MSL backend" FORCE)
22+
set(SPIRV_CROSS_ENABLE_CPP OFF CACHE BOOL "Disable C++ API target" FORCE)
23+
set(SPIRV_CROSS_CLI OFF CACHE BOOL "Disable CLI binary" FORCE)
24+
set(SPIRV_CROSS_STATIC ON CACHE BOOL "Prefer static libs" FORCE)
25+
set(SPIRV_CROSS_ENABLE_UTIL OFF CACHE BOOL "Disable util" FORCE)
26+
27+
add_subdirectory(3rdparty/glslang)
28+
add_subdirectory(3rdparty/SPIRV-Cross)
29+
1330
if(MACOS)
14-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w -fvisibility=default -funwind-tables -g -D_THREAD_SAFE -fPIC -stdlib=libc++")
15-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w -g -std=gnu99 -funwind-tables -fvisibility=hidden")
16-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++")
31+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w -fvisibility=default -funwind-tables -g -D_THREAD_SAFE -fPIC -stdlib=libc++")
32+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w -g -std=gnu99 -funwind-tables -fvisibility=hidden")
33+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++")
1734
else()
18-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w -fvisibility=hidden -funwind-tables -g -D_THREAD_SAFE -fPIC")
19-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w -g -std=gnu99 -funwind-tables -fvisibility=hidden")
20-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++")
21-
set(CMAKE_ANDROID_STL_TYPE c++_static)
35+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w -fvisibility=hidden -funwind-tables -g -D_THREAD_SAFE -fPIC")
36+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w -g -std=gnu99 -funwind-tables -fvisibility=hidden")
37+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++")
38+
set(CMAKE_ANDROID_STL_TYPE c++_static)
2239
endif()
2340

2441
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
@@ -33,21 +50,21 @@ if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
3350
check_cxx_compiler_flag("-flto" HAS_LTO_CXX)
3451

3552
if (LTOSupported OR (HAS_LTO_C AND HAS_LTO_CXX))
36-
# Check ThinLTO
37-
check_c_compiler_flag("-flto=thin" HAS_THINLTO_C)
38-
check_cxx_compiler_flag("-flto=thin" HAS_THINLTO_CXX)
39-
if (HAS_THINLTO_C AND HAS_THINLTO_CXX)
40-
message(STATUS "ThinLTO supported, using -flto=thin")
41-
42-
add_compile_options(-flto=thin)
43-
add_link_options(-flto=thin)
44-
else()
45-
# ThinLTO is not supported
46-
message(STATUS "ThinLTO not available, fallback to CMAKE IPO")
47-
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
48-
endif()
53+
# Check ThinLTO
54+
check_c_compiler_flag("-flto=thin" HAS_THINLTO_C)
55+
check_cxx_compiler_flag("-flto=thin" HAS_THINLTO_CXX)
56+
if (HAS_THINLTO_C AND HAS_THINLTO_CXX)
57+
message(STATUS "ThinLTO supported, using -flto=thin")
58+
59+
add_compile_options(-flto=thin)
60+
add_link_options(-flto=thin)
4961
else()
50-
message(STATUS "IPO not supported: ${LTOError}")
62+
# ThinLTO is not supported
63+
message(STATUS "ThinLTO not available, fallback to CMAKE IPO")
64+
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
65+
endif()
66+
else()
67+
message(STATUS "IPO not supported: ${LTOError}")
5168
endif()
5269
endif()
5370

@@ -68,110 +85,75 @@ endif()
6885

6986
set(PROFILING OFF)
7087

71-
find_library(GLSLANG_LIB glslang PATHS ${CMAKE_SOURCE_DIR}/libraries/${ANDROID_ABI}/)
72-
7388
add_library(${CMAKE_PROJECT_NAME} SHARED
74-
init.cpp
75-
main.cpp
76-
gl/gl_stub.cpp
77-
gl/gl_native.cpp
78-
gl/gl.cpp
79-
gl/envvars.cpp
80-
gl/log.cpp
81-
gl/program.cpp
82-
gl/shader.cpp
83-
gl/framebuffer.cpp
84-
gl/texture.cpp
85-
gl/drawing.cpp
86-
gl/multidraw.cpp
87-
gl/mg.cpp
88-
gl/buffer.cpp
89-
gl/getter.cpp
90-
gl/pixel.cpp
91-
gl/random_string_gen.cpp
92-
gl/ExtWrappers/DSAWrapper.cpp
93-
gl/ExtWrappers/MultiBindWrapper.cpp
94-
gl/glsl/glsl_for_es.cpp
95-
gl/glsl/cache.cpp
96-
gl/FSR1/FSR1.cpp
97-
98-
gl/vertexattrib.cpp
99-
glx/lookup.cpp
100-
egl/egl.cpp
101-
egl/loader.cpp
102-
gles/loader.cpp
103-
config/cJSON.c
104-
config/config.cpp
105-
config/gpu_utils.cpp
106-
config/settings.cpp
89+
init.cpp
90+
main.cpp
91+
gl/gl_stub.cpp
92+
gl/gl_native.cpp
93+
gl/gl.cpp
94+
gl/envvars.cpp
95+
gl/log.cpp
96+
gl/program.cpp
97+
gl/shader.cpp
98+
gl/framebuffer.cpp
99+
gl/texture.cpp
100+
gl/drawing.cpp
101+
gl/multidraw.cpp
102+
gl/mg.cpp
103+
gl/buffer.cpp
104+
gl/getter.cpp
105+
gl/pixel.cpp
106+
gl/random_string_gen.cpp
107+
gl/ExtWrappers/DSAWrapper.cpp
108+
gl/ExtWrappers/MultiBindWrapper.cpp
109+
gl/glsl/glsl_for_es.cpp
110+
gl/glsl/cache.cpp
111+
gl/FSR1/FSR1.cpp
112+
113+
gl/vertexattrib.cpp
114+
glx/lookup.cpp
115+
egl/egl.cpp
116+
egl/loader.cpp
117+
gles/loader.cpp
118+
config/cJSON.c
119+
config/config.cpp
120+
config/gpu_utils.cpp
121+
config/settings.cpp
107122
)
108123

109124
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
110-
./includes
111-
./3rdparty/glm
112-
./3rdparty/xxhash)
125+
./includes
126+
./3rdparty/glm
127+
./3rdparty/xxhash)
113128
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/include)
114129

130+
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
131+
glslang::glslang
132+
spirv-cross-c
133+
)
134+
115135
if(MACOS)
116-
# iOS
117-
set(iOS_LIB_DIR ${CMAKE_SOURCE_DIR}/libraries/ios)
118-
target_link_libraries(${CMAKE_PROJECT_NAME}
119-
${iOS_LIB_DIR}/libglslang.a
120-
${iOS_LIB_DIR}/libspirv-cross-c-shared.dylib
121-
${iOS_LIB_DIR}/libGenericCodeGen.a
122-
${iOS_LIB_DIR}/libglslang-default-resource-limits.a
123-
${iOS_LIB_DIR}/libMachineIndependent.a
124-
${iOS_LIB_DIR}/libOSDependent.a
125-
${iOS_LIB_DIR}/libSPIRV-Tools-diff.a
126-
${iOS_LIB_DIR}/libSPIRV-Tools-link.a
127-
${iOS_LIB_DIR}/libSPIRV-Tools-lint.a
128-
${iOS_LIB_DIR}/libSPIRV-Tools-opt.a
129-
${iOS_LIB_DIR}/libSPIRV-Tools-reduce.a
130-
${iOS_LIB_DIR}/libSPIRV-Tools.a
131-
${iOS_LIB_DIR}/libSPIRV.a
132-
${iOS_LIB_DIR}/libSPVRemapper.a
133-
"-F${CMAKE_SOURCE_DIR}/external"
134-
"-framework libEGL"
135-
"-framework libGLESv2"
136-
"-framework Metal"
137-
"-framework Foundation"
138-
"-framework QuartzCore"
139-
)
136+
# iOS
137+
target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC
138+
"-F${CMAKE_SOURCE_DIR}/external"
139+
"-framework libEGL"
140+
"-framework libGLESv2"
141+
"-framework Metal"
142+
"-framework Foundation"
143+
"-framework QuartzCore"
144+
)
140145
else()
141-
# Android
142-
find_library(GLSLANG_LIB glslang PATHS ${CMAKE_SOURCE_DIR}/libraries/arm64-v8a/)
143-
target_link_libraries(${CMAKE_PROJECT_NAME}
144-
${CMAKE_SOURCE_DIR}/libraries/${ANDROID_ABI}/libglslang.a
145-
${CMAKE_SOURCE_DIR}/libraries/${ANDROID_ABI}/libspirv-cross-c-shared.so
146-
${CMAKE_SOURCE_DIR}/libraries/${ANDROID_ABI}/libGenericCodeGen.a
147-
${CMAKE_SOURCE_DIR}/libraries/${ANDROID_ABI}/libglslang-default-resource-limits.a
148-
${CMAKE_SOURCE_DIR}/libraries/${ANDROID_ABI}/libMachineIndependent.a
149-
${CMAKE_SOURCE_DIR}/libraries/${ANDROID_ABI}/libOSDependent.a
150-
${CMAKE_SOURCE_DIR}/libraries/${ANDROID_ABI}/libSPIRV-Tools-diff.a
151-
${CMAKE_SOURCE_DIR}/libraries/${ANDROID_ABI}/libSPIRV-Tools-link.a
152-
${CMAKE_SOURCE_DIR}/libraries/${ANDROID_ABI}/libSPIRV-Tools-lint.a
153-
${CMAKE_SOURCE_DIR}/libraries/${ANDROID_ABI}/libSPIRV-Tools-opt.a
154-
${CMAKE_SOURCE_DIR}/libraries/${ANDROID_ABI}/libSPIRV-Tools-reduce.a
155-
${CMAKE_SOURCE_DIR}/libraries/${ANDROID_ABI}/libSPIRV-Tools.a
156-
${CMAKE_SOURCE_DIR}/libraries/${ANDROID_ABI}/libSPIRV.a
157-
${CMAKE_SOURCE_DIR}/libraries/${ANDROID_ABI}/libSPVRemapper.a
158-
android
159-
log
160-
)
161-
endif()
162-
163-
if(ANDROID)
164-
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD
165-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
166-
${CMAKE_SOURCE_DIR}/libraries/${ANDROID_ABI}/libspirv-cross-c-shared.so
167-
$<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>
146+
# Android
147+
target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC
148+
android
149+
log
168150
)
169151
endif()
170152

171153
if (PROFILING)
172-
find_package(Threads)
173-
include_directories(${CMAKE_SOURCE_DIR}/3rdparty/perfetto/sdk)
174-
add_library(perfetto STATIC ${CMAKE_SOURCE_DIR}/3rdparty/perfetto/sdk/perfetto.cc)
175-
target_link_libraries(${CMAKE_PROJECT_NAME} perfetto ${CMAKE_THREAD_LIBS_INIT})
176-
target_compile_definitions(${CMAKE_PROJECT_NAME} PUBLIC PROFILING=1)
154+
find_package(Threads)
155+
include_directories(${CMAKE_SOURCE_DIR}/3rdparty/perfetto/sdk)
156+
add_library(perfetto STATIC ${CMAKE_SOURCE_DIR}/3rdparty/perfetto/sdk/perfetto.cc)
157+
target_link_libraries(${CMAKE_PROJECT_NAME} perfetto ${CMAKE_THREAD_LIBS_INIT})
158+
target_compile_definitions(${CMAKE_PROJECT_NAME} PUBLIC PROFILING=1)
177159
endif()

MobileGlues-cpp/gl/glsl/glsl_for_es.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -785,7 +785,7 @@ std::vector<unsigned int> glsl_to_spirv(GLenum shader_type, int glsl_version, co
785785
using namespace glslang;
786786
shader.setEnvInput(EShSourceGlsl, shader_language, EShClientVulkan, glsl_version);
787787
shader.setEnvClient(EShClientOpenGL, EShTargetOpenGL_450);
788-
shader.setEnvTarget(EShTargetSpv, EShTargetSpv_1_6);
788+
shader.setEnvTarget(EShTargetSpv, EShTargetSpv_1_5);
789789
shader.setAutoMapLocations(true);
790790
shader.setAutoMapBindings(true);
791791

-1.29 KB
Binary file not shown.
-1.29 KB
Binary file not shown.
-1.29 KB
Binary file not shown.
-357 KB
Binary file not shown.
-162 KB
Binary file not shown.

0 commit comments

Comments
 (0)