diff --git a/CMakeLists.txt b/CMakeLists.txt index 91ea1fbf75..054a97dd92 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,6 +56,8 @@ option(FILAMENT_ENABLE_FGVIEWER "Enable the frame graph viewer" OFF) option(FILAMENT_USE_ABSEIL_LOGGING "Use Abseil to log, may increase binary size" OFF) +option(FILAMENT_ENABLE_EXPERIMENTAL_GCC_SUPPORT "Enable GCC support (unsupported)" OFF) + # This is to disable GTAO for the short-term while we investigate a way to better manage size increases. # On the regular filament build (where size is of less concern), we enable GTAO by default. option(FILAMENT_DISABLE_GTAO "Disable GTAO" OFF) @@ -295,15 +297,10 @@ set(TOOLS ${CMAKE_CURRENT_SOURCE_DIR}/tools) # ================================================================================================== set(MIN_CLANG_VERSION "6.0") -if (CMAKE_C_COMPILER_ID MATCHES "Clang") - if (CMAKE_C_COMPILER_VERSION VERSION_LESS MIN_CLANG_VERSION) - message(FATAL_ERROR "Detected C compiler Clang ${CMAKE_C_COMPILER_VERSION} < ${MIN_CLANG_VERSION}") - endif() -elseif (NOT MSVC) - message(FATAL_ERROR "Detected C compiler ${CMAKE_C_COMPILER_ID} is unsupported") -endif() - -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") +set(FILAMENT_USING_GCC OFF) +if (CMAKE_C_COMPILER_ID MATCHES "GNU" AND FILAMENT_ENABLE_EXPERIMENTAL_GCC_SUPPORT) + set(FILAMENT_USING_GCC ON) +elseif (CMAKE_C_COMPILER_ID MATCHES "Clang") if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS MIN_CLANG_VERSION) message(FATAL_ERROR "Detected CXX compiler Clang ${CMAKE_CXX_COMPILER_VERSION} < ${MIN_CLANG_VERSION}") endif() @@ -344,7 +341,11 @@ if (MSVC) set(CXX_STANDARD "/std:c++latest") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_STANDARD} /W0 /Zc:__cplusplus") else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_STANDARD} -fstrict-aliasing -Wno-unknown-pragmas -Wno-unused-function -Wno-deprecated-declarations") + if(FILAMENT_USING_GCC) + 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") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_STANDARD} -fstrict-aliasing -Wno-unknown-pragmas -Wno-unused-function -Wno-deprecated-declarations") + endif() if (APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-nullability-extension") endif() @@ -365,10 +366,14 @@ endif() if (LINUX) option(USE_STATIC_LIBCXX "Link against the static runtime libraries." ON) if (${USE_STATIC_LIBCXX}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") - link_libraries("-static-libgcc -static-libstdc++") - link_libraries(libc++.a) - link_libraries(libc++abi.a) + if (FILAMENT_USING_GCC) + link_libraries("-static-libgcc -static-libstdc++") + else () + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + link_libraries("-static-libgcc -static-libstdc++") + link_libraries(libc++.a) + link_libraries(libc++abi.a) + endif() endif() # Only linux, clang doesn't want to use a shared library that is not PIC. diff --git a/filament/CMakeLists.txt b/filament/CMakeLists.txt index 8811eb1742..d9fe507939 100644 --- a/filament/CMakeLists.txt +++ b/filament/CMakeLists.txt @@ -729,6 +729,18 @@ set(LINUX_COMPILER_FLAGS if (MSVC) set(FILAMENT_WARNINGS /W3) +elseif (FILAMENT_USING_GCC) + # GCC is not officially supported, so use a weaker set of warnings (incl. not using -Werror). + set(FILAMENT_WARNINGS + -Wall -Wextra-semi -Wundef + -Wno-unused-parameter -Wno-missing-field-initializers + -Wno-unused-but-set-variable -Wno-unused-variable -Wno-unused-function + -Wnon-virtual-dtor -Wimplicit-fallthrough + -Wno-strict-aliasing + -Wno-changes-meaning -Wno-return-type + -Wno-invalid-constexpr -Wno-parentheses + -Wno-sign-compare -Wno-deprecated-declarations + ) else() set(FILAMENT_WARNINGS -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers diff --git a/filament/backend/CMakeLists.txt b/filament/backend/CMakeLists.txt index a1afda64b5..00e8c6fd63 100644 --- a/filament/backend/CMakeLists.txt +++ b/filament/backend/CMakeLists.txt @@ -495,6 +495,13 @@ endif() if (MSVC) set(FILAMENT_WARNINGS /W3) +elseif (FILAMENT_USING_GCC) + # GCC is not officially supported, so use a weaker set of warnings (incl. not using -Werror) + set(FILAMENT_WARNINGS + -Wall -Wno-unused-parameter -Wno-missing-field-initializers + -Wdeprecated -Wnon-virtual-dtor -Wno-strict-aliasing + -Wno-invalid-constexpr -Wno-parentheses -Wno-unused-variable + ) else() set(FILAMENT_WARNINGS -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers