blob: daa81328d4508cc987f1c4a26d80125f658857d7 [file] [log] [blame]
Kristofer Jonsson18239302020-04-17 08:45:38 +02001#
Ledion Daja449c8d82022-06-21 12:22:13 +02002# Copyright (c) 2019-2022 Arm Limited.
Kristofer Jonsson18239302020-04-17 08:45:38 +02003#
4# SPDX-License-Identifier: Apache-2.0
5#
6# Licensed under the Apache License, Version 2.0 (the License); you may
7# not use this file except in compliance with the License.
8# You may obtain a copy of the License at
9#
10# www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an AS IS BASIS, WITHOUT
14# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15# See the License for the specific language governing permissions and
16# limitations under the License.
17#
18
19# Extract the CPU number from the system processor
Ledion Daja449c8d82022-06-21 12:22:13 +020020string(REGEX REPLACE "^cortex-m([0-9]+[a-z]*)" "\\1" CPU_NUMBER ${CMAKE_SYSTEM_PROCESSOR})
Kristofer Jonsson18239302020-04-17 08:45:38 +020021if(NOT CPU_NUMBER)
22 message(FATAL_ERROR "System processor '${CMAKE_SYSTEM_PROCESSOR}' not supported. Should be cortex-m<nr>.")
23endif()
Kristofer Jonsson18239302020-04-17 08:45:38 +020024
Ledion Daja449c8d82022-06-21 12:22:13 +020025string(TOUPPER "ARMCM${CPU_NUMBER}" ARM_CPU)
Kristofer Jonsson18239302020-04-17 08:45:38 +020026
Bhavik Patel50aa51d2020-07-27 17:23:31 +020027# Set CPU specific features
Ledion Daja449c8d82022-06-21 12:22:13 +020028if(CMAKE_SYSTEM_PROCESSOR MATCHES "cortex-m33")
Bhavik Patel50aa51d2020-07-27 17:23:31 +020029 set(ARM_FEATURES "_DSP_FP")
Ledion Daja449c8d82022-06-21 12:22:13 +020030elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "cortex-m4")
Bhavik Patel50aa51d2020-07-27 17:23:31 +020031 set(ARM_FEATURES "_FP")
Ledion Daja449c8d82022-06-21 12:22:13 +020032elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "cortex-m7")
Bhavik Patel50aa51d2020-07-27 17:23:31 +020033 set(ARM_FEATURES "_DP")
34else()
35 set(ARM_FEATURES "")
36endif()
37
38# CMSIS core
Kristofer Jonsson18239302020-04-17 08:45:38 +020039add_library(cmsis_core INTERFACE)
40target_include_directories(cmsis_core INTERFACE ${CMSIS_PATH}/CMSIS/Core/Include)
41
Bhavik Patel50aa51d2020-07-27 17:23:31 +020042# CMSIS device
43add_library(cmsis_device INTERFACE)
44target_include_directories(cmsis_device INTERFACE ${CMSIS_PATH}/Device/ARM/${ARM_CPU}/Include)
Per Åstrand83e49962021-01-28 11:13:12 +010045
Kristofer Jonsson1efcc3f2021-02-16 17:40:25 +010046target_compile_options(cmsis_device INTERFACE
47 "$<$<COMPILE_LANGUAGE:C>:-include${ARM_CPU}${ARM_FEATURES}.h>"
48 "$<$<COMPILE_LANGUAGE:CXX>:-include${ARM_CPU}${ARM_FEATURES}.h>")
Kristofer Jonsson7cfa5702020-12-16 09:17:51 +010049target_link_libraries(cmsis_device INTERFACE cmsis_core)
Bhavik Patel50aa51d2020-07-27 17:23:31 +020050
51# CMSIS startup
Per Åstrand83e49962021-01-28 11:13:12 +010052add_library(cmsis_startup INTERFACE)
53target_sources(cmsis_startup INTERFACE
54 ${CMSIS_PATH}/Device/ARM/${ARM_CPU}/Source/startup_${ARM_CPU}.c)
Per Åstrand19a22ae2020-11-27 19:47:58 +010055
Per Åstrand83e49962021-01-28 11:13:12 +010056set_source_files_properties(${CMSIS_PATH}/Device/ARM/${ARM_CPU}/Source/startup_${ARM_CPU}.c
57 PROPERTIES COMPILE_FLAGS -Wno-redundant-decls)
Per Åstrand19a22ae2020-11-27 19:47:58 +010058
Per Åstrand83e49962021-01-28 11:13:12 +010059target_compile_definitions(cmsis_startup INTERFACE ${ARM_CPU}${ARM_FEATURES})
60target_link_libraries(cmsis_startup INTERFACE cmsis_device)
Bhavik Patel50aa51d2020-07-27 17:23:31 +020061
Per Åstrand83e49962021-01-28 11:13:12 +010062# CMSIS system
63add_library(cmsis_system INTERFACE)
64target_sources(cmsis_system INTERFACE
65 ${CMSIS_PATH}/Device/ARM/${ARM_CPU}/Source/system_${ARM_CPU}.c)
66target_compile_definitions(cmsis_system INTERFACE ${ARM_CPU}${ARM_FEATURES})
67target_link_libraries(cmsis_system INTERFACE cmsis_startup)