43 lines
1.5 KiB
CMake

cmake_minimum_required(VERSION 3.13)
find_program(CMAKE_ASM_COMPILER clang)
find_program(CMAKE_C_COMPILER clang)
find_program(CMAKE_CXX_COMPILER clang++)
# 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()
# Get target processor from target triplet (first in triplet, ex. for arm-none-eabi -> arm)
string(REGEX MATCH "^[^-]*" TARGET_ARCHITECTURE ${TARGET_TRIPLET})
# We need to tell clang what our target is
set(CMAKE_ASM_COMPILER_TARGET ${TARGET_TRIPLET})
set(CMAKE_C_COMPILER_TARGET ${TARGET_TRIPLET})
set(CMAKE_CXX_COMPILER_TARGET ${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 architecture from target triplet, should not be setting CMAKE_SYSTEM_PROCESSOR
set(CMAKE_SYSTEM_PROCESSOR ${TARGET_ARCHITECTURE})
endif()
message(STATUS "Target: ${TARGET_TRIPLET}")
message(STATUS "Target system name: ${CMAKE_SYSTEM_NAME}")