#
# Copyright (c) 2020-2021 Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the License); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an AS IS BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

set(TARGET_CPU "cortex-m4" CACHE STRING "Target CPU")

set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER "armclang")
set(CMAKE_CXX_COMPILER "armclang")
set(CMAKE_ASM_COMPILER "armclang")
set(CMAKE_LINKER "armlink")

# Convert TARGET_CPU=Cortex-M33+nofp+nodsp into
#   - CMAKE_SYSTEM_PROCESSOR=cortex-m33
#   - __CPU_FEATURES=no-fp;no-dsp
string(REPLACE "+" ";" __CPU_FEATURES ${TARGET_CPU})
list(POP_FRONT __CPU_FEATURES CMAKE_SYSTEM_PROCESSOR)
string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} CMAKE_SYSTEM_PROCESSOR)

# Link target
set(__LINK_TARGET ${CMAKE_SYSTEM_PROCESSOR})

if ("nodsp" IN_LIST __CPU_FEATURES)
    string(APPEND __LINK_TARGET ".no_dsp")
endif()

if ("nofp" IN_LIST __CPU_FEATURES)
    string(APPEND __LINK_TARGET ".no_fp")
endif()

if (CMAKE_SYSTEM_PROCESSOR STREQUAL "cortex-m55")
    set(__LINK_TARGET 8.1-M.Main.dsp)
endif()

# Define C/C++ standards
set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 14)

# Compile options
add_compile_options(
    -mcpu=${TARGET_CPU}
    -mthumb
    "$<$<CONFIG:DEBUG>:-gdwarf-3>"
    "$<$<COMPILE_LANGUAGE:CXX>:-fno-unwind-tables;-fno-rtti;-fno-exceptions>")

# Compile defines
add_compile_definitions(
    "$<$<NOT:$<CONFIG:DEBUG>>:NDEBUG>")

# Link options
add_link_options(
    --cpu=${__LINK_TARGET}
    --lto
    --info common,debug,sizes,totals,veneers,unused
    --symbols
    --diag_suppress=L6439W)

# Compilation warnings
add_compile_options(
    -Wall
    -Wextra
    -Wsign-compare
    -Wunused
    -Wswitch-default
    -Wformat
    -Wdouble-promotion
    -Wredundant-decls
    -Wshadow
    -Wcast-align
    -Wnull-dereference
    -Wno-format-extra-args
    -Wno-unused-function
    -Wno-unused-label
    -Wno-missing-field-initializers
    -Wno-return-type)
