Browse Source

Fix PCH generation for GCC and Clang.
Add a new compiler flag to warn against invalid PCH generation in the future.
Remove temporary PCH workaround for all Clang compilers.

Yao Wei Tjong 姚伟忠 5 years ago
parent
commit
6d6cd58e34
3 changed files with 4 additions and 13 deletions
  1. 2 2
      .travis.yml
  2. 0 8
      CMake/Modules/CheckHost.cmake
  3. 2 3
      CMake/Modules/UrhoCommon.cmake

+ 2 - 2
.travis.yml

@@ -36,7 +36,7 @@ env:
     # Linux native 64-bit
     - LINUX=1 URHO3D_LIB_TYPE=STATIC URHO3D_UPDATE_SOURCE_TREE=1 SF_DEFAULT=linux:Linux-64bit-STATIC.tar.gz   # GCC
     - LINUX=1 URHO3D_LIB_TYPE=SHARED
-    - LINUX=1 URHO3D_LIB_TYPE=STATIC CC=clang CXX=clang++ URHO3D_PCH=0                                        # Clang
+    - LINUX=1 URHO3D_LIB_TYPE=STATIC CC=clang CXX=clang++                                                     # Clang
     - LINUX=1 URHO3D_LIB_TYPE=SHARED CC=clang CXX=clang++
     - LINUX=1 URHO3D_LIB_TYPE=STATIC URHO3D_SSL=1
     - LINUX=1 URHO3D_LIB_TYPE=SHARED URHO3D_SSL=1
@@ -45,7 +45,7 @@ env:
     # Linux native 32-bit
     - LINUX=1 URHO3D_LIB_TYPE=STATIC URHO3D_64BIT=0
     - LINUX=1 URHO3D_LIB_TYPE=SHARED URHO3D_64BIT=0
-    - LINUX=1 URHO3D_LIB_TYPE=STATIC URHO3D_64BIT=0 CC=clang CXX=clang++ URHO3D_PCH=0
+    - LINUX=1 URHO3D_LIB_TYPE=STATIC URHO3D_64BIT=0 CC=clang CXX=clang++
     - LINUX=1 URHO3D_LIB_TYPE=SHARED URHO3D_64BIT=0 CC=clang CXX=clang++
     # MinGW cross-compiling 64-bit
     - MINGW=1 URHO3D_LIB_TYPE=STATIC                    # OpenGL

+ 0 - 8
CMake/Modules/CheckHost.cmake

@@ -80,11 +80,3 @@ else ()
        endif ()
     endif ()
 endif ()
-
-# Temporary workaround - test if PCH could be enabled when using Clang compiler toolchain
-if (CMAKE_CXX_COMPILER_ID MATCHES Clang)
-    # Turn off PCH when building on macOS host with ccache 3.3.1+ (the last known bad version) and when targeting Android and Web platforms
-    if ((APPLE AND NOT CCACHE_VERSION VERSION_LESS 3.3.1) OR ANDROID OR WEB)
-        set (URHO3D_PCH FALSE CACHE INTERNAL "" FORCE)
-    endif ()
-endif ()

+ 2 - 3
CMake/Modules/UrhoCommon.cmake

@@ -398,7 +398,6 @@ if (URHO3D_CLANG_TOOLS OR URHO3D_BINDINGS)
     endif ()
 endif ()
 if (URHO3D_CLANG_TOOLS)
-    # Require C++11 standard and no precompiled-header
     set (URHO3D_PCH 0)
     set (URHO3D_LIB_TYPE SHARED)
     # Set build options that would maximise the AST of Urho3D library
@@ -1254,7 +1253,7 @@ macro (enable_pch HEADER_PATHNAME)
                 foreach (CONFIG ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE})   # These two vars are mutually exclusive
                     # Generate *.rsp containing configuration specific compiler flags
                     string (TOUPPER ${CONFIG} UPPERCASE_CONFIG)
-                    file (WRITE ${ABS_PATH_PCH}.${CONFIG}.pch.rsp.new "${COMPILE_DEFINITIONS} ${SYSROOT_FLAGS} ${CLANG_${LANG}_FLAGS} ${CMAKE_${LANG}_FLAGS} ${CMAKE_${LANG}_FLAGS_${UPPERCASE_CONFIG}} ${COMPILER_HIDDEN_VISIBILITY_FLAGS} ${COMPILER_HIDDEN_INLINE_VISIBILITY_FLAGS} ${PIC_FLAGS} ${INCLUDE_DIRECTORIES} -c -x ${LANG_H}")
+                    file (WRITE ${ABS_PATH_PCH}.${CONFIG}.pch.rsp.new "${COMPILE_DEFINITIONS} ${SYSROOT_FLAGS} ${CLANG_${LANG}_FLAGS} ${CMAKE_${LANG}_FLAGS} ${CMAKE_${LANG}_FLAGS_${UPPERCASE_CONFIG}} ${COMPILER_HIDDEN_VISIBILITY_FLAGS} ${COMPILER_HIDDEN_INLINE_VISIBILITY_FLAGS} ${PIC_FLAGS} -std=c++11 ${INCLUDE_DIRECTORIES} -c -x ${LANG_H}")
                     execute_process (COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ABS_PATH_PCH}.${CONFIG}.pch.rsp.new ${ABS_PATH_PCH}.${CONFIG}.pch.rsp)
                     file (REMOVE ${ABS_PATH_PCH}.${CONFIG}.pch.rsp.new)
                     if (NOT ${TARGET_NAME}_PCH_DEPS)
@@ -1281,7 +1280,7 @@ macro (enable_pch HEADER_PATHNAME)
                     add_make_clean_files (${PCH_FILENAME}/${PCH_FILENAME}.${CONFIG})
                 endforeach ()
                 # Using precompiled header file
-                set (CMAKE_${LANG}_FLAGS "${CMAKE_${LANG}_FLAGS} -include \"${ABS_PATH_PCH}\"")
+                set (CMAKE_${LANG}_FLAGS "${CMAKE_${LANG}_FLAGS} -include \"${ABS_PATH_PCH}\" -Winvalid-pch")   # Catch the invalid PCH sooner
                 unset (${TARGET_NAME}_HEADER_PATHNAME)
             else ()
                 # The target has not been created yet, so set an internal variable to come back here again later