1# 2# SPDX-License-Identifier: BSD-3-Clause 3# SPDX-FileCopyrightText: Copyright TF-RMM Contributors. 4# 5 6include_guard() 7 8include(${CMAKE_CURRENT_LIST_DIR}/common_aarch64.cmake) 9 10set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) 11 12find_program(CMAKE_C_COMPILER 13 NAMES "clang" 14 DOC "Path to clang." 15 REQUIRED) 16 17set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER}) 18 19find_program(CMAKE_OBJCOPY 20 NAMES "llvm-objcopy" 21 DOC "Path to llvm-objcopy." 22 REQUIRED) 23 24find_program(CMAKE_OBJDUMP 25 NAMES "llvm-objdump" 26 DOC "Path to llvm-objcopy." 27 REQUIRED) 28 29find_program(CMAKE_AR 30 NAMES "llvm-ar" 31 DOC "Path to llvm-ar." 32 REQUIRED) 33 34find_program(CMAKE_RANLIB 35 NAMES "llvm-ranlib" 36 DOC "Path to llvm-ranlib." 37 REQUIRED) 38 39# Find the path to AArch64 gcc 40find_program(A64_GCC 41 NAMES "$ENV{CROSS_COMPILE}gcc" 42 DOC "Path to aarch64 gcc" 43 REQUIRED) 44 45# Get the AArch64 GCC triplet 46execute_process(COMMAND ${A64_GCC} -dumpmachine 47 OUTPUT_VARIABLE A64-GCC-TRIPLET 48 OUTPUT_STRIP_TRAILING_WHITESPACE) 49 50# Construct the path to `include` folder of AArch64 GCC toolchain 51get_filename_component(A64_GCC_DIR ${A64_GCC} DIRECTORY) 52set(A64_GCC_INC_DIR "${A64_GCC_DIR}/../${A64-GCC-TRIPLET}/include") 53message(STATUS "Using ${A64_GCC_INC_DIR} for std include headers") 54 55foreach(language IN ITEMS ASM C) 56 set(CMAKE_${language}_COMPILER_TARGET "${A64-GCC-TRIPLET}") 57 string(APPEND CMAKE_${language}_STANDARD_INCLUDE_DIRECTORIES "${A64_GCC_INC_DIR}") 58 string(APPEND CMAKE_${language}_FLAGS_INIT "-Wno-unknown-warning-option ") 59 string(APPEND CMAKE_${language}_FLAGS_INIT "-Wno-unused-function ") 60 61 # Avoid warning for -mbranch-protection option not being recognized by clang during link phase. 62 string(APPEND CMAKE_${language}_FLAGS_INIT "-Wno-unused-command-line-argument ") 63endforeach() 64 65# Use lld as default linker 66string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=lld ") 67string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,--apply-dynamic-relocs ") 68