Просмотр исходного кода

Merge topic 'mingw-objc-objcxx'

2a4e8f03ef MinGW: Add support for OBJC and OBJCXX

Acked-by: Kitware Robot <[email protected]>
Acked-by: Cristian Adam <[email protected]>
Merge-request: !9244
Brad King 1 год назад
Родитель
Сommit
674bf686e6

+ 5 - 0
Help/release/3.29.rst

@@ -39,6 +39,11 @@ Compilers
 * The LLVM/Clang GNU-like frontend on Windows (``clang++``) may now be used
   to compile ``CUDA`` language sources.
 
+* Compilers targeting the GNU ABI on Windows (MinGW) may now be used to
+  compile Objective C (``OBJC``) and Objective C++ (``OBJCXX``).  These
+  include GNU compilers (``gcc`` and ``g++``) and the LLVM/Clang GNU-like
+  frontends (``clang`` and ``clang++``).
+
 * TI Clang-based compilers are now supported with
   :variable:`compiler id <CMAKE_<LANG>_COMPILER_ID>` ``TIClang``.
 

+ 18 - 0
Modules/Platform/Windows-Clang-OBJC.cmake

@@ -0,0 +1,18 @@
+include(Platform/Windows-Clang)
+__windows_compiler_clang(OBJC)
+
+if("x${CMAKE_OBJC_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC")
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+      AND CMAKE_DEPFILE_FLAGS_OBJC)
+    set(CMAKE_OBJC_DEPENDS_USE_COMPILER TRUE)
+  endif()
+elseif("x${CMAKE_OBJC_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+      AND CMAKE_DEPFILE_FLAGS_OBJC)
+    # dependencies are computed by the compiler itself
+    set(CMAKE_OBJC_DEPFILE_FORMAT gcc)
+    set(CMAKE_OBJC_DEPENDS_USE_COMPILER TRUE)
+  endif()
+endif()

+ 18 - 0
Modules/Platform/Windows-Clang-OBJCXX.cmake

@@ -0,0 +1,18 @@
+include(Platform/Windows-Clang)
+__windows_compiler_clang(OBJCXX)
+
+if("x${CMAKE_OBJCXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC")
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+      AND CMAKE_DEPFILE_FLAGS_OBJCXX)
+    set(CMAKE_OBJCXX_DEPENDS_USE_COMPILER TRUE)
+  endif()
+elseif("x${CMAKE_OBJCXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+      AND CMAKE_DEPFILE_FLAGS_OBJCXX)
+    # dependencies are computed by the compiler itself
+    set(CMAKE_OBJCXX_DEPFILE_FORMAT gcc)
+    set(CMAKE_OBJCXX_DEPENDS_USE_COMPILER TRUE)
+  endif()
+endif()

+ 1 - 0
Modules/Platform/Windows-GNU-OBJC-ABI.cmake

@@ -0,0 +1 @@
+__windows_compiler_gnu_abi(OBJC)

+ 2 - 0
Modules/Platform/Windows-GNU-OBJC.cmake

@@ -0,0 +1,2 @@
+include(Platform/Windows-GNU)
+__windows_compiler_gnu(OBJC)

+ 1 - 0
Modules/Platform/Windows-GNU-OBJCXX-ABI.cmake

@@ -0,0 +1 @@
+__windows_compiler_gnu_abi(OBJCXX)

+ 2 - 0
Modules/Platform/Windows-GNU-OBJCXX.cmake

@@ -0,0 +1,2 @@
+include(Platform/Windows-GNU)
+__windows_compiler_gnu(OBJCXX)