if BUILD_XTENSA_SMP
SUBDIRS = smp include
else
SUBDIRS = up include
endif

noinst_PROGRAMS = \
	sof

# generate linker script from platform headers
LINK_SCRIPT = ../../platform/$(PLATFORM)/$(PLATFORM_LDSCRIPT)

LINK_DEPS = ../../platform/$(PLATFORM)/include/platform/memory.h

if XCC
LINK_DEPS += \
	$(ROOT_DIR)/arch/include/xtensa/config/core-isa*
else
LINK_DEPS += \
	../../platform/$(PLATFORM)/include/arch/xtensa/config/core-isa*
endif

nodist_sof_SOURCES = $(LINK_SCRIPT).in
BUILT_SOURCES = $(LINK_SCRIPT)
CLEANFILES = $(LINK_SCRIPT)
$(LINK_SCRIPT): Makefile $(LINK_SCRIPT).in $(LINK_DEPS)
	cat $(LINK_SCRIPT).in | $(CPP) -P $(PLATFORM_INCDIR) $(SOF_INCDIR) - >$@

noinst_LIBRARIES = \
	libreset.a

if BUILD_XTENSA_SMP
libreset_a_SOURCES = \
	smp/xtos/memctl_default.S \
	smp/xtos/reset-vector.S
else
libreset_a_SOURCES = \
	up/xtos/reset-vector.S
endif

libreset_a_CCASFLAGS = \
	$(ARCH_INCDIR) \
	$(ASFLAGS) \
	$(AM_CCASFLAGS) \
	$(PLATFORM_INCDIR) \
	-mtext-section-literals

sof_SOURCES = \
	timer.c

if BUILD_XTENSA_SMP
sof_SOURCES += \
	smp/xtos/crt1-boards.S \
	smp/xtos/_vectors.S \
	smp/cpu.c \
	smp/init.c \
	smp/schedule.c \
	smp/task.c
else
sof_SOURCES += \
	up/xtos/crt1-boards.S \
	up/xtos/_vectors.S \
	up/cpu.c \
	up/init.c \
	up/schedule.c \
	up/task.c
endif

if BUILD_BOOTLOADER
sof_SOURCES += \
	main-entry.S
endif

sof_CFLAGS = \
	$(ARCH_INCDIR) \
	$(AM_CFLAGS) \
	$(ARCH_CFLAGS) \
	$(PLATFORM_INCDIR) \
	$(SOF_INCDIR)

sof_CCASFLAGS = \
	$(ARCH_INCDIR) \
	$(ASFLAGS) \
	$(AM_CCASFLAGS) \
	$(PLATFORM_INCDIR)

sof_LDADD = \
	../../init/libinit.a \
	../../tasks/libtasks.a \
	../../lib/libcore.a \
	../../platform/$(PLATFORM)/libplatform.la \
	../../ipc/libsof_ipc.a \
	../../lib/libdma.a \
	../../audio/libaudio.a \
	../../drivers/libdrivers.a \
	../../math/libsof_math.a \
	-lgcc

if BUILD_XTENSA_SMP
sof_LDADD += \
	smp/xtos/libxtos.a \
	smp/xtos/libxlevel2.a \
	smp/xtos/libxlevel3.a \
	smp/xtos/libxlevel4.a \
	smp/xtos/libxlevel5.a \
	smp/hal/libhal.a
else
sof_LDADD += \
	up/xtos/libxtos.a \
	up/xtos/libxlevel2.a \
	up/xtos/libxlevel3.a \
	up/xtos/libxlevel4.a \
	up/xtos/libxlevel5.a \
	up/hal/libhal.a
endif

if !BUILD_BOOTLOADER
sof_LDADD += \
	libreset.a
endif

sof_LDFLAGS = \
	$(AM_LDFLAGS) \
	$(ARCH_LDFLAGS) -Wl,-Map=sof-$(FW_NAME).map \
	-T ../../platform/$(PLATFORM)/$(PLATFORM_LDSCRIPT)

RIMAGE_FLAGS = sof-$(FW_NAME)
RIMAGE_BOOT_FLAGS =
BIN_FLAGS = sof

if BUILD_BOOTLOADER

noinst_PROGRAMS += \
	boot_ldr

LINK_BOOT_LDR_SCRIPT = ../../platform/$(PLATFORM)/$(PLATFORM_BOOT_LDR_LDSCRIPT)
BUILT_SOURCES += $(LINK_BOOT_LDR_SCRIPT)
CLEANFILES += $(LINK_BOOT_LDR_SCRIPT)

nodist_boot_ldr_SOURCES = $(LINK_BOOT_LDR_SCRIPT).in
$(LINK_BOOT_LDR_SCRIPT): Makefile $(LINK_BOOT_LDR_SCRIPT).in $(LINK_DEPS)
	cat $(LINK_BOOT_LDR_SCRIPT).in | $(CPP) -P $(PLATFORM_INCDIR) $(SOF_INCDIR) - >$@

boot_ldr_SOURCES = \
	boot_entry.S \
	boot_loader.c

if BUILD_XTENSA_SMP
boot_ldr_SOURCES += \
	smp/xtos/_vectors.S
else
boot_ldr_SOURCES += \
	up/xtos/_vectors.S
endif

boot_ldr_CFLAGS = \
	$(ARCH_INCDIR) \
	$(AM_CFLAGS) \
	$(ARCH_CFLAGS) \
	$(PLATFORM_INCDIR) \
	$(SOF_INCDIR)

boot_ldr_CCASFLAGS = \
	$(ARCH_INCDIR) \
	$(ASFLAGS) \
	$(AM_CCASFLAGS) \
	$(PLATFORM_INCDIR)

boot_ldr_LDADD = \
	libreset.a \
	-lgcc

if BUILD_XTENSA_SMP
boot_ldr_LDADD += \
	smp/hal/libhal.a
else
boot_ldr_LDADD += \
	up/hal/libhal.a
endif

boot_ldr_LDFLAGS = \
	$(AM_LDFLAGS) \
	$(ARCH_LDFLAGS) \
	-T ../../platform/$(PLATFORM)/$(PLATFORM_BOOT_LDR_LDSCRIPT)

boot_ldr-local:
	cp boot_ldr boot_ldr-$(FW_NAME)
	$(OBJCOPY) -O binary ../../platform/$(PLATFORM)/boot_module mod-boot-$(FW_NAME).bin
	$(OBJCOPY) --add-section .module=mod-boot-$(FW_NAME).bin \
		--set-section-flags .module=load,readonly boot_ldr-$(FW_NAME)
	$(OBJCOPY) -O binary boot_ldr boot_ldr-$(FW_NAME).bin
	$(OBJDUMP) -h -D boot_ldr > boot_ldr-$(FW_NAME).map
	$(OBJDUMP) -S boot_ldr > boot_ldr-$(FW_NAME).lst
	$(OBJDUMP) -D boot_ldr > boot_ldr-$(FW_NAME).dis

RIMAGE_BOOT_FLAGS += boot_ldr-$(FW_NAME)
BIN_FLAGS +=boot_ldr-local
endif

if BUILD_MODULE
MODULE_COPY=$(OBJCOPY) -O binary ../../platform/$(PLATFORM)/module mod-$(FW_NAME).bin
MODULE_INSERT=$(OBJCOPY) --add-section .module=mod-$(FW_NAME).bin \
		--set-section-flags .module=load,readonly sof-$(FW_NAME)
else
MODULE_COPY=
MODULE_INSERT=
endif

if USE_MEU
RIMAGE=rimage -o sof-$(FW_NAME).ri -m $(FW_NAME) $(RIMAGE_BOOT_FLAGS) $(RIMAGE_FLAGS) -s $(MEU_OFFSET)
MEU=$(MEU_PATH)/meu -w ./ -s sof-$(FW_NAME) -key $(PRIVATE_KEY) -stp /usr/bin/openssl -f $(MEU_PATH)/generic_meu_conf.xml \
	-mnver 0.0.0.0 -o sof-$(FW_NAME).ri
else
RIMAGE=rimage -o sof-$(FW_NAME).ri -m $(FW_NAME) $(RIMAGE_BOOT_FLAGS) $(RIMAGE_FLAGS)
MEU=
endif

bin-local: $(BIN_FLAGS)
	cp sof sof-$(FW_NAME)
	$(MODULE_COPY)
	$(MODULE_INSERT)
	$(OBJDUMP) -S sof-$(FW_NAME) > sof-$(FW_NAME).lst
	$(OBJDUMP) -D sof-$(FW_NAME) > sof-$(FW_NAME).dis
	$(RIMAGE)
	$(MEU)

vminstall-local:
	scp -P 5555 sof-*.ri root@localhost:/lib/firmware/intel/

clean-local:
	rm -fr mod-*
	rm -fr *.bin
	rm -fr *.lst
	rm -fr *.map
	rm -fr *.dis
