blob: f2de15875e909c85cfb5e079ccb826d9fa1ea050 [file] [log] [blame]
alexander3c798932021-03-26 21:42:19 +00001#----------------------------------------------------------------------------
2# Copyright (c) 2021 Arm Limited. All rights reserved.
3# SPDX-License-Identifier: Apache-2.0
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#----------------------------------------------------------------------------
17
18# CMSIS-DSP library CMake helper script.
19
alexander31ae9f02022-02-10 16:15:54 +000020# Check if CMSIS sources have been defined
alexander3c798932021-03-26 21:42:19 +000021if (NOT DEFINED CMSIS_SRC_PATH)
22 message(FATAL_ERROR "CMSIS path should be defined for CMSIS-DSP library to be built")
23endif()
24
25# 3. Form a list of all the sources we need in CSMS-DSP library
26set(CMSIS_DSP_PATH_SUFFIX "CMSIS/DSP")
27set(CMSIS_CORE_PATH_SUFFIX "CMSIS/Core")
28set(CMSIS_DSP_SRC_DIR "${CMSIS_SRC_PATH}/${CMSIS_DSP_PATH_SUFFIX}/Source")
29set(CMSIS_DSP_INC_DIR "${CMSIS_SRC_PATH}/${CMSIS_DSP_PATH_SUFFIX}/Include")
30set(CMSIS_DSP_PRI_INC_DIR "${CMSIS_SRC_PATH}/${CMSIS_DSP_PATH_SUFFIX}/PrivateInclude")
31set(CMSIS_CORE_INC_DIR "${CMSIS_SRC_PATH}/${CMSIS_CORE_PATH_SUFFIX}/Include")
32
33file(GLOB_RECURSE
34 CMSIS_DSP_SRC
Kshitij Sisodiaf9c19ea2021-05-07 16:08:14 +010035
36 "${CMSIS_DSP_SRC_DIR}/BasicMathFunctions/arm_*.c"
37 "${CMSIS_DSP_SRC_DIR}/FastMathFunctions/arm_*.c"
38 "${CMSIS_DSP_SRC_DIR}/CommonTables/arm_*.c"
39 "${CMSIS_DSP_SRC_DIR}/TransformFunctions/arm_*.c"
40 "${CMSIS_DSP_SRC_DIR}/StatisticsFunctions/arm_*.c"
41
42 # Issue with q15 and q31 functions with Arm GNU toolchain, we only
43 # need f32 functions.
44 "${CMSIS_DSP_SRC_DIR}/ComplexMathFunctions/arm_*f32.c")
alexander3c798932021-03-26 21:42:19 +000045
46# 4. Create static library
47set(CMSIS_DSP_TARGET cmsis-dsp)
48
49add_library(${CMSIS_DSP_TARGET} STATIC ${CMSIS_DSP_SRC})
50
51target_include_directories(${CMSIS_DSP_TARGET} PUBLIC
52 ${CMSIS_DSP_INC_DIR}
53 ${CMSIS_CORE_INC_DIR})
54target_include_directories(${CMSIS_DSP_TARGET} PRIVATE
55 ${CMSIS_DSP_PRI_INC_DIR})
56
Kshitij Sisodiaf9c19ea2021-05-07 16:08:14 +010057if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
58 target_compile_options(${CMSIS_DSP_TARGET} PUBLIC -flax-vector-conversions)
59
60 # There is a known issue with -O0 optimisation option that affects
61 # FFT functions from CMSIS-DSP when compiling with Arm GNU embedded
Isabella Gottardi5c0ce542021-10-05 11:12:11 +010062 # toolchain version 10.2.1 or 10.3-2021.07
Kshitij Sisodiaf9c19ea2021-05-07 16:08:14 +010063 if (CMAKE_BUILD_TYPE STREQUAL Debug)
64 message(WARNING "There are known issues with CMSIS-DSP builds using "
65 "MVE extension without optimisation. Forcing -O3 "
66 "optimisation level")
67 target_compile_options(${CMSIS_DSP_TARGET} PUBLIC -O3)
68 endif()
69endif ()
70
alexander3c798932021-03-26 21:42:19 +000071# 5. Add any custom/conditional flags for compilation or linkage
72if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL cortex-m55)
73 target_compile_definitions(${CMSIS_DSP_TARGET} PUBLIC
74 ARM_MATH_MVEI
75 ARM_MATH_DSP
76 ARM_MATH_LOOPUNROLL)
77elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL cortex-m33)
78 # Placeholder, if building with Cortex-M33
79endif()
80
81
82# 6. Provide the library path for the top level CMake to use:
83set(CMSIS_DSP_LIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${CMSIS_DSP_TARGET}.a")
84message(STATUS "CMSIS_DSP_LIB set to be generated here: ${CMSIS_DSP_LIB}")
85
86message(STATUS "CMAKE_CURRENT_SOURCE_DIR: " ${CMAKE_CURRENT_SOURCE_DIR})
87message(STATUS "*******************************************************")
88message(STATUS "Library : " ${CMSIS_DSP_TARGET})
89message(STATUS "Build type : " ${CMAKE_BUILD_TYPE})
90message(STATUS "TARGET_PLATFORM : " ${TARGET_PLATFORM})
91message(STATUS "CMAKE_SYSTEM_PROCESSOR : " ${CMAKE_SYSTEM_PROCESSOR})
92message(STATUS "*******************************************************")