From 81f7fa485af3c6126ee0e740d3761fc6ab3ac396 Mon Sep 17 00:00:00 2001 From: Madeline Busig Date: Fri, 10 Jul 2026 10:22:23 -0700 Subject: [PATCH] Add start of cmake clang toolchain Finding programs and setting cmake variables --- cmake/clang.cmake | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 cmake/clang.cmake diff --git a/cmake/clang.cmake b/cmake/clang.cmake new file mode 100644 index 0000000..e891d55 --- /dev/null +++ b/cmake/clang.cmake @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.13) + +find_program(CMAKE_ASM_COMPILER clang) +find_program(CMAKE_C_COMPILER clang) +find_program(CMAKE_CXX_COMPILER clang++) +find_program(CMAKE_LINKER lld) +find_program(CMAKE_AR llvm-ar) +find_program(CMAKE_RANLIB llvm-ranlib) +find_program(CMAKE_STRIP llvm-strip) + +# Get host triplet, in case the target isn't set we'll use it as a default +execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpmachine OUTPUT_VARIABLE HOST_TRIPLET) +message(STATUS "Host target triplet: ${HOST_TRIPLET}") + +if(NOT TARGET_TRIPLET) + message(WARNING "TARGET_TRIPLET not set, defaulting to host system (${HOST_TRIPLET})") + set(TARGET_TRIPLET ${HOST_TRIPLET}) +endif() + +string(REGEX MATCH "^[^-]*" TARGET_PROCESSOR ${TARGET_TRIPLET}) + +if(NOT CMAKE_SYSTEM_NAME) + # Cmake uses Generic as system name for embedded systems, use that here if + # working on embedded systems + message(WARNING "CMAKE_SYSTEM_NAME name not set, defaulting to host system name (${CMAKE_HOST_SYSTEM_NAME})") + set(CMAKE_SYSTEM_NAME ${CMAKE_HOST_SYSTEM_NAME}) +endif() + +if(NOT CMAKE_SYSTEM_VERSION) + set(CMAKE_SYSTEM_VERSION ${CMAKE_HOST_SYSTEM_VERSION}) +endif() + +if(NOT CMAKE_SYSTEM_PROCESSOR) + # Getting processor from target triplet, should not be setting CMAKE_SYSTEM_PROCESSOR + set(CMAKE_SYSTEM_PROCESSOR ${TARGET_PROCESSOR}) +endif() + +message(STATUS "Target: ${TARGET_TRIPLET}") +message(STATUS "Target system name: ${CMAKE_SYSTEM_NAME}") +