blob: 7c3cfacaf68bb60936a7baeb8e85dbc2c9fa8aa5 [file] [log] [blame]
#;/*******************************************************************************
#;Copyright (C) Marvell International Ltd. and its affiliates
#;
#;This software file (the "File") is owned and distributed by Marvell
#;International Ltd. and/or its affiliates ("Marvell") under the following
#;alternative licensing terms. Once you have made an election to distribute the
#;File under one of the following license alternatives, please (i) delete this
#;introductory statement regarding license alternatives, (ii) delete the two
#;license alternatives that you have not elected to use and (iii) preserve the
#;Marvell copyright notice above.
#;
#;********************************************************************************
#;Marvell Commercial License Option
#;
#;If you received this File from Marvell and you have entered into a commercial
#;license agreement (a "Commercial License") with Marvell, the File is licensed
#;to you under the terms of the applicable Commercial License.
#;
#;********************************************************************************
#;Marvell GPL License Option
#;
#;If you received this File from Marvell, you may opt to use, redistribute and/or
#;modify this File in accordance with the terms and conditions of the General
#;Public License Version 2, June 1991 (the "GPL License"), a copy of which is
#;available along with the File in the license.txt file or by writing to the Free
#;Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
#;on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
#;
#;THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
#;WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
#;DISCLAIMED. The GPL License provides additional details about this warranty
#;disclaimer.
#;********************************************************************************
#;Marvell BSD License Option
#;
#;If you received this File from Marvell, you may opt to use, redistribute and/or
#;modify this File under the following licensing terms.
#;Redistribution and use in source and binary forms, with or without modification,
#;are permitted provided that the following conditions are met:
#;
#; * Redistributions of source code must retain the above copyright notice,
#; this list of conditions and the following disclaimer.
#;
#; * Redistributions in binary form must reproduce the above copyright
#; notice, this list of conditions and the following disclaimer in the
#; documentation and/or other materials provided with the distribution.
#;
#; ;* Neither the name of Marvell nor the names of its contributors may be
#; used to endorse or promote products derived from this software without
#; specific prior written permission.
#;
#;THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
#;ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
#;WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
#;DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
#;ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
#;(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
#;LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
#;ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
#;(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
#;SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#;
#;*******************************************************************************/
#.SECONDARY:
include ./base.mk
SETPARAMS = setparams
PARAMSFILE = params
LDSCRIPT = linker.scr
LDSECSCRIPT = linker_sec.scr
DRAMREGS = ./dramregs.txt
MAIN = main
LDFLAGSBIN = -T $(LDSCRIPT) $(LDFLAGS)
LDSECFLAGSBIN = -T $(LDSECSCRIPT) $(LDFLAGS)
HOSTCPPFLAGS = $(CPPFLAGS)
TGT = bin_hdr
ASRC = $(MAIN)/bin_entry.s
CSRC = $(MAIN)/mvdispacher.c
AOBJ = $(subst .s,.o,$(ASRC))
COBJ = $(subst .c,.o,$(CSRC))
CUART_OBJ = $(subst .c,.uart.o,$(CSRC))
CDEBUG_OBJ = $(subst .c,.debug.o,$(CSRC)) # debug object for mvdispatcher
LIB_PHY = phy_$(BOARD).a
LIB_DDR = ddr_$(BOARD).a
LIB_PLAT = plat.a
LIB_SWUP = suspendWUP.a
LIB_GENERAL_INIT = generalInit.a
LIB_PHY_UART = phy_$(BOARD).uart.a
LIB_DDR_UART = ddr_$(BOARD).uart.a
LIB_PLAT_UART = plat.uart.a
LIB_SWUP_UART = suspendWUP.uart.a
LIB_GENERAL_INIT_UART = generalInit.uart.a
LIB_PLAT_DEBUG = plat.debug.a # specific platform library with bin header debug tool
LIBGCC = $(MAIN)/libgcc.lib
ifeq ($(DDRTYPE),)
DDRTYPE = ddr3
endif
ifeq ($(DDRTYPE),ddr4)
TLIBS = $(TLIB) $(TDDR4SUBLIB)
else
TLIBS = $(TLIB)
endif
TLIB = ./src_ddr/lib/$(DDRTYPE)_training_$(LIBNAME).lib
TDDR4SUBLIB = ./src_ddr/lib/$(DDRTYPE)_training_$(LIBNAME)sub.lib
COMPONENT_SUBDIRS = platform src_phy src_ddr src_pm src_init
HDR_COMPONENTS = $(LIB_PLAT) $(LIB_GENERAL_INIT) $(LIB_PHY) $(LIB_DDR) $(TLIBS) $(LIB_SWUP)
HDR_COMPONENTS_UART = $(LIB_PLAT_UART) $(LIB_GENERAL_INIT_UART) $(LIB_PHY_UART) $(LIB_DDR_UART) $(TLIBS) $(LIB_SWUP_UART)
HDR_COMPONENTS_DEBUG = $(LIB_PLAT_DEBUG) $(LIB_GENERAL_INIT) $(LIB_PHY) $(LIB_DDR) $(TLIBS) $(LIB_SWUP)
#how to add new component to binary header:
#EXAMPLE_COMPONENT=no
#ifeq ($(EXAMPLE_COMPONENT),yes)
#COMPONENT_SUBDIRS += src_example
#HDR_COMPONENTS += component_example.a
#HDR_COMPONENTS_UART += component_example.uart.a
#CFLAGS += -DCONFIG_EXAMPLE_COMPONENT
#endif
ifeq ($(BIN_HDR_DEBUG),1)
$(info )
$(info ****** Warning: BIN_HDR_DEBUG is enabled. This image cannot be burnt on flash ******)
$(info )
endif
all: subdirs $(TGT).bin $(TGT)_sec.bin $(TGT).uart.bin $(TGT).dis $(TGT)_sec.dis $(TGT).uart.dis $(TGT).srec $(TGT)_sec.srec $(TGT).uart.srec $(TGT).debug.bin
%.o: %.c
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
%.uart.o: %.c
$(CC) $(CFLAGS) -DNOT_USE_UART -DMV_NO_INPUT -DMV_NO_PRINT $(CPPFLAGS) -c -o $@ $<
%.debug.o: %.c
$(CC) $(CFLAGS) -DMV_DEBUG_MODE $(CPPFLAGS) -c -o $@ $<
$(TGT).bin: $(TGT).elf
$(OBJCOPY) -S -O binary $< $(addsuffix .tmp, $@)
$(CAT) $(PARAMSFILE).raw $(addsuffix .tmp, $@) > $@
$(RM) $(addsuffix .tmp, $@)
$(TGT)_sec.bin: $(TGT)_sec.elf
$(OBJCOPY) -S -O binary $< $(addsuffix .tmp, $@)
$(CAT) $(PARAMSFILE)_sec.raw $(addsuffix .tmp, $@) > $@
$(RM) $(addsuffix .tmp, $@)
$(TGT).uart.bin: $(TGT).uart.elf
$(OBJCOPY) -S -O binary $< $(addsuffix .tmp, $@)
$(CAT) $(PARAMSFILE).raw $(addsuffix .tmp, $@) > $@
$(RM) $(addsuffix .tmp, $@)
$(TGT).debug.bin: $(TGT).debug.elf
$(OBJCOPY) -S -O binary $< $(addsuffix .tmp, $@)
$(CAT) $(PARAMSFILE).raw $(addsuffix .tmp, $@) > $@
$(RM) $(addsuffix .tmp, $@)
$(TGT).srec: $(TGT).elf
$(OBJCOPY) -O srec $< $@
$(TGT)_sec.srec: $(TGT)_sec.elf
$(OBJCOPY) -O srec $< $@
$(TGT).dis: $(TGT).elf
$(OBJDUMP) -lhaD -S $< > $@
$(TGT)_sec.dis: $(TGT)_sec.elf
$(OBJDUMP) -lhaD -S $< > $@
$(TGT).uart.srec: $(TGT).uart.elf
$(OBJCOPY) -O srec $< $@
$(TGT).uart.dis: $(TGT).uart.elf
$(OBJDUMP) -lhaD -S $< > $@
$(TGT).elf: subdirs $(AOBJ) $(COBJ) $(SETPARAM) $(LDSCRIPT)
$(CC) $(LDFLAGSBIN) $(AOBJ) $(COBJ) $(HDR_COMPONENTS) $(LIB_PLAT) $(LIBGCC) -o $@
$(TGT)_sec.elf: subdirs $(AOBJ) $(COBJ) $(SETPARAM) $(LDSECSCRIPT)
$(CC) $(LDSECFLAGSBIN) $(AOBJ) $(COBJ) $(HDR_COMPONENTS) $(LIB_PLAT) $(LIBGCC) -o $@
$(TGT).uart.elf: $(AOBJ) $(CUART_OBJ) subdirs
$(CC) $(LDFLAGSBIN) $(AOBJ) $(CUART_OBJ) $(HDR_COMPONENTS_UART) $(LIB_PLAT_UART) $(LIBGCC) -o $@
$(TGT).debug.elf: $(AOBJ) $(CDEBUG_OBJ) subdirs
$(CC) $(LDFLAGSBIN) $(AOBJ) $(CDEBUG_OBJ) $(HDR_COMPONENTS_DEBUG) $(LIB_PLAT_DEBUG) $(LIBGCC) -o $@
$(LDSCRIPT): $(SETPARAMS)
./$(SETPARAMS) -B $(BOARD) -P $(PARAMSFILE).txt -R $(DRAMREGS) -d $(DEBUG_MODE_FLAG) $(PARAMSFILE).raw $@
$(LDSECSCRIPT): $(SETPARAMS)
./$(SETPARAMS) -S -B $(BOARD) -P $(PARAMSFILE).txt -R $(DRAMREGS) -d $(DEBUG_MODE_FLAG) $(PARAMSFILE)_sec.raw $@
$(SETPARAMS):
$(MAKE) $(SETPARAMS) BOARD="$(BOARD)" HOSTOS=$(HOSTOS) HOSTARCH=$(HOSTARCH) HOSTCFLAGS="$(HOSTCFLAGS)" HOST_LDFLAGS="$(HOST_LDFLAGS)" -C ./platform
subdirs:
@for dir in $(COMPONENT_SUBDIRS) ; do \
$(MAKE) all \
HOSTOS=$(HOSTOS) \
HOSTARCH=$(HOSTARCH) \
HOSTCFLAGS="$(HOSTCFLAGS)" \
HOST_LDFLAGS="$(HOST_LDFLAGS)" \
BOARD="$(BOARD)" \
-C $$dir || exit 1 ; \
done
clean:
$(RM) *.raw *.elf *.srec *.dis *.bin *.a *.uart.bin *.uart.elf *.debug.bin ./src/*.o $(LDSCRIPT) $(LDSECSCRIPT) $(SETPARAMS)
@for dir in $(COMPONENT_SUBDIRS) ; do \
$(MAKE) clean -s -C $$dir || exit 1 ; \
done