# Generated by the Vitis IDE. Only modify the sections marked as USER SETTINGS.
set(_CONTAINER_NAMES
binary_container_1
)


set(_PACKAGE_OUT_DIR
./package
)


####    START OF USER SETTINGS    ####
# Below settings can be customized
# Adding any other command line options to be passed to v++ --package
set(USER_PACKAGE_OPTIONS
""
)
####    END OF USER SETTINGS    ####
####    CAUTION in updating below section    ####


# These setting are required to build the application as per the project
# template used. Update below only to modify the default settings.
# Below linker options are derived from the application template used to create
# this project. Update them to suite your requirement. They will not be modified
# further by the tool. If package options are needed, they can be added to
# USER_PACKAGE_OPTIONS listed above.
set(_PACKAGE_OPTIONS
""
)

# AIE libadf.a library will be added to V++ Packager if project has AIE
# component.
if( ${VITIS_TARGET} STREQUAL x86sim )
  set (AIE_TARGET x86sim)
elseif(${VITIS_TARGET} STREQUAL hw_emu)
  set (AIE_TARGET hw)
else()
  set (AIE_TARGET ${VITIS_TARGET})
endif()

set(_AIE_ARCHIVES
${WORKSPACE_DIR}/aie_component/build/${AIE_TARGET}/libadf.a
)
# Below variables will be auto-updated based on the binary container.

set(_binary_container_1_XCLBIN_PATH
hw_link/binary_container_1${VIVADO_HW_FLOW_ARCHIVE_EXT}
)

set(HOST_MODE
x86
)
if( ${HOST_MODE} STREQUAL x86 )
    if( ${VITIS_TARGET} STREQUAL x86sim )
       set (HOST_TARGET x86sim)
    elseif(${VITIS_TARGET} STREQUAL hw_emu)
       set (HOST_TARGET hw)
    else()
       set (HOST_TARGET ${VITIS_TARGET})
    endif()
elseif(${HOST_MODE} STREQUAL arm)
  set (HOST_TARGET hw)
endif()
# emconfig.json files generated during the host component build. These are
# packed into the sd_card for hw_emu target
set(_HOST_EMCONFIG
host/build/${HOST_TARGET}/emconfig.json
)

set(_HOST_EXE
host/build/${HOST_TARGET}/host
)

set(_RUN_APP_SCRIPT
""
)



set(_PACKAGE_CFG
package/package.cfg
)
set(_PACKAGE_PROJ
package
)
##  End of variables auto-updated by the tool ##
set(_DEFER_AIE_RUN
""
)
set(ADDITIONAL_PACKAGE_OPTIONS
)
function(updateInplace IN_FILE pattern)
  # create list of lines form the contens of a file
  file (STRINGS ${IN_FILE} LINES)
  # overwrite the file....
  file(WRITE ${IN_FILE} "")
  foreach(LINE IN LISTS LINES)
    string(REGEX REPLACE ${pattern} "" STRIPPED "${LINE}")
    file(APPEND ${IN_FILE} "${STRIPPED}\n")
  endforeach()
endfunction()

set(_RUN_PACKAGE_CFG ${_PACKAGE_CFG})
list(TRANSFORM _RUN_PACKAGE_CFG PREPEND "${CMAKE_BINARY_DIR}/")

foreach( _CFG ${_PACKAGE_CFG} )
    file(COPY ${PROJECT_SOURCE_DIR}/${_CFG} DESTINATION ${CMAKE_BINARY_DIR}/${_PACKAGE_PROJ})
    updateInplace(${CMAKE_BINARY_DIR}/${_CFG} "enable_aie_debug=true")
    file(STRINGS ${PROJECT_SOURCE_DIR}/${_CFG} CFGTXT)
    string(FIND "${CFGTXT}" "defer_aie_run=true" matchres)
    if (NOT ${matchres} EQUAL -1)
       set(_DEFER_AIE_RUN "--package.defer_aie_run")
    endif()
endforeach()

list(TRANSFORM _PACKAGE_CFG PREPEND "${CMAKE_SOURCE_DIR}/")

if (NOT ${_HOST_EXE} STREQUAL "")
   list(TRANSFORM _HOST_EXE PREPEND "${WORKSPACE_DIR}/")
endif()

if(NOT ${_HOST_EMCONFIG} STREQUAL "")
    list(TRANSFORM _HOST_EMCONFIG PREPEND "${WORKSPACE_DIR}/")
endif()

if(NOT ${_RUN_APP_SCRIPT} STREQUAL "")
    list(TRANSFORM _RUN_APP_SCRIPT PREPEND "${CMAKE_BINARY_DIR}/")
endif()

foreach(CONTAINER ${_CONTAINER_NAMES})
	set(_XCLBIN  ${CONTAINER}.xclbin)
	set(_LINK_TARGETS VppLink_${CONTAINER})

	list(TRANSFORM _${CONTAINER}_XCLBIN_PATH PREPEND "${CMAKE_BINARY_DIR}/")

	set(CONFIG_OPTIONS "")
    set(RUN_OPTIONS "")
    set(DEBUG_OPTIONS "")
    if ( ${HOST_TARGET} STREQUAL hw )
        foreach( runCfg ${_RUN_PACKAGE_CFG})
            list(APPEND RUN_OPTIONS "--config")
            list(APPEND RUN_OPTIONS ${runCfg})
        endforeach()

        foreach( debugCfg ${_PACKAGE_CFG})
            list(APPEND DEBUG_OPTIONS "--config")
            list(APPEND DEBUG_OPTIONS ${debugCfg})
        endforeach()

        if( ${VITIS_TARGET} STREQUAL hw_emu )
            foreach(_EMCONFIG_JSON ${_HOST_EMCONFIG})
                list(APPEND CONFIG_OPTIONS "--package.sd_file")
                list(APPEND CONFIG_OPTIONS ${_EMCONFIG_JSON})
            endforeach()
        endif()

        if( (${VITIS_TARGET} STREQUAL hw_emu) AND (EXISTS ${_RUN_APP_SCRIPT}) )
            list(APPEND CONFIG_OPTIONS "--package.sd_file")
            list(APPEND CONFIG_OPTIONS ${_RUN_APP_SCRIPT})
        endif()

        foreach(_HOST ${_HOST_EXE})
            list(APPEND CONFIG_OPTIONS "--package.sd_file")
            list(APPEND CONFIG_OPTIONS ${_HOST})
        endforeach()
    else()
        list(APPEND CONFIG_OPTIONS "--save-temps")
        list(APPEND CONFIG_OPTIONS "--temp_dir")
        list(APPEND CONFIG_OPTIONS "package.build")
        list(APPEND CONFIG_OPTIONS ${_DEFER_AIE_RUN})
    endif()

    ADD_CUSTOM_COMMAND(OUTPUT ${_XCLBIN}
		BYPRODUCTS ${CMAKE_BINARY_DIR}/${_PACKAGE_PROJ}/${_XCLBIN}.package_summary
			${CMAKE_BINARY_DIR}/${_PACKAGE_PROJ}/v++_${CONTAINER}.log
			${CMAKE_BINARY_DIR}/${_PACKAGE_PROJ}/package ${CMAKE_BINARY_DIR}/${_PACKAGE_PROJ}/package.cfg
			${CMAKE_BINARY_DIR}/${_PACKAGE_PROJ}/package.build .Xil xrc.log xcd.log
			${CMAKE_BINARY_DIR}/${_PACKAGE_PROJ}/package_aie_debug
			${CMAKE_BINARY_DIR}/${_PACKAGE_PROJ}/package_aie_debug.build
		COMMAND ${Vitis_COMPILER} --platform ${VITIS_PLATFORM_PATH}
			--target ${VITIS_TARGET} --package ${RUN_OPTIONS} ${CONFIG_OPTIONS}
			${USER_PACKAGE_OPTIONS}
			${ADDITIONAL_PACKAGE_OPTIONS}
			${_PACKAGE_OPTIONS}
			${_${CONTAINER}_XCLBIN_PATH} ${_AIE_ARCHIVES}
			-o ${_XCLBIN}

        COMMAND if [ X${_AIE_ARCHIVES} != X"" ] \; then
            ${Vitis_COMPILER} --platform ${VITIS_PLATFORM_PATH}
            --target ${VITIS_TARGET} --package ${DEBUG_OPTIONS} ${CONFIG_OPTIONS} --package.out_dir package_aie_debug --temp_dir=package_aie_debug.build
            ${USER_PACKAGE_OPTIONS}
            ${ADDITIONAL_PACKAGE_OPTIONS}
            ${_PACKAGE_OPTIONS}
            ${_${CONTAINER}_XCLBIN_PATH} ${_AIE_ARCHIVES}
            -o ${_XCLBIN} \; fi \;
	DEPENDS ${_PACKAGE_CFG} ${_AIE_ARCHIVES} ${_HOST_EXE}
	)
	ADD_CUSTOM_TARGET(VppPackage_${CONTAINER} ALL
	DEPENDS ${_XCLBIN} ${_LINK_TARGETS})

	# For adding pre build step.
    # Any script can be used as a pre build step
    # Uncomment below section to use the pre-build step.
    # Example:  To copy a data file into to a pre-defined location.
    #add_custom_command(TARGET VppPackage_${CONTAINER} PRE_BUILD
    #COMMAND cp   <source location>  <target location>
    #)

    # For adding post build step.
    # Any script can be used as a post build step, it can take the build output as input.
    # Uncomment below section to use the post build step.
    # Example:  To copy the binary to a pre-defined location.
    #add_custom_command(TARGET VppPackage_${CONTAINER} POST_BUILD
    #COMMAND cp <source location> <target location>
    #)

endforeach()
