blob: bb26b697383cb5a70c253367c7f48439acdd8d0b [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
20# 1. We should be cross-compiling (non-native target)
21if (TARGET_PLATFORM STREQUAL native)
22 message(FATAL_ERROR "No CMSIS-DSP support for native target.")
23endif()
24
25# 2. Check if CMSIS sources have been defined
26if (NOT DEFINED CMSIS_SRC_PATH)
27 message(FATAL_ERROR "CMSIS path should be defined for CMSIS-DSP library to be built")
28endif()
29
30# 3. Form a list of all the sources we need in CSMS-DSP library
31set(CMSIS_DSP_PATH_SUFFIX "CMSIS/DSP")
32set(CMSIS_CORE_PATH_SUFFIX "CMSIS/Core")
33set(CMSIS_DSP_SRC_DIR "${CMSIS_SRC_PATH}/${CMSIS_DSP_PATH_SUFFIX}/Source")
34set(CMSIS_DSP_INC_DIR "${CMSIS_SRC_PATH}/${CMSIS_DSP_PATH_SUFFIX}/Include")
35set(CMSIS_DSP_PRI_INC_DIR "${CMSIS_SRC_PATH}/${CMSIS_DSP_PATH_SUFFIX}/PrivateInclude")
36set(CMSIS_CORE_INC_DIR "${CMSIS_SRC_PATH}/${CMSIS_CORE_PATH_SUFFIX}/Include")
37
38file(GLOB_RECURSE
39 CMSIS_DSP_SRC
Kshitij Sisodiaf9c19ea2021-05-07 16:08:14 +010040
41 "${CMSIS_DSP_SRC_DIR}/BasicMathFunctions/arm_*.c"
42 "${CMSIS_DSP_SRC_DIR}/FastMathFunctions/arm_*.c"
43 "${CMSIS_DSP_SRC_DIR}/CommonTables/arm_*.c"
44 "${CMSIS_DSP_SRC_DIR}/TransformFunctions/arm_*.c"
45 "${CMSIS_DSP_SRC_DIR}/StatisticsFunctions/arm_*.c"
46
47 # Issue with q15 and q31 functions with Arm GNU toolchain, we only
48 # need f32 functions.
49 "${CMSIS_DSP_SRC_DIR}/ComplexMathFunctions/arm_*f32.c")
alexander3c798932021-03-26 21:42:19 +000050
51# 4. Create static library
52set(CMSIS_DSP_TARGET cmsis-dsp)
53
54add_library(${CMSIS_DSP_TARGET} STATIC ${CMSIS_DSP_SRC})
55
56target_include_directories(${CMSIS_DSP_TARGET} PUBLIC
57 ${CMSIS_DSP_INC_DIR}
58 ${CMSIS_CORE_INC_DIR})
59target_include_directories(${CMSIS_DSP_TARGET} PRIVATE
60 ${CMSIS_DSP_PRI_INC_DIR})
61
Kshitij Sisodiaf9c19ea2021-05-07 16:08:14 +010062if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
63 target_compile_options(${CMSIS_DSP_TARGET} PUBLIC -flax-vector-conversions)
64
65 # There is a known issue with -O0 optimisation option that affects
66 # FFT functions from CMSIS-DSP when compiling with Arm GNU embedded
67 # toolchain version 10.2.1
68 if (CMAKE_BUILD_TYPE STREQUAL Debug)
69 message(WARNING "There are known issues with CMSIS-DSP builds using "
70 "MVE extension without optimisation. Forcing -O3 "
71 "optimisation level")
72 target_compile_options(${CMSIS_DSP_TARGET} PUBLIC -O3)
73 endif()
74endif ()
75
alexander3c798932021-03-26 21:42:19 +000076# 5. Add any custom/conditional flags for compilation or linkage
77if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL cortex-m55)
78 target_compile_definitions(${CMSIS_DSP_TARGET} PUBLIC
79 ARM_MATH_MVEI
80 ARM_MATH_DSP
81 ARM_MATH_LOOPUNROLL)
82elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL cortex-m33)
83 # Placeholder, if building with Cortex-M33
84endif()
85
86
87# 6. Provide the library path for the top level CMake to use:
88set(CMSIS_DSP_LIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${CMSIS_DSP_TARGET}.a")
89message(STATUS "CMSIS_DSP_LIB set to be generated here: ${CMSIS_DSP_LIB}")
90
91message(STATUS "CMAKE_CURRENT_SOURCE_DIR: " ${CMAKE_CURRENT_SOURCE_DIR})
92message(STATUS "*******************************************************")
93message(STATUS "Library : " ${CMSIS_DSP_TARGET})
94message(STATUS "Build type : " ${CMAKE_BUILD_TYPE})
95message(STATUS "TARGET_PLATFORM : " ${TARGET_PLATFORM})
96message(STATUS "CMAKE_SYSTEM_PROCESSOR : " ${CMAKE_SYSTEM_PROCESSOR})
97message(STATUS "*******************************************************")