################################################################################
#
# Hostboot for POWER10
#
################################################################################

HOSTBOOT_P10_VERSION = $(call qstrip,$(BR2_HOSTBOOT_P10_VERSION))
HOSTBOOT_P10_SITE ?= $(call github,open-power,hostboot,$(HOSTBOOT_P10_VERSION))

HOSTBOOT_P10_LICENSE = Apache-2.0
HOSTBOOT_P10_LICENSE_FILES = LICENSE
HOSTBOOT_P10_DEPENDENCIES = host-binutils fsp-trace

HOSTBOOT_P10_INSTALL_IMAGES = YES
HOSTBOOT_P10_INSTALL_TARGET = NO

HOSTBOOT_P10_ENV_VARS=$(TARGET_MAKE_ENV) PERL_USE_UNSAFE_INC=1 \
    CONFIG_FILE=$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/hostboot/$(BR2_HOSTBOOT_P10_CONFIG_FILE) \
    OPENPOWER_BUILD=1 CROSS_PREFIX="$(CCACHE) $(TARGET_CROSS)" HOST_PREFIX="" HOST_BINUTILS_DIR=$(HOST_BINUTILS_DIR) \
    HOSTBOOT_VERSION=`cat $(HOSTBOOT_P10_VERSION_FILE)` \
    HOSTBOOT_FW_VERSION_SHORT=`cat $(HOSTBOOT_P10_FW_VERSION_SHORT_FILE)` \
    HOSTBOOT_FW_VERSION_LONG=`cat $(HOSTBOOT_P10_FW_VERSION_LONG_FILE)`

FSP_TRACE_IMAGES_DIR = $(STAGING_DIR)/fsp-trace/

# If BR2_PACKAGE_IBM_FW_PROPRIETARY_P10 is defined then
#  * Include repo ibm-fw-proprietary-p10 as a dependency (HOSTBOOT_P10_DEPENDENCIES)
#    to get access to any needed IBM proprietary files.
#  * Create a variable (IBM_FW_PROPRIETARY_P10_BUILD_DIR) to point to the location
#    of the ibm-fw-proprietary-p10 repo for easy access to any files needed.
# Note that if libecc_static.a exists in the $(HOSTBOOT_PRECOMPILED_LIBRARIES)
# directory then we don't require access to the ibm-fw-proprietary repository.
ifeq ($(BR2_PACKAGE_IBM_FW_PROPRIETARY_P10),y)
ifeq ($(wildcard $(HOSTBOOT_PRECOMPILED_LIBRARIES)/libecc_static.a),)
    $(info Using ibm-fw-proprietary for ECC implementation)
    HOSTBOOT_P10_DEPENDENCIES += ibm-fw-proprietary-p10
    IBM_FW_PROPRIETARY_P10_BUILD_DIR = $(BUILD_DIR)/ibm-fw-proprietary-p10-$(IBM_FW_PROPRIETARY_P10_VERSION)
else
    $(info Using $(HOSTBOOT_PRECOMPILED_LIBRARIES)/libecc_static.a for ECC implementation)
endif
endif

# TODO: WORKAROUND: Currently the git clone causes a bad symlink
# to be created for src/include/usr/tracinterface.H; so delete it and rebuild it
# manually
# Copy the VPD ECC algorithm files from the repo ibm-fw-proprietary-p10 to hostboot's
# 'src/user/vpd' directory if environment variable 'IBM_FW_PROPRIETARY_P10_BUILD_DIR'
# is defined.  Whether the VPD ECC algorithm files get compiled or not will be determined
# by flag 'COMPILE_VPD_ECC_ALGORITHMS' within file openpower/configs/hostboot/<systemx>.config.
define HOSTBOOT_P10_BUILD_CMDS
        $(HOSTBOOT_P10_ENV_VARS) bash -c 'cd $(@D) \
                                          && if ! cmp --quiet src/include/usr/trace/interface.H src/include/usr/tracinterface.H ; then \
                                                 rm -f src/include/usr/tracinterface.H && cp src/include/usr/trace/interface.H src/include/usr/tracinterface.H ; \
                                             fi \
                                          && if [ -n "$(IBM_FW_PROPRIETARY_P10_BUILD_DIR)" ] ; then \
                                                 cp --no-clobber $(IBM_FW_PROPRIETARY_P10_BUILD_DIR)/vpd/* src/usr/vpd ; \
                                                 mkdir -p src/build/tools/extern/ibm-fw-proprietary/ ; \
                                                 cp --no-clobber -r $(IBM_FW_PROPRIETARY_P10_BUILD_DIR)/* src/build/tools/extern/ibm-fw-proprietary/ ; \
                                                 echo $(IBM_FW_PROPRIETARY_P10_VERSION) >src/build/tools/extern/ibm-fw-proprietary/LIBECC_COMMIT_HASH ; \
                                             fi \
                                          && source ./env.bash && $(MAKE)'
endef

define HOSTBOOT_P10_INSTALL_IMAGES_CMDS
        cd $(@D) && $(HOSTBOOT_P10_ENV_VARS) source ./env.bash && $(@D)/src/build/tools/hbDistribute --openpower $(STAGING_DIR)/hostboot_build_images/
        cd $(@D) && $(HOSTBOOT_P10_ENV_VARS) source ./env.bash && $(@D)/src/build/tools/hbDistribute --openpower-sim $(STAGING_DIR)/hostboot_sim_data/
	cp $(FSP_TRACE_IMAGES_DIR)/fsp-trace $(STAGING_DIR)/hostboot_sim_data/
        mkdir -p $(OUTPUT_IMAGES_DIR)/sim/
	tar -zcvf $(OUTPUT_IMAGES_DIR)/sim/hostboot_sim.tar -C $(STAGING_DIR)/hostboot_sim_data/ .
endef

$(eval $(generic-package))
