# ******************************************************************************
# (C) Automotive-Lighting Reutlingen GmbH  -  ALRT/EEG
#     Tuebinger Strasse 123, 72762 Reutlingen, Germany
# ******************************************************************************

# ------------------------------------------------------------------------------
# file   CustVarBuild_070_Link.gmk
#
# \brief customer variant type build type make linker step
#
# ------------------------------------------------------------------------------

# ------------------------------------------------------------------------------
# Define local tools for converting and extracting symbols from ELF to M51 for RDM.
# ------------------------------------------------------------------------------

AL_ELF_TO_RDM_NAME    = ALElfToRdm.exe
AL_ELF_TO_RDM         = $(PATH_TOOLS_AL)/ALElfToRdm/$(AL_ELF_TO_RDM_NAME)

ifeq ($(OS),Windows_NT)
AL_ELF_TO_RDM_OBJDUMP = $(PATH_TOOLS_AL)/ALElfToRdm/arm-none-eabi-objdump.exe
else
AL_ELF_TO_RDM_OBJDUMP = arm-none-eabi-objdump
endif

# ------------------------------------------------------------------------------
# Link object files for target
# ------------------------------------------------------------------------------

FILES_LD   = $(ENV_MAKE_CUST_VAR)/$(TYP_PRJ)_$(TYP_VAR)_$(TYP_CC)_LinkerScript.$(SUFFIX_LDF)

FILES_LD  := $(FILES_LD)                                                                       
LIBPATH    = $(PATH_SRC_TARGET_LINK)/liba/$(TYP_CC)      \
             $(PATH_SRC_THIRD_PARTY)/Src_GLIWA/T1/lib      
	     
RULE_TO_LINK_APPLICATION = $(LD) $(LDFLAGS) $(FILES_LD) $(addprefix -L,$(LIBPATH)) @$(LINK_OBJECTS_FILE) -ldsfxp -o $(FILE_BIN_NAME).$(SUFFIX_ABS)
#-lt1base -lt1cont -lt1delay -lt1flex -lt1mod -lt1scope             


ifeq ($(TYP_CC),ARM_GHS)

LinkObjectFiles : $(FILES_TMP_OBJ) $(FILES_LD)  
	@$(GNUECHO) +++ linking application: $(FILE_BIN_NAME).$(SUFFIX_ABS)
	@$(GNUECHO) $(RULE_TO_LINK_APPLICATION)
	@-$(RULE_TO_LINK_APPLICATION)
	@-$(GNUECHO) +++ creating hex module: $(FILE_BIN_NAME).$(SUFFIX_HEX)
	@-$(OBJCOPY) -h -hex386 $(FILE_BIN_NAME).$(SUFFIX_ABS) -o $(FILE_BIN_NAME).$(SUFFIX_HEX)
	@-$(GNUECHO) +++ generating map files: $(FILE_BIN_NAME)_MemoryOD.map and $(FILE_BIN_NAME)_MemoryNM.map
	@-$(OBJDUMP) -h $(FILE_BIN_NAME).$(SUFFIX_ABS) > $(FILE_BIN_NAME)_MemoryOD.map
	@-$(NM) -n -S $(FILE_BIN_NAME).$(SUFFIX_ABS) > $(FILE_BIN_NAME)_MemoryNM.map
ifeq ($(TYP_SPECIAL_BUILD_OR_REBUILD),TYP_SPECIAL_BUILD_OR_REBUILD_DEVELOPER)
else
	@-$(GNUECHO) +++ generating assembly list file: $(FILE_BIN_NAME).lss
	@-$(OBJDUMP) -h -S $(FILE_BIN_NAME).$(SUFFIX_ABS) > $(FILE_BIN_NAME).lss
	@-$(GNUECHO) +++ generating object information with readelf: $(FILE_BIN_NAME)_readelf.txt
	@-$(READELF) --all --headers -wip $(FILE_BIN_NAME).$(SUFFIX_ABS) > $(FILE_BIN_NAME)_readelf.txt > NUL  2> NUL
endif
	@-$(GNUECHO) +++ Creating batch file for making RDM symbols $(PATH_BIN_NAME)/$(basename $(AL_ELF_TO_RDM_NAME)).bat
	@if exist $(subst /,\,$(AL_ELF_TO_RDM)) copy $(subst /,\,$(AL_ELF_TO_RDM)) $(subst /,\,$(PATH_BIN_NAME)) > NUL  2> NUL
	@if exist $(subst /,\,$(AL_ELF_TO_RDM_OBJDUMP)) copy $(subst /,\,$(AL_ELF_TO_RDM_OBJDUMP)) $(subst /,\,$(PATH_BIN_NAME)) > NUL  2> NUL
	@$(GNUECHO) cd $(DQUOTE)$(subst /,\\,$(PATH_BIN_NAME))$(DQUOTE)            >  $(subst /,\,$(PATH_BIN_NAME)/$(basename $(AL_ELF_TO_RDM_NAME))).bat
	@$(GNUECHO) $(AL_ELF_TO_RDM_NAME) $(notdir $(FILE_BIN_NAME).$(SUFFIX_ABS)) >> $(subst /,\,$(PATH_BIN_NAME)/$(basename $(AL_ELF_TO_RDM_NAME))).bat
ifeq ($(TYP_SPECIAL_BUILD_OR_REBUILD),TYP_SPECIAL_BUILD_OR_REBUILD_DEVELOPER)
else
ifeq ($(TYP_SPECIAL_BUILD_OR_REBUILD),TYP_SPECIAL_BUILD_OR_REBUILD_DELIVERY)
	@-$(GNUECHO) +++ Creating RDM symbols from $(FILE_BIN_NAME).$(SUFFIX_ABS) to $(FILE_BIN_NAME)_Rdm.m51
	@if exist $(subst /,\,$(PATH_BIN_NAME)/$(basename $(AL_ELF_TO_RDM_NAME))).bat $(subst /,\,$(PATH_BIN_NAME)/$(basename $(AL_ELF_TO_RDM_NAME))).bat
endif
endif
#	@-$(GNUECHO) +++ Creating target link DSFxp library
#	@-$(AR) $(FILES_TARGET_LINK_OBJ) -archive -o $(PATH_TMP_NAME_OBJ)/libdsfxp.a
	@$(GNUECHO) +++ end link

endif












ifeq ($(TYP_CC),ARM_AXN)

LinkObjectFiles : $(FILES_TMP_OBJ) $(FILES_LD)
	@$(GNUECHO) !!!x1FILES_LD =  $(FILES_LD)
	@$(GNUECHO) +++ linking application to AXIVION *.ir-file: $(FILE_BIN_NAME).$(SUFFIX_ABS)
	@-$(LD) $(LDFLAGS) $(FILES_TMP_OBJ) -Wl,-T$(FILES_LD),-Map,$(FILE_BIN_NAME).map -o $(FILE_BIN_NAME).$(SUFFIX_ABS)
	@-$(GNUECHO) +++ creating hex module: $(FILE_BIN_NAME).$(SUFFIX_HEX)
	@-$(GNUECHO) +++ creating hex module: disabled for AXIVION
	@-$(GNUECHO) +++ generating map files: $(FILE_BIN_NAME)_MemoryOD.map and $(FILE_BIN_NAME)_MemoryNM.map
	@-$(GNUECHO) +++ generating map files: disabled for AXIVION
	@-$(GNUECHO) +++ generating assembly list file: $(FILE_BIN_NAME).lss
	@-$(GNUECHO) +++ generating assembly list file: disabled for AXIVION
	@$(GNUECHO) +++ Dump content of AXIVION *.ir-file: $(FILE_BIN_NAME).$(SUFFIX_ABS)
	@-$(IRDUMP) -m $(FILE_BIN_NAME).$(SUFFIX_ABS)
	@$(GNUECHO) +++ end link

endif


ifeq ($(TYP_CC),ARM_GCC)

LinkObjectFiles : $(FILES_TMP_OBJ) $(FILES_LD)
	@$(GNUECHO) FILES_LD =  $(FILES_LD)
	@$(GNUECHO) +++ linking application: $(FILE_BIN_NAME).$(SUFFIX_ABS)
	@-$(LD) $(LDFLAGS) $(FILES_TMP_OBJ) -Wl,-T$(FILES_LD),-Map,$(FILE_BIN_NAME).map -o $(FILE_BIN_NAME).$(SUFFIX_ABS)
	@-$(GNUECHO) +++ creating hex module: $(FILE_BIN_NAME).$(SUFFIX_HEX)
	@-$(OBJCOPY) -O ihex $(FILE_BIN_NAME).$(SUFFIX_ABS) $(FILE_BIN_NAME).$(SUFFIX_HEX)
	@-$(GNUECHO) +++ generating map files: $(FILE_BIN_NAME)_MemoryOD.map and $(FILE_BIN_NAME)_MemoryNM.map
	@-$(OBJDUMP) -h $(FILE_BIN_NAME).$(SUFFIX_ABS) > $(FILE_BIN_NAME)_MemoryOD.map
	@-$(NM) -n -S $(FILE_BIN_NAME).$(SUFFIX_ABS) > $(FILE_BIN_NAME)_MemoryNM.map
	@-$(GNUECHO) +++ generating assembly list file: $(FILE_BIN_NAME).lss
	@-$(OBJDUMP) -h -S $(FILE_BIN_NAME).$(SUFFIX_ABS) > $(FILE_BIN_NAME).lss
	@$(GNUECHO) +++ end link
	
endif