diff --git a/miosix/CMakeLists.txt b/miosix/CMakeLists.txt
index e3209490141790d9e184da8f4ca2039a82e0e095..c2c0843dbbb7897860482b26242ddb8ee980b1ff 100644
--- a/miosix/CMakeLists.txt
+++ b/miosix/CMakeLists.txt
@@ -137,7 +137,7 @@ target_link_options(miosix INTERFACE ${MIOSIX_L_FLAGS})
 # Run the kernel_global_objects.pl script on all kernel objects
 add_custom_command(
     TARGET miosix PRE_LINK
-    COMMAND perl ${MIOSIX_KPATH}/_tools/kernel_global_objects.pl $<TARGET_OBJECTS:miosix>
+    COMMAND perl ${MIOSIX_KPATH}/_tools/kernel_global_objects.pl $<TARGET_OBJECTS:miosix> --prefix=${MIOSIX_PREFIX}
     VERBATIM
     COMMAND_EXPAND_LISTS
 )
@@ -150,3 +150,19 @@ if(MIOSIX_PRINT_BOARD_LIST)
         message(STATUS "\t${MIOSIX_OPT_BOARD}")
     endforeach()
 endif()
+
+# Set multilib paths for Clang
+if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+    target_include_directories(miosix PUBLIC
+        /opt/arm-miosix-eabi/arm-miosix-eabi/include/c++/9.2.0/arm-miosix-eabi
+        /opt/arm-miosix-eabi/arm-miosix-eabi/include/c++/9.2.0
+        /opt/arm-miosix-eabi/arm-miosix-eabi/include
+    )
+
+    target_link_directories(miosix PUBLIC
+        /opt/arm-miosix-eabi/arm-miosix-eabi/lib/${MIOSIX_MULTILIB_PATH}
+        /opt/arm-miosix-eabi/lib/gcc/arm-miosix-eabi/9.2.0/${MIOSIX_MULTILIB_PATH}
+    )
+
+    target_link_options(miosix PUBLIC -fuse-ld=/usr/bin/arm-miosix-eabi-ld)
+endif()
diff --git a/miosix/_tools/kernel_global_objects.pl b/miosix/_tools/kernel_global_objects.pl
index 6bedf9a728c04c0425e63fdf4ef7f736103d84e0..4f3d98011bdf8d7b768ff3430a917a984abce44a 100644
--- a/miosix/_tools/kernel_global_objects.pl
+++ b/miosix/_tools/kernel_global_objects.pl
@@ -37,6 +37,7 @@
 
 use warnings;
 use strict;
+use Getopt::Long;
 
 my $verbose=0; # Edit this file and set this to 1 for testing
 
@@ -44,16 +45,22 @@ my @files_with_global_objects;
 my @files_to_fix;
 my @files_broken;
 
+GetOptions(
+    "prefix=s" => \( my $prefix = "arm-miosix-eabi")
+);
+
 # Step #1: check all kernel object files and categorize them based on the
 # relevant sections
-foreach my $filename (@ARGV)
+foreach my $idx (0 .. $#ARGV)
 {
+	my $filename=$ARGV[$idx];
+
 	# First, check that the argument is really an object file
 	die "$filename is not a file name."    unless -f $filename;
 	die "$filename is not an object file." unless    $filename=~/\.o$/;
 
 	# Then use readelf to dump all sections of the file
-	my $output=`arm-miosix-eabi-readelf -SW \"$filename\"`;
+	my $output=`$prefix-readelf -SW \"$filename\"`;
 	my @lines=split("\n",$output);
 
 	my $sections=0;
@@ -98,7 +105,7 @@ foreach my $filename (@ARGV)
 # started, not after
 foreach my $filename (@files_to_fix)
 {
-	my $exitcode=system("arm-miosix-eabi-objcopy \"$filename\" --rename-section .init_array=.miosix_init_array");
+	my $exitcode=system("$prefix-objcopy \"$filename\" --rename-section .init_array=.miosix_init_array");
 	die "Error calling objcopy" unless($exitcode==0);
 }
 
diff --git a/miosix/arch/cortexM4_stm32f4/CMakeLists.txt b/miosix/arch/cortexM4_stm32f4/CMakeLists.txt
index e65ba72f77676507502e2560b14b34412a18ce84..ba4b1708e6b91455ad80635bf6ada748248e83f4 100644
--- a/miosix/arch/cortexM4_stm32f4/CMakeLists.txt
+++ b/miosix/arch/cortexM4_stm32f4/CMakeLists.txt
@@ -35,6 +35,9 @@ include(${MIOSIX_KPATH}/arch/${MIOSIX_ARCH_NAME}/${MIOSIX_OPT_BOARD}/CMakeLists.
 # Automatically transform the architecture name into upper cases
 string(TOUPPER ${MIOSIX_ARCH_NAME} MIOSIX_ARCH_NAME_UPPER)
 
+# Set the path to the multilib directory for this architecture
+set(MIOSIX_MULTILIB_PATH thumb/v7e-m+fp/hard)
+
 # Select appropriate compiler flags for both ASM/C/C++/linker
 set(MIOSIX_CPU_FLAGS -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16)
 set(MIOSIX_A_FLAGS ${MIOSIX_CPU_FLAGS})
diff --git a/miosix/arch/cortexM7_stm32f7/CMakeLists.txt b/miosix/arch/cortexM7_stm32f7/CMakeLists.txt
index a0291e1490cea78203a7aa3c6499d89a7118ad37..8284263bc7083a8e22f9ed780890381530e95654 100644
--- a/miosix/arch/cortexM7_stm32f7/CMakeLists.txt
+++ b/miosix/arch/cortexM7_stm32f7/CMakeLists.txt
@@ -35,6 +35,9 @@ include(${MIOSIX_KPATH}/arch/${MIOSIX_ARCH_NAME}/${MIOSIX_OPT_BOARD}/CMakeLists.
 # Automatically transform the architecture name into upper cases
 string(TOUPPER ${MIOSIX_ARCH_NAME} MIOSIX_ARCH_NAME_UPPER)
 
+# Set the path to the multilib directory for this architecture
+set(MIOSIX_MULTILIB_PATH thumb/v7e-m+dp/hard)
+
 # Select appropriate compiler flags for both C/C++/linker
 set(MIOSIX_A_FLAGS ${MIOSIX_CPU_FLAGS})
 list(APPEND MIOSIX_C_FLAGS
diff --git a/miosix/cmake/Toolchains/clang.cmake b/miosix/cmake/Toolchains/clang.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..41fdadd0b885f52fc45d03a694abccc99d6bb86f
--- /dev/null
+++ b/miosix/cmake/Toolchains/clang.cmake
@@ -0,0 +1,75 @@
+# Copyright (C) 2024 by Skyward
+#
+# This program is free software; you can redistribute it and/or
+# it under the terms of the GNU General Public License as published
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# As a special exception, if other files instantiate templates or use
+# macros or inline functions from this file, or you compile this file
+# and link it with other works to produce a work based on this file,
+# this file does not by itself cause the resulting work to be covered
+# by the GNU General Public License. However the source code for this
+# file must still be made available in accordance with the GNU
+# Public License. This exception does not invalidate any other
+# why a work based on this file might be covered by the GNU General
+# Public License.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>
+
+# Add the miosix/cmake path to find the Miosix.cmake platform file
+# that defines the Miosix system name
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/..)
+
+# Tell CMake that we are building for an embedded ARM system
+set(CMAKE_SYSTEM_NAME Miosix)
+
+set(MIOSIX_PREFIX      llvm)
+
+# Names of the compiler and other tools
+set(CMAKE_ASM_COMPILER clang)
+set(CMAKE_C_COMPILER   clang)
+set(CMAKE_CXX_COMPILER clang++)
+set(CMAKE_AR           ${MIOSIX_PREFIX}-ar)
+set(CMAKE_OBJCOPY      ${MIOSIX_PREFIX}-objcopy)
+set(CMAKE_OBJDUMP      ${MIOSIX_PREFIX}-objdump)
+set(CMAKE_SIZE         ${MIOSIX_PREFIX}-size)
+
+# Optimization flags for each language and build configuration
+set(CMAKE_ASM_FLAGS_DEBUG "")
+set(CMAKE_C_FLAGS_DEBUG "-g -O0")
+set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
+set(CMAKE_ASM_FLAGS_RELEASE "")
+set(CMAKE_C_FLAGS_RELEASE "-O2")
+set(CMAKE_CXX_FLAGS_RELEASE "-O2")
+set(CMAKE_ASM_FLAGS_RELWITHDEBINFO "")
+set(CMAKE_C_FLAGS_RELWITHDEBINFO "-g -O2")
+set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g -O2")
+set(CMAKE_ASM_FLAGS_MINSIZEREL "")
+set(CMAKE_C_FLAGS_MINSIZEREL "-Os")
+set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os")
+
+# Setting the target for crosscompilation
+# https://stackoverflow.com/questions/54539682/how-to-set-up-cmake-to-cross-compile-with-clang-for-arm-embedded-on-windows
+set(CLANG_TARGET_TRIPLE arm-none-eabi)
+set(CMAKE_ASM_COMPILER_TARGET ${CLANG_TARGET_TRIPLE})
+set(CMAKE_C_COMPILER_TARGET   ${CLANG_TARGET_TRIPLE})
+set(CMAKE_CXX_COMPILER_TARGET ${CLANG_TARGET_TRIPLE})
+
+set(CMAKE_SYSROOT /opt/arm-miosix-eabi/arm-miosix-eabi/lib)
+
+# We want to test for a static library and not an executable
+# reference: https://stackoverflow.com/questions/53633705/cmake-the-c-compiler-is-not-able-to-compile-a-simple-test-program
+set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
+
+# Defines used by the Miosix patches to the libraries/opt/arm-miosix-eabi/arm-miosix-eabi/lib/thumb/cm4/hardfp/fpv4sp
+add_compile_definitions($<$<COMPILE_LANGUAGE:C,CXX>:__GXX_TYPEINFO_EQUALITY_INLINE=0>)
+add_compile_definitions($<$<COMPILE_LANGUAGE:C,CXX>:_MIOSIX>)
+add_compile_definitions($<$<COMPILE_LANGUAGE:C,CXX>:_MIOSIX_GCC_PATCH_MAJOR=3>)
+add_compile_definitions($<$<COMPILE_LANGUAGE:C,CXX>:_MIOSIX_GCC_PATCH_MINOR=1>)
diff --git a/miosix/libsyscalls/CMakeLists.txt b/miosix/libsyscalls/CMakeLists.txt
index 92f5fd86510eb0a9fa66cd3d9eef8230d94d70ab..2bd223048a39f15769dc3516572188f118a2cf84 100644
--- a/miosix/libsyscalls/CMakeLists.txt
+++ b/miosix/libsyscalls/CMakeLists.txt
@@ -62,7 +62,7 @@ target_include_directories(syscalls PUBLIC
 set(MIOSIX_PROCESSES_A_FLAGS ${MIOSIX_CPU_FLAGS})
 set(MIOSIX_PROCESSES_C_FLAGS
     ${MIOSIX_CPU_FLAGS} -fpie -msingle-pic-base -ffunction-sections -Wall
-    -Werror=return-type -D_DEFAULT_SOURCE=1 -c
+    -fshort-enums -Werror=return-type -D_DEFAULT_SOURCE=1 -c
 )
 set(MIOSIX_PROCESSES_CXX_FLAGS -std=c++14 ${MIOSIX_OPT_EXCEPT} ${MIOSIX_PROCESSES_C_FLAGS})
 target_compile_options(syscalls PUBLIC
@@ -73,9 +73,25 @@ target_compile_options(syscalls PUBLIC
 
 # Configure linker file and options needed to link agains this library
 set(MIOSIX_PROCESSES_L_FLAGS
-    ${MIOSIX_CPU_FLAGS} -fpie -msingle-pic-base -nostdlib -Wl,--gc-sections
+    ${MIOSIX_CPU_FLAGS} -fpie -fshort-enums -msingle-pic-base -nostdlib -Wl,--gc-sections
     -Wl,-T${MIOSIX_KPATH}/libsyscalls/process.ld
-    -Wl,-n,-pie,--spare-dynamic-tags,3,--target2=mx-data-rel
+    -Wl,-n,-pie,--spare-dynamic-tags=3,--target2=mx-data-rel
 )
 set_property(TARGET syscalls PROPERTY LINK_DEPENDS ${MIOSIX_KPATH}/libsyscalls/process.ld)
 target_link_options(syscalls INTERFACE ${MIOSIX_PROCESSES_L_FLAGS})
+
+# Set multilib paths for Clang
+if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+    target_include_directories(syscalls PUBLIC
+        /opt/arm-miosix-eabi/arm-miosix-eabi/include/c++/9.2.0/arm-miosix-eabi
+        /opt/arm-miosix-eabi/arm-miosix-eabi/include/c++/9.2.0
+        /opt/arm-miosix-eabi/arm-miosix-eabi/include
+    )
+
+    target_link_directories(syscalls PUBLIC
+        /opt/arm-miosix-eabi/arm-miosix-eabi/lib/${MIOSIX_MULTILIB_PATH}/pie/single-pic-base/
+        /opt/arm-miosix-eabi/lib/gcc/arm-miosix-eabi/9.2.0/${MIOSIX_MULTILIB_PATH}/pie/single-pic-base/
+    )
+
+    target_link_options(miosix PUBLIC -fuse-ld=/usr/bin/arm-miosix-eabi-ld)
+endif()