11cmake_minimum_required (VERSION 3.22.1 )
2-
32project ("mobileglues" )
4-
53enable_language (CXX )
6-
74set (CMAKE_CXX_STANDARD 20)
8-
95set (CMAKE_CXX_STANDARD_REQUIRED ON )
10-
116set (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+
1330if (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++" )
1734else ()
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)
2239endif ()
2340
2441if (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 ()
5269endif ()
5370
@@ -68,110 +85,75 @@ endif()
6885
6986set (PROFILING OFF )
7087
71- find_library (GLSLANG_LIB glslang PATHS ${CMAKE_SOURCE_DIR } /libraries/${ANDROID_ABI}/ )
72-
7388add_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
109124target_include_directories (${CMAKE_PROJECT_NAME } PRIVATE
110- ./includes
111- ./3rdparty/glm
112- ./3rdparty/xxhash )
125+ ./includes
126+ ./3rdparty/glm
127+ ./3rdparty/xxhash )
113128target_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+
115135if (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+ )
140145else ()
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 )
169151endif ()
170152
171153if (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 )
177159endif ()
0 commit comments