PROGRAM :=baremetal/helloworld

.PHONY: __help
__help:
	@echo "Help about Build/Run/Debug/Clean HummingBird SDK Application"
	@echo "make [PROGRAM=/path/to/app]  help                        Show Build System Help Message"
	@echo "make [EXTRA_APP_ROOTDIRS=/path/to/extraapps] cleanall    Clean all the applications"
	@echo "Examples:"
	@echo "make PROGRAM=application/baremetal/helloworld all"
	@echo "make PROGRAM=application/baremetal/helloworld SOC=hbirdv2 BOARD=mcu200t clean all"
	@echo "make -k cleanall"
	@echo "make -k SOC=hbirdv2 BOARD=mcu200t cleanall"
	@echo "make -k EXTRA_APP_ROOTDIRS=soc_testcases cleanall"

VALID_PROGRAM=$(wildcard $(PROGRAM))
VALID_PROGRAM_MAKEFILE=$(wildcard $(PROGRAM)/Makefile)

# Valid SDK Rules accepted by build system
VALID_SDK_RULES := all info help bin size dasm upload run_openocd run_gdb clean debug

# Default root directories to search
APP_ROOTDIRS := application test
# Extra application root directories passed by make
EXTRA_APP_ROOTDIRS ?=

# get all the root directories for applications
TOTAL_ROOTDIRS := $(APP_ROOTDIRS) $(EXTRA_APP_ROOTDIRS)

# Default search patterns
SEARCH_PATTERNS := * */* */*/* */*/*/*

PROGS_TO_SEARCH := $(foreach rootdir, $(TOTAL_ROOTDIRS), $(addprefix $(rootdir)/, $(SEARCH_PATTERNS)))
PROGS_makefile := $(foreach progdir, $(PROGS_TO_SEARCH), $(sort $(dir $(wildcard $(progdir)/makefile))))
PROGS_Makefile := $(foreach progdir, $(PROGS_TO_SEARCH), $(sort $(dir $(wildcard $(progdir)/Makefile))))
PROGS_DIRS := $(sort $(PROGS_makefile) $(PROGS_Makefile))
CLEAN_DIRS_RULES := $(addprefix __CLEAN__, $(PROGS_DIRS))

ifeq ($(VALID_PROGRAM_MAKEFILE), )
APP_PROGRAM=application/$(PROGRAM)
VALID_PROGRAM=$(wildcard $(APP_PROGRAM))
VALID_PROGRAM_MAKEFILE=$(wildcard $(APP_PROGRAM)/Makefile)
ifeq ($(VALID_PROGRAM_MAKEFILE), )
$(error No valid Makefile in $(PROGRAM) directory! please check!)
endif
endif

cleanall: $(CLEAN_DIRS_RULES)

$(CLEAN_DIRS_RULES):
	make -C $(patsubst __CLEAN__%, %, $@) clean

$(VALID_SDK_RULES):
	make -C $(VALID_PROGRAM) $@