Skip to content

Commit

Permalink
Fix nasa#1436, use sub script for conversion
Browse files Browse the repository at this point in the history
This uses a sub-script to call elf2cfetbl which avoid relying
on a shell glob.  More complicated but should be more robust if/when
someone renames a table.
  • Loading branch information
jphickey committed Apr 28, 2021
1 parent 88b7e21 commit fce8a92
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 2 deletions.
7 changes: 5 additions & 2 deletions cmake/arch_build.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -205,8 +205,11 @@ function(add_cfe_tables APP_NAME TBL_SRC_FILES)
# current content of a dependency (rightfully so).
add_custom_command(
OUTPUT "${TABLE_DESTDIR}/${TBLWE}.tbl"
COMMAND ${CMAKE_AR} x $<TARGET_FILE:${TGT}_${TBLWE}-obj>
COMMAND ${MISSION_BINARY_DIR}/tools/elf2cfetbl/elf2cfetbl "*${CMAKE_C_OUTPUT_EXTENSION}"
COMMAND ${CMAKE_COMMAND}
-DCMAKE_AR=${CMAKE_AR}
-DTBLTOOL=${MISSION_BINARY_DIR}/tools/elf2cfetbl/elf2cfetbl
-DLIB=$<TARGET_FILE:${TGT}_${TBLWE}-obj>
-P ${CFE_SOURCE_DIR}/cmake/generate_table.cmake
DEPENDS ${MISSION_BINARY_DIR}/tools/elf2cfetbl/elf2cfetbl ${TGT}_${TBLWE}-obj
WORKING_DIRECTORY ${TABLE_DESTDIR}
)
Expand Down
48 changes: 48 additions & 0 deletions cmake/generate_table.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
##################################################################
#
# Sub-script to generate a table file via elf2cfetbl
#
# This small script runs at build time (as opposed to prep time)
# which converts a static library (.a) with a single object into a
# table (.tbl) file
#
##################################################################

#
# Required passed in values:
# CMAKE_AR => path to "ar" utility for working with static lib files
# TBLTOOL => path to "elf2cfetbl" utility
# LIB => name of library file to convert
#
# This assumes/requires that the static library has a single object in it.
# Note, In newer versions of CMake an object library can be used. This workaround
# is intended to also be compatible with older CMake versions.
#

# First run "ar t" to get the object file name, there should be only 1 file.
execute_process(COMMAND ${CMAKE_AR} t "${LIB}"
OUTPUT_VARIABLE OBJNAME
RESULT_VARIABLE RESULT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if (NOT RESULT EQUAL 0)
message(FATAL_ERROR "Failure running ${CMAKE_AR} t ${LIB}")
endif()

# Next run "ar x" to extract that file.
execute_process(COMMAND ${CMAKE_AR} x "${LIB}" "${OBJNAME}"
RESULT_VARIABLE RESULT
)
if (NOT RESULT EQUAL 0)
message(FATAL_ERROR "Failure running ${CMAKE_AR} x ${LIB} ${OBJNAME}")
endif()

# Finally invoke the table tool (elf2cfetbl) on the object
execute_process(COMMAND ${TBLTOOL} "${OBJNAME}"
RESULT_VARIABLE RESULT
)
if (NOT RESULT EQUAL 0)
message(FATAL_ERROR "Failure running ${TBLTOOL}")
endif()

message("Successfully converted ${LIB} to a CFE table")

0 comments on commit fce8a92

Please sign in to comment.