summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitlab/.gitignore1
-rw-r--r--.gitlab/ci/configure_debian12_makefiles_clang.cmake4
-rw-r--r--.gitlab/ci/configure_debian12_ninja_clang.cmake4
-rw-r--r--.gitlab/ci/env_debian12_makefiles_clang.sh4
-rw-r--r--.gitlab/ci/env_debian12_ninja_clang.sh4
-rw-r--r--.gitlab/ci/ticlang-env.sh2
-rwxr-xr-x.gitlab/ci/ticlang.sh28
-rw-r--r--Help/manual/cmake-compile-features.7.rst1
-rw-r--r--Help/release/3.29.rst8
-rw-r--r--Help/variable/CMAKE_LANG_COMPILER_ID.rst2
-rw-r--r--Modules/CMakeCompilerIdDetection.cmake1
-rw-r--r--Modules/CMakeDetermineASMCompiler.cmake4
-rw-r--r--Modules/CMakeDetermineCCompiler.cmake5
-rw-r--r--Modules/CMakeDetermineCXXCompiler.cmake5
-rw-r--r--Modules/CMakeDetermineCompilerId.cmake3
-rw-r--r--Modules/CMakePlatformId.h.in8
-rw-r--r--Modules/Compiler/TIClang-ASM.cmake9
-rw-r--r--Modules/Compiler/TIClang-C-FeatureTests.cmake1
-rw-r--r--Modules/Compiler/TIClang-C.cmake23
-rw-r--r--Modules/Compiler/TIClang-CXX-FeatureTests.cmake1
-rw-r--r--Modules/Compiler/TIClang-CXX.cmake25
-rw-r--r--Modules/Compiler/TIClang-DetermineCompiler.cmake10
-rw-r--r--Modules/Compiler/TIClang.cmake30
-rw-r--r--Modules/FindCUDAToolkit.cmake4
-rw-r--r--Modules/FindMatlab.cmake87
-rw-r--r--Modules/Platform/Apple-Clang.cmake6
-rw-r--r--Modules/Platform/Windows-Clang-OBJC.cmake18
-rw-r--r--Modules/Platform/Windows-Clang-OBJCXX.cmake18
-rw-r--r--Modules/Platform/Windows-GNU-OBJC-ABI.cmake1
-rw-r--r--Modules/Platform/Windows-GNU-OBJC.cmake2
-rw-r--r--Modules/Platform/Windows-GNU-OBJCXX-ABI.cmake1
-rw-r--r--Modules/Platform/Windows-GNU-OBJCXX.cmake2
-rw-r--r--Source/CMakeVersion.cmake2
-rw-r--r--Source/cmLocalGenerator.cxx51
-rw-r--r--Source/cmQtAutoGenInitializer.cxx21
-rw-r--r--Tests/RunCMake/Autogen/RccExample.cmake4
-rw-r--r--Tests/RunCMake/Autogen/RunCMakeTest.cmake21
-rw-r--r--Tests/RunCMake/CMakeLists.txt6
-rw-r--r--Tests/RunCMake/CMakePackage/RunCMakeTest.cmake7
-rw-r--r--Tests/RunCMake/CMakePackage/apple-export-common.cmake4
-rw-r--r--Tests/RunCMake/TIClang/CMakeLists.txt3
-rw-r--r--Tests/RunCMake/TIClang/RunCMakeTest.cmake61
-rw-r--r--Tests/RunCMake/TIClang/libmod.c4
-rw-r--r--Tests/RunCMake/TIClang/module.c14
-rw-r--r--Tests/RunCMake/TIClang/module.cxx7
-rw-r--r--Tests/RunCMake/TIClang/module.h12
-rw-r--r--Tests/RunCMake/TIClang/module.s9
-rw-r--r--Tests/RunCMake/TIClang/ticlang-asm.cmake5
-rw-r--r--Tests/RunCMake/TIClang/ticlang-c.cmake5
-rw-r--r--Tests/RunCMake/TIClang/ticlang-cxx.cmake5
-rw-r--r--Tests/RunCMake/TIClang/ticlang-lib.cmake10
-rw-r--r--Tests/RunCMake/XcFramework/RunCMakeTest.cmake35
-rw-r--r--Tests/RunCMake/XcodeProject-Device/DeploymentTarget.c4
-rw-r--r--Tests/RunCMake/XcodeProject-Device/RunCMakeTest.cmake46
54 files changed, 537 insertions, 121 deletions
diff --git a/.gitlab/.gitignore b/.gitlab/.gitignore
index 0e34b1b..83e21d5 100644
--- a/.gitlab/.gitignore
+++ b/.gitlab/.gitignore
@@ -17,6 +17,7 @@
/qt*
/sccache*
/swift
+/ticlang
/unstable-jom*
/watcom
/wix*
diff --git a/.gitlab/ci/configure_debian12_makefiles_clang.cmake b/.gitlab/ci/configure_debian12_makefiles_clang.cmake
index 20863a2..69f1e7c 100644
--- a/.gitlab/ci/configure_debian12_makefiles_clang.cmake
+++ b/.gitlab/ci/configure_debian12_makefiles_clang.cmake
@@ -1 +1,5 @@
+if (NOT "$ENV{CMAKE_CI_NIGHTLY}" STREQUAL "")
+ set(CMake_TEST_TICLANG_TOOLCHAINS "$ENV{CI_PROJECT_DIR}/.gitlab/ticlang" CACHE PATH "")
+endif()
+
include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/configure_debian12_ninja_clang.cmake b/.gitlab/ci/configure_debian12_ninja_clang.cmake
index 20863a2..69f1e7c 100644
--- a/.gitlab/ci/configure_debian12_ninja_clang.cmake
+++ b/.gitlab/ci/configure_debian12_ninja_clang.cmake
@@ -1 +1,5 @@
+if (NOT "$ENV{CMAKE_CI_NIGHTLY}" STREQUAL "")
+ set(CMake_TEST_TICLANG_TOOLCHAINS "$ENV{CI_PROJECT_DIR}/.gitlab/ticlang" CACHE PATH "")
+endif()
+
include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/env_debian12_makefiles_clang.sh b/.gitlab/ci/env_debian12_makefiles_clang.sh
index eda7c1f..e46aa29 100644
--- a/.gitlab/ci/env_debian12_makefiles_clang.sh
+++ b/.gitlab/ci/env_debian12_makefiles_clang.sh
@@ -1,2 +1,6 @@
+if test "$CMAKE_CI_NIGHTLY" = "true"; then
+ source .gitlab/ci/ticlang-env.sh
+fi
+
export CC=/usr/bin/clang-15
export CXX=/usr/bin/clang++-15
diff --git a/.gitlab/ci/env_debian12_ninja_clang.sh b/.gitlab/ci/env_debian12_ninja_clang.sh
index eda7c1f..e46aa29 100644
--- a/.gitlab/ci/env_debian12_ninja_clang.sh
+++ b/.gitlab/ci/env_debian12_ninja_clang.sh
@@ -1,2 +1,6 @@
+if test "$CMAKE_CI_NIGHTLY" = "true"; then
+ source .gitlab/ci/ticlang-env.sh
+fi
+
export CC=/usr/bin/clang-15
export CXX=/usr/bin/clang++-15
diff --git a/.gitlab/ci/ticlang-env.sh b/.gitlab/ci/ticlang-env.sh
new file mode 100644
index 0000000..448c0d7
--- /dev/null
+++ b/.gitlab/ci/ticlang-env.sh
@@ -0,0 +1,2 @@
+.gitlab/ci/ticlang.sh
+.gitlab/ticlang/bin/tiarmclang --version
diff --git a/.gitlab/ci/ticlang.sh b/.gitlab/ci/ticlang.sh
new file mode 100755
index 0000000..66fa863
--- /dev/null
+++ b/.gitlab/ci/ticlang.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+set -e
+
+case "$(uname -s)-$(uname -m)" in
+ Linux-x86_64)
+ shatool="sha256sum"
+ sha256sum="c69ac58e403b82eac1c407cc67b35fab5d95c5d8db75b019095f9412aacff27d"
+ filename="ti_cgt_armllvm_3.2.1.LTS_linux-x64_installer.bin"
+ dirname="ti-cgt-armllvm_3.2.1.LTS"
+ ;;
+ *)
+ echo "Unrecognized platform $(uname -s)-$(uname -m)"
+ exit 1
+ ;;
+esac
+readonly shatool
+readonly sha256sum
+
+cd .gitlab
+
+echo "$sha256sum $filename" > ticlang.sha256sum
+curl -OL "https://cmake.org/files/dependencies/internal/$filename"
+$shatool --check ticlang.sha256sum
+chmod +x "$filename"
+"./$filename" --mode unattended --prefix .
+mv "$dirname" ticlang
+rm -f "$filename" ticlang.sha256sum
diff --git a/Help/manual/cmake-compile-features.7.rst b/Help/manual/cmake-compile-features.7.rst
index 1e87ec6..fb93222 100644
--- a/Help/manual/cmake-compile-features.7.rst
+++ b/Help/manual/cmake-compile-features.7.rst
@@ -266,6 +266,7 @@ versions specified for each:
* ``PGI``: PGI version 12.10+.
* ``NVHPC``: NVIDIA HPC compilers version 11.0+.
* ``TI``: Texas Instruments compiler.
+* ``TIClang``: Texas Instruments Clang-based compilers.
* ``XL``: IBM XL version 10.1+.
CMake is currently aware of the :prop_tgt:`C standards <C_STANDARD>` and
diff --git a/Help/release/3.29.rst b/Help/release/3.29.rst
index a655f62..659237e 100644
--- a/Help/release/3.29.rst
+++ b/Help/release/3.29.rst
@@ -39,6 +39,14 @@ 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``.
+
Commands
--------
diff --git a/Help/variable/CMAKE_LANG_COMPILER_ID.rst b/Help/variable/CMAKE_LANG_COMPILER_ID.rst
index 6893eea..b1e2687 100644
--- a/Help/variable/CMAKE_LANG_COMPILER_ID.rst
+++ b/Help/variable/CMAKE_LANG_COMPILER_ID.rst
@@ -43,6 +43,7 @@ Value Name
``SunPro`` Oracle Solaris Studio
``Tasking`` `Tasking Compiler Toolsets`_
``TI`` Texas Instruments
+``TIClang`` `Texas Instruments Clang-based Compilers`_
``TinyCC`` `Tiny C Compiler`_
``XL``, ``VisualAge``, ``zOS`` IBM XL
``XLClang`` IBM Clang-based XL
@@ -68,3 +69,4 @@ languages.
.. _Small Device C Compiler: https://sdcc.sourceforge.net
.. _Tiny C Compiler: https://bellard.org/tcc
.. _Tasking Compiler Toolsets: https://www.tasking.com
+.. _Texas Instruments Clang-based Compilers: https://www.ti.com/tool/download/ARM-CGT-CLANG
diff --git a/Modules/CMakeCompilerIdDetection.cmake b/Modules/CMakeCompilerIdDetection.cmake
index e4fa43f..2817d37 100644
--- a/Modules/CMakeCompilerIdDetection.cmake
+++ b/Modules/CMakeCompilerIdDetection.cmake
@@ -80,6 +80,7 @@ function(compiler_id_detection outvar lang)
ARMCC
AppleClang
ARMClang
+ TIClang
)
list(APPEND ordered_compilers
Clang
diff --git a/Modules/CMakeDetermineASMCompiler.cmake b/Modules/CMakeDetermineASMCompiler.cmake
index 6d7d17e..2042e64 100644
--- a/Modules/CMakeDetermineASMCompiler.cmake
+++ b/Modules/CMakeDetermineASMCompiler.cmake
@@ -102,6 +102,10 @@ if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER_ID)
set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_TI "-h")
set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_TI "Texas Instruments")
+ list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS TIClang )
+ set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_TIClang "--version")
+ set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_TIClang "(TI (.*) Clang Compiler)")
+
list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS IAR)
set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_IAR )
set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_IAR "IAR Assembler")
diff --git a/Modules/CMakeDetermineCCompiler.cmake b/Modules/CMakeDetermineCCompiler.cmake
index 8beebc5..73b6cee 100644
--- a/Modules/CMakeDetermineCCompiler.cmake
+++ b/Modules/CMakeDetermineCCompiler.cmake
@@ -166,6 +166,11 @@ if (NOT _CMAKE_TOOLCHAIN_PREFIX)
set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
set(_CMAKE_TOOLCHAIN_SUFFIX ${CMAKE_MATCH_4})
set(_CMAKE_COMPILER_SUFFIX ${CMAKE_MATCH_6})
+ elseif(CMAKE_C_COMPILER_ID MATCHES "TIClang")
+ if (COMPILER_BASENAME MATCHES "^(.+)?clang(\\.exe)?$")
+ set(_CMAKE_TOOLCHAIN_PREFIX "${CMAKE_MATCH_1}")
+ set(_CMAKE_TOOLCHAIN_SUFFIX "${CMAKE_MATCH_2}")
+ endif()
elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
if(CMAKE_C_COMPILER_TARGET)
set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_C_COMPILER_TARGET}-)
diff --git a/Modules/CMakeDetermineCXXCompiler.cmake b/Modules/CMakeDetermineCXXCompiler.cmake
index 40934ec..891ba6e 100644
--- a/Modules/CMakeDetermineCXXCompiler.cmake
+++ b/Modules/CMakeDetermineCXXCompiler.cmake
@@ -171,6 +171,11 @@ if (NOT _CMAKE_TOOLCHAIN_PREFIX)
set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
set(_CMAKE_TOOLCHAIN_SUFFIX ${CMAKE_MATCH_3})
set(_CMAKE_COMPILER_SUFFIX ${CMAKE_MATCH_5})
+ elseif(CMAKE_CXX_COMPILER_ID MATCHES "TIClang")
+ if (COMPILER_BASENAME MATCHES "^(.+)?clang(\\.exe)?$")
+ set(_CMAKE_TOOLCHAIN_PREFIX "${CMAKE_MATCH_1}")
+ set(_CMAKE_TOOLCHAIN_SUFFIX "${CMAKE_MATCH_2}")
+ endif()
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
if(CMAKE_CXX_COMPILER_TARGET)
set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_CXX_COMPILER_TARGET}-)
diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake
index 25aacca..1cf1e79 100644
--- a/Modules/CMakeDetermineCompilerId.cmake
+++ b/Modules/CMakeDetermineCompilerId.cmake
@@ -280,7 +280,8 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
endif()
elseif("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xGNU"
OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xAppleClang"
- OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xFujitsuClang")
+ OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xFujitsuClang"
+ OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xTIClang")
set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "GNU")
elseif("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xMSVC")
set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "MSVC")
diff --git a/Modules/CMakePlatformId.h.in b/Modules/CMakePlatformId.h.in
index 32b7166..fd0367e 100644
--- a/Modules/CMakePlatformId.h.in
+++ b/Modules/CMakePlatformId.h.in
@@ -219,6 +219,14 @@
# define ARCHITECTURE_ID ""
# endif
+#elif defined(__clang__) && defined(__ti__)
+# if defined(__ARM_ARCH)
+# define ARCHITECTURE_ID "Arm"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
#elif defined(__TI_COMPILER_VERSION__)
# if defined(__TI_ARM__)
# define ARCHITECTURE_ID "ARM"
diff --git a/Modules/Compiler/TIClang-ASM.cmake b/Modules/Compiler/TIClang-ASM.cmake
new file mode 100644
index 0000000..6bb07e3
--- /dev/null
+++ b/Modules/Compiler/TIClang-ASM.cmake
@@ -0,0 +1,9 @@
+include(Compiler/TIClang)
+
+set(CMAKE_ASM_OUTPUT_EXTENSION ".o")
+set(CMAKE_ASM_OUTPUT_EXTENSION_REPLACE 1)
+
+set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -c -o <OBJECT> <SOURCE>")
+set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS S;s;asm;msa)
+
+__compiler_ticlang(ASM)
diff --git a/Modules/Compiler/TIClang-C-FeatureTests.cmake b/Modules/Compiler/TIClang-C-FeatureTests.cmake
new file mode 100644
index 0000000..ef79229
--- /dev/null
+++ b/Modules/Compiler/TIClang-C-FeatureTests.cmake
@@ -0,0 +1 @@
+include(Compiler/Clang-C-FeatureTests)
diff --git a/Modules/Compiler/TIClang-C.cmake b/Modules/Compiler/TIClang-C.cmake
new file mode 100644
index 0000000..2721fef
--- /dev/null
+++ b/Modules/Compiler/TIClang-C.cmake
@@ -0,0 +1,23 @@
+include(Compiler/Clang-C)
+include(Compiler/TIClang)
+__compiler_ticlang(C)
+
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+ AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+ AND CMAKE_DEPFILE_FLAGS_C)
+ # dependencies are computed by the compiler itself
+ set(CMAKE_C_DEPFILE_FORMAT gcc)
+ set(CMAKE_C_DEPENDS_USE_COMPILER TRUE)
+endif()
+
+set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
+set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
+set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
+
+set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
+set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
+set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
+
+set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
+set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
+set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
diff --git a/Modules/Compiler/TIClang-CXX-FeatureTests.cmake b/Modules/Compiler/TIClang-CXX-FeatureTests.cmake
new file mode 100644
index 0000000..e038e80
--- /dev/null
+++ b/Modules/Compiler/TIClang-CXX-FeatureTests.cmake
@@ -0,0 +1 @@
+include(Compiler/Clang-CXX-FeatureTests)
diff --git a/Modules/Compiler/TIClang-CXX.cmake b/Modules/Compiler/TIClang-CXX.cmake
new file mode 100644
index 0000000..860bb42
--- /dev/null
+++ b/Modules/Compiler/TIClang-CXX.cmake
@@ -0,0 +1,25 @@
+include(Compiler/Clang-CXX)
+include(Compiler/TIClang)
+__compiler_ticlang(CXX)
+
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+ AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+ AND CMAKE_DEPFILE_FLAGS_CXX)
+ # dependencies are computed by the compiler itself
+ set(CMAKE_CXX_DEPFILE_FORMAT gcc)
+ set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
+endif()
+
+set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++98")
+set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
+set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
+
+set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
+set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
+
+set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
+set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
+set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
+
+set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
+set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
diff --git a/Modules/Compiler/TIClang-DetermineCompiler.cmake b/Modules/Compiler/TIClang-DetermineCompiler.cmake
new file mode 100644
index 0000000..2447fdf
--- /dev/null
+++ b/Modules/Compiler/TIClang-DetermineCompiler.cmake
@@ -0,0 +1,10 @@
+# TI Clang-based Toolchains
+set(_compiler_id_pp_test "defined(__clang__) && defined(__ti__)")
+
+set(_compiler_id_version_compute "
+ # define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@(__ti_major__)
+ # define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(__ti_minor__)
+ # define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__ti_patchlevel__)")
+
+string(APPEND _compiler_id_version_compute "
+# define @PREFIX@COMPILER_VERSION_INTERNAL @MACRO_DEC@(__ti_version__)")
diff --git a/Modules/Compiler/TIClang.cmake b/Modules/Compiler/TIClang.cmake
new file mode 100644
index 0000000..4965e62
--- /dev/null
+++ b/Modules/Compiler/TIClang.cmake
@@ -0,0 +1,30 @@
+if(__COMPILER_TICLANG)
+ return()
+endif()
+set(__COMPILER_TICLANG TRUE)
+
+include(Compiler/CMakeCommonCompilerMacros)
+
+# get linker supported cpu list
+macro(__compiler_ticlang lang)
+ set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "-Xlinker ")
+
+ set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
+
+ set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
+
+ set(CMAKE_${lang}_COMPILE_OBJECT "<CMAKE_${lang}_COMPILER> -c <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
+
+ set(CMAKE_${lang}_LINK_EXECUTABLE "<CMAKE_${lang}_COMPILER> <FLAGS> -Xlinker --output_file=<TARGET> -Xlinker --map_file=<TARGET_NAME>.map -Xlinker --rom_model <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> <LINK_LIBRARIES>")
+
+ set(CMAKE_${lang}_ARCHIVE_CREATE "<CMAKE_AR> cr <TARGET> <OBJECTS>")
+ set(CMAKE_${lang}_ARCHIVE_APPEND "<CMAKE_AR> r <TARGET> <OBJECTS>")
+ set(CMAKE_${lang}_ARCHIVE_FINISH "")
+
+ set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Xlinker" " ")
+ set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP)
+endmacro()
+
+set(CMAKE_EXECUTABLE_SUFFIX ".out")
+set(CMAKE_LIBRARY_PATH_FLAG "-Wl,--search_path=")
+set(CMAKE_LINK_LIBRARY_FLAG "-Wl,--library=")
diff --git a/Modules/FindCUDAToolkit.cmake b/Modules/FindCUDAToolkit.cmake
index 1eaf36b..2229de6 100644
--- a/Modules/FindCUDAToolkit.cmake
+++ b/Modules/FindCUDAToolkit.cmake
@@ -1137,9 +1137,6 @@ if(CUDAToolkit_FOUND)
target_link_directories(CUDA::toolkit INTERFACE "${CUDAToolkit_LIBRARY_DIR}")
endif()
- _CUDAToolkit_find_and_add_import_lib(cuda_driver ALT cuda)
-
-
# setup dependencies that are required for cudart/cudart_static when building
# on linux. These are generally only required when using the CUDA toolkit
# when CUDA language is disabled
@@ -1162,6 +1159,7 @@ if(CUDAToolkit_FOUND)
endif()
endif()
+ _CUDAToolkit_find_and_add_import_lib(cuda_driver ALT cuda DEPS cudart_static_deps)
_CUDAToolkit_find_and_add_import_lib(cudart DEPS cudart_static_deps)
_CUDAToolkit_find_and_add_import_lib(cudart_static DEPS cudart_static_deps)
diff --git a/Modules/FindMatlab.cmake b/Modules/FindMatlab.cmake
index 6c80506..89f1757 100644
--- a/Modules/FindMatlab.cmake
+++ b/Modules/FindMatlab.cmake
@@ -1098,14 +1098,27 @@ function(matlab_add_mex)
endif()
if(NOT Matlab_VERSION_STRING VERSION_LESS "9.1") # For 9.1 (R2016b) and newer, add version source file
+ # Compilers officially supported by Matlab 9.1 (R2016b):
+ # MinGW 4.9, MSVC 2012, Intel C++ 2013, Xcode 6, GCC 4.9
+ # These compilers definitely support the -w flag to suppress warnings.
+ # Other compilers (Clang) may support the -w flag and can be added here.
+ set(_Matlab_silenceable_compilers AppleClang Clang GNU Intel IntelLLVM MSVC)
+
# Add the correct version file depending on which languages are enabled in the project
if(CMAKE_C_COMPILER_LOADED)
# If C is enabled, use the .c file as it will work fine also with C++
set(MEX_VERSION_FILE "${Matlab_ROOT_DIR}/extern/version/c_mexapi_version.c")
+ # Silence warnings for version source file
+ if("${CMAKE_C_COMPILER_ID}" IN_LIST _Matlab_silenceable_compilers)
+ set_source_files_properties("${MEX_VERSION_FILE}" PROPERTIES COMPILE_OPTIONS -w)
+ endif()
elseif(CMAKE_CXX_COMPILER_LOADED)
# If C is not enabled, check if CXX is enabled and use the .cpp file
# to avoid that the .c file is silently ignored
set(MEX_VERSION_FILE "${Matlab_ROOT_DIR}/extern/version/cpp_mexapi_version.cpp")
+ if("${CMAKE_CXX_COMPILER_ID}" IN_LIST _Matlab_silenceable_compilers)
+ set_source_files_properties("${MEX_VERSION_FILE}" PROPERTIES COMPILE_OPTIONS -w)
+ endif()
else()
# If neither C or CXX is enabled, warn because we cannot add the source.
# TODO: add support for fortran mex files
@@ -1624,62 +1637,29 @@ list(LENGTH _matlab_possible_roots _numbers_of_matlab_roots)
set(Matlab_VERSION_STRING "NOTFOUND")
set(Matlab_Or_MCR "UNKNOWN")
if(_numbers_of_matlab_roots GREATER 0)
- if(Matlab_FIND_VERSION_EXACT)
- set(_list_index -1)
- foreach(_matlab_root_index RANGE 1 ${_numbers_of_matlab_roots} 3)
- list(GET _matlab_possible_roots ${_matlab_root_index} _matlab_root_version)
- # only the major.minor version is used
- string(REGEX REPLACE "^([0-9]+\\.[0-9]+).*" "\\1" _matlab_root_version "${_matlab_root_version}")
- if(_matlab_root_version VERSION_EQUAL Matlab_FIND_VERSION)
- set(_list_index ${_matlab_root_index})
- break()
- endif()
- endforeach()
-
- if(_list_index LESS 0)
- set(_list_index 1)
+ set(_list_index -1)
+ foreach(_matlab_root_index RANGE 1 ${_numbers_of_matlab_roots} 3)
+ list(GET _matlab_possible_roots ${_matlab_root_index} _matlab_root_version)
+ find_package_check_version(${_matlab_root_version} _matlab_version_ok HANDLE_VERSION_RANGE)
+ if(_matlab_version_ok)
+ set(_list_index ${_matlab_root_index})
+ break()
endif()
+ endforeach()
- math(EXPR _matlab_or_mcr_index "${_list_index} - 1")
- math(EXPR _matlab_root_dir_index "${_list_index} + 1")
-
- list(GET _matlab_possible_roots ${_matlab_or_mcr_index} Matlab_Or_MCR)
- list(GET _matlab_possible_roots ${_list_index} Matlab_VERSION_STRING)
- list(GET _matlab_possible_roots ${_matlab_root_dir_index} Matlab_ROOT_DIR)
- elseif(DEFINED Matlab_FIND_VERSION)
- set(_list_index -1)
- foreach(_matlab_root_index RANGE 1 ${_numbers_of_matlab_roots} 3)
- list(GET _matlab_possible_roots ${_matlab_root_index} _matlab_root_version)
- if(_matlab_root_version VERSION_GREATER_EQUAL Matlab_FIND_VERSION)
- set(_list_index ${_matlab_root_index})
- break()
- endif()
- endforeach()
-
- if(_list_index LESS 0)
- set(_list_index 1)
- endif()
+ if(_list_index LESS 0)
+ set(_list_index 1)
+ endif()
- math(EXPR _matlab_or_mcr_index "${_list_index} - 1")
- math(EXPR _matlab_root_dir_index "${_list_index} + 1")
- list(GET _matlab_possible_roots ${_matlab_or_mcr_index} Matlab_Or_MCR)
- list(GET _matlab_possible_roots ${_list_index} Matlab_VERSION_STRING)
- list(GET _matlab_possible_roots ${_matlab_root_dir_index} Matlab_ROOT_DIR)
- # adding a warning in case of ambiguity
- if(_numbers_of_matlab_roots GREATER 3 AND MATLAB_FIND_DEBUG)
- message(WARNING "[MATLAB] Found several distributions of Matlab. Setting the current version to ${Matlab_VERSION_STRING} (located ${Matlab_ROOT_DIR})."
- " If this is not the desired behavior, use the EXACT keyword or provide the -DMatlab_ROOT_DIR=... on the command line")
- endif()
- else()
- list(GET _matlab_possible_roots 0 Matlab_Or_MCR)
- list(GET _matlab_possible_roots 1 Matlab_VERSION_STRING)
- list(GET _matlab_possible_roots 2 Matlab_ROOT_DIR)
-
- # adding a warning in case of ambiguity
- if(_numbers_of_matlab_roots GREATER 3 AND MATLAB_FIND_DEBUG)
- message(WARNING "[MATLAB] Found several distributions of Matlab. Setting the current version to ${Matlab_VERSION_STRING} (located ${Matlab_ROOT_DIR})."
- " If this is not the desired behavior, use the EXACT keyword or provide the -DMatlab_ROOT_DIR=... on the command line")
- endif()
+ math(EXPR _matlab_or_mcr_index "${_list_index} - 1")
+ math(EXPR _matlab_root_dir_index "${_list_index} + 1")
+ list(GET _matlab_possible_roots ${_matlab_or_mcr_index} Matlab_Or_MCR)
+ list(GET _matlab_possible_roots ${_list_index} Matlab_VERSION_STRING)
+ list(GET _matlab_possible_roots ${_matlab_root_dir_index} Matlab_ROOT_DIR)
+ # adding a warning in case of ambiguity
+ if(_numbers_of_matlab_roots GREATER 3 AND NOT Matlab_FIND_VERSION_EXACT AND MATLAB_FIND_DEBUG)
+ message(WARNING "[MATLAB] Found several distributions of Matlab. Setting the current version to ${Matlab_VERSION_STRING} (located ${Matlab_ROOT_DIR})."
+ " If this is not the desired behavior, use the EXACT keyword or provide the -DMatlab_ROOT_DIR=... on the command line")
endif()
endif()
@@ -2030,6 +2010,7 @@ find_package_handle_standard_args(
FOUND_VAR Matlab_FOUND
REQUIRED_VARS ${_matlab_required_variables}
VERSION_VAR Matlab_VERSION
+ HANDLE_VERSION_RANGE
HANDLE_COMPONENTS)
unset(_matlab_required_variables)
diff --git a/Modules/Platform/Apple-Clang.cmake b/Modules/Platform/Apple-Clang.cmake
index 7986a37..bd5ba9a 100644
--- a/Modules/Platform/Apple-Clang.cmake
+++ b/Modules/Platform/Apple-Clang.cmake
@@ -35,10 +35,10 @@ macro(__apple_compiler_clang lang)
set(CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG "-mtvos-version-min=")
elseif(_CMAKE_OSX_SYSROOT_PATH MATCHES "/AppleTVSimulator")
set(CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG "-mtvos-simulator-version-min=")
- elseif(_CMAKE_OSX_SYSROOT_PATH MATCHES "/XROS")
- set(CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG "-mtargetos=xros")
+ elseif(_CMAKE_OSX_SYSROOT_PATH MATCHES "/XROS")
+ set(CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG "--target=<ARCH>-apple-xros<VERSION_MIN>")
elseif(_CMAKE_OSX_SYSROOT_PATH MATCHES "/XRSimulator")
- set(CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG "-mtargetos=xros")
+ set(CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG "--target=<ARCH>-apple-xros<VERSION_MIN>-simulator")
elseif(_CMAKE_OSX_SYSROOT_PATH MATCHES "/WatchOS")
set(CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG "-mwatchos-version-min=")
elseif(_CMAKE_OSX_SYSROOT_PATH MATCHES "/WatchSimulator")
diff --git a/Modules/Platform/Windows-Clang-OBJC.cmake b/Modules/Platform/Windows-Clang-OBJC.cmake
new file mode 100644
index 0000000..7babb98
--- /dev/null
+++ b/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()
diff --git a/Modules/Platform/Windows-Clang-OBJCXX.cmake b/Modules/Platform/Windows-Clang-OBJCXX.cmake
new file mode 100644
index 0000000..3bc1673
--- /dev/null
+++ b/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()
diff --git a/Modules/Platform/Windows-GNU-OBJC-ABI.cmake b/Modules/Platform/Windows-GNU-OBJC-ABI.cmake
new file mode 100644
index 0000000..c8b2ea6
--- /dev/null
+++ b/Modules/Platform/Windows-GNU-OBJC-ABI.cmake
@@ -0,0 +1 @@
+__windows_compiler_gnu_abi(OBJC)
diff --git a/Modules/Platform/Windows-GNU-OBJC.cmake b/Modules/Platform/Windows-GNU-OBJC.cmake
new file mode 100644
index 0000000..42cf3f8
--- /dev/null
+++ b/Modules/Platform/Windows-GNU-OBJC.cmake
@@ -0,0 +1,2 @@
+include(Platform/Windows-GNU)
+__windows_compiler_gnu(OBJC)
diff --git a/Modules/Platform/Windows-GNU-OBJCXX-ABI.cmake b/Modules/Platform/Windows-GNU-OBJCXX-ABI.cmake
new file mode 100644
index 0000000..9a11514
--- /dev/null
+++ b/Modules/Platform/Windows-GNU-OBJCXX-ABI.cmake
@@ -0,0 +1 @@
+__windows_compiler_gnu_abi(OBJCXX)
diff --git a/Modules/Platform/Windows-GNU-OBJCXX.cmake b/Modules/Platform/Windows-GNU-OBJCXX.cmake
new file mode 100644
index 0000000..072cf28
--- /dev/null
+++ b/Modules/Platform/Windows-GNU-OBJCXX.cmake
@@ -0,0 +1,2 @@
+include(Platform/Windows-GNU)
+__windows_compiler_gnu(OBJCXX)
diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake
index 2f2f0ea..a63c0fa 100644
--- a/Source/CMakeVersion.cmake
+++ b/Source/CMakeVersion.cmake
@@ -1,7 +1,7 @@
# CMake version number components.
set(CMake_VERSION_MAJOR 3)
set(CMake_VERSION_MINOR 29)
-set(CMake_VERSION_PATCH 20240209)
+set(CMake_VERSION_PATCH 20240213)
#set(CMake_VERSION_RC 0)
set(CMake_VERSION_IS_DIRTY 0)
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index e7fa717..0e539fe 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -2011,14 +2011,49 @@ void cmLocalGenerator::AddArchitectureFlags(std::string& flags,
cmValue deploymentTarget =
this->Makefile->GetDefinition("CMAKE_OSX_DEPLOYMENT_TARGET");
- std::string deploymentTargetFlagVar =
- "CMAKE_" + lang + "_OSX_DEPLOYMENT_TARGET_FLAG";
- cmValue deploymentTargetFlag =
- this->Makefile->GetDefinition(deploymentTargetFlagVar);
- if (cmNonempty(deploymentTargetFlag) && cmNonempty(deploymentTarget)) {
- flags += " ";
- flags += *deploymentTargetFlag;
- flags += *deploymentTarget;
+ if (cmNonempty(deploymentTarget)) {
+ std::string deploymentTargetFlagVar =
+ "CMAKE_" + lang + "_OSX_DEPLOYMENT_TARGET_FLAG";
+ cmValue deploymentTargetFlag =
+ this->Makefile->GetDefinition(deploymentTargetFlagVar);
+ if (cmNonempty(deploymentTargetFlag) &&
+ // CMAKE_<LANG>_COMPILER_TARGET overrides a --target= for
+ // CMAKE_OSX_DEPLOYMENT_TARGET, e.g., for visionOS.
+ (!cmHasLiteralPrefix(*deploymentTarget, "--target=") ||
+ this->Makefile
+ ->GetDefinition(cmStrCat("CMAKE_", lang, "_COMPILER_TARGET"))
+ .IsEmpty())) {
+ std::string flag = *deploymentTargetFlag;
+
+ // Add the deployment target architecture to the flag, if needed.
+ static const std::string kARCH = "<ARCH>";
+ std::string::size_type archPos = flag.find(kARCH);
+ if (archPos != std::string::npos) {
+ // This placeholder is meant for visionOS, so default to arm64
+ // unless only non-arm64 archs are given.
+ std::string const arch =
+ (archs.empty() || cm::contains(archs, "arm64")) ? "arm64"
+ : archs[0];
+ // Replace the placeholder with its value.
+ flag = cmStrCat(flag.substr(0, archPos), arch,
+ flag.substr(archPos + kARCH.size()));
+ }
+
+ // Add the deployment target version to the flag.
+ static const std::string kVERSION_MIN = "<VERSION_MIN>";
+ std::string::size_type verPos = flag.find(kVERSION_MIN);
+ if (verPos != std::string::npos) {
+ // Replace the placeholder with its value.
+ flag = cmStrCat(flag.substr(0, verPos), *deploymentTarget,
+ flag.substr(verPos + kVERSION_MIN.size()));
+ } else {
+ // There is no placeholder, so append the value.
+ flag = cmStrCat(flag, *deploymentTarget);
+ }
+
+ flags += " ";
+ flags += flag;
+ }
}
}
}
diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx
index aaf1817..8542206 100644
--- a/Source/cmQtAutoGenInitializer.cxx
+++ b/Source/cmQtAutoGenInitializer.cxx
@@ -883,6 +883,27 @@ bool cmQtAutoGenInitializer::InitRcc()
}
}
+ // Disable zstd if it is not supported
+ {
+ std::string const qtFeatureZSTD = "QT_FEATURE_zstd";
+ if (this->GenTarget->Target->GetMakefile()->IsDefinitionSet(
+ qtFeatureZSTD)) {
+ const auto zstdDef =
+ this->GenTarget->Target->GetMakefile()->GetSafeDefinition(
+ qtFeatureZSTD);
+ const auto zstdVal = cmValue(zstdDef);
+ if (zstdVal.IsOff()) {
+ auto const& kw = this->GlobalInitializer->kw();
+ auto rccOptions = this->GenTarget->GetSafeProperty(kw.AUTORCC_OPTIONS);
+ std::string const nozstd = "--no-zstd";
+ if (rccOptions.find(nozstd) == std::string::npos) {
+ rccOptions.append(";" + nozstd + ";");
+ }
+ this->GenTarget->Target->SetProperty(kw.AUTORCC_OPTIONS, rccOptions);
+ }
+ }
+ }
+
return true;
}
diff --git a/Tests/RunCMake/Autogen/RccExample.cmake b/Tests/RunCMake/Autogen/RccExample.cmake
index 4554eb0..ade0fef 100644
--- a/Tests/RunCMake/Autogen/RccExample.cmake
+++ b/Tests/RunCMake/Autogen/RccExample.cmake
@@ -9,3 +9,7 @@ target_link_libraries(dummy Qt${with_qt_version}::Core
Qt${with_qt_version}::Gui)
set_target_properties(dummy PROPERTIES AUTORCC ON)
+
+if(DEFINED ZSTD_VALUE)
+ set(QT_FEATURE_zstd ${ZSTD_VALUE})
+endif()
diff --git a/Tests/RunCMake/Autogen/RunCMakeTest.cmake b/Tests/RunCMake/Autogen/RunCMakeTest.cmake
index d0bbbb0..0036551 100644
--- a/Tests/RunCMake/Autogen/RunCMakeTest.cmake
+++ b/Tests/RunCMake/Autogen/RunCMakeTest.cmake
@@ -463,4 +463,25 @@ ${make_program_stderr}
endblock()
endforeach()
endif()
+
+ if (QtCore_VERSION VERSION_GREATER_EQUAL 6)
+ if (RunCMake_GENERATOR MATCHES "Make|Ninja")
+ foreach(value IN ITEMS ON OFF)
+ block()
+ set(RunCMake_TEST_BINARY_DIR
+ ${RunCMake_BINARY_DIR}/RccNoZTSD-${value}-build)
+ run_cmake_with_options(RccExample ${RunCMake_TEST_OPTIONS}
+ -DCMAKE_AUTOGEN_VERBOSE=ON -DZSTD_VALUE=${value})
+ if (value STREQUAL "OFF")
+ set(RunCMake_TEST_EXPECT_stdout "--no-zstd")
+ else()
+ set(RunCMake_TEST_NOT_EXPECT_stdout "--no-zstd")
+ endif()
+ set(RunCMake_TEST_NO_CLEAN 1)
+ run_cmake_command(RccNoZTSD-${value}-build ${CMAKE_COMMAND}
+ --build . --config Debug)
+ endblock()
+ endforeach()
+ endif()
+ endif()
endif ()
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index 3e22247..d9090d6 100644
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -1177,3 +1177,9 @@ if(CMake_TEST_IAR_TOOLCHAINS)
add_RunCMake_test(IAR -DCMake_TEST_IAR_TOOLCHAINS=${CMake_TEST_IAR_TOOLCHAINS})
set_property(TEST RunCMake.IAR APPEND PROPERTY LABELS "IAR")
endif()
+if(CMake_TEST_TICLANG_TOOLCHAINS)
+ # This is necessary to preserve the LIST variable contents given by user.
+ string(REPLACE ";" "$<SEMICOLON>" TOOLCHAINS "${CMake_TEST_TICLANG_TOOLCHAINS}")
+ add_RunCMake_test(TIClang "-DCMake_TEST_TICLANG_TOOLCHAINS=${TOOLCHAINS}")
+ set_property(TEST RunCMake.TIClang APPEND PROPERTY LABELS "TIClang")
+endif()
diff --git a/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake b/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake
index 4145ccc..32fc7fb 100644
--- a/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake
@@ -64,10 +64,9 @@ if(APPLE AND CMAKE_C_COMPILER_ID STREQUAL "AppleClang")
set(watch_archs "armv7k")
endif()
- #FIXME(#25266): Xcode 15.0 does not have visionOS. Improve this condition.
- #if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15)
- # set(enable_visionos 1)
- #endif()
+ if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15.2)
+ set(enable_visionos 1)
+ endif()
apple_export(macos Darwin "${macos_archs}" macosx)
apple_export(ios iOS "arm64" iphoneos)
diff --git a/Tests/RunCMake/CMakePackage/apple-export-common.cmake b/Tests/RunCMake/CMakePackage/apple-export-common.cmake
index 15e98eb..2c79b7b 100644
--- a/Tests/RunCMake/CMakePackage/apple-export-common.cmake
+++ b/Tests/RunCMake/CMakePackage/apple-export-common.cmake
@@ -21,8 +21,8 @@ generate_apple_platform_selection_file(mylib-config-install.cmake
IOS_SIMULATOR_INCLUDE_FILE ${IOS_SIMULATOR_INCLUDE_FILE}
TVOS_INCLUDE_FILE lib/tvos/cmake/mylib/mylib-targets.cmake
TVOS_SIMULATOR_INCLUDE_FILE lib/tvos-simulator/cmake/mylib/mylib-targets.cmake
- VISIONOS_INCLUDE_FILE lib/watchos/cmake/mylib/mylib-targets.cmake
- VISIONOS_SIMULATOR_INCLUDE_FILE lib/watchos-simulator/cmake/mylib/mylib-targets.cmake
+ VISIONOS_INCLUDE_FILE lib/visionos/cmake/mylib/mylib-targets.cmake
+ VISIONOS_SIMULATOR_INCLUDE_FILE lib/visionos-simulator/cmake/mylib/mylib-targets.cmake
WATCHOS_INCLUDE_FILE lib/watchos/cmake/mylib/mylib-targets.cmake
WATCHOS_SIMULATOR_INCLUDE_FILE lib/watchos-simulator/cmake/mylib/mylib-targets.cmake
)
diff --git a/Tests/RunCMake/TIClang/CMakeLists.txt b/Tests/RunCMake/TIClang/CMakeLists.txt
new file mode 100644
index 0000000..94e43ba
--- /dev/null
+++ b/Tests/RunCMake/TIClang/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.29)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/TIClang/RunCMakeTest.cmake b/Tests/RunCMake/TIClang/RunCMakeTest.cmake
new file mode 100644
index 0000000..898de74
--- /dev/null
+++ b/Tests/RunCMake/TIClang/RunCMakeTest.cmake
@@ -0,0 +1,61 @@
+include(RunCMake)
+
+# Test expects to be given a LIST of toolchain directories where a TIClang
+# compiler binary is expected to be found relative to the "bin" directory:
+# "-DCMake_TEST_TICLANG_TOOLCHAINS=<path1>;<path2>;<path3>"
+if(RunCMake_GENERATOR MATCHES "Makefile|Ninja")
+ set(_ticlang_toolchains "${CMake_TEST_TICLANG_TOOLCHAINS}" )
+endif()
+
+function(run_toolchain case)
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build)
+ run_cmake_with_options(${case} ${ARGN})
+ set(RunCMake_TEST_NO_CLEAN 1)
+ run_cmake_command(${case}-build ${CMAKE_COMMAND} --build .)
+endfunction()
+
+foreach(_ticlang_toolchain_path IN LISTS _ticlang_toolchains)
+ file(GLOB _ticlang_toolchain "${_ticlang_toolchain_path}/bin/*clang" )
+ if(_ticlang_toolchain STREQUAL "")
+ message(WARNING
+ "Could not find a TIClang toolchain at: ${_ticlang_toolchain_path}.")
+ continue()
+ endif()
+
+ message(STATUS "Found TIClang toolchain: ${_ticlang_toolchain}")
+
+ if(_ticlang_toolchain MATCHES "tiarmclang")
+ set(LINK_OPTS "--use_memcpy=fast,--use_memset=fast,-llnk.cmd")
+ set(CMAKE_FLAGS "-mcpu=cortex-r5 -Oz")
+ else()
+ set(CMAKE_FLAGS "")
+ set(LINK_OPTS "")
+ endif()
+
+ run_toolchain(ticlang-c
+ -DCMAKE_SYSTEM_NAME=Generic
+ -DCMAKE_C_COMPILER=${_ticlang_toolchain}
+ -DCMAKE_C_FLAGS=${CMAKE_FLAGS}
+ -DCMAKE_C_LINKER_FLAGS=${LINK_OPTS}
+ )
+
+ run_toolchain(ticlang-cxx
+ -DCMAKE_SYSTEM_NAME=Generic
+ -DCMAKE_CXX_COMPILER=${_ticlang_toolchain}
+ -DCMAKE_CXX_FLAGS=${CMAKE_FLAGS}
+ -DCMAKE_CXX_LINKER_FLAGS=${LINK_OPTS}
+ )
+
+ run_toolchain(ticlang-asm
+ -DCMAKE_SYSTEM_NAME=Generic
+ -DCMAKE_ASM_COMPILER=${_ticlang_toolchain}
+ -DCMAKE_ASM_FLAGS=${CMAKE_FLAGS}
+ )
+
+ run_toolchain(ticlang-lib
+ -DCMAKE_SYSTEM_NAME=Generic
+ -DCMAKE_C_COMPILER=${_ticlang_toolchain}
+ -DCMAKE_C_FLAGS=${CMAKE_FLAGS}
+ -DCMAKE_C_LINKER_FLAGS=${LINK_OPTS}
+ )
+endforeach()
diff --git a/Tests/RunCMake/TIClang/libmod.c b/Tests/RunCMake/TIClang/libmod.c
new file mode 100644
index 0000000..50666c9
--- /dev/null
+++ b/Tests/RunCMake/TIClang/libmod.c
@@ -0,0 +1,4 @@
+int ticlang_libfun()
+{
+ return 42;
+}
diff --git a/Tests/RunCMake/TIClang/module.c b/Tests/RunCMake/TIClang/module.c
new file mode 100644
index 0000000..46d7571
--- /dev/null
+++ b/Tests/RunCMake/TIClang/module.c
@@ -0,0 +1,14 @@
+#include "module.h"
+#if defined(__USE_LIBFUN)
+extern int ticlang_libfun();
+#endif
+int i;
+int main()
+{
+#if defined(__USE_LIBFUN)
+ i = ticlang_libfun();
+#else
+ i = INTERNAL;
+#endif
+ return i;
+}
diff --git a/Tests/RunCMake/TIClang/module.cxx b/Tests/RunCMake/TIClang/module.cxx
new file mode 100644
index 0000000..b4d46b1
--- /dev/null
+++ b/Tests/RunCMake/TIClang/module.cxx
@@ -0,0 +1,7 @@
+#include "module.h"
+int i;
+int main()
+{
+ i = INTERNAL;
+ return i;
+}
diff --git a/Tests/RunCMake/TIClang/module.h b/Tests/RunCMake/TIClang/module.h
new file mode 100644
index 0000000..a8a85a6
--- /dev/null
+++ b/Tests/RunCMake/TIClang/module.h
@@ -0,0 +1,12 @@
+#ifndef __MODULE_H__
+#define __MODULE_H__
+
+#if defined(__cplusplus)
+# define INTERNAL 64
+#elif !defined(__cplusplus)
+# define INTERNAL 32
+#else
+# error "Unable to determine INTERNAL symbol."
+#endif
+
+#endif /* __MODULE_H__ */
diff --git a/Tests/RunCMake/TIClang/module.s b/Tests/RunCMake/TIClang/module.s
new file mode 100644
index 0000000..df16350
--- /dev/null
+++ b/Tests/RunCMake/TIClang/module.s
@@ -0,0 +1,9 @@
+ .text
+ .syntax unified
+ .section .text.main,"ax",%progbits
+ .hidden main
+ .globl main
+ .p2align 4
+main:
+ nop
+ bx lr
diff --git a/Tests/RunCMake/TIClang/ticlang-asm.cmake b/Tests/RunCMake/TIClang/ticlang-asm.cmake
new file mode 100644
index 0000000..f6c27fc
--- /dev/null
+++ b/Tests/RunCMake/TIClang/ticlang-asm.cmake
@@ -0,0 +1,5 @@
+enable_language(ASM)
+
+add_executable(exec-asm)
+target_sources(exec-asm PRIVATE module.s)
+target_link_options(exec-asm PRIVATE ${LINKER_OPTS})
diff --git a/Tests/RunCMake/TIClang/ticlang-c.cmake b/Tests/RunCMake/TIClang/ticlang-c.cmake
new file mode 100644
index 0000000..a36f096
--- /dev/null
+++ b/Tests/RunCMake/TIClang/ticlang-c.cmake
@@ -0,0 +1,5 @@
+enable_language(C)
+
+add_executable(exec-c)
+target_sources(exec-c PRIVATE module.c)
+target_link_options(exec-c PRIVATE ${LINKER_OPTS})
diff --git a/Tests/RunCMake/TIClang/ticlang-cxx.cmake b/Tests/RunCMake/TIClang/ticlang-cxx.cmake
new file mode 100644
index 0000000..6b005b5
--- /dev/null
+++ b/Tests/RunCMake/TIClang/ticlang-cxx.cmake
@@ -0,0 +1,5 @@
+enable_language(CXX)
+
+add_executable(exec-cxx)
+target_sources(exec-cxx PRIVATE module.cxx)
+target_link_options(exec-cxx PRIVATE ${LINKER_OPTS})
diff --git a/Tests/RunCMake/TIClang/ticlang-lib.cmake b/Tests/RunCMake/TIClang/ticlang-lib.cmake
new file mode 100644
index 0000000..e47647c
--- /dev/null
+++ b/Tests/RunCMake/TIClang/ticlang-lib.cmake
@@ -0,0 +1,10 @@
+enable_language(C)
+
+add_library(ticlang-test-lib)
+target_sources(ticlang-test-lib PRIVATE libmod.c)
+
+add_executable(exec-lib-c)
+target_sources(exec-lib-c PRIVATE module.c)
+target_compile_definitions(exec-lib-c PRIVATE __USE_LIBFUN)
+target_link_libraries(exec-lib-c LINK_PUBLIC ticlang-test-lib)
+target_link_options(exec-lib-c PRIVATE ${LINKER_OPTS})
diff --git a/Tests/RunCMake/XcFramework/RunCMakeTest.cmake b/Tests/RunCMake/XcFramework/RunCMakeTest.cmake
index fad088f..0d181ca 100644
--- a/Tests/RunCMake/XcFramework/RunCMakeTest.cmake
+++ b/Tests/RunCMake/XcFramework/RunCMakeTest.cmake
@@ -14,17 +14,15 @@ function(create_libraries type)
create_library(${type} ios iOS "arm64" iphoneos)
create_library(${type} tvos tvOS "arm64" appletvos)
create_library(${type} watchos watchOS "armv7k\\\\;arm64_32" watchos)
- #FIXME(#25266): Xcode 15.0 does not have visionOS. Improve this condition.
- #if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15)
- # create_library(${type} visionos visionOS "arm64" xros)
- #endif()
+ if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15.2)
+ create_library(${type} visionos visionOS "arm64" xros)
+ endif()
create_library(${type} ios-simulator iOS "${macos_archs_2}" iphonesimulator)
create_library(${type} tvos-simulator tvOS "${macos_archs_2}" appletvsimulator)
create_library(${type} watchos-simulator watchOS "${watch_sim_archs_2}" watchsimulator)
- #FIXME(#25266): Xcode 15.0 does not have visionOS. Improve this condition.
- #if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15)
- # create_library(${type} visionos-simulator visionOS "${macos_archs_2}" xrsimulator)
- #endif()
+ if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15.2)
+ create_library(${type} visionos-simulator visionOS "${macos_archs_2}" xrsimulator)
+ endif()
endfunction()
function(create_xcframework name type platforms)
@@ -62,24 +60,21 @@ function(create_executables name type)
create_executable(${name}-ios ${type} iOS "arm64" iphoneos)
create_executable(${name}-tvos ${type} tvOS "arm64" appletvos)
create_executable(${name}-watchos ${type} watchOS "armv7k\\\\;arm64_32" watchos)
- #FIXME(#25266): Xcode 15.0 does not have visionOS. Improve this condition.
- #if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15)
- # create_executable(${name}-visionos ${type} visionOS "arm64" xros)
- #endif()
+ if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15.2)
+ create_executable(${name}-visionos ${type} visionOS "arm64" xros)
+ endif()
create_executable(${name}-ios-simulator ${type} iOS "${macos_archs_2}" iphonesimulator)
create_executable(${name}-tvos-simulator ${type} tvOS "${macos_archs_2}" appletvsimulator)
create_executable(${name}-watchos-simulator ${type} watchOS "${watch_sim_archs_2}" watchsimulator)
- #FIXME(#25266): Xcode 15.0 does not have visionOS. Improve this condition.
- #if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15)
- # create_executable(${name}-visionos-simulator ${type} visionOS "${macos_archs_2}" xrsimulator)
- #endif()
+ if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15.2)
+ create_executable(${name}-visionos-simulator ${type} visionOS "${macos_archs_2}" xrsimulator)
+ endif()
endfunction()
set(xcframework_platforms macos ios tvos watchos ios-simulator tvos-simulator watchos-simulator)
-#FIXME(#25266): Xcode 15.0 does not have visionOS. Improve this condition.
-#if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15)
-# list(APPEND xcframework_platforms visionos visionos-simulator)
-#endif()
+if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15.2)
+ list(APPEND xcframework_platforms visionos visionos-simulator)
+endif()
if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 12)
set(macos_archs_1 "x86_64\\;arm64")
set(macos_archs_2 "x86_64\\\\;arm64")
diff --git a/Tests/RunCMake/XcodeProject-Device/DeploymentTarget.c b/Tests/RunCMake/XcodeProject-Device/DeploymentTarget.c
index 76ca54e..630f13a 100644
--- a/Tests/RunCMake/XcodeProject-Device/DeploymentTarget.c
+++ b/Tests/RunCMake/XcodeProject-Device/DeploymentTarget.c
@@ -5,8 +5,8 @@
# if __MAC_OS_X_VERSION_MIN_REQUIRED != __MAC_10_11
# error macOS deployment version mismatch
# endif
-#elif TARGET_OS_XR
-# if __XR_OS_VERSION_MIN_REQUIRED != __XROS_1_0
+#elif TARGET_OS_VISION
+# if __VISION_OS_VERSION_MIN_REQUIRED != __VISIONOS_1_0
# error visionOS deployment version mismatch
# endif
#elif TARGET_OS_IOS
diff --git a/Tests/RunCMake/XcodeProject-Device/RunCMakeTest.cmake b/Tests/RunCMake/XcodeProject-Device/RunCMakeTest.cmake
index e4dbb90..b61b7fc 100644
--- a/Tests/RunCMake/XcodeProject-Device/RunCMakeTest.cmake
+++ b/Tests/RunCMake/XcodeProject-Device/RunCMakeTest.cmake
@@ -93,25 +93,24 @@ if(NOT XCODE_VERSION VERSION_LESS 7.1)
unset(RunCMake_TEST_OPTIONS)
endif()
-#FIXME(#25266): Xcode 15.0 does not have visionOS. Improve this condition.
-#if(NOT XCODE_VERSION VERSION_LESS 15)
-# set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesVisionOS-build)
-# set(RunCMake_TEST_NO_CLEAN 1)
-# set(RunCMake_TEST_OPTIONS
-# "-DCMAKE_SYSTEM_NAME=visionOS"
-# "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
-#
-# file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
-# file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
-#
-# run_cmake(XcodeBundles)
-# run_cmake_command(XcodeBundles-build-visionOS ${CMAKE_COMMAND} --build .)
-# run_cmake_command(XcodeBundles-install-visionOS ${CMAKE_COMMAND} --build . --target install)
-#
-# unset(RunCMake_TEST_BINARY_DIR)
-# unset(RunCMake_TEST_NO_CLEAN)
-# unset(RunCMake_TEST_OPTIONS)
-#endif()
+if(NOT XCODE_VERSION VERSION_LESS 15.2)
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesVisionOS-build)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ set(RunCMake_TEST_OPTIONS
+ "-DCMAKE_SYSTEM_NAME=visionOS"
+ "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
+
+ file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
+ file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
+
+ run_cmake(XcodeBundles)
+ run_cmake_command(XcodeBundles-build-visionOS ${CMAKE_COMMAND} --build .)
+ run_cmake_command(XcodeBundles-install-visionOS ${CMAKE_COMMAND} --build . --target install)
+
+ unset(RunCMake_TEST_BINARY_DIR)
+ unset(RunCMake_TEST_NO_CLEAN)
+ unset(RunCMake_TEST_OPTIONS)
+endif()
if(NOT XCODE_VERSION VERSION_LESS 7)
set(RunCMake_TEST_OPTIONS "-DCMAKE_TOOLCHAIN_FILE=${RunCMake_SOURCE_DIR}/osx.cmake")
@@ -262,11 +261,10 @@ if(XCODE_VERSION VERSION_GREATER_EQUAL 8)
deployment_target_test(tvOS appletvsimulator)
deployment_target_test(watchOS watchos)
deployment_target_test(watchOS watchsimulator)
- #FIXME(#25266): Xcode 15.0 does not have visionOS. Improve this condition.
- #if(XCODE_VERSION VERSION_GREATER_EQUAL 15)
- # deployment_target_test(visionOS xros)
- # deployment_target_test(visionOS xrsimulator)
- #endif()
+ if(XCODE_VERSION VERSION_GREATER_EQUAL 15.2)
+ deployment_target_test(visionOS xros)
+ deployment_target_test(visionOS xrsimulator)
+ endif()
endif()
if(XCODE_VERSION VERSION_GREATER_EQUAL 8)