@@ -21,9 +21,11 @@ function (scrutiny_postbuild TARGET)
21
21
SCRUTINY_CMD # OPTIONAL: Path to the scrutiny binary
22
22
SFD_FILENAME # OPTIONAL: Name to give to the .sfd file
23
23
24
- TAGGED_EXECUTABLE_TARGET_VAR # OPTIONAL: The output variable that will store the CMake target name of the tagged binary
25
24
TAGGED_EXECUTABLE_NAME # OPTIONAL: Filename of the tagged binary
25
+ TAGGED_EXECUTABLE_TARGET_VAR # OPTIONAL: The output variable that will store the CMake target name of the tagged binary
26
+ TAGGED_EXECUTABLE_PATH_VAR # OPTIONAL: The output variable that will store the absolute path to the tagged binary
26
27
SFD_TARGET_VAR # OPTIONAL: The output variable that will store the CMake target name of the SFD file
28
+ SFD_PATH_VAR # OPTIONAL: The output variable that will store the absolute path to the SFD file
27
29
28
30
METADATA_PROJECT_NAME # OPTIONAL: The name of the project, embedded in the .sfd file
29
31
METADATA_AUTHOR # OPTIONAL: The name of the project author, embedded in the .sfd file
@@ -66,19 +68,6 @@ function (scrutiny_postbuild TARGET)
66
68
endif ()
67
69
endif ()
68
70
69
- # Validate SFD filename
70
- if (NOT arg_SFD_FILENAME )
71
- set (arg_SFD_FILENAME ${TARGET} .sfd ) # Default value
72
- endif ()
73
- if (NOT IS_ABSOLUTE ${arg_SFD_FILENAME} )
74
- # Try to put next to the .elf
75
- if (CMAKE_RUNTIME_OUTPUT_DIRECTORY )
76
- set (arg_SFD_FILENAME ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /${arg_SFD_FILENAME} )
77
- else ()
78
- set (arg_SFD_FILENAME ${CMAKE_BINARY_DIR} /${arg_SFD_FILENAME} )
79
- endif ()
80
- endif ()
81
-
82
71
# Catch potential abd argument and report them
83
72
get_target_property (TARGET_TYPE ${TARGET} TYPE )
84
73
if (NOT TARGET_TYPE STREQUAL "EXECUTABLE" )
@@ -87,33 +76,49 @@ function (scrutiny_postbuild TARGET)
87
76
88
77
# Give the target we created to the caller
89
78
get_target_property (TARGET_SUFFIX ${TARGET} SUFFIX )
90
- set (TAGGED_EXECUTABLE_TARGET ${TARGET} _tagged )
91
- if (arg_TAGGED_EXECUTABLE_TARGET_VAR )
92
- set (${arg_TAGGED_EXECUTABLE_TARGET_VAR} ${TAGGED_EXECUTABLE_TARGET} PARENT_SCOPE )
93
- endif ()
94
79
95
80
# Tagged executable validation
96
81
if (NOT arg_TAGGED_EXECUTABLE_NAME )
97
- set (arg_TAGGED_EXECUTABLE_NAME ${TARGET} -tagged ) # Default value
82
+ set (arg_TAGGED_EXECUTABLE_NAME ${TARGET} _tagged ) # Default value
98
83
if (TARGET_SUFFIX ) # Apply the same suffix as the source
99
84
set (arg_TAGGED_EXECUTABLE_NAME ${arg_TAGGED_EXECUTABLE_NAME}${TARGET_SUFFIX} )
100
85
endif ()
101
86
endif ()
102
87
103
88
# If relative path, try to place next to the binary
104
- if (NOT IS_ABSOLUTE ${arg_TAGGED_EXECUTABLE_NAME} )
89
+ if (IS_ABSOLUTE ${arg_TAGGED_EXECUTABLE_NAME} )
90
+ set (TAGGED_EXECUTABLE_ABSPATH ${arg_TAGGED_EXECUTABLE_NAME} )
91
+ else ()
105
92
if (CMAKE_RUNTIME_OUTPUT_DIRECTORY )
106
- set (arg_TAGGED_EXECUTABLE_NAME ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /${arg_TAGGED_EXECUTABLE_NAME} )
93
+ set (TAGGED_EXECUTABLE_ABSPATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /${arg_TAGGED_EXECUTABLE_NAME} )
107
94
else ()
108
- set (arg_TAGGED_EXECUTABLE_NAME ${CMAKE_BINARY_DIR } /${arg_TAGGED_EXECUTABLE_NAME} )
95
+ set (TAGGED_EXECUTABLE_ABSPATH ${CMAKE_CURRENT_BINARY_DIR } /${arg_TAGGED_EXECUTABLE_NAME} )
109
96
endif ()
110
97
endif ()
98
+ if (arg_TAGGED_EXECUTABLE_PATH_VAR )
99
+ set (${arg_TAGGED_EXECUTABLE_PATH_VAR} ${TAGGED_EXECUTABLE_ABSPATH} PARENT_SCOPE )
100
+ endif ()
101
+
102
+
103
+ # Validate SFD filename
104
+ if (NOT arg_SFD_FILENAME )
105
+ set (arg_SFD_FILENAME ${TARGET} .sfd ) # Default value
106
+ endif ()
107
+
108
+ if (IS_ABSOLUTE ${arg_SFD_FILENAME} )
109
+ set (SFD_ABSPATH ${arg_SFD_FILENAME} )
110
+ else ()
111
+ # Try to put next to the .elf
112
+ if (CMAKE_RUNTIME_OUTPUT_DIRECTORY )
113
+ set (SFD_ABSPATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /${arg_SFD_FILENAME} )
114
+ else ()
115
+ set (SFD_ABSPATH ${CMAKE_CURRENT_BINARY_DIR} /${arg_SFD_FILENAME} )
116
+ endif ()
117
+ endif ()
118
+ if (arg_SFD_PATH_VAR )
119
+ set (${arg_SFD_PATH_VAR} ${SFD_ABSPATH} PARENT_SCOPE )
120
+ endif ()
111
121
112
- # SFD
113
- set (SFD_TARGET ${TARGET} _sfd )
114
- if (arg_SFD_TARGET_VAR )
115
- set (${arg_SFD_TARGET_VAR} ${SFD_TARGET} PARENT_SCOPE )
116
- endif ()
117
122
118
123
# Metadata
119
124
set (METADATA_ARGS "" )
@@ -138,11 +143,10 @@ function (scrutiny_postbuild TARGET)
138
143
139
144
list (LENGTH ALIAS_LIST_ABS ALIAS_COUNT ) # Count the alias file to skip that step if 0
140
145
141
- # --- Make the SFD ---
142
146
143
- add_custom_command (OUTPUT ${arg_SFD_FILENAME }
147
+ add_custom_command (OUTPUT ${SFD_ABSPATH }
144
148
DEPENDS ${TARGET} ${ALIAS_LIST_ABS}
145
- COMMAND ${CMAKE_COMMAND} -E echo "Generating Scrutiny Firmware Description"
149
+ COMMAND ${CMAKE_COMMAND} -E echo "Generating Scrutiny Firmware Description for ${TARGET} "
146
150
COMMAND ${CMAKE_COMMAND} -E rm -rf ${arg_WORKDIR}
147
151
COMMAND ${CMAKE_COMMAND} -E make_directory ${arg_WORKDIR}
148
152
COMMAND ${arg_SCRUTINY_CMD}
@@ -155,19 +159,30 @@ function (scrutiny_postbuild TARGET)
155
159
COMMAND ${arg_SCRUTINY_CMD} get -firmware-id $< TARGET_FILE:${TARGET} > --output ${arg_WORKDIR}
156
160
COMMAND ${arg_SCRUTINY_CMD} make-metadata --output ${arg_WORKDIR} ${METADATA_ARGS}
157
161
COMMAND ${arg_SCRUTINY_CMD} $< IF:$< NOT:$< EQUAL:${ALIAS_COUNT} ,0> > ,add-alias,noop> ${arg_WORKDIR} --file ${ALIAS_LIST_ABS}
158
- COMMAND ${arg_SCRUTINY_CMD} make-sfd ${arg_WORKDIR} ${arg_SFD_FILENAME}
159
- COMMAND ${arg_SCRUTINY_CMD} $< IF:$< BOOL:arg_INSTALL_SFD> ,install-sfd,noop> ${arg_SFD_FILENAME}
162
+ COMMAND ${arg_SCRUTINY_CMD} make-sfd ${arg_WORKDIR} ${SFD_ABSPATH} $< $< BOOL:${arg_INSTALL_SFD} > :--install>
160
163
)
161
- add_custom_target (${SFD_TARGET} ALL DEPENDS ${arg_SFD_FILENAME} )
162
- set_target_properties (${SFD_TARGET} PROPERTIES TARGET_FILE ${arg_SFD_FILENAME} )
163
-
164
164
165
+ set (TAGGED_EXECUTABLE_TARGET ${TARGET} _tagged_target )
166
+ set (SFD_TARGET ${TARGET} _sfd_target )
167
+
168
+ if (arg_SFD_TARGET_VAR )
169
+ set (${arg_SFD_TARGET_VAR} ${SFD_TARGET} PARENT_SCOPE )
170
+ endif ()
171
+
172
+ if (arg_TAGGED_EXECUTABLE_TARGET_VAR )
173
+ set (${arg_TAGGED_EXECUTABLE_TARGET_VAR} ${TAGGED_EXECUTABLE_TARGET} PARENT_SCOPE )
174
+ endif ()
175
+
176
+ # --- SFD
177
+ add_custom_target (${SFD_TARGET} ALL DEPENDS ${SFD_ABSPATH} )
178
+ set_target_properties (${SFD_TARGET} PROPERTIES TARGET_FILE ${SFD_ABSPATH} )
179
+
165
180
# --- Make the tagged binary ---
166
- add_custom_command (OUTPUT ${arg_TAGGED_EXECUTABLE_NAME }
181
+ add_custom_command (OUTPUT ${TAGGED_EXECUTABLE_ABSPATH }
167
182
DEPENDS ${TARGET}
168
- COMMAND ${arg_SCRUTINY_CMD} tag-firmware-id $< TARGET_FILE:${PROJECT_NAME} > ${arg_TAGGED_EXECUTABLE_NAME }
183
+ COMMAND ${arg_SCRUTINY_CMD} tag-firmware-id $< TARGET_FILE:${PROJECT_NAME} > ${TAGGED_EXECUTABLE_ABSPATH }
169
184
)
170
- add_custom_target (${TAGGED_EXECUTABLE_TARGET} ALL DEPENDS ${arg_TAGGED_EXECUTABLE_NAME } )
171
- set_target_properties (${TAGGED_EXECUTABLE_TARGET} PROPERTIES TARGET_FILE ${arg_TAGGED_EXECUTABLE_NAME } )
172
-
185
+ add_custom_target (${TAGGED_EXECUTABLE_TARGET} ALL DEPENDS ${TAGGED_EXECUTABLE_ABSPATH } )
186
+ set_target_properties (${TAGGED_EXECUTABLE_TARGET} PROPERTIES TARGET_FILE ${TAGGED_EXECUTABLE_ABSPATH } )
187
+
173
188
endfunction ()
0 commit comments