#             __________               __   ___.
#   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
#   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
#   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
#   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
#                     \/            \/     \/    \/            \/
#

INCLUDES += -I$(FIRMDIR)/include -I$(FIRMDIR)/export $(TARGET_INC) -I$(BUILDDIR) -I$(APPSDIR)

SIMFLAGS += $(INCLUDES) $(DEFINES) -DHAVE_CONFIG_H $(GCCOPTS)

# bootloader build is sligtly different
ifneq (,$(findstring bootloader,$(APPSDIR)))

SRC += $(call preprocess, $(APPSDIR)/SOURCES)
CLEANOBJS += $(BUILDDIR)/bootloader.*

endif #bootloader

.SECONDEXPANSION: # $$(OBJ) is not populated until after this

# bootloader build is sligtly different
ifneq (,$(findstring bootloader,$(APPSDIR)))

# We install a second font along the bootloader because sysfont is too small
# for our purpose
BL_FONT = $(ROOTDIR)/fonts/27-Adobe-Helvetica.bdf

# Limits for the bootloader sysfont: ASCII
BL_MAXCHAR = 127

# Function that adds a single file to a tar and explicitely set the name
# in the archive (which can be completely different from the original filename)
# their devices
# arguments:
#   $(1) = tar file
#   $(2) = archive file name
#   $(3) = file to add
tar_add_file = \
    tar -Prf $(1) --transform="s|.*|$(strip $(2))|" $(3)

$(BUILDDIR)/bootloader.fnt: $(BL_FONT) $(TOOLS)
	$(call PRINTS,CONVBDF $(subst $(ROOTDIR)/,,$<))$(TOOLSDIR)/convbdf -l $(MAXCHAR) -f -o $@ $<

$(BUILDDIR)/bootloader.elf : $$(OBJ) $(FIRMLIB) $(CORE_LIBS)
	$(call PRINTS,LD $(@F))$(CC) $(GCCOPTS) -o $@ $(OBJ) \
		-L$(BUILDDIR)/firmware -lfirmware \
		-L$(BUILDDIR)/lib $(call a2lnk,$(CORE_LIBS)) \
		$(LDOPTS) $(GLOBAL_LDOPTS) -Wl,--gc-sections -Wl,-Map,$(BUILDDIR)/bootloader.map

$(BUILDDIR)/$(BINARY): $(BUILDDIR)/bootloader.elf $(BUILDDIR)/bootloader.fnt
# NOTE: the install script will call a command like
#   tar -C $(ROOTFS_MOUNT_POINT) -f bootloader.tar
# thus the names in the archive must be of the form ./absolute/path
#
# NOTE 2: Sony uses unusual user IDs (500 on somes devices, 1002 on others)
# so make sure the files are readable/executable by anyone
	$(SILENT)rm -rf $(BUILDDIR)/bootloader.tar
	$(SILENT)$(call tar_add_file, $(BUILDDIR)/bootloader.tar,\
		./usr/local/bin/SpiderApp, \
		$(BUILDDIR)/bootloader.elf)
	$(SILENT)$(call tar_add_file, $(BUILDDIR)/bootloader.tar, \
		./usr/local/share/rockbox/bootloader.fnt, \
		$(BUILDDIR)/bootloader.fnt)
	$(call PRINTS,SCRAMBLE $(notdir $@))$(MKFIRMWARE) $(BUILDDIR)/bootloader.tar $@;

else # bootloader

$(BUILDDIR)/rockbox.elf : $$(OBJ) $(FIRMLIB) $(VOICESPEEXLIB) $(CORE_LIBS)
	$(call PRINTS,LD $(@F))$(CC) $(GCCOPTS) -o $@ $(OBJ) \
		-L$(BUILDDIR)/firmware -lfirmware \
		-L$(RBCODEC_BLD)/codecs $(call a2lnk, $(VOICESPEEXLIB)) \
		-L$(BUILDDIR)/lib $(call a2lnk,$(CORE_LIBS)) \
		$(LDOPTS) $(GLOBAL_LDOPTS) -Wl,-Map,$(BUILDDIR)/rockbox.map

$(BUILDDIR)/rockbox.sony : $(BUILDDIR)/rockbox.elf
	$(call PRINTS,OC $(@F))$(call objcopy,$^,$@)

endif # bootloader

