zephyr/cmake/sca/sparse/sparse.template
Torsten Rasmussen 91902c5fd4 cmake: add sparse support to the new SCA infrastructure
Sparse support was original introduced in #43776.

This commit introduces sparse support as part of Zephyr SCA tool
infrastructure.

The implementation in this commit has some benefits over existing
support:
- It does not required users to set `REAL_CC` in environment before
  invoking build command.
  This reduces risk of user mistakes, such as
  - REAL_CC being different from CMAKE_C_COMPILER.
  - User running CMake in one terminal / environment where REAL_CC is
    defined but invoking the build command in a different terminal /
    environment where REAL_CC is not defined or defined differently.
- It improve user experience as the user no longer has to define /
  re-define REAL_CC when building for different architecture, like
  switching from arm to xtensa, as this is now handled in CMake.
- CMAKE_C_COMPILER is not overwriting, this can be important for other
  tools which calls the C compiler for pre-processing purposes, such
  as devicetree and linker script generation.

Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
2023-01-27 20:28:58 +09:00

20 lines
744 B
Plaintext

# SPDX-License-Identifier: Apache-2.0
#
# Copyright (c) 2022, Nordic Semiconductor ASA
# Everything before `--` are arguments for cmake invocation, those must be ignored.
# First argument after `--` is the real compiler, but that is defined in REAL_CC
# as environment variable for cgcc, hence that must also be ignored, thus first
# argument to be passed to sparse is 2nd argument after `--`.
foreach(i RANGE ${CMAKE_ARGC})
if("${CMAKE_ARGV${i}}" STREQUAL "--")
math(EXPR end_of_options "${i} + 2")
break()
endif()
endforeach()
foreach(i RANGE ${end_of_options} ${CMAKE_ARGC})
list(APPEND ARGS ${CMAKE_ARGV${i}})
endforeach()
execute_process(COMMAND @CMAKE_COMMAND@ -E env REAL_CC=@CMAKE_C_COMPILER@ @SPARSE_COMPILER@ ${ARGS})