diff --git a/.gitlab/.gitignore b/.gitlab/.gitignore
index 0e34b1b565f0733a881399916363d8db1b212f0c..83e21d52e6c466ec427489fc4b300cfbe5714a6e 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 20863a2fb0876bbfa1867f4b3e648c1b10fe2939..69f1e7c794df02b0bb273df16ac01e9c7ab789d2 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 20863a2fb0876bbfa1867f4b3e648c1b10fe2939..69f1e7c794df02b0bb273df16ac01e9c7ab789d2 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 eda7c1fa818421f8a558698ddb6be1a87775eca3..e46aa29a2a3e698c85d8c8a2ebfb7678fc8ec7be 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 eda7c1fa818421f8a558698ddb6be1a87775eca3..e46aa29a2a3e698c85d8c8a2ebfb7678fc8ec7be 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 0000000000000000000000000000000000000000..448c0d767183e3d59f39327924e15dfab8dfd76c
--- /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 0000000000000000000000000000000000000000..66fa863a3020ecfb157b761d4c4803161f19ca31
--- /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 1e87ec6cf69af4f8e66d7f510fd4bd2d6a800bd1..fb9322267767decb3836c94260cccb473f622eec 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 a655f62b537792e522287c0ac4c55e7a7d14040f..96f161f0102b3c8aa25b4babb688f832de2e9093 100644
--- a/Help/release/3.29.rst
+++ b/Help/release/3.29.rst
@@ -39,6 +39,9 @@ Compilers
 * The LLVM/Clang GNU-like frontend on Windows (``clang++``) may now be used
   to compile ``CUDA`` language sources.
 
+* 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 6893eea6d5499135f616478686aeb12a5f040acb..b1e2687594e415a0dea5f661b991e52fb156c565 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 e4fa43fb65a0c15e3ac17069d65f04eac76a63b8..2817d37776fec0abf80f572a712003fa684b8529 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 6d7d17ef4d82ae6396ccaa87bca32d33f8eea412..2042e64959fee4d9c1ead76f1b410cd1ff8d7738 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 8beebc5e57a69b3121d19e0dbe2c7db94351b08d..73b6ceec77f61189f0a1f6f04449ac1eca6c677a 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 40934ecac5f96f9f34e73c50f341b223c3c7665f..891ba6e759094c1654315890d4c9eeaa56a2c71e 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 25aaccad1cc915a4d5613690232f43b840b3b25c..1cf1e7934a96489c93cad68c3425a069304edef0 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 32b71663ca52d47c3398bc4ab5d802fee82d19db..fd0367e489e8bcca66e6bb0bea96277c4a490295 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 0000000000000000000000000000000000000000..6bb07e3f22992e401ecf796f772ed0b231bab4e3
--- /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 0000000000000000000000000000000000000000..ef79229d0d47f4054e3b2d867238ed740ae00e54
--- /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 0000000000000000000000000000000000000000..2721fef51fc0fcbf54936000eb1437a2ce7792a3
--- /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 0000000000000000000000000000000000000000..e038e807bcf7693e9ad4d11585b4f1e8f0f08d99
--- /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 0000000000000000000000000000000000000000..860bb429da88bf0bcfbf46d1768112e41f17fe70
--- /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 0000000000000000000000000000000000000000..2447fdf08e266f612adbc8f9465116e79a30bf7a
--- /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 0000000000000000000000000000000000000000..4965e62712d5e6acc85b7442a72111bfa07a4af7
--- /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/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index 3e22247045ff409c6ab0933081b0674cc521f0ae..d9090d6d416577e2676c72e7c7a8e5813c145a29 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/TIClang/CMakeLists.txt b/Tests/RunCMake/TIClang/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..94e43ba84bf9ad2e6bca4f228dcb58e57adb9e3d
--- /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 0000000000000000000000000000000000000000..898de74001e64c65c675e17bc086a3253711721f
--- /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 0000000000000000000000000000000000000000..50666c9c23efc234ebb0afd33d8801c972937b94
--- /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 0000000000000000000000000000000000000000..46d75714b930b2bbba388c299d520f2b862a4ffc
--- /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 0000000000000000000000000000000000000000..b4d46b123f7e12951062faadc319e3520ad0d9eb
--- /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 0000000000000000000000000000000000000000..a8a85a64c460e54b17e95cdd58539f44bfef8bc3
--- /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 0000000000000000000000000000000000000000..df1635091b0ff120a952911028f1dfad2c1866e1
--- /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 0000000000000000000000000000000000000000..f6c27fcedcc864482e7030178e28d4054db7eb69
--- /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 0000000000000000000000000000000000000000..a36f09690bd55f31a7a9cdeda66c7a5fe2b478c5
--- /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 0000000000000000000000000000000000000000..6b005b55ee05f4258684d8b25575f662f41e875c
--- /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 0000000000000000000000000000000000000000..e47647cc555c3bc197ba28fabac365732528ec1f
--- /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})