Skip to content

Commit ec0e122

Browse files
committed
sca: Add ECLAIR sca cmake implementation
Add the ECLAIR calls for the zephyr cmake environment to call ECLAIR while the firmware is build with west build. Signed-off-by: Simon Hein <[email protected]>
1 parent fb2366d commit ec0e122

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

cmake/sca/eclair/sca.cmake

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
#
3+
# Copyright (c) 2023, BUGSENG Srl
4+
5+
find_program(ECLAIR_ENV eclair_env REQUIRED)
6+
message(STATUS "Found eclair_env: ${ECLAIR_ENV}")
7+
8+
find_program(ECLAIR_REPORT eclair_report REQUIRED)
9+
message(STATUS "Found eclair_report: ${ECLAIR_REPORT}")
10+
11+
# ECLAIR Settings
12+
set(ECLAIR_PROJECT_NAME "Zephyr-${BOARD}")
13+
set(ECLAIR_OUTPUT_DIR ${CMAKE_BINARY_DIR}/sca/eclair_out)
14+
set(ECLAIR_ECL_DIR "${ZEPHYR_BASE}/cmake/sca/eclair/ECL")
15+
set(ECLAIR_DIAGNOSTICS_OUTPUT "${ECLAIR_OUTPUT_DIR}/DIAGNOSTIC.txt")
16+
set(ECLAIR_DATA_DIR "${ECLAIR_OUTPUT_DIR}/data")
17+
set(ECLAIR_BUILD_DIR "${ECLAIR_OUTPUT_DIR}/build")
18+
set(ECLAIR_PROJECT_ECD "${ECLAIR_OUTPUT_DIR}/PROJECT.ecd")
19+
set(CC_ALIASES "${CMAKE_C_COMPILER}")
20+
set(CXX_ALIASES "${CMAKE_CXX_COMPILER}")
21+
set(AS_ALIASES "${CMAKE_AS}")
22+
set(LD_ALIASES "${CMAKE_LINKER}")
23+
set(AR_ALIASES "${CMAKE_ASM_COMPILER_AR} ${CMAKE_C_COMPILER_AR} ${CMAKE_CXX_COMPILER_AR}")
24+
if(NOT ECLAIR_RULES_SET)
25+
set(ECLAIR_RULES_SET first_analysis)
26+
endif()
27+
28+
# Create Output Directory
29+
file(REMOVE_RECURSE ${ECLAIR_OUTPUT_DIR})
30+
file(MAKE_DIRECTORY ${ECLAIR_OUTPUT_DIR})
31+
file(MAKE_DIRECTORY ${ECLAIR_DATA_DIR})
32+
message(STATUS "ECLAIR outputs have been written to: ${ECLAIR_OUTPUT_DIR}")
33+
message(STATUS "ECLAIR ECB files have been written to: ${ECLAIR_DATA_DIR}")
34+
message(STATUS "ECLAIR BUILD DIR is: ${ECLAIR_BUILD_DIR}")
35+
36+
add_custom_target(eclair ALL
37+
COMMAND sh -c "ECLAIR_PROJECT_NAME=${ECLAIR_PROJECT_NAME} \
38+
ECLAIR_PROJECT_ROOT=${ZEPHYR_BASE} \
39+
ECLAIR_DIAGNOSTICS_OUTPUT=${ECLAIR_DIAGNOSTICS_OUTPUT} \
40+
ECLAIR_DATA_DIR=${ECLAIR_DATA_DIR} \
41+
ECLAIR_RULES_SET=${ECLAIR_RULES_SET} \
42+
CC_ALIASES=\"${CC_ALIASES}\" \
43+
CXX_ALIASES=\"${CXX_ALIASES}\" \
44+
AS_ALIASES=\"${AS_ALIASES}\" \
45+
LD_ALIASES=\"${LD_ALIASES}\" \
46+
AR_ALIASES=\"${AR_ALIASES}\" \
47+
${ECLAIR_ENV} \
48+
-verbose \
49+
-eval_file=${ECLAIR_ECL_DIR}/analysis.ecl \
50+
-- west build -p always \
51+
-b ${BOARD} \
52+
--build-dir ${ECLAIR_BUILD_DIR} \
53+
${APPLICATION_SOURCE_DIR} \
54+
| tee ${ECLAIR_OUTPUT_DIR}/analysis.log"
55+
BYPRODUCTS ${ECLAIR_OUTPUT_DIR}/analysis.log ${ECLAIR_OUTPUT_DIR}/report.log
56+
VERBATIM
57+
USES_TERMINAL
58+
COMMAND_EXPAND_LISTS
59+
)
60+
61+
add_custom_command(
62+
TARGET eclair POST_BUILD
63+
COMMAND sh -c "ECLAIR_DATA_DIR=${ECLAIR_DATA_DIR} \
64+
ECLAIR_OUTPUT_DIR=${ECLAIR_OUTPUT_DIR} \
65+
ECLAIR_PROJECT_ECD=${ECLAIR_PROJECT_ECD} \
66+
${ECLAIR_REPORT} \
67+
-eval_file=${ECLAIR_ECL_DIR}/reports.ecl \
68+
| tee ${ECLAIR_OUTPUT_DIR}/report.log"
69+
VERBATIM
70+
USES_TERMINAL
71+
COMMAND_EXPAND_LISTS
72+
)
73+
74+
unset(ECLAIR_RULES_SET CACHE)

0 commit comments

Comments
 (0)