@@ -21,9 +21,11 @@ function (scrutiny_postbuild TARGET)
2121 SCRUTINY_CMD # OPTIONAL: Path to the scrutiny binary
2222 SFD_FILENAME # OPTIONAL: Name to give to the .sfd file
2323
24- TAGGED_EXECUTABLE_TARGET_VAR # OPTIONAL: The output variable that will store the CMake target name of the tagged binary
2524 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
2627 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
2729
2830 METADATA_PROJECT_NAME # OPTIONAL: The name of the project, embedded in the .sfd file
2931 METADATA_AUTHOR # OPTIONAL: The name of the project author, embedded in the .sfd file
@@ -66,19 +68,6 @@ function (scrutiny_postbuild TARGET)
6668 endif ()
6769 endif ()
6870
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-
8271 # Catch potential abd argument and report them
8372 get_target_property (TARGET_TYPE ${TARGET} TYPE )
8473 if (NOT TARGET_TYPE STREQUAL "EXECUTABLE" )
@@ -87,33 +76,49 @@ function (scrutiny_postbuild TARGET)
8776
8877 # Give the target we created to the caller
8978 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 ()
9479
9580 # Tagged executable validation
9681 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
9883 if (TARGET_SUFFIX) # Apply the same suffix as the source
9984 set (arg_TAGGED_EXECUTABLE_NAME ${arg_TAGGED_EXECUTABLE_NAME}${TARGET_SUFFIX} )
10085 endif ()
10186 endif ()
10287
10388 # 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 ()
10592 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} )
10794 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} )
10996 endif ()
11097 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 ()
111121
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 ()
117122
118123 # Metadata
119124 set (METADATA_ARGS "" )
@@ -138,11 +143,10 @@ function (scrutiny_postbuild TARGET)
138143
139144 list (LENGTH ALIAS_LIST_ABS ALIAS_COUNT) # Count the alias file to skip that step if 0
140145
141- # --- Make the SFD ---
142146
143- add_custom_command (OUTPUT ${arg_SFD_FILENAME }
147+ add_custom_command (OUTPUT ${SFD_ABSPATH }
144148 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} "
146150 COMMAND ${CMAKE_COMMAND} -E rm -rf ${arg_WORKDIR}
147151 COMMAND ${CMAKE_COMMAND} -E make_directory ${arg_WORKDIR}
148152 COMMAND ${arg_SCRUTINY_CMD}
@@ -155,19 +159,30 @@ function (scrutiny_postbuild TARGET)
155159 COMMAND ${arg_SCRUTINY_CMD} get -firmware-id $<TARGET_FILE:${TARGET} > --output ${arg_WORKDIR}
156160 COMMAND ${arg_SCRUTINY_CMD} make-metadata --output ${arg_WORKDIR} ${METADATA_ARGS}
157161 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 >
160163 )
161- add_custom_target (${SFD_TARGET} ALL DEPENDS ${arg_SFD_FILENAME} )
162- set_target_properties (${SFD_TARGET} PROPERTIES TARGET_FILE ${arg_SFD_FILENAME} )
163-
164164
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+
165180 # --- Make the tagged binary ---
166- add_custom_command (OUTPUT ${arg_TAGGED_EXECUTABLE_NAME }
181+ add_custom_command (OUTPUT ${TAGGED_EXECUTABLE_ABSPATH }
167182 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 }
169184 )
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+
173188endfunction ()
0 commit comments