Makefile 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. PROGRAM :=baremetal/helloworld
  2. PARALLEL ?=
  3. .PHONY: __help ctags cleanall buildall tags
  4. __help:
  5. @echo "Help about Build/Run/Debug/Clean Nuclei SDK Application"
  6. @echo "make [PROGRAM=/path/to/app] help Show Build System Help Message"
  7. @echo "make [EXTRA_APP_ROOTDIRS=/path/to/extraapps] cleanall Clean all the applications"
  8. @echo "make [EXTRA_APP_ROOTDIRS=/path/to/extraapps] buildall Rebuild all the applications"
  9. @echo "Examples:"
  10. @echo "make PROGRAM=application/baremetal/helloworld all"
  11. @echo "make PROGRAM=application/baremetal/helloworld SOC=gd32vf103 BOARD=gd32vf103v_rvstar clean all"
  12. @echo "make -k cleanall"
  13. @echo "make -k SOC=gd32vf103 BOARD=gd32vf103v_rvstar cleanall"
  14. @echo "make -k EXTRA_APP_ROOTDIRS=soc_testcases cleanall"
  15. VALID_PROGRAM=$(wildcard $(PROGRAM))
  16. VALID_PROGRAM_MAKEFILE=$(wildcard $(PROGRAM)/Makefile)
  17. # Valid SDK Rules accepted by build system
  18. VALID_SDK_RULES := all info help bin size dasm upload run_openocd run_gdb clean debug showflags showtoolver run_qemu run_xlspike run_qemu_debug run_xlspike_rbb run_xlspike_openocd
  19. # Default root directories to search
  20. APP_ROOTDIRS := application test
  21. # Extra application root directories passed by make
  22. EXTRA_APP_ROOTDIRS ?=
  23. # get all the root directories for applications
  24. TOTAL_ROOTDIRS := $(APP_ROOTDIRS) $(EXTRA_APP_ROOTDIRS)
  25. # Default search patterns
  26. SEARCH_PATTERNS := * */* */*/* */*/*/*
  27. PROGS_TO_SEARCH := $(foreach rootdir, $(TOTAL_ROOTDIRS), $(addprefix $(rootdir)/, $(SEARCH_PATTERNS)))
  28. PROGS_makefile := $(foreach progdir, $(PROGS_TO_SEARCH), $(sort $(dir $(wildcard $(progdir)/makefile))))
  29. PROGS_Makefile := $(foreach progdir, $(PROGS_TO_SEARCH), $(sort $(dir $(wildcard $(progdir)/Makefile))))
  30. PROGS_DIRS := $(sort $(PROGS_makefile) $(PROGS_Makefile))
  31. CLEAN_DIRS_RULES := $(addprefix __CLEAN__, $(PROGS_DIRS))
  32. BUILD_DIRS_RULES := $(addprefix __BUILD__, $(PROGS_DIRS))
  33. ifeq ($(VALID_PROGRAM_MAKEFILE), )
  34. APP_PROGRAM=application/$(PROGRAM)
  35. VALID_PROGRAM=$(wildcard $(APP_PROGRAM))
  36. VALID_PROGRAM_MAKEFILE=$(wildcard $(APP_PROGRAM)/Makefile)
  37. ifeq ($(VALID_PROGRAM_MAKEFILE), )
  38. $(error No valid Makefile in $(PROGRAM) directory! please check!)
  39. endif
  40. endif
  41. cleanall: $(CLEAN_DIRS_RULES)
  42. buildall: $(BUILD_DIRS_RULES)
  43. $(CLEAN_DIRS_RULES):
  44. make -C $(patsubst __CLEAN__%, %, $@) clean
  45. $(BUILD_DIRS_RULES):
  46. make -C $(patsubst __BUILD__%, %, $@) clean
  47. make -C $(patsubst __BUILD__%, %, $@) $(PARALLEL) all
  48. $(VALID_SDK_RULES):
  49. make -C $(VALID_PROGRAM) $@
  50. # Only works in linux
  51. # Exuberant Ctags is required to be installed
  52. tags ctags:
  53. ctags -o tags `find . -name '*.[chS]' -print`
  54. rm -f ctags
  55. ln -sf tags ctags