Makefile 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST))
  2. ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST))
  3. ABS_STARTING_MAKEFILE := $(abspath $(STARTING_MAKEFILE))
  4. ABS_ROOT_MAKEFILE := $(abspath $(ROOT_MAKEFILE))
  5. ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE))
  6. ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE))
  7. STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR))
  8. PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR))
  9. define NEXT_PATH_ELEMENT
  10. $$(eval CURRENT_PATH_ELEMENT := $$(firstword $$(PATH_ELEMENTS)))
  11. $$(eval PATH_ELEMENTS := $$(wordlist 2,9999,$$(PATH_ELEMENTS)))
  12. endef
  13. $(eval $(call NEXT_PATH_ELEMENT))
  14. ifeq ($(CURRENT_PATH_ELEMENT),keyboards)
  15. $(eval $(call NEXT_PATH_ELEMENT))
  16. KEYBOARD := $(CURRENT_PATH_ELEMENT)
  17. $(eval $(call NEXT_PATH_ELEMENT))
  18. ifeq ($(CURRENT_PATH_ELEMENT),keymaps)
  19. $(eval $(call NEXT_PATH_ELEMENT))
  20. KEYMAP := $(CURRENT_PATH_ELEMENT)
  21. else ifneq ($(CURRENT_PATH_ELEMENT),)
  22. SUBPROJECT := $(CURRENT_PATH_ELEMENT)
  23. $(eval $(call NEXT_PATH_ELEMENT))
  24. ifeq ($(CURRENT_PATH_ELEMENT),keymaps)
  25. $(eval $(call NEXT_PATH_ELEMENT))
  26. KEYMAP := $(CURRENT_PATH_ELEMENT)
  27. endif
  28. endif
  29. endif
  30. $(info Keyboard: $(KEYBOARD))
  31. $(info Keymap: $(KEYMAP))
  32. $(info Subproject: $(SUBPROJECT))
  33. # Compare the start of the RULE_VARIABLE with the first argument($1)
  34. # If the rules equals $1 or starts with $1-, RULE_FOUND is set to true
  35. # and $1 is removed from the RULE variable
  36. # Otherwise the RULE_FOUND variable is set to false
  37. # The function is a bit tricky, since there's no built in $(startswith) function
  38. define COMPARE_AND_REMOVE_FROM_RULE
  39. ifeq ($1,$$(RULE))
  40. RULE:=
  41. RULE_FOUND := true
  42. else
  43. STARTDASH_REMOVED=$$(subst START$1-,,START$$(RULE))
  44. ifneq ($$(STARTDASH_REMOVED),START$$(RULE))
  45. RULE_FOUND := true
  46. RULE := $$(STARTDASH_REMOVED)
  47. else
  48. RULE_FOUND := false
  49. endif
  50. endif
  51. endef
  52. define PARSE_ALL_KEYBOARDS
  53. COMMANDS += allkb
  54. #$$(info $$(RULE))
  55. COMMAND_allkb := "All keyboards with $$(RULE)"
  56. endef
  57. define PARSE_RULE
  58. RULE := $1
  59. COMMANDS :=
  60. $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkb))
  61. ifeq ($$(RULE_FOUND),true)
  62. $$(eval $$(call PARSE_ALL_KEYBOARDS))
  63. endif
  64. endef
  65. RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND));
  66. .PHONY: %
  67. %:
  68. $(eval $(call PARSE_RULE,$@))
  69. $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND))
  70. .PHONY: all-keyboards
  71. all-keyboards: allkb
  72. .PHONY: all-keyboards-defaults
  73. all-keyboards-defaults: allkb-default-default
  74. .PHONY: all
  75. all:
  76. echo "Compiling"