#***************************************************************************** #* FILE PURPOSE: 2nd stage makefile for the intermediate boot loader #***************************************************************************** #* FILE NAME: makestg2 #* #* DESCRIPTION: This makefile is invoked with build specific options #* #****************************************************************************** ifndef IBL_ROOT IBL_ROOT=.. endif CFG_MODULES= main device MODULES= ethboot nandboot driver hw interp ecc norboot # Note that the Hw module is a two stage clean and handled seperately CLEAN_MODULES=$(addprefix clean_,$(subst hw,,$(MODULES))) CLEAN_MODULES+=$(addprefix clean_,$(CFG_MODULES)) TARGETS= c6472 c6474 c6474l c6455 c6457 c661x # The main module needs to know the device address of the i2c where the image map resides MAINDEFS=-DIBL_CFG_I2C_MAP_TABLE_DATA_BUS_ADDR=$(I2C_BUS_ADDR) # Add build time exclusion definitions MAINDEFS+=$(addprefix -DEXCLUDE_,$(EXCLUDES)) # Add SPI definitions SPI_CFG= $(addprefix -D,$(SPI_DEFS)) # Common symbols are functions which are loaded with the stage load of the IBL, and # also referenced from the second stage #COMMON_SYMBOLS= hwI2Cinit hwI2cMasterRead iblBootBtbl iblMalloc iblFree iblMemset iblMemcpy COMMON_SYMBOLS= iblBootBtbl iblMalloc iblFree iblMemset iblMemcpy ifeq ($(ENDIAN),little) HEX_OPT= -order L IEXT= le else HEX_OPT= -order M IEXT= be endif ifeq ($(COMPACT_I2C),yes) COMPACT= -compact endif include $(IBL_ROOT)/make/$(ARCH)/makedefs.mk export ARCH export TARGET .PHONY: $(TARGETS) i2crom spiRom compare iblInit iblMain $(MODULES) $(CFG_MODULES) .PHONY: utils clean clean_modules hwClean cleant $(TARGETS): iblMain ifeq ($(TARGET),c661x) HAS_SPI=1 else HAS_SPI=0 endif ifeq (EXCLUDE_SPI, $(strip $(findstring EXCLUDE_SPI, $(MAINDEFS)))) HAS_SPI=0 endif ifeq (EXCLUDE_I2C, $(strip $(findstring EXCLUDE_I2C, $(MAINDEFS)))) HAS_I2C=0 else HAS_I2C=1 endif # The I2C creation options. The I2C map file is run through the C pre-processor to generate # the desired I2C mapping. There are three possible configurations - an i2c which has # both endians present, or an I2C with only one of the endians I2C_BE_FILE= '"ibl_$(TARGET)/ibl.i2c.be.ccs"' I2C_LE_FILE= '"ibl_$(TARGET)/ibl.i2c.le.ccs"' I2C_INIT_BE_FILE= '"ibl_$(TARGET)/ibl_init.i2c.be.ccs"' I2C_INIT_LE_FILE= '"ibl_$(TARGET)/ibl_init.i2c.le.ccs"' I2C_DEFS= -DI2C_BUS_ADDR=$(I2C_BUS_ADDR) I2C_DEFS+= -DI2C_MAP_ADDR=$(I2C_MAP_ADDR) ifeq ($(I2CROM),both) I2C_DEFS+= -DINIT_EXE_FILE=$(I2C_INIT_LE_FILE) I2C_DEFS+= -DEXE_FILE_1=$(I2C_LE_FILE) I2C_DEFS+= -DPAD_FILE_ID_1=1 I2C_DEFS+= -DEXE_FILE_2=$(I2C_BE_FILE) I2C_DEFS+= -DPAD_FILE_ID_2=2 SPI_CFG+= -DINIT_EXE_FILE=$(I2C_INIT_LE_FILE) SPI_CFG+= -DEXE_FILE_1=$(I2C_LE_FILE) SPI_CFG+= -DPAD_FILE_ID_1=1 SPI_CFG+= -DEXE_FILE_2=$(I2C_BE_FILE) SPI_CFG+= -DPAD_FILE_ID_2=2 else I2C_DEFS+= -DPAD_FILE_ID_1=1 I2C_DEFS+= -DPAD_FILE_ID_2=1 SPI_CFG+= -DPAD_FILE_ID_1=1 SPI_CFG+= -DPAD_FILE_ID_2=1 ifeq ($(I2CROM),little_endian) I2C_DEFS+= -DINIT_EXE_FILE=$(I2C_INIT_LE_FILE) I2C_DEFS+= -DEXE_FILE_1=$(I2C_LE_FILE) I2C_DEFS+= -DEXE_FILE_2='""' SPI_CFG+= -DINIT_EXE_FILE=$(I2C_INIT_LE_FILE) SPI_CFG+= -DEXE_FILE_1=$(I2C_LE_FILE) SPI_CFG+= -DEXE_FILE_2='""' else I2C_DEFS+= -DINIT_EXE_FILE=$(I2C_INIT_BE_FILE) I2C_DEFS+= -DEXE_FILE_1='""' I2C_DEFS+= -DEXE_FILE_2=$(I2C_BE_FILE) SPI_CFG+= -DINIT_EXE_FILE=$(I2C_INIT_BE_FILE) SPI_CFG+= -DEXE_FILE_1='""' SPI_CFG+= -DEXE_FILE_2=$(I2C_BE_FILE) endif endif ifeq ($(HAS_SPI),0) SPI_CFG= endif i2crom: $(CC) -ppo -I../cfg/$(TARGET) $(I2C_DEFS) ibl_$(TARGET)/$@.map.pre ../util/romparse/romparse $(COMPACT) -rom_base $(I2C_BUS_ADDR) ibl_$(TARGET)/$@.map.pp $(CP) i2crom.ccs ibl_$(TARGET)/$@.ccs $(CP) i2crom.ccs ibl_$(TARGET)/$@.dat $(RM) i2crom.ccs ibl_le.b ibl.b spiRom: @echo Making SPI ROM $(CC) -ppo -I../cfg/$(TARGET) $(SPI_CFG) ibl_$(TARGET)/$@.map.pre ../util/romparse/romparse $(COMPACT) -fill 0xff -rom_base 0 ibl_$(TARGET)/$@.map.pp $(CP) i2crom.ccs ibl_$(TARGET)/$@.ccs $(CP) i2crom.ccs ibl_$(TARGET)/$@.dat # Target compare checks if the iblInit is compiled the same for both endians compare: @echo - @sh -c 'if diff -q ibl_$(TARGET)/ibl_init.le.ccs ibl_$(TARGET)/ibl_init.be.ccs ; then echo IBL init endian neutral ; else echo !!! WARNING !!!! IBL ini NOT endian neutral !!! ; fi ' @echo - # For the init code a raw image is created as well as the i2c code to verify # endian independent code is generated. The symbols required for linking # the full application are then extracted iblInit: $(CFG_MODULES) $(MODULES) cat ibl_$(TARGET)/ibl_init_objs_template.inc | sed -e s/ENDIAN_TAG/$(IEXT)/g > ibl_$(TARGET)/ibl_init_objs.tmp $(CC) -ppo $(MAINDEFS) -DENDIAN_TAG=$(IEXT) ibl_$(TARGET)/ibl_init_objs.tmp $(CP) ibl_$(TARGET)/ibl_init_objs.pp ibl_$(TARGET)/ibl_init_objs.inc $(LD) -o ibl_$(TARGET)/ibl_$(TARGET)_init.out -m ibl_$(TARGET)/ibl_$(TARGET)_init.map ibl_$(TARGET)/ibl_init.cmd $(RTLIBS) $(CP) ibl_$(TARGET)/ibl_$(TARGET)_init.out ibl_$(TARGET)/ibl_$(TARGET)_init.$(IEXT).out $(RM) -f ibl_$(TARGET)/ibl_init_obj.inc hex6x $(HEX_OPT) ibl_$(TARGET)/ibl_init_image.rmd ibl_$(TARGET)/ibl_$(TARGET)_init.out $(CP) ibl_le.b ibl_$(TARGET)/ibl.b ../util/btoccs/b2ccs ibl_$(TARGET)/ibl.b ibl_$(TARGET)/ibl_init.$(IEXT).ccs hex6x $(HEX_OPT) ibl_$(TARGET)/ibl_init.rmd ibl_$(TARGET)/ibl_$(TARGET)_init.out ../util/bconvert/bconvert64x -$(IEXT) ibl_le.b ibl.b $(CP) ibl.b ibl_$(TARGET) ../util/btoccs/b2i2c ibl_$(TARGET)/ibl.b ibl_$(TARGET)/ibl.i2c.b ../util/btoccs/b2ccs ibl_$(TARGET)/ibl.i2c.b ibl_$(TARGET)/ibl_init.i2c.$(IEXT).ccs sed -e 's/\\r//' ../util/symExtract/symExtract > ../util/symExtract/symExtract_unix bash ../util/symExtract/symExtract_unix ibl_$(TARGET)/ibl_$(TARGET)_init.map ibl_$(TARGET)/ibl_init_symbols.inc $(COMMON_SYMBOLS) rm -f ../util/symExtract/symExtract_unix iblMain: iblInit $(CFG_MODULES) $(MODULES) cat ibl_$(TARGET)/ibl_objs_template.inc | sed -e s/ENDIAN_TAG/$(IEXT)/g > ibl_$(TARGET)/ibl_objs.tmp $(CC) -ppo $(MAINDEFS) -DENDIAN_TAG=$(IEXT) ibl_$(TARGET)/ibl_objs.tmp $(CP) ibl_$(TARGET)/ibl_objs.pp ibl_$(TARGET)/ibl_objs.inc $(LD) -o ibl_$(TARGET)/ibl_$(TARGET).out -m ibl_$(TARGET)/ibl_$(TARGET).$(IEXT).map ibl_$(TARGET)/ibl.cmd $(RTLIBS) $(CP) ibl_$(TARGET)/ibl_$(TARGET).out ibl_$(TARGET)/ibl_$(TARGET).$(IEXT).out $(RM) -f ibl_$(TARGET)/ibl_obj.inc hex6x $(HEX_OPT) ibl_$(TARGET)/ibl.rmd ibl_$(TARGET)/ibl_$(TARGET).out ../util/bconvert/bconvert64x -$(IEXT) ibl_le.b ibl.b $(CP) ibl.b ibl_$(TARGET) ../util/btoccs/b2i2c ibl_$(TARGET)/ibl.b ibl_$(TARGET)/ibl.i2c.b ../util/btoccs/b2ccs ibl_$(TARGET)/ibl.i2c.b ibl_$(TARGET)/ibl.i2c.$(IEXT).ccs $(MODULES): @echo making $@ make -C $(IBL_ROOT)/$@/$(ARCH)/make $@ $(CFG_MODULES): @echo making $@ SPI_CFG=$(SPI_CFG) CDEFS=$(CDEFS) EXCLUDES=$(EXCLUDES) make -C $(IBL_ROOT)/$@/$(ARCH)/make CDEFS='$(MAINDEFS) $(SPI_CFG)' $@ utils: ifeq ($(HAS_SPI),1) make -C $(IBL_ROOT)/util/spiWrite TARGET=$(TARGET) SPI_DEFS='$(SPI_DEFS)' MAINDEFS='$(MAINDEFS) $(SPI_CFG)' $(TARGET) make -C $(IBL_ROOT)/util/spiConfig TARGET=$(TARGET) SPI_DEFS='$(SPI_DEFS)' MAINDEFS='$(MAINDEFS) $(SPI_CFG)' $(TARGET) endif make -C $(IBL_ROOT)/util/btoccs make -C $(IBL_ROOT)/util/romparse TARGET=$(TARGET) ifeq ($(HAS_I2C),1) make -C $(IBL_ROOT)/util/i2cRead TARGET=$(TARGET) $(TARGET) make -C $(IBL_ROOT)/util/i2cWrite TARGET=$(TARGET) I2C_SIZE_BYTES=$(I2C_SIZE_BYTES) MAINDEFS='$(MAINDEFS) $(SPI_CFG)' $(TARGET) make -C $(IBL_ROOT)/util/i2cConfig $(TARGET) MAINDEFS='$(MAINDEFS) $(SPI_CFG)' endif make -C $(IBL_ROOT)/util/bconvert clean: $(CLEAN_MODULES) hwClean $(CLEAN_MODULES): @echo cleaning $(subst clean_, ,$@) make -C $(IBL_ROOT)/$(subst clean_,,$@)/$(ARCH)/make clean ARCH=c64x TARGET=$(TARGET) hwClean: @echo cleaning hw make -C $(IBL_ROOT)/hw/$(ARCH)/make cleant ARCH=$(ARCH) TARGET=$(TARGET) cleant: rm -rf ibl_$(TARGET)/ibl_$(TARGET).be.out rm -rf ibl_$(TARGET)/ibl_$(TARGET).le.out rm -rf ibl_$(TARGET)/ibl_$(TARGET).be.map rm -rf ibl_$(TARGET)/ibl_$(TARGET).le.map rm -rf ibl_$(TARGET)/ibl_$(TARGET)_init.map rm -rf ibl_$(TARGET)/ibl_$(TARGET)_init.out rm -rf ibl_$(TARGET)/ibl_$(TARGET)_init.be.map rm -rf ibl_$(TARGET)/ibl_$(TARGET)_init.be.out rm -rf ibl_$(TARGET)/ibl_$(TARGET)_init.le.map rm -rf ibl_$(TARGET)/ibl_$(TARGET)_init.le.out rm -rf ibl_$(TARGET)/ibl_$(TARGET).out rm -rf ibl_$(TARGET)/ibl_$(TARGET).map rm -rf ibl_$(TARGET)/ibl_le.b rm -rf ibl_$(TARGET)/ibl.b rm -rf ibl_$(TARGET)/ibl.i2c.b rm -rf ibl_$(TARGET)/ibl.i2c.be.ccs rm -rf ibl_$(TARGET)/ibl.i2c.le.ccs rm -rf ibl_$(TARGET)/ibl_init.i2c.be.ccs rm -rf ibl_$(TARGET)/ibl_init.i2c.le.ccs rm -rf ibl_$(TARGET)/ibl_init.le.ccs rm -rf ibl_$(TARGET)/ibl_init.be.ccs rm -rf ibl_$(TARGET)/i2crom.ccs rm -rf ibl_$(TARGET)/i2crom.dat rm -rf ibl_$(TARGET)/i2crom_0x50.dat rm -rf ibl_$(TARGET)/i2crom_0x51.dat rm -rf ibl_$(TARGET)/i2crom.map.pp rm -rf ibl_$(TARGET)/ibl_init_objs.inc rm -rf ibl_$(TARGET)/ibl_init_objs.pp rm -rf ibl_$(TARGET)/ibl_init_symbols.inc rm -rf ibl_$(TARGET)/ibl_objs.inc rm -rf ibl_$(TARGET)/ibl_objs.pp rm -rf ibl_$(TARGET)/ibl_objs.tmp rm -rf ibl_$(TARGET)/spiRom.dat rm -rf ibl_$(TARGET)/spiRom.map.pp