diff --git a/camkes_vm_helpers.cmake b/camkes_vm_helpers.cmake index 499766cc..9b31797a 100644 --- a/camkes_vm_helpers.cmake +++ b/camkes_vm_helpers.cmake @@ -110,27 +110,22 @@ function(DefineCAmkESVMFileServer) set(PARAM_TYPE "FileServer") endif() - if(PARAM_INSTANCE) - set(FSRV_TARGET "${PARAM_INSTANCE}_config") - else() + if(NOT PARAM_INSTANCE) set(PARAM_INSTANCE "fserv") - set(FSRV_TARGET "vm_fserver_config") endif() - # The target might exist already when AddToFileServer() was called. - if(NOT TARGET ${FSRV_TARGET}) - add_custom_target(${FSRV_TARGET}) - endif() + set(INST_BIN_DIR "${CMAKE_CURRENT_BINARY_DIR}/${PARAM_INSTANCE}") # For dependencies and files, both lists and lists of list are supported for # convenience reasons. Furthermore, empty entries are also allowed. This # can happen when the caller uses variables for the lists, when in some # configurations the lists remain empty. + set(DEPS "") foreach(element IN LISTS PARAM_DEPENDS) foreach(item IN LISTS element) if(item) - set_property(TARGET ${FSRV_TARGET} APPEND PROPERTY DEPS ${item}) + list(APPEND DEPS "${item}") endif() endforeach() endforeach() @@ -155,56 +150,24 @@ function(DefineCAmkESVMFileServer) set(FILE_NAME "${CMAKE_MATCH_1}") get_filename_component(CPIO_NAME "${FILE_NAME}" NAME) endif() - set_property( - TARGET ${FSRV_TARGET} - APPEND - PROPERTY FILES "${CPIO_NAME}:${FILE_NAME}" + set(CPIO_FILE "${INST_BIN_DIR}/files/${CPIO_NAME}") + add_custom_command( + OUTPUT "${CPIO_FILE}" + COMMENT "copy: ${FILE_NAME} -> ${CPIO_FILE}" + COMMAND + ${CMAKE_COMMAND} -E copy "${FILE_NAME}" "${CPIO_FILE}" + VERBATIM + DEPENDS ${FILE_NAME} ${DEPS} ) + # There is no need to create an explicit target for the command + # above, because the archive creation depends on all files + # listed in CPIO_FILES. The command above is the creation rule + # for each one. + list(APPEND CPIO_FILES "${CPIO_FILE}") endif() endforeach() endforeach() - # now process the file/deps list - get_target_property(files ${FSRV_TARGET} FILES) - if(NOT files) # this also catches "files-NOTFOUND" if property is not set - set(files "") - endif() - get_target_property(deps ${FSRV_TARGET} DEPS) - if(NOT deps) # this also catches "deps-NOTFOUND" if property is not set - set(deps "") - endif() - - set(INST_BIN_DIR "${CMAKE_CURRENT_BINARY_DIR}/${PARAM_INSTANCE}") - - set(CPIO_FILES "") - foreach(item IN LISTS files) # : - string( - REGEX - MATCH - "^([^:]+):([^:]+)$" - cpio_item - "${item}" - ) - if(NOT cpio_item) - message(FATAL_ERROR "invalid CPIO file format: '${item}'") - endif() - set(CPIO_NAME "${CMAKE_MATCH_1}") - set(FILE_NAME "${CMAKE_MATCH_2}") - set(CPIO_FILE "${INST_BIN_DIR}/files/${CPIO_NAME}") - add_custom_command( - OUTPUT "${CPIO_FILE}" - COMMENT "copy: ${FILE_NAME} -> ${CPIO_FILE}" - COMMAND - ${CMAKE_COMMAND} -E copy "${FILE_NAME}" "${CPIO_FILE}" - VERBATIM - DEPENDS ${FILE_NAME} ${deps} - ) - # There is no need to create an explicit target for the command above, - # the archive creation depends on all files in CPIO_FILES, where the - # command above is the creation rule for each one. - list(APPEND CPIO_FILES "${CPIO_FILE}") - endforeach() - # Build CPIO archive. It implicitly depends on all files in CPIO_FILES, # which have their own dependencies each from above. So we don't have any # additional explicit dependencies here. @@ -248,59 +211,6 @@ function(DeclareCAmkESVMRootServer camkes_config) ) endfunction(DeclareCAmkESVMRootServer) -# Function for adding a file/image to the vm file server. -# -# Parameters: -# -# -# The name the caller wishes to use to reference the file in the CPIO archive. -# This corresponds with the name set in the 'kernel_image' camkes variable for -# a given instance vm. -# -# -# The location of the file/image the caller is adding to the file server -# -# INSTANCE -# Instance name of the file server CAmkES component. -# Optional, defaults to "fserv" -# -# DEPENDS [ [...]] -# Any additional dependencies for the file/image the caller is adding to the -# file server -# -function(AddToFileServer filename_pref file_dest) - - cmake_parse_arguments( - PARSE_ARGV - 2 - PARAM # variable prefix - "" # option arguments - "INSTANCE" # optional single value arguments - "DEPENDS" # optional multi value arguments - ) - - if(PARAM_UNPARSED_ARGUMENTS) - message(FATAL_ERROR "Unknown arguments: ${PARAM_UNPARSED_ARGUMENTS}") - endif() - - if(PARAM_INSTANCE) - set(FSRV_TARGET "${PARAM_INSTANCE}_config") - else() - set(FSRV_TARGET "vm_fserver_config") - endif() - - if(NOT TARGET ${FSRV_TARGET}) - add_custom_target(${FSRV_TARGET}) - endif() - - set_property(TARGET ${FSRV_TARGET} APPEND PROPERTY FILES "${filename_pref}:${file_dest}") - - if(PARAM_DEPENDS) - set_property(TARGET ${FSRV_TARGET} APPEND PROPERTY DEPS ${PARAM_DEPENDS}) - endif() - -endfunction(AddToFileServer) - # Function for decompressing/extracting a vmlinux file from a given kernel image # decompress_target: The target name the caller wishes to use to generate the decompressed kernel # image