Skip to content

Commit e60280e

Browse files
authored
Add a FILAMENT_ENABLE_EXPERIMENTAL_GCC_SUPPORT cmake flag. (#9339)
Adds support for compiling filament libraries with GCC. Since GCC is not officially supported, we prefer to disable warnings (incl. not treating warnings as errors) rather than updating the code in order to compile cleanly. This flag is disabled by default.
1 parent 70db8e2 commit e60280e

File tree

3 files changed

+38
-14
lines changed

3 files changed

+38
-14
lines changed

CMakeLists.txt

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ option(FILAMENT_ENABLE_FGVIEWER "Enable the frame graph viewer" OFF)
5656

5757
option(FILAMENT_USE_ABSEIL_LOGGING "Use Abseil to log, may increase binary size" OFF)
5858

59+
option(FILAMENT_ENABLE_EXPERIMENTAL_GCC_SUPPORT "Enable GCC support (unsupported)" OFF)
60+
5961
# This is to disable GTAO for the short-term while we investigate a way to better manage size increases.
6062
# On the regular filament build (where size is of less concern), we enable GTAO by default.
6163
option(FILAMENT_DISABLE_GTAO "Disable GTAO" OFF)
@@ -295,15 +297,10 @@ set(TOOLS ${CMAKE_CURRENT_SOURCE_DIR}/tools)
295297
# ==================================================================================================
296298
set(MIN_CLANG_VERSION "6.0")
297299

298-
if (CMAKE_C_COMPILER_ID MATCHES "Clang")
299-
if (CMAKE_C_COMPILER_VERSION VERSION_LESS MIN_CLANG_VERSION)
300-
message(FATAL_ERROR "Detected C compiler Clang ${CMAKE_C_COMPILER_VERSION} < ${MIN_CLANG_VERSION}")
301-
endif()
302-
elseif (NOT MSVC)
303-
message(FATAL_ERROR "Detected C compiler ${CMAKE_C_COMPILER_ID} is unsupported")
304-
endif()
305-
306-
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
300+
set(FILAMENT_USING_GCC OFF)
301+
if (CMAKE_C_COMPILER_ID MATCHES "GNU" AND FILAMENT_ENABLE_EXPERIMENTAL_GCC_SUPPORT)
302+
set(FILAMENT_USING_GCC ON)
303+
elseif (CMAKE_C_COMPILER_ID MATCHES "Clang")
307304
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS MIN_CLANG_VERSION)
308305
message(FATAL_ERROR "Detected CXX compiler Clang ${CMAKE_CXX_COMPILER_VERSION} < ${MIN_CLANG_VERSION}")
309306
endif()
@@ -344,7 +341,11 @@ if (MSVC)
344341
set(CXX_STANDARD "/std:c++latest")
345342
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_STANDARD} /W0 /Zc:__cplusplus")
346343
else()
347-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_STANDARD} -fstrict-aliasing -Wno-unknown-pragmas -Wno-unused-function -Wno-deprecated-declarations")
344+
if(FILAMENT_USING_GCC)
345+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_STANDARD} -Wno-changes-meaning -Wno-return-type -Wno-attributes -Wno-unknown-pragmas -Wno-class-memaccess -Wno-multichar -Wno-deprecated-declarations -Wno-subobject-linkage -Wno-invalid-constexpr")
346+
else()
347+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_STANDARD} -fstrict-aliasing -Wno-unknown-pragmas -Wno-unused-function -Wno-deprecated-declarations")
348+
endif()
348349
if (APPLE)
349350
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-nullability-extension")
350351
endif()
@@ -365,10 +366,14 @@ endif()
365366
if (LINUX)
366367
option(USE_STATIC_LIBCXX "Link against the static runtime libraries." ON)
367368
if (${USE_STATIC_LIBCXX})
368-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
369-
link_libraries("-static-libgcc -static-libstdc++")
370-
link_libraries(libc++.a)
371-
link_libraries(libc++abi.a)
369+
if (FILAMENT_USING_GCC)
370+
link_libraries("-static-libgcc -static-libstdc++")
371+
else ()
372+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
373+
link_libraries("-static-libgcc -static-libstdc++")
374+
link_libraries(libc++.a)
375+
link_libraries(libc++abi.a)
376+
endif()
372377
endif()
373378

374379
# Only linux, clang doesn't want to use a shared library that is not PIC.

filament/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,18 @@ set(LINUX_COMPILER_FLAGS
729729

730730
if (MSVC)
731731
set(FILAMENT_WARNINGS /W3)
732+
elseif (FILAMENT_USING_GCC)
733+
# GCC is not officially supported, so use a weaker set of warnings (incl. not using -Werror).
734+
set(FILAMENT_WARNINGS
735+
-Wall -Wextra-semi -Wundef
736+
-Wno-unused-parameter -Wno-missing-field-initializers
737+
-Wno-unused-but-set-variable -Wno-unused-variable -Wno-unused-function
738+
-Wnon-virtual-dtor -Wimplicit-fallthrough
739+
-Wno-strict-aliasing
740+
-Wno-changes-meaning -Wno-return-type
741+
-Wno-invalid-constexpr -Wno-parentheses
742+
-Wno-sign-compare -Wno-deprecated-declarations
743+
)
732744
else()
733745
set(FILAMENT_WARNINGS
734746
-Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers

filament/backend/CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,13 @@ endif()
495495

496496
if (MSVC)
497497
set(FILAMENT_WARNINGS /W3)
498+
elseif (FILAMENT_USING_GCC)
499+
# GCC is not officially supported, so use a weaker set of warnings (incl. not using -Werror)
500+
set(FILAMENT_WARNINGS
501+
-Wall -Wno-unused-parameter -Wno-missing-field-initializers
502+
-Wdeprecated -Wnon-virtual-dtor -Wno-strict-aliasing
503+
-Wno-invalid-constexpr -Wno-parentheses -Wno-unused-variable
504+
)
498505
else()
499506
set(FILAMENT_WARNINGS
500507
-Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers

0 commit comments

Comments
 (0)