diff options
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) |