Browse Source

Fix iOS "unsupported architecture" issue when precompiling PCH.
When using Xcode, instead of precompiling PCH using our own build rules, simply switch on the Xcode support for PCH and delegate the task to it.

Yao Wei Tjong 姚伟忠 10 years ago
parent
commit
5cd6272bf6

+ 13 - 7
CMake/Modules/Urho3D-CMake-common.cmake

@@ -596,7 +596,7 @@ macro (enable_pch HEADER_PATHNAME)
                         # Precompiling header file
                         # Precompiling header file
                         set_property (SOURCE ${FILE} APPEND_STRING PROPERTY COMPILE_FLAGS " /Fp$(IntDir)${PCH_FILENAME} /Yc${HEADER_FILENAME}")     # Need a leading space for appending
                         set_property (SOURCE ${FILE} APPEND_STRING PROPERTY COMPILE_FLAGS " /Fp$(IntDir)${PCH_FILENAME} /Yc${HEADER_FILENAME}")     # Need a leading space for appending
                     else ()
                     else ()
-                        # Use the precompiled header file
+                        # Using precompiled header file
                         get_property (NO_PCH SOURCE ${FILE} PROPERTY NO_PCH)
                         get_property (NO_PCH SOURCE ${FILE} PROPERTY NO_PCH)
                         if (NOT NO_PCH)
                         if (NOT NO_PCH)
                             set_property (SOURCE ${FILE} APPEND_STRING PROPERTY COMPILE_FLAGS " /Fp$(IntDir)${PCH_FILENAME} /Yu${HEADER_FILENAME} /FI${HEADER_FILENAME}")
                             set_property (SOURCE ${FILE} APPEND_STRING PROPERTY COMPILE_FLAGS " /Fp$(IntDir)${PCH_FILENAME} /Yu${HEADER_FILENAME} /FI${HEADER_FILENAME}")
@@ -620,10 +620,19 @@ macro (enable_pch HEADER_PATHNAME)
                 list (APPEND SOURCE_FILES ${CXX_FILENAME})
                 list (APPEND SOURCE_FILES ${CXX_FILENAME})
             endif ()
             endif ()
         endif ()
         endif ()
+    elseif (XCODE)
+        if (TARGET ${TARGET_NAME})
+            # Precompiling and using precompiled header file
+            set_target_properties (${TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER YES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/${HEADER_PATHNAME})
+            unset (${TARGET_NAME}_HEADER_PATHNAME)
+        else ()
+            # The target has not been created yet, so set an internal variable to come back here again later
+            set (${TARGET_NAME}_HEADER_PATHNAME ${HEADER_PATHNAME})
+        endif ()
     else ()
     else ()
         # GCC or Clang
         # GCC or Clang
         if (TARGET ${TARGET_NAME})
         if (TARGET ${TARGET_NAME})
-            # Cache the compiler flags setup for the current scope so far
+            # Precompiling header file
             get_directory_property (COMPILE_DEFINITIONS COMPILE_DEFINITIONS)
             get_directory_property (COMPILE_DEFINITIONS COMPILE_DEFINITIONS)
             get_directory_property (INCLUDE_DIRECTORIES INCLUDE_DIRECTORIES)
             get_directory_property (INCLUDE_DIRECTORIES INCLUDE_DIRECTORIES)
             get_target_property (TYPE ${TARGET_NAME} TYPE)
             get_target_property (TYPE ${TARGET_NAME} TYPE)
@@ -663,15 +672,12 @@ macro (enable_pch HEADER_PATHNAME)
                     DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${HEADER_FILENAME}.${CONFIG}.pch.rsp ${DEPS}
                     DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${HEADER_FILENAME}.${CONFIG}.pch.rsp ${DEPS}
                     COMMENT "Precompiling header file '${HEADER_FILENAME}' for ${CONFIG} configuration")
                     COMMENT "Precompiling header file '${HEADER_FILENAME}' for ${CONFIG} configuration")
             endforeach ()
             endforeach ()
-            # Use the precompiled header file
+            # Using precompiled header file
             if ($ENV{COVERITY_SCAN_BRANCH})
             if ($ENV{COVERITY_SCAN_BRANCH})
                 # Coverity scan does not support PCH so workaround by including the actual header file
                 # Coverity scan does not support PCH so workaround by including the actual header file
                 set (ABS_PATH_PCH ${CMAKE_CURRENT_SOURCE_DIR}/${HEADER_PATHNAME})
                 set (ABS_PATH_PCH ${CMAKE_CURRENT_SOURCE_DIR}/${HEADER_PATHNAME})
             else ()
             else ()
-                if (NOT XCODE)
-                    set (PCH_DIR ${CMAKE_CURRENT_BINARY_DIR}/)
-                endif ()
-                set (ABS_PATH_PCH ${PCH_DIR}${HEADER_FILENAME})
+                set (ABS_PATH_PCH ${CMAKE_CURRENT_BINARY_DIR}/${HEADER_FILENAME})
             endif ()
             endif ()
             foreach (FILE ${SOURCE_FILES})
             foreach (FILE ${SOURCE_FILES})
                 if (FILE MATCHES \\.cpp$)
                 if (FILE MATCHES \\.cpp$)

+ 6 - 0
Source/ThirdParty/Assimp/code/AssimpPCH.h

@@ -43,6 +43,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *  PCH master include. Every unit in Assimp has to include it.
  *  PCH master include. Every unit in Assimp has to include it.
  */
  */
 
 
+// Modified by Yao Wei Tjong for Urho3D
+// Urho3D: only include C++ headers when the compiler is a C++ compiler
+#ifdef __cplusplus
+
 #ifndef ASSIMP_PCH_INCLUDED
 #ifndef ASSIMP_PCH_INCLUDED
 #define ASSIMP_PCH_INCLUDED
 #define ASSIMP_PCH_INCLUDED
 #define ASSIMP_INTERNAL_BUILD
 #define ASSIMP_INTERNAL_BUILD
@@ -160,3 +164,5 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
 
 
 #endif // !! ASSIMP_PCH_INCLUDED
 #endif // !! ASSIMP_PCH_INCLUDED
+
+#endif // !! Urho3D: __cpluscplus

+ 4 - 0
Source/Urho3D/Precompiled.h

@@ -20,9 +20,13 @@
 // THE SOFTWARE.
 // THE SOFTWARE.
 //
 //
 
 
+#ifdef __cplusplus
+
 #include "Urho3D.h"
 #include "Urho3D.h"
 
 
 #include "Container/HashMap.h"
 #include "Container/HashMap.h"
 #include "Container/HashSet.h"
 #include "Container/HashSet.h"
 #include "Container/Sort.h"
 #include "Container/Sort.h"
 #include "Container/Str.h"
 #include "Container/Str.h"
+
+#endif