From 8ffc73fcbdddf4ba11aa18658d9aaf7bdd9145c5 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Thu, 5 May 2016 22:19:59 -0400 Subject: [Jack & Erez] Adds an option for user-specific config.h files --- tmk_core/rules.mk | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 860fc1a931..69c7985b48 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -142,6 +142,9 @@ CFLAGS += $(CSTANDARD) ifdef CONFIG_H CFLAGS += -include $(CONFIG_H) endif +ifdef CONFIG_USER_H + CFLAGS += -include $(CONFIG_USER_H) +endif #---------------- Compiler Options C++ ---------------- @@ -176,6 +179,9 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) ifdef CONFIG_H CPPFLAGS += -include $(CONFIG_H) endif +ifdef CONFIG_USER_H + CPPFLAGS += -include $(CONFIG_USER_H) +endif #---------------- Assembler Options ---------------- @@ -192,6 +198,9 @@ ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) ifdef CONFIG_H ASFLAGS += -include $(CONFIG_H) endif +ifdef CONFIG_USER_H + ASFLAGS += -include $(CONFIG_USER_H) +endif #---------------- Library Options ---------------- -- cgit v1.2.3 From bf545061f2a71b054ccdca6f6261bb7c2ffa4957 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 18 May 2016 23:16:31 -0400 Subject: outputs size when make dfuing --- tmk_core/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 69c7985b48..552f32331a 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -428,7 +428,7 @@ flip: $(TARGET).hex batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program batchisp -hardware usb -device $(MCU) -operation start reset 0 -dfu: $(TARGET).hex +dfu: $(TARGET).hex sizeafter ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) dfu-programmer $(MCU) erase --force else -- cgit v1.2.3 From 287eb7ad148abc8fe3fb014218d71e205fd9131d Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 24 May 2016 11:56:53 -0400 Subject: Converted audio play functions to *_user (#349) * Updated personal layouts * tweaked personal * Nightly - Audio Cleanup Refactored the LUTs. Abstracted some of the registers out of audio to use more functional names. Split audio into audio and audio_pwm. WIP * nightly - collapsed code * Added check for note playing to LEDs * Usability tweaks * TWEAE * nightly added extra kcs to keymap common * turned on Plank audio * Added backlight breathing to atomic * reverted accidental merge * Added music and audio toggles to Quantum.c * Redid the audio callbacks * Adjusted default planck layout to use the user tone naming * tabs to spaces * Rewrote the ALL recipe to allow for faster parallel make * tabs to spaces * Renamed custom event functions to be 'startup_user' and 'shutdown_user'. Also moved the prototypes around. * Tweaked pvc atomic layout to work with the pvc planck. * updates midi scale calling --- tmk_core/rules.mk | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 552f32331a..1d384574f6 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -366,7 +366,13 @@ ALL_ASFLAGS = -mmcu=$(MCU) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) # Default target. -all: begin gccversion sizebefore build sizeafter end +all: + $(MAKE) begin + $(MAKE) gccversion + $(MAKE) sizebefore + $(MAKE) build + $(MAKE) sizeafter + $(MAKE) end # Change the build target to build a HEX file or a library. build: elf hex eep lss sym -- cgit v1.2.3 From a53bc24c4d5a6b1f31060e43789a12af6e39b572 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 28 May 2016 15:33:08 -0400 Subject: makes .SILENT (less verbose) by default - override with VERBOSE=1 also took out some @echo newlines to make things a bit cleaner --- tmk_core/rules.mk | 14 -------------- 1 file changed, 14 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 1d384574f6..37be850f84 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -393,12 +393,10 @@ lib: $(LIBNAME) # AVR Studio 3.x does not check make's exit code but relies on # the following magic strings to be generated by the compile job. begin: - @echo @echo $(MSG_BEGIN) end: @echo $(MSG_END) - @echo # Display size of file. @@ -505,13 +503,11 @@ COFFCONVERT += --change-section-address .eeprom-0x810000 coff: $(TARGET).elf - @echo @echo $(MSG_COFF) $(TARGET).cof $(COFFCONVERT) -O coff-avr $< $(TARGET).cof extcoff: $(TARGET).elf - @echo @echo $(MSG_EXTENDED_COFF) $(TARGET).cof $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof @@ -519,25 +515,21 @@ extcoff: $(TARGET).elf # Create final output files (.hex, .eep) from ELF output file. %.hex: %.elf - @echo @echo $(MSG_FLASH) $@ $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@ %.eep: %.elf - @echo @echo $(MSG_EEPROM) $@ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 # Create extended listing file from ELF output file. %.lss: %.elf - @echo @echo $(MSG_EXTENDED_LISTING) $@ $(OBJDUMP) -h -S -z $< > $@ # Create a symbol table from ELF output file. %.sym: %.elf - @echo @echo $(MSG_SYMBOL_TABLE) $@ $(NM) -n $< > $@ @@ -547,7 +539,6 @@ extcoff: $(TARGET).elf .SECONDARY : $(TARGET).a .PRECIOUS : $(OBJ) %.a: $(OBJ) - @echo @echo $(MSG_CREATING_LIBRARY) $@ $(AR) $@ $(OBJ) @@ -556,14 +547,12 @@ extcoff: $(TARGET).elf .SECONDARY : $(TARGET).elf .PRECIOUS : $(OBJ) %.elf: $(OBJ) - @echo @echo $(MSG_LINKING) $@ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) # Compile: create object files from C source files. $(OBJDIR)/%.o : %.c - @echo mkdir -p $(@D) @echo $(MSG_COMPILING) $< $(CC) -c $(ALL_CFLAGS) $< -o $@ @@ -571,7 +560,6 @@ $(OBJDIR)/%.o : %.c # Compile: create object files from C++ source files. $(OBJDIR)/%.o : %.cpp - @echo mkdir -p $(@D) @echo $(MSG_COMPILING_CPP) $< $(CC) -c $(ALL_CPPFLAGS) $< -o $@ @@ -589,7 +577,6 @@ $(OBJDIR)/%.o : %.cpp # Assemble: create object files from assembler source files. $(OBJDIR)/%.o : %.S - @echo mkdir -p $(@D) @echo $(MSG_ASSEMBLING) $< $(CC) -c $(ALL_ASFLAGS) $< -o $@ @@ -604,7 +591,6 @@ $(OBJDIR)/%.o : %.S clean: begin clean_list end clean_list : - @echo $(REMOVE) $(TARGET).hex $(REMOVE) $(TARGET).eep $(REMOVE) $(TARGET).cof -- cgit v1.2.3 From cea4b9a4bb4090b20612a43efa3378b95a6dcac0 Mon Sep 17 00:00:00 2001 From: Hartmut Goebel Date: Tue, 31 May 2016 16:03:04 +0200 Subject: Update to Makefile an ergodox readme (#365) * Autodetect teensy-loader-cli over teensy_loader_cli. Some distributions (e.g. Arch Linux, Guix) install teensy_loader_cli as teensy-loader-cli. Use this one if it is installed. * Update ergodox_ez/readme.md - Mention Linux distris providing teensy-loader-cli - Mention `make teensy ...` --- tmk_core/rules.mk | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 37be850f84..326d2a7872 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -317,7 +317,12 @@ REMOVE = rm -f REMOVEDIR = rmdir COPY = cp WINSHELL = cmd - +# Autodecct teensy loader +ifneq (, $(shell which teensy-loader-cli 2>/dev/null))) + TEENSY_LOADER_CLI = teensy-loader-cli +else + TEENSY_LOADER_CLI = teensy_loader_cli +endif # Define Messages # English @@ -425,7 +430,7 @@ program: $(TARGET).hex $(TARGET).eep $(PROGRAM_CMD) teensy: $(TARGET).hex - teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex + $(TEENSY_LOADER_CLI) -mmcu=$(MCU) -w -v $(TARGET).hex flip: $(TARGET).hex batchisp -hardware usb -device $(MCU) -operation erase f -- cgit v1.2.3 From 84276ee56145a705a278fd1137f8b945d27d0242 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 1 Jun 2016 16:57:12 -0400 Subject: removes stray paren --- tmk_core/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 326d2a7872..a0698fa3bb 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -318,7 +318,7 @@ REMOVEDIR = rmdir COPY = cp WINSHELL = cmd # Autodecct teensy loader -ifneq (, $(shell which teensy-loader-cli 2>/dev/null))) +ifneq (, $(shell which teensy-loader-cli 2>/dev/null)) TEENSY_LOADER_CLI = teensy-loader-cli else TEENSY_LOADER_CLI = teensy_loader_cli -- cgit v1.2.3 From d9e4dad0a828a8a904f44dda090a4d6d08fe2948 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 11 Jun 2016 13:31:31 -0400 Subject: Makefile redo & other features (#395) * .build containment implemented * no destructive variable setting - builds in either folder * make from 3 places * cleans before each build * make from root with keyboard=keyboard, keymap=keymap * make from keyboard/keyboard with keymap=keymap * make from keymaps/keymap * only implemented on planck * adds color diag to avr-gcc * makefiles for all plancks, clean-up * quick build-all makefile for plancks * reformatting of make output (colors) * color toggle, tmk path corrections * correct if statement for color * move config.h to main makefile, updates preonic, atomic * format update, all keyboards targets * makefile optional for build all target, alps and arrow_pad updated * alps updated * make planck default, trying out travis recipe for all-keyboards * all-keymaps target, different travis recipe * updates alps64 * updates keyboards to new format * updates clue* projects * all projects updated, specialise EZ .hex, let .hex through * updates travis * automatically find root, keyboard, keymap * silent echo, cleaned-up mass make output * updates all keyboards' .hex files except EZ * Rename Bantam44.c to bantam44.c * Rename Bantam44.h to bantam44.h * nananana * adds six key keyboard * does same to ez as rest * updates send_string example * brings ergodox_ez up to date * updates template/new project script * adds sixkeyboard * adds readme for sixkeyboard * adds sixkeyboard to travis * filenames, gitignore mess * define clock prescaler stuff manually * make quick, size test example * documentation and dfu-no-build --- tmk_core/rules.mk | 299 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 184 insertions(+), 115 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index a0698fa3bb..8cae22b38f 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -58,11 +58,12 @@ # Output format. (can be srec, ihex, binary) FORMAT = ihex +BUILD_DIR = .build # Object files directory # To put object files in current directory, use a dot (.), do NOT make # this an empty or blank macro! -OBJDIR = obj_$(TARGET) +OBJDIR = $(BUILD_DIR)/obj_$(TARGET) # Optimization level, can be [0, 1, 2, 3, s]. @@ -77,6 +78,35 @@ OPT = s # AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. DEBUG = dwarf-2 +COLOR?=true + +ifeq ($(COLOR),true) + NO_COLOR=\033[0m + OK_COLOR=\033[32;01m + ERROR_COLOR=\033[31;01m + WARN_COLOR=\033[33;01m + BLUE=\033[0;34m + BOLD=\033[1m +endif + +OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR) +ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR) +WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR) + +ifndef $(SILENT) + SILENT = false +endif + +TAB_LOG = printf "\n$$LOG\n\n" | awk '{ sub(/^/," | "); print }' +TAB_LOG_PLAIN = printf "$$LOG\n" +AWK_STATUS = awk '{ printf " %-10s\n", $$1; }' +AWK_CMD = awk '{ printf "%-69s", $$0; }' +PRINT_ERROR = ($(SILENT) ||printf "$(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && false +PRINT_WARNING = ($(SILENT) || printf "$(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) +PRINT_ERROR_PLAIN = ($(SILENT) ||printf "$(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && false +PRINT_WARNING_PLAIN = ($(SILENT) || printf "$(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) +PRINT_OK = $(SILENT) || printf "$(OK_STRING)" | $(AWK_STATUS) +BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; # List any extra directories to look for include files here. # Each directory must be seperated by a space. @@ -129,6 +159,14 @@ CFLAGS += -fno-inline-small-functions CFLAGS += -fpack-struct CFLAGS += -fshort-enums CFLAGS += -fno-strict-aliasing +# add color +ifeq ($(COLOR),true) +ifeq ("$(shell echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") + CFLAGS+= -fdiagnostics-color +else ifeq ("$(shell echo "int main(){}" | $(CC) -fcolor-diagnostics -x c - -o /dev/null 2>&1)", "") + CFLAGS+= -fcolor-diagnostics +endif +endif CFLAGS += -Wall CFLAGS += -Wstrict-prototypes #CFLAGS += -mshort-calls @@ -142,9 +180,6 @@ CFLAGS += $(CSTANDARD) ifdef CONFIG_H CFLAGS += -include $(CONFIG_H) endif -ifdef CONFIG_USER_H - CFLAGS += -include $(CONFIG_USER_H) -endif #---------------- Compiler Options C++ ---------------- @@ -179,9 +214,6 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) ifdef CONFIG_H CPPFLAGS += -include $(CONFIG_H) endif -ifdef CONFIG_USER_H - CPPFLAGS += -include $(CONFIG_USER_H) -endif #---------------- Assembler Options ---------------- @@ -198,10 +230,6 @@ ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) ifdef CONFIG_H ASFLAGS += -include $(CONFIG_H) endif -ifdef CONFIG_USER_H - ASFLAGS += -include $(CONFIG_USER_H) -endif - #---------------- Library Options ---------------- # Minimalistic printf version @@ -261,7 +289,7 @@ EXTMEMOPTS = # Comennt out "--relax" option to avoid a error such: # (.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12' # -LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS = -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref #LDFLAGS += -Wl,--relax LDFLAGS += -Wl,--gc-sections LDFLAGS += $(EXTMEMOPTS) @@ -317,6 +345,7 @@ REMOVE = rm -f REMOVEDIR = rmdir COPY = cp WINSHELL = cmd +SECHO = $(SILENT) || echo # Autodecct teensy loader ifneq (, $(shell which teensy-loader-cli 2>/dev/null)) TEENSY_LOADER_CLI = teensy-loader-cli @@ -338,8 +367,8 @@ MSG_EEPROM = Creating load file for EEPROM: MSG_EXTENDED_LISTING = Creating Extended Listing: MSG_SYMBOL_TABLE = Creating Symbol Table: MSG_LINKING = Linking: -MSG_COMPILING = Compiling C: -MSG_COMPILING_CPP = Compiling C++: +MSG_COMPILING = Compiling: +MSG_COMPILING_CPP = Compiling: MSG_ASSEMBLING = Assembling: MSG_CLEANING = Cleaning project: MSG_CREATING_LIBRARY = Creating library: @@ -356,7 +385,7 @@ LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst # Compiler flags to generate dependency files. #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d -GENDEPFLAGS = -MMD -MP -MF .dep/$(subst /,_,$@).d +GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$@).d # Combine all necessary flags and optional flags. @@ -366,29 +395,36 @@ ALL_CFLAGS = -mmcu=$(MCU) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) ALL_CPPFLAGS = -mmcu=$(MCU) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) ALL_ASFLAGS = -mmcu=$(MCU) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) - - - - # Default target. all: - $(MAKE) begin - $(MAKE) gccversion - $(MAKE) sizebefore - $(MAKE) build - $(MAKE) sizeafter - $(MAKE) end + @$(MAKE) begin + @$(MAKE) gccversion + @$(MAKE) sizebefore + @$(MAKE) clean_list # force clean each time + @$(MAKE) build + @$(MAKE) sizeafter + @$(MAKE) end + +# Quick make that doesn't clean +quick: + @$(MAKE) begin + @$(MAKE) gccversion + @$(MAKE) sizebefore + @$(MAKE) build + @$(MAKE) sizeafter + @$(MAKE) end # Change the build target to build a HEX file or a library. -build: elf hex eep lss sym +build: elf hex +#build: elf hex eep lss sym #build: lib -elf: $(TARGET).elf -hex: $(TARGET).hex -eep: $(TARGET).eep -lss: $(TARGET).lss -sym: $(TARGET).sym +elf: $(BUILD_DIR)/$(TARGET).elf +hex: $(BUILD_DIR)/$(TARGET).hex +eep: $(BUILD_DIR)/$(TARGET).eep +lss: $(BUILD_DIR)/$(TARGET).lss +sym: $(BUILD_DIR)/$(TARGET).sym LIBNAME=lib$(TARGET).a lib: $(LIBNAME) @@ -398,71 +434,81 @@ lib: $(LIBNAME) # AVR Studio 3.x does not check make's exit code but relies on # the following magic strings to be generated by the compile job. begin: - @echo $(MSG_BEGIN) + @$(SECHO) $(MSG_BEGIN) end: - @echo $(MSG_END) + @$(SECHO) $(MSG_END) # Display size of file. HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex #ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf -ELFSIZE = $(SIZE) $(TARGET).elf +ELFSIZE = $(SIZE) $(BUILD_DIR)/$(TARGET).elf sizebefore: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ - 2>/dev/null; echo; fi + @if test -f $(TARGET).hex; then $(SECHO) $(MSG_SIZE_BEFORE); $(SILENT) || $(HEXSIZE); \ + 2>/dev/null; $(SECHO); fi sizeafter: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ - 2>/dev/null; echo; fi - - + @if test -f $(TARGET).hex; then $(SECHO); $(SECHO) $(MSG_SIZE_AFTER); $(SILENT) || $(HEXSIZE); \ + 2>/dev/null; $(SECHO); fi + # test file sizes eventually + # @if [[ $($(SIZE) --target=$(FORMAT) $(TARGET).hex | awk 'NR==2 {print "0x"$5}') -gt 0x200 ]]; then $(SECHO) "File is too big!"; fi # Display compiler version information. gccversion : - @$(CC) --version + @$(SILENT) || $(CC) --version # Program the device. -program: $(TARGET).hex $(TARGET).eep +program: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep $(PROGRAM_CMD) -teensy: $(TARGET).hex - $(TEENSY_LOADER_CLI) -mmcu=$(MCU) -w -v $(TARGET).hex +teensy: $(BUILD_DIR)/$(TARGET).hex + $(TEENSY_LOADER_CLI) -mmcu=$(MCU) -w -v $(BUILD_DIR)/$(TARGET).hex -flip: $(TARGET).hex +flip: $(BUILD_DIR)/$(TARGET).hex batchisp -hardware usb -device $(MCU) -operation erase f - batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program + batchisp -hardware usb -device $(MCU) -operation loadbuffer $(BUILD_DIR)/$(TARGET).hex program batchisp -hardware usb -device $(MCU) -operation start reset 0 -dfu: $(TARGET).hex sizeafter +dfu: $(BUILD_DIR)/$(TARGET).hex sizeafter ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) dfu-programmer $(MCU) erase --force else dfu-programmer $(MCU) erase endif dfu-programmer $(MCU) erase - dfu-programmer $(MCU) flash $(TARGET).hex + dfu-programmer $(MCU) flash $(BUILD_DIR)/$(TARGET).hex + dfu-programmer $(MCU) reset + +dfu-no-build: +ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) + dfu-programmer $(MCU) erase --force +else + dfu-programmer $(MCU) erase +endif + dfu-programmer $(MCU) erase + dfu-programmer $(MCU) flash $(KEYMAP_PATH)/compiled.hex dfu-programmer $(MCU) reset dfu-start: dfu-programmer $(MCU) reset dfu-programmer $(MCU) start -flip-ee: $(TARGET).hex $(TARGET).eep - $(COPY) $(TARGET).eep $(TARGET)eep.hex +flip-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep + $(COPY) $(BUILD_DIR)/$(TARGET).eep $(BUILD_DIR)/$(TARGET)eep.hex batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase - batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program + batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(BUILD_DIR)/$(TARGET)eep.hex program batchisp -hardware usb -device $(MCU) -operation start reset 0 - $(REMOVE) $(TARGET)eep.hex + $(REMOVE) $(BUILD_DIR)/$(TARGET)eep.hex -dfu-ee: $(TARGET).hex $(TARGET).eep +dfu-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) - dfu-programmer $(MCU) flash --eeprom $(TARGET).eep + dfu-programmer $(MCU) flash --eeprom $(BUILD_DIR)/$(TARGET).eep else - dfu-programmer $(MCU) flash-eeprom $(TARGET).eep + dfu-programmer $(MCU) flash-eeprom $(BUILD_DIR)/$(TARGET).eep endif dfu-programmer $(MCU) reset @@ -475,18 +521,18 @@ gdb-config: @echo define reset >> $(GDBINIT_FILE) @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) @echo end >> $(GDBINIT_FILE) - @echo file $(TARGET).elf >> $(GDBINIT_FILE) + @echo file $(BUILD_DIR)/$(TARGET).elf >> $(GDBINIT_FILE) @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) ifeq ($(DEBUG_BACKEND),simulavr) @echo load >> $(GDBINIT_FILE) endif @echo break main >> $(GDBINIT_FILE) -debug: gdb-config $(TARGET).elf +debug: gdb-config $(BUILD_DIR)/$(TARGET).elf ifeq ($(DEBUG_BACKEND), avarice) @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ - $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) + $(BUILD_DIR)/$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) @$(WINSHELL) /c pause else @@ -507,124 +553,147 @@ COFFCONVERT += --change-section-address .eeprom-0x810000 -coff: $(TARGET).elf - @echo $(MSG_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-avr $< $(TARGET).cof +coff: $(BUILD_DIR)/$(TARGET).elf + @$(SECHO) $(MSG_COFF) $(BUILD_DIR)/$(TARGET).cof + $(COFFCONVERT) -O coff-avr $< $(BUILD_DIR)/$(TARGET).cof -extcoff: $(TARGET).elf - @echo $(MSG_EXTENDED_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof +extcoff: $(BUILD_DIR)/$(TARGET).elf + @$(SECHO) $(MSG_EXTENDED_COFF) $(BUILD_DIR)/$(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $< $(BUILD_DIR)/$(TARGET).cof # Create final output files (.hex, .eep) from ELF output file. %.hex: %.elf - @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@ + @$(SILENT) || printf "$(MSG_FLASH) $@" | $(AWK_CMD) + $(eval CMD=$(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@) + @$(BUILD_CMD) + @$(COPY) $@ $(TARGET).hex + $(SILENT) || printf "Copying $(TARGET).hex to keymaps/$(KEYMAP)/compiled.hex" | $(AWK_CMD) + $(eval CMD=$(COPY) $@ $(KEYMAP_PATH)/compiled.hex) + @$(BUILD_CMD) %.eep: %.elf - @echo $(MSG_EEPROM) $@ - -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ - --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 + @$(SILENT) || printf "$(MSG_EEPROM) $@" | $(AWK_CMD) + $(eval CMD=$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0) + @$(BUILD_CMD) # Create extended listing file from ELF output file. %.lss: %.elf - @echo $(MSG_EXTENDED_LISTING) $@ - $(OBJDUMP) -h -S -z $< > $@ + @$(SILENT) || printf "$(MSG_EXTENDED_LISTING) $@" | $(AWK_CMD) + $(eval CMD=$(OBJDUMP) -h -S -z $< > $@) + @$(BUILD_CMD) # Create a symbol table from ELF output file. %.sym: %.elf - @echo $(MSG_SYMBOL_TABLE) $@ - $(NM) -n $< > $@ - - + @$(SILENT) || printf "$(MSG_SYMBOL_TABLE) $@" | $(AWK_CMD) + $(eval CMD=$(NM) -n $< > $@ ) + @$(BUILD_CMD) # Create library from object files. -.SECONDARY : $(TARGET).a +.SECONDARY : $(BUILD_DIR)/$(TARGET).a .PRECIOUS : $(OBJ) %.a: $(OBJ) - @echo $(MSG_CREATING_LIBRARY) $@ - $(AR) $@ $(OBJ) - + @$(SILENT) || printf "$(MSG_CREATING_LIBRARY) $@" | $(AWK_CMD) + $(eval CMD=$(AR) $@ $(OBJ) ) + @$(BUILD_CMD) # Link: create ELF output file from object files. -.SECONDARY : $(TARGET).elf +.SECONDARY : $(BUILD_DIR)/$(TARGET).elf .PRECIOUS : $(OBJ) %.elf: $(OBJ) - @echo $(MSG_LINKING) $@ - $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) - + @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) + $(eval CMD=$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)) + @$(BUILD_CMD) # Compile: create object files from C source files. $(OBJDIR)/%.o : %.c - mkdir -p $(@D) - @echo $(MSG_COMPILING) $< - $(CC) -c $(ALL_CFLAGS) $< -o $@ - + @mkdir -p $(@D) + @$(SILENT) || printf "$(MSG_COMPILING) $<" | $(AWK_CMD) + $(eval CMD=$(CC) -c $(ALL_CFLAGS) $< -o $@) + @$(BUILD_CMD) # Compile: create object files from C++ source files. $(OBJDIR)/%.o : %.cpp - mkdir -p $(@D) - @echo $(MSG_COMPILING_CPP) $< + @mkdir -p $(@D) + @$(SILENT) || printf "$(MSG_COMPILING_CPP) $<" | $(AWK_CMD) $(CC) -c $(ALL_CPPFLAGS) $< -o $@ - + @$(BUILD_CMD) # Compile: create assembler files from C source files. %.s : %.c - $(CC) -S $(ALL_CFLAGS) $< -o $@ - + @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) + $(eval CMD=$(CC) -S $(ALL_CFLAGS) $< -o $@) + @$(BUILD_CMD) # Compile: create assembler files from C++ source files. %.s : %.cpp - $(CC) -S $(ALL_CPPFLAGS) $< -o $@ - + @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) + $(eval CMD=$(CC) -S $(ALL_CPPFLAGS) $< -o $@) + @$(BUILD_CMD) # Assemble: create object files from assembler source files. $(OBJDIR)/%.o : %.S - mkdir -p $(@D) - @echo $(MSG_ASSEMBLING) $< - $(CC) -c $(ALL_ASFLAGS) $< -o $@ - + @mkdir -p $(@D) + @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) + $(eval CMD=$(CC) -c $(ALL_ASFLAGS) $< -o $@) + @$(BUILD_CMD) # Create preprocessed source for use in sending a bug report. %.i : %.c $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ - # Target: clean project. clean: begin clean_list end clean_list : - $(REMOVE) $(TARGET).hex - $(REMOVE) $(TARGET).eep - $(REMOVE) $(TARGET).cof - $(REMOVE) $(TARGET).elf - $(REMOVE) $(TARGET).map - $(REMOVE) $(TARGET).sym - $(REMOVE) $(TARGET).lss - $(REMOVE) $(OBJ) - $(REMOVE) $(LST) - $(REMOVE) $(OBJ:.o=.s) - $(REMOVE) $(OBJ:.o=.i) - $(REMOVE) -r .dep - $(REMOVE) -r $(OBJDIR) + $(REMOVE) -r $(TOP_DIR)/$(BUILD_DIR) + $(REMOVE) -r $(KEYBOARD_PATH)/$(BUILD_DIR) + $(REMOVE) -r $(KEYMAP_PATH)/$(BUILD_DIR) show_path: @echo VPATH=$(VPATH) @echo SRC=$(SRC) +SUBDIRS := $(sort $(dir $(wildcard $(TOP_DIR)/keyboard/*/.))) +all-keyboards-defaults: + @for x in $(SUBDIRS) ; do \ + printf "Compiling with default: $$x" | $(AWK_CMD); \ + LOG=$$($(MAKE) -C $$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + done + +KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboard/%/=/keyboard/%) +all-keyboards: $(KEYBOARDS) +/keyboard/%: + $(eval KEYBOARD=$(patsubst /keyboard/%,%,$@)) + $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)$@/keymaps/*/.)))) + @for x in $(KEYMAPS) ; do \ + printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | awk '{ printf "%-88s", $$0; }'; \ + LOG=$$($(MAKE) -C $(TOP_DIR)$@ keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + done + +all-keymaps: + $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboard/$(KEYBOARD)/keymaps/*/.)))) + @for x in $(KEYMAPS) ; do \ + printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | awk '{ printf "%-88s", $$0; }'; \ + LOG=$$($(MAKE) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + done + +# Create build directory +$(shell mkdir $(BUILD_DIR) 2>/dev/null) # Create object files directory $(shell mkdir $(OBJDIR) 2>/dev/null) # Include the dependency files. --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) +-include $(shell mkdir $(BUILD_DIR)/.dep 2>/dev/null) $(wildcard $(BUILD_DIR)/.dep/*) # Listing of phony targets. -.PHONY : all begin finish end sizebefore sizeafter gccversion \ +.PHONY : all quick begin finish end sizebefore sizeafter gccversion \ build elf hex eep lss sym coff extcoff \ clean clean_list debug gdb-config show_path \ -program teensy dfu flip dfu-ee flip-ee dfu-start +program teensy dfu flip dfu-ee flip-ee dfu-start \ +all-keyboards-defaults all-keyboards all-keymaps -- cgit v1.2.3 From 42b40e6fde2a6c3a86fb151264cf426e5ad89d46 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 11 Jun 2016 22:54:34 -0400 Subject: no more cc error on windows --- tmk_core/rules.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 8cae22b38f..5fcae31d1d 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -161,9 +161,9 @@ CFLAGS += -fshort-enums CFLAGS += -fno-strict-aliasing # add color ifeq ($(COLOR),true) -ifeq ("$(shell echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") +ifeq ("$(echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") CFLAGS+= -fdiagnostics-color -else ifeq ("$(shell echo "int main(){}" | $(CC) -fcolor-diagnostics -x c - -o /dev/null 2>&1)", "") +else ifeq ("$(echo "int main(){}" | $(CC) -fcolor-diagnostics -x c - -o /dev/null 2>&1)", "") CFLAGS+= -fcolor-diagnostics endif endif -- cgit v1.2.3 From 33e83aaaca0afa7885673cc64b771aabe18be00d Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 16 Jun 2016 10:42:00 -0400 Subject: make awk optional (uses cat) --- tmk_core/rules.mk | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 5fcae31d1d..f8a83df1c0 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -89,23 +89,29 @@ ifeq ($(COLOR),true) BOLD=\033[1m endif -OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR) -ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR) -WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR) +ifeq ("$(awk /dev/null 2>&1)", "") + AWK=awk +else + AWK=cat && test +endif + +OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n +ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n +WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n ifndef $(SILENT) SILENT = false endif -TAB_LOG = printf "\n$$LOG\n\n" | awk '{ sub(/^/," | "); print }' +TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }' TAB_LOG_PLAIN = printf "$$LOG\n" -AWK_STATUS = awk '{ printf " %-10s\n", $$1; }' -AWK_CMD = awk '{ printf "%-69s", $$0; }' -PRINT_ERROR = ($(SILENT) ||printf "$(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && false -PRINT_WARNING = ($(SILENT) || printf "$(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) -PRINT_ERROR_PLAIN = ($(SILENT) ||printf "$(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && false -PRINT_WARNING_PLAIN = ($(SILENT) || printf "$(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) -PRINT_OK = $(SILENT) || printf "$(OK_STRING)" | $(AWK_STATUS) +AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }' +AWK_CMD = $(AWK) '{ printf "%-69s", $$0; }' +PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && false +PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) +PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && false +PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) +PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS) BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; # List any extra directories to look for include files here. @@ -453,7 +459,7 @@ sizeafter: @if test -f $(TARGET).hex; then $(SECHO); $(SECHO) $(MSG_SIZE_AFTER); $(SILENT) || $(HEXSIZE); \ 2>/dev/null; $(SECHO); fi # test file sizes eventually - # @if [[ $($(SIZE) --target=$(FORMAT) $(TARGET).hex | awk 'NR==2 {print "0x"$5}') -gt 0x200 ]]; then $(SECHO) "File is too big!"; fi + # @if [[ $($(SIZE) --target=$(FORMAT) $(TARGET).hex | $(AWK) 'NR==2 {print "0x"$5}') -gt 0x200 ]]; then $(SECHO) "File is too big!"; fi # Display compiler version information. gccversion : @@ -669,14 +675,14 @@ all-keyboards: $(KEYBOARDS) $(eval KEYBOARD=$(patsubst /keyboard/%,%,$@)) $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)$@/keymaps/*/.)))) @for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | awk '{ printf "%-88s", $$0; }'; \ + printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-88s", $$0; }'; \ LOG=$$($(MAKE) -C $(TOP_DIR)$@ keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ done all-keymaps: $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboard/$(KEYBOARD)/keymaps/*/.)))) @for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | awk '{ printf "%-88s", $$0; }'; \ + printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-88s", $$0; }'; \ LOG=$$($(MAKE) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ done -- cgit v1.2.3 From 91b469d88fc530412bdd3c604374542898614895 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 16 Jun 2016 15:48:54 -0400 Subject: correctly test to see if awk exists --- tmk_core/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index f8a83df1c0..060e4270fa 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -89,7 +89,7 @@ ifeq ($(COLOR),true) BOLD=\033[1m endif -ifeq ("$(awk /dev/null 2>&1)", "") +ifneq ($(shell awk --version 2>/dev/null),) AWK=awk else AWK=cat && test -- cgit v1.2.3 From e175b8d56f148716de2fbc7d1c31830547e592e4 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Fri, 17 Jun 2016 17:25:58 -0700 Subject: removes extra dfu erase (#415) --- tmk_core/rules.mk | 56 +++++++++++++++++++++++++++---------------------------- 1 file changed, 27 insertions(+), 29 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 060e4270fa..99ae91b635 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -43,7 +43,7 @@ # make flip-ee = Download the eeprom file to the device, using Atmel FLIP # (must have Atmel FLIP installed). # -# make debug = Start either simulavr or avarice as specified for debugging, +# make debug = Start either simulavr or avarice as specified for debugging, # with avr-gdb or avr-insight as the front end for debugging. # # make filename.s = Just compile filename.c into the assembler code only. @@ -66,7 +66,7 @@ BUILD_DIR = .build OBJDIR = $(BUILD_DIR)/obj_$(TARGET) -# Optimization level, can be [0, 1, 2, 3, s]. +# Optimization level, can be [0, 1, 2, 3, s]. # 0 = turn off optimization. s = optimize for size. # (Note: 3 is not always the best optimization level. See avr-libc FAQ.) OPT = s @@ -229,7 +229,7 @@ endif # for use in COFF files, additional information about filenames # and function names needs to be present in the assembler source # files -- see avr-libc docs [FIXME: not yet described there] -# -listing-cont-lines: Sets the maximum number of continuation lines of hex +# -listing-cont-lines: Sets the maximum number of continuation lines of hex # dump that will be displayed for a given single line of source input. ASFLAGS = $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) @@ -245,7 +245,7 @@ PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt # If this is left blank, then it will use the Standard printf version. -PRINTF_LIB = +PRINTF_LIB = #PRINTF_LIB = $(PRINTF_LIB_MIN) #PRINTF_LIB = $(PRINTF_LIB_FLOAT) @@ -257,7 +257,7 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt # If this is left blank, then it will use the Standard scanf version. -SCANF_LIB = +SCANF_LIB = #SCANF_LIB = $(SCANF_LIB_MIN) #SCANF_LIB = $(SCANF_LIB_FLOAT) @@ -269,7 +269,7 @@ MATH_LIB = -lm # Each directory must be seperated by a space. # Use forward slashes for directory separators. # For a directory that has spaces, enclose it in quotes. -EXTRALIBDIRS = +EXTRALIBDIRS = @@ -330,7 +330,7 @@ JTAG_DEV = /dev/com1 DEBUG_PORT = 4242 # Debugging host used to communicate between GDB / avarice / simulavr, normally -# just set to localhost unless doing some sort of crazy debugging when +# just set to localhost unless doing some sort of crazy debugging when # avarice is running on a different computer. DEBUG_HOST = localhost @@ -364,7 +364,7 @@ endif MSG_ERRORS_NONE = Errors: none MSG_BEGIN = -------- begin -------- MSG_END = -------- end -------- -MSG_SIZE_BEFORE = Size before: +MSG_SIZE_BEFORE = Size before: MSG_SIZE_AFTER = Size after: MSG_COFF = Converting to AVR COFF: MSG_EXTENDED_COFF = Converting to AVR Extended COFF: @@ -402,22 +402,22 @@ ALL_CPPFLAGS = -mmcu=$(MCU) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) ALL_ASFLAGS = -mmcu=$(MCU) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) # Default target. -all: - @$(MAKE) begin - @$(MAKE) gccversion - @$(MAKE) sizebefore +all: + @$(MAKE) begin + @$(MAKE) gccversion + @$(MAKE) sizebefore @$(MAKE) clean_list # force clean each time - @$(MAKE) build - @$(MAKE) sizeafter + @$(MAKE) build + @$(MAKE) sizeafter @$(MAKE) end # Quick make that doesn't clean -quick: - @$(MAKE) begin - @$(MAKE) gccversion - @$(MAKE) sizebefore - @$(MAKE) build - @$(MAKE) sizeafter +quick: + @$(MAKE) begin + @$(MAKE) gccversion + @$(MAKE) sizebefore + @$(MAKE) build + @$(MAKE) sizeafter @$(MAKE) end # Change the build target to build a HEX file or a library. @@ -462,12 +462,12 @@ sizeafter: # @if [[ $($(SIZE) --target=$(FORMAT) $(TARGET).hex | $(AWK) 'NR==2 {print "0x"$5}') -gt 0x200 ]]; then $(SECHO) "File is too big!"; fi # Display compiler version information. -gccversion : +gccversion : @$(SILENT) || $(CC) --version -# Program the device. +# Program the device. program: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep $(PROGRAM_CMD) @@ -485,7 +485,6 @@ ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) else dfu-programmer $(MCU) erase endif - dfu-programmer $(MCU) erase dfu-programmer $(MCU) flash $(BUILD_DIR)/$(TARGET).hex dfu-programmer $(MCU) reset @@ -495,10 +494,9 @@ ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) else dfu-programmer $(MCU) erase endif - dfu-programmer $(MCU) erase dfu-programmer $(MCU) flash $(KEYMAP_PATH)/compiled.hex dfu-programmer $(MCU) reset - + dfu-start: dfu-programmer $(MCU) reset dfu-programmer $(MCU) start @@ -520,9 +518,9 @@ endif # Generate avr-gdb config/init file which does the following: -# define the reset signal, load the target file, connect to target, and set +# define the reset signal, load the target file, connect to target, and set # a breakpoint at main(). -gdb-config: +gdb-config: @$(REMOVE) $(GDBINIT_FILE) @echo define reset >> $(GDBINIT_FILE) @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) @@ -624,7 +622,7 @@ $(OBJDIR)/%.o : %.c $(OBJDIR)/%.o : %.cpp @mkdir -p $(@D) @$(SILENT) || printf "$(MSG_COMPILING_CPP) $<" | $(AWK_CMD) - $(CC) -c $(ALL_CPPFLAGS) $< -o $@ + $(CC) -c $(ALL_CPPFLAGS) $< -o $@ @$(BUILD_CMD) # Compile: create assembler files from C source files. @@ -648,7 +646,7 @@ $(OBJDIR)/%.o : %.S # Create preprocessed source for use in sending a bug report. %.i : %.c - $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ + $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ # Target: clean project. clean: begin clean_list end -- cgit v1.2.3 From 3f6fac4721c0f03dab7704b09329d720c85470ce Mon Sep 17 00:00:00 2001 From: fredizzimo Date: Sun, 19 Jun 2016 01:09:21 +0300 Subject: Add quick version of the all-* makefile targets (#417) --- tmk_core/rules.mk | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 99ae91b635..2b703e057f 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -661,29 +661,36 @@ show_path: @echo SRC=$(SRC) SUBDIRS := $(sort $(dir $(wildcard $(TOP_DIR)/keyboard/*/.))) -all-keyboards-defaults: +all-keyboards-defaults-%: @for x in $(SUBDIRS) ; do \ printf "Compiling with default: $$x" | $(AWK_CMD); \ - LOG=$$($(MAKE) -C $$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + LOG=$$($(MAKE) -C $$x $(subst all-keyboards-defaults-,,$@) VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ done +all-keyboards-defaults: all-keyboards-defaults-all + KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboard/%/=/keyboard/%) -all-keyboards: $(KEYBOARDS) +all-keyboards-%: $(KEYBOARDS) /keyboard/%: $(eval KEYBOARD=$(patsubst /keyboard/%,%,$@)) $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)$@/keymaps/*/.)))) @for x in $(KEYMAPS) ; do \ printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-88s", $$0; }'; \ - LOG=$$($(MAKE) -C $(TOP_DIR)$@ keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + LOG=$$($(MAKE) -C $(TOP_DIR)$@ $(subst all-keyboards-,,$@) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ done -all-keymaps: +all-keyboards: all-keyboards-all + +all-keymaps-%: + $(eval MAKECONFIG=$(call get_target,all-keymaps,$@)) $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboard/$(KEYBOARD)/keymaps/*/.)))) @for x in $(KEYMAPS) ; do \ printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-88s", $$0; }'; \ - LOG=$$($(MAKE) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ + LOG=$$($(MAKE) $(subst all-keymaps-,,$@) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ done +all-keymaps: all-keymaps-all + # Create build directory $(shell mkdir $(BUILD_DIR) 2>/dev/null) @@ -700,4 +707,5 @@ $(shell mkdir $(OBJDIR) 2>/dev/null) build elf hex eep lss sym coff extcoff \ clean clean_list debug gdb-config show_path \ program teensy dfu flip dfu-ee flip-ee dfu-start \ -all-keyboards-defaults all-keyboards all-keymaps +all-keyboards-defaults all-keyboards all-keymaps \ +all-keyboards-defaults-% all-keyboards-% all-keymaps-% -- cgit v1.2.3 From a8375fa15a6ca9285eb15ae89bcda898349e06f8 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 21 Jun 2016 10:21:43 -0400 Subject: updates all config.h and Makefiles to correct references, text --- tmk_core/rules.mk | 40 +--------------------------------------- 1 file changed, 1 insertion(+), 39 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 2b703e057f..d9a0fd33f3 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -14,45 +14,7 @@ # Frederik Rouleau # Carlos Lamas # -#---------------------------------------------------------------------------- -# On command line: -# -# make all = Make software. -# -# make clean = Clean out built project files. -# -# make coff = Convert ELF to AVR COFF. -# -# make extcoff = Convert ELF to AVR Extended COFF. -# -# make program = Download the hex file to the device. -# Please customize your programmer settings(PROGRAM_CMD) -# -# make teensy = Download the hex file to the device, using teensy_loader_cli. -# (must have teensy_loader_cli installed). -# -# make dfu = Download the hex file to the device, using dfu-programmer (must -# have dfu-programmer installed). -# -# make flip = Download the hex file to the device, using Atmel FLIP (must -# have Atmel FLIP installed). -# -# make dfu-ee = Download the eeprom file to the device, using dfu-programmer -# (must have dfu-programmer installed). -# -# make flip-ee = Download the eeprom file to the device, using Atmel FLIP -# (must have Atmel FLIP installed). -# -# make debug = Start either simulavr or avarice as specified for debugging, -# with avr-gdb or avr-insight as the front end for debugging. -# -# make filename.s = Just compile filename.c into the assembler code only. -# -# make filename.i = Create a preprocessed source file for use in submitting -# bug reports to the GCC project. -# -# To rebuild project do "make clean" then "make all". -#---------------------------------------------------------------------------- + # Output format. (can be srec, ihex, binary) -- cgit v1.2.3 From a69d002506d822fef9713b844cd512cefcffd4fc Mon Sep 17 00:00:00 2001 From: fredizzimo Date: Tue, 21 Jun 2016 20:31:26 +0300 Subject: Fix the make all-keyboards command (#422) Unfortunately the supported targets, like "quick", "all", "clean", and so on has to be repeated two extra times, but this is the best I can do with my makefile skills. --- tmk_core/rules.mk | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index d9a0fd33f3..e9ef5ca7b5 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -632,17 +632,34 @@ all-keyboards-defaults-%: all-keyboards-defaults: all-keyboards-defaults-all KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboard/%/=/keyboard/%) -all-keyboards-%: $(KEYBOARDS) -/keyboard/%: - $(eval KEYBOARD=$(patsubst /keyboard/%,%,$@)) - $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)$@/keymaps/*/.)))) - @for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-88s", $$0; }'; \ - LOG=$$($(MAKE) -C $(TOP_DIR)$@ $(subst all-keyboards-,,$@) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ - done - +all-keyboards-all: $(addsuffix -all,$(KEYBOARDS)) +all-keyboards-quick: $(addsuffix -quick,$(KEYBOARDS)) +all-keyboards-clean: $(addsuffix -clean,$(KEYBOARDS)) all-keyboards: all-keyboards-all +define make_keyboard +$(eval KEYBOARD=$(patsubst /keyboard/%,%,$1)) +$(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)$1/keymaps/*/.)))) +@for x in $(KEYMAPS) ; do \ + printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-88s", $$0; }'; \ + LOG=$$($(MAKE) -C $(TOP_DIR)$1 $2 keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ +done +endef + +define make_keyboard_helper +# Just remove the -quick, -all and so on from the first argument and pass it forward +$(call make_keyboard,$(subst -$2,,$1),$2) +endef + +/keyboard/%-quick: + $(call make_keyboard_helper,$@,quick) +/keyboard/%-all: + $(call make_keyboard_helper,$@,all) +/keyboard/%-clean: + $(call make_keyboard_helper,$@,clean) +/keyboard/%: + $(call make_keyboard_helper,$@,all) + all-keymaps-%: $(eval MAKECONFIG=$(call get_target,all-keymaps,$@)) $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboard/$(KEYBOARD)/keymaps/*/.)))) -- cgit v1.2.3 From 649b33d7783cf3021928534b7ae127e0a89e8807 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 21 Jun 2016 22:39:54 -0400 Subject: Renames keyboard folder to keyboards, adds couple of tmk's fixes (#432) * fixes from tmk's repo * rename keyboard to keyboards --- tmk_core/rules.mk | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index e9ef5ca7b5..07700283e7 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -622,7 +622,7 @@ show_path: @echo VPATH=$(VPATH) @echo SRC=$(SRC) -SUBDIRS := $(sort $(dir $(wildcard $(TOP_DIR)/keyboard/*/.))) +SUBDIRS := $(sort $(dir $(wildcard $(TOP_DIR)/keyboards/*/.))) all-keyboards-defaults-%: @for x in $(SUBDIRS) ; do \ printf "Compiling with default: $$x" | $(AWK_CMD); \ @@ -631,14 +631,14 @@ all-keyboards-defaults-%: all-keyboards-defaults: all-keyboards-defaults-all -KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboard/%/=/keyboard/%) +KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboards/%/=/keyboards/%) all-keyboards-all: $(addsuffix -all,$(KEYBOARDS)) all-keyboards-quick: $(addsuffix -quick,$(KEYBOARDS)) all-keyboards-clean: $(addsuffix -clean,$(KEYBOARDS)) all-keyboards: all-keyboards-all define make_keyboard -$(eval KEYBOARD=$(patsubst /keyboard/%,%,$1)) +$(eval KEYBOARD=$(patsubst /keyboards/%,%,$1)) $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)$1/keymaps/*/.)))) @for x in $(KEYMAPS) ; do \ printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-88s", $$0; }'; \ @@ -651,18 +651,18 @@ define make_keyboard_helper $(call make_keyboard,$(subst -$2,,$1),$2) endef -/keyboard/%-quick: +/keyboards/%-quick: $(call make_keyboard_helper,$@,quick) -/keyboard/%-all: +/keyboards/%-all: $(call make_keyboard_helper,$@,all) -/keyboard/%-clean: +/keyboards/%-clean: $(call make_keyboard_helper,$@,clean) -/keyboard/%: +/keyboards/%: $(call make_keyboard_helper,$@,all) all-keymaps-%: $(eval MAKECONFIG=$(call get_target,all-keymaps,$@)) - $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboard/$(KEYBOARD)/keymaps/*/.)))) + $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.)))) @for x in $(KEYMAPS) ; do \ printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-88s", $$0; }'; \ LOG=$$($(MAKE) $(subst all-keymaps-,,$@) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ -- cgit v1.2.3 From 13bb6b4b7fdd2b3e419d0f89c93fb980b00eeb9b Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 23 Jun 2016 22:18:20 -0400 Subject: Backlight abstraction and other changes (#439) * redoes matrix pins, abstracts backlight code for B5,6,7 * slimming down keyboard stuff, backlight breathing implemented * don't call backlight init when no pin * cleans up user/kb/quantum calls, keyboard files * fix pvc atomic * replaces CHANNEL with correct var in breathing * removes .hexs, updates readmes, updates template * cleans-up clueboards, readmes to lowercase * updates readme --- tmk_core/rules.mk | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 07700283e7..aaaba1c2c9 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -40,7 +40,7 @@ OPT = s # AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. DEBUG = dwarf-2 -COLOR?=true +COLOR ?= true ifeq ($(COLOR),true) NO_COLOR=\033[0m @@ -129,10 +129,8 @@ CFLAGS += -fshort-enums CFLAGS += -fno-strict-aliasing # add color ifeq ($(COLOR),true) -ifeq ("$(echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") +ifeq ("$(shell echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") CFLAGS+= -fdiagnostics-color -else ifeq ("$(echo "int main(){}" | $(CC) -fcolor-diagnostics -x c - -o /dev/null 2>&1)", "") - CFLAGS+= -fcolor-diagnostics endif endif CFLAGS += -Wall @@ -450,15 +448,6 @@ endif dfu-programmer $(MCU) flash $(BUILD_DIR)/$(TARGET).hex dfu-programmer $(MCU) reset -dfu-no-build: -ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) - dfu-programmer $(MCU) erase --force -else - dfu-programmer $(MCU) erase -endif - dfu-programmer $(MCU) flash $(KEYMAP_PATH)/compiled.hex - dfu-programmer $(MCU) reset - dfu-start: dfu-programmer $(MCU) reset dfu-programmer $(MCU) start @@ -536,9 +525,6 @@ extcoff: $(BUILD_DIR)/$(TARGET).elf $(eval CMD=$(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@) @$(BUILD_CMD) @$(COPY) $@ $(TARGET).hex - $(SILENT) || printf "Copying $(TARGET).hex to keymaps/$(KEYMAP)/compiled.hex" | $(AWK_CMD) - $(eval CMD=$(COPY) $@ $(KEYMAP_PATH)/compiled.hex) - @$(BUILD_CMD) %.eep: %.elf @$(SILENT) || printf "$(MSG_EEPROM) $@" | $(AWK_CMD) -- cgit v1.2.3 From 215c2119af5281072d5a6efb0308408793cadd08 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 29 Jun 2016 16:21:41 -0400 Subject: Implements subprojects and updates projects for this (#459) * non-working commit * working * subprojects implemented for planck * pass a subproject variable through to c * consolidates clueboard revisions * thanks for letting me know about conflicts.. * turn off audio for yang's * corrects starting paths for subprojects * messing around with travis * semicolon * travis script * travis script * script for travis * correct directory (probably), amend files to commit * remove origin before adding * git pull, correct syntax * git checkout * git pull origin branch * where are we? * where are we? * merging * force things to happen * adds commit message, adds add * rebase, no commit message * rebase branch * idk! * try just pull * fetch - merge * specify repo branch * checkout * goddammit * merge? idk * pls * after all * don't split up keyboards * syntax * adds quick for all-keyboards * trying out new script * script update * lowercase * all keyboards * stop replacing compiled.hex automatically * adds if statement * skip automated build branches * forces push to automated build branch * throw an add in there * upstream? * adds AUTOGEN * ignore all .hex files again * testing out new repo * global ident * generate script, keyboard_keymap.hex * skip generation for now, print pandoc info, submodule update * try trusty * and sudo * try generate * updates subprojects to keyboards * no idea * updates to keyboards * cleans up clueboard stuff * setup to use local readme * updates cluepad, planck experimental * remove extra led.c [ci skip] * disable power up for now * config files updates * makefile updates * .h file updates, config tuning * disable audio for yang --- tmk_core/rules.mk | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index aaaba1c2c9..e37ba0f836 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -51,6 +51,13 @@ ifeq ($(COLOR),true) BOLD=\033[1m endif +ifdef quick + QUICK = $(quick) +endif + +QUICK ?= false +AUTOGEN ?= false + ifneq ($(shell awk --version 2>/dev/null),) AWK=awk else @@ -524,7 +531,12 @@ extcoff: $(BUILD_DIR)/$(TARGET).elf @$(SILENT) || printf "$(MSG_FLASH) $@" | $(AWK_CMD) $(eval CMD=$(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@) @$(BUILD_CMD) - @$(COPY) $@ $(TARGET).hex + @if $(AUTOGEN); then \ + $(SILENT) || printf "Copying $(TARGET).hex to keymaps/$(KEYMAP)/$(KEYBOARD)_$(KEYMAP).hex\n"; \ + $(COPY) $@ $(KEYMAP_PATH)/$(KEYBOARD)_$(KEYMAP).hex; \ + else \ + $(COPY) $@ $(TARGET).hex; \ + fi %.eep: %.elf @$(SILENT) || printf "$(MSG_EEPROM) $@" | $(AWK_CMD) @@ -570,7 +582,7 @@ $(OBJDIR)/%.o : %.c $(OBJDIR)/%.o : %.cpp @mkdir -p $(@D) @$(SILENT) || printf "$(MSG_COMPILING_CPP) $<" | $(AWK_CMD) - $(CC) -c $(ALL_CPPFLAGS) $< -o $@ + $(eval CMD=$(CC) -c $(ALL_CPPFLAGS) $< -o $@) @$(BUILD_CMD) # Compile: create assembler files from C source files. @@ -600,9 +612,11 @@ $(OBJDIR)/%.o : %.S clean: begin clean_list end clean_list : - $(REMOVE) -r $(TOP_DIR)/$(BUILD_DIR) - $(REMOVE) -r $(KEYBOARD_PATH)/$(BUILD_DIR) - $(REMOVE) -r $(KEYMAP_PATH)/$(BUILD_DIR) + @$(REMOVE) -r $(BUILD_DIR) + @$(REMOVE) -r $(TOP_DIR)/$(BUILD_DIR) + @$(REMOVE) -r $(KEYBOARD_PATH)/$(BUILD_DIR) + @if $$SUBPROJECT; then $(REMOVE) -r $(SUBPROJECT_PATH)/$(BUILD_DIR); fi + @$(REMOVE) -r $(KEYMAP_PATH)/$(BUILD_DIR) show_path: @echo VPATH=$(VPATH) -- cgit v1.2.3 From 7db2ec1509f6e90f8feea7c9fa73350544235a25 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 29 Jun 2016 18:47:53 -0400 Subject: updates planck experimental, width of color output --- tmk_core/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index e37ba0f836..a3ea4fc517 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -75,7 +75,7 @@ endif TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }' TAB_LOG_PLAIN = printf "$$LOG\n" AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }' -AWK_CMD = $(AWK) '{ printf "%-69s", $$0; }' +AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }' PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && false PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && false -- cgit v1.2.3 From 2d80eee6b8b9d79a931b99e7aa3b528068940a94 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 29 Jun 2016 21:21:02 -0400 Subject: test handwired boards --- tmk_core/rules.mk | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index a3ea4fc517..1bfe068f9b 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -622,7 +622,8 @@ show_path: @echo VPATH=$(VPATH) @echo SRC=$(SRC) -SUBDIRS := $(sort $(dir $(wildcard $(TOP_DIR)/keyboards/*/.))) +SUBDIRS := $(sort $(dir $(wildcard $(TOP_DIR)/keyboards/**/*/.))) +SUBDIRS := $(SUBDIRS) $(sort $(dir $(wildcard $(TOP_DIR)/keyboards/*/.))) all-keyboards-defaults-%: @for x in $(SUBDIRS) ; do \ printf "Compiling with default: $$x" | $(AWK_CMD); \ @@ -641,7 +642,7 @@ define make_keyboard $(eval KEYBOARD=$(patsubst /keyboards/%,%,$1)) $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)$1/keymaps/*/.)))) @for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-88s", $$0; }'; \ + printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \ LOG=$$($(MAKE) -C $(TOP_DIR)$1 $2 keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ done endef @@ -664,7 +665,7 @@ all-keymaps-%: $(eval MAKECONFIG=$(call get_target,all-keymaps,$@)) $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.)))) @for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-88s", $$0; }'; \ + printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \ LOG=$$($(MAKE) $(subst all-keymaps-,,$@) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ done -- cgit v1.2.3 From a8b55f8c858933a0f7641f7bf2dede640235aa70 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 30 Jun 2016 09:51:45 -0400 Subject: Test all subprojects with travis (#464) * tests all subprojects * too many paren --- tmk_core/rules.mk | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 1bfe068f9b..f8f77e892e 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -78,7 +78,7 @@ AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }' AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }' PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && false PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) -PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && false +PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && false && break PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS) BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; @@ -622,8 +622,10 @@ show_path: @echo VPATH=$(VPATH) @echo SRC=$(SRC) -SUBDIRS := $(sort $(dir $(wildcard $(TOP_DIR)/keyboards/**/*/.))) -SUBDIRS := $(SUBDIRS) $(sort $(dir $(wildcard $(TOP_DIR)/keyboards/*/.))) +SUBDIRS := $(filter-out %/util/ %/doc/ %/keymaps/ %/old_keymap_files/,$(dir $(wildcard $(TOP_DIR)/keyboards/**/*/.))) +SUBDIRS := $(SUBDIRS) $(dir $(wildcard $(TOP_DIR)/keyboards/*/.)) +SUBDIRS := $(sort $(SUBDIRS)) +# $(error $(SUBDIRS)) all-keyboards-defaults-%: @for x in $(SUBDIRS) ; do \ printf "Compiling with default: $$x" | $(AWK_CMD); \ @@ -640,9 +642,12 @@ all-keyboards: all-keyboards-all define make_keyboard $(eval KEYBOARD=$(patsubst /keyboards/%,%,$1)) -$(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)$1/keymaps/*/.)))) +$(eval SUBPROJECT=$(lastword $(subst /, ,$(KEYBOARD)))) +$(eval KEYBOARD=$(firstword $(subst /, ,$(KEYBOARD)))) +$(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.)))) +$(eval KEYMAPS+=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/*/.)))) @for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \ + printf "Compiling $(BOLD)$(KEYBOARD)/$(SUBPROJECT)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \ LOG=$$($(MAKE) -C $(TOP_DIR)$1 $2 keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ done endef -- cgit v1.2.3 From 4d4f7684e684bec319f166121463a88cd4a62703 Mon Sep 17 00:00:00 2001 From: fredizzimo Date: Fri, 1 Jul 2016 17:04:53 +0300 Subject: Add ChibiOS support for QMK (#465) * Modularity and gcc warnings fixes. * Add ChibiOS support (USB stack + support files). * Make usb_main more USB_DRIVER #define independent. * Move chibios to tool. * Implement jump-to-bootloader. * Small updates. * Fix bootloader-jump compiling. * Move AVR specific sleep_led.c into avr. * Add basic sleep_led for chibios. * Update chibios README. * NKRO fixes. * Rename some Makefile defines. * Move STM32 bootloader address config to separate .h file. * Add ARM Teensies bootloader code. * Fix chibios/usb_main GET_REPORT handing. * Add missing #include to keymap.c. * Make bootmagic.c code portable (_delay_ms -> wait_ms). * Move declaration of keymap_config. Should really not declare variables in .h files - since it's included in different .c files, a proper linker then complains that the same variable is declared more than once (once for each .c file that the offending .h is included in). * Add eeprom support for chibios/kinetis. * Rename chibios example keyboard. * Move chibios/cortex selection to local Makefiles. * Chibios: use WFI in idle. WIP suspend stuff. * ChibiOS/kinetis: sending remote wakeup. * ChibiOS/STM32: send remote wakeup. * Fix report size of boot protocol. * Fix drop key stroke Keyboard report should be checked if its transfer finishs successfully. Otherwise key stroke can be missing when other key event occurs before the last report transfer is done. Boot protocol 10ms interval probably causes this problem in case it receives key events in a row within the period. NKRO protocol suffers less or nothing due to its interval 1ms. * Chibios/usb_main: rename a variable for clarity. * Add correct chibios/bootloader_jump for infinity KB. * ChibiOS: make reset request more CMSISy. * Chibios: Add breathing sleep LED on Kinetis MCUs. * ChibiOS: Update infinity bootloader code to match updated ChibiOS. * ChibiOS: prettify/document sleep_led code. * Chibios: Remove the wait in the main loop. * Add maple mini code. * Do timeout when writing to CONSOLE EP queue. Fixes TMK bug #266. * Chibios: add 'core/protocol' to the makefiles' search path. * Chibios: Update to new USB API. * Chibios: add more guards for transmitting (fix a deadlock bug). * Add update for chibios in README * Chibios: Fix a HardFault bug (wait after start). * Chibios: cleanup usb_main code. * Chibios: Revert common.mk change (fix AVR linking problem). * core: Fix chibios user compile options Compile options can be defined in project Makefile such as UDEFS, UADEFS, UINCDIR, ULIBDIR and ULIBS. * Sysv format for ChibiOS arm-none-eabi-size Some new patches to ChibiOS puts heap as it's own section. So the berkeley format is now useless, as the heap will be included in the BSS report. The sysv format displays the bss size correctly. * Fix hard-coded path of CHIBIOS * Add support for new version of ChibiOS and Contrib The Kinetis support has moved to a separate Contrib repository in the newest version of Chibios. There has also been some structure changes. So this adds support for those, while maintaining back- wards compability. * Update ChibiOS instructions * Chibios: implement sleep LED for STM32. * Chibios: Update the main chibios README. * Chibios: fix STM32_BOOTLOADER_ADDRESS name. * Chibios: make the default bootloader_jump redefinable (weak). * Chibios: disable LTO (link-time optimisation). With LTO enabled, sometimes things fail for mysterious reasons (e.g. bootloader jump on WF with LEDs enabled), just because the linker optimisation is too aggressive. * Chibios: add default location for chibios-contrib. * ChibiOS: update mk to match chibios/master. * ChibiOS: update instructions.md. * Add chibi_onekey example. * Add comments to chibi_onekey Makefile. * Rename some Makefile defines. * Move STM32 bootloader address config to separate .h file. * Rename chibios example keyboard. * Move chibios/cortex selection to local Makefiles. * Add Teensy LC onekey example. * Chibios: use WFI in idle. WIP suspend stuff. * Update chibi/teensy instructions. * Update chibios/Teensy instructions. * Add infinity_chibios * Add keymap_hasu.c * Infinity_chibios: select correct bootloader_jump. * Infinity_chibios: improve comments. * Add generic STM32F103C8T6 example. * Add maple mini code. * STM32F103x fixes. * Add maple mini pinout pic. * Chibios: updates for 3.0.4 git. * Chibios: rename example stm32_onekey -> stm32_f072_onekey. * Chibios: add makefiles for Teensy 3.x examples. * Chibios: update Teensy 3.x instructions. * Chibios: Tsy LC is cortex-m0plus. * Chibios: add more guards for transmitting (fix a deadlock bug). * Change README for chibios * Chibios: update examples to current chibios git. Match the changes in mainline chibios: - update chconf.h - update supplied ld scripts structure - update Teensy instructions (switch to official chibios and introduce contrib) * Add ChibiOS and ChibiOS-Contrib submodules Also fix the makefile path for them. * Moves chibios keyboards to keyboards folder * First version of ChibiOS compilation Only the stm32_f072_onkey keyboard is ported at the moment. It compiles, but still doesn't link. * More chibios fixes It now compiles without warnings and links * Move the teensy_lc_onekey to the keyboards folder * Clean up the make file rule structure * Remove keymap_fn_to_action * Update more ChibiOS keyboards to QMK Most of them does not compile at the moment though. * Use older version of Chibios libraries The newest ones have problems with compilation * Remove USB_UNCONFIGURED event It isn't present in the older version of ChibiOS * Fix the infinity_chibios compilation * Fix potentially uninitialized variable * Add missing include * Fix the ChibiOS makefile * Fix some Chibios keyboard compilation * Revert the rules.mk file back to master version * Combine the chibios and AVR makefiles With just the required overrides in the respective platform specific one. * Slight makefile restrucuring Platform specific compiler options * Move avr specific targets out of the main rules * Fix ChibiOS objcopy The ChibiOS objcopy needs different parameters, so the parameters are moved to the corresponding platform rule file * Fix the objcopy for real this time The comands were moved around, so chibios used avr and the ohter way around. Also change the objsize output format * Fix the thumb flags * Fix the infinity hasu keymap * Per platform cpp flags * Add gcc-arm-none-eabi package to travis * Add arm-none-eabi-newlib to travis * Fix the name of the libnewlib-arm-none-eabi lib * Fix the ChibiOS paths So that they are properly relative, and builds don't generate extra folders * Fix the board path of stm32_f103_onekey * Only consider folders with Makefiles as subproject --- tmk_core/rules.mk | 220 +++--------------------------------------------------- 1 file changed, 11 insertions(+), 209 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index f8f77e892e..96eba24d67 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -20,26 +20,11 @@ # Output format. (can be srec, ihex, binary) FORMAT = ihex -BUILD_DIR = .build - -# Object files directory -# To put object files in current directory, use a dot (.), do NOT make -# this an empty or blank macro! -OBJDIR = $(BUILD_DIR)/obj_$(TARGET) - - # Optimization level, can be [0, 1, 2, 3, s]. # 0 = turn off optimization. s = optimize for size. # (Note: 3 is not always the best optimization level. See avr-libc FAQ.) OPT = s - -# Debugging format. -# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. -# AVR Studio 4.10 requires dwarf-2. -# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. -DEBUG = dwarf-2 - COLOR ?= true ifeq ($(COLOR),true) @@ -87,7 +72,7 @@ BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ # Each directory must be seperated by a space. # Use forward slashes for directory separators. # For a directory that has spaces, enclose it in quotes. -EXTRAINCDIRS = $(subst :, ,$(VPATH)) +EXTRAINCDIRS += $(subst :, ,$(VPATH)) # Compiler flag to set the C Standard level. @@ -99,17 +84,14 @@ CSTANDARD = -std=gnu99 # Place -D or -U options here for C sources -CDEFS = -DF_CPU=$(F_CPU)UL CDEFS += $(OPT_DEFS) # Place -D or -U options here for ASM sources -ADEFS = -DF_CPU=$(F_CPU) ADEFS += $(OPT_DEFS) # Place -D or -U options here for C++ sources -CPPDEFS = -DF_CPU=$(F_CPU)UL #CPPDEFS += -D__STDC_LIMIT_MACROS #CPPDEFS += -D__STDC_CONSTANT_MACROS CPPDEFS += $(OPT_DEFS) @@ -123,17 +105,9 @@ CPPDEFS += $(OPT_DEFS) # -Wall...: warning level # -Wa,...: tell GCC to pass this to the assembler. # -adhlns...: create assembler listing -CFLAGS = -g$(DEBUG) +CFLAGS += -g$(DEBUG) CFLAGS += $(CDEFS) CFLAGS += -O$(OPT) -CFLAGS += -funsigned-char -CFLAGS += -funsigned-bitfields -CFLAGS += -ffunction-sections -CFLAGS += -fdata-sections -CFLAGS += -fno-inline-small-functions -CFLAGS += -fpack-struct -CFLAGS += -fshort-enums -CFLAGS += -fno-strict-aliasing # add color ifeq ($(COLOR),true) ifeq ("$(shell echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "") @@ -162,16 +136,9 @@ endif # -Wall...: warning level # -Wa,...: tell GCC to pass this to the assembler. # -adhlns...: create assembler listing -CPPFLAGS = -g$(DEBUG) +CPPFLAGS += -g$(DEBUG) CPPFLAGS += $(CPPDEFS) CPPFLAGS += -O$(OPT) -CPPFLAGS += -funsigned-char -CPPFLAGS += -funsigned-bitfields -CPPFLAGS += -fpack-struct -CPPFLAGS += -fshort-enums -CPPFLAGS += -fno-exceptions -CPPFLAGS += -ffunction-sections -CPPFLAGS += -fdata-sections # to supress "warning: only initialized variables can be placed into program memory area" CPPFLAGS += -w CPPFLAGS += -Wall @@ -198,7 +165,7 @@ endif # files -- see avr-libc docs [FIXME: not yet described there] # -listing-cont-lines: Sets the maximum number of continuation lines of hex # dump that will be displayed for a given single line of source input. -ASFLAGS = $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 +ASFLAGS += $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) ifdef CONFIG_H ASFLAGS += -include $(CONFIG_H) @@ -232,28 +199,6 @@ SCANF_LIB = MATH_LIB = -lm -# List any extra directories to look for libraries here. -# Each directory must be seperated by a space. -# Use forward slashes for directory separators. -# For a directory that has spaces, enclose it in quotes. -EXTRALIBDIRS = - - - -#---------------- External Memory Options ---------------- - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# used for variables (.data/.bss) and heap (malloc()). -#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# only used for heap (malloc()). -#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff - -EXTMEMOPTS = - - - #---------------- Linker Options ---------------- # -Wl,...: tell GCC to pass this to linker. # -Map: create map file @@ -262,9 +207,8 @@ EXTMEMOPTS = # Comennt out "--relax" option to avoid a error such: # (.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12' # -LDFLAGS = -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref +LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref #LDFLAGS += -Wl,--relax -LDFLAGS += -Wl,--gc-sections LDFLAGS += $(EXTMEMOPTS) LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) @@ -272,59 +216,13 @@ LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) # You can give EXTRALDFLAGS at 'make' command line. LDFLAGS += $(EXTRALDFLAGS) - - -#---------------- Debugging Options ---------------- - -# For simulavr only - target MCU frequency. -DEBUG_MFREQ = $(F_CPU) - -# Set the DEBUG_UI to either gdb or insight. -# DEBUG_UI = gdb -DEBUG_UI = insight - -# Set the debugging back-end to either avarice, simulavr. -DEBUG_BACKEND = avarice -#DEBUG_BACKEND = simulavr - -# GDB Init Filename. -GDBINIT_FILE = __avr_gdbinit - -# When using avarice settings for the JTAG -JTAG_DEV = /dev/com1 - -# Debugging port used to communicate between GDB / avarice / simulavr. -DEBUG_PORT = 4242 - -# Debugging host used to communicate between GDB / avarice / simulavr, normally -# just set to localhost unless doing some sort of crazy debugging when -# avarice is running on a different computer. -DEBUG_HOST = localhost - - - -#============================================================================ - - # Define programs and commands. SHELL = sh -CC = avr-gcc -OBJCOPY = avr-objcopy -OBJDUMP = avr-objdump -SIZE = avr-size -AR = avr-ar rcs -NM = avr-nm REMOVE = rm -f REMOVEDIR = rmdir COPY = cp WINSHELL = cmd SECHO = $(SILENT) || echo -# Autodecct teensy loader -ifneq (, $(shell which teensy-loader-cli 2>/dev/null)) - TEENSY_LOADER_CLI = teensy-loader-cli -else - TEENSY_LOADER_CLI = teensy_loader_cli -endif # Define Messages # English @@ -347,8 +245,6 @@ MSG_CLEANING = Cleaning project: MSG_CREATING_LIBRARY = Creating library: - - # Define all object files. OBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(patsubst %.cpp,$(OBJDIR)/%.o,$(patsubst %.S,$(OBJDIR)/%.o,$(SRC)))) @@ -364,9 +260,9 @@ GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$@).d # Combine all necessary flags and optional flags. # Add target processor to flags. # You can give extra flags at 'make' command line like: make EXTRAFLAGS=-DFOO=bar -ALL_CFLAGS = -mmcu=$(MCU) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) -ALL_CPPFLAGS = -mmcu=$(MCU) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) -ALL_ASFLAGS = -mmcu=$(MCU) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) +ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) +ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) +ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) # Default target. all: @@ -432,104 +328,10 @@ sizeafter: gccversion : @$(SILENT) || $(CC) --version - - -# Program the device. -program: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep - $(PROGRAM_CMD) - -teensy: $(BUILD_DIR)/$(TARGET).hex - $(TEENSY_LOADER_CLI) -mmcu=$(MCU) -w -v $(BUILD_DIR)/$(TARGET).hex - -flip: $(BUILD_DIR)/$(TARGET).hex - batchisp -hardware usb -device $(MCU) -operation erase f - batchisp -hardware usb -device $(MCU) -operation loadbuffer $(BUILD_DIR)/$(TARGET).hex program - batchisp -hardware usb -device $(MCU) -operation start reset 0 - -dfu: $(BUILD_DIR)/$(TARGET).hex sizeafter -ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) - dfu-programmer $(MCU) erase --force -else - dfu-programmer $(MCU) erase -endif - dfu-programmer $(MCU) flash $(BUILD_DIR)/$(TARGET).hex - dfu-programmer $(MCU) reset - -dfu-start: - dfu-programmer $(MCU) reset - dfu-programmer $(MCU) start - -flip-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep - $(COPY) $(BUILD_DIR)/$(TARGET).eep $(BUILD_DIR)/$(TARGET)eep.hex - batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase - batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(BUILD_DIR)/$(TARGET)eep.hex program - batchisp -hardware usb -device $(MCU) -operation start reset 0 - $(REMOVE) $(BUILD_DIR)/$(TARGET)eep.hex - -dfu-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep -ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) - dfu-programmer $(MCU) flash --eeprom $(BUILD_DIR)/$(TARGET).eep -else - dfu-programmer $(MCU) flash-eeprom $(BUILD_DIR)/$(TARGET).eep -endif - dfu-programmer $(MCU) reset - - -# Generate avr-gdb config/init file which does the following: -# define the reset signal, load the target file, connect to target, and set -# a breakpoint at main(). -gdb-config: - @$(REMOVE) $(GDBINIT_FILE) - @echo define reset >> $(GDBINIT_FILE) - @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) - @echo end >> $(GDBINIT_FILE) - @echo file $(BUILD_DIR)/$(TARGET).elf >> $(GDBINIT_FILE) - @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) -ifeq ($(DEBUG_BACKEND),simulavr) - @echo load >> $(GDBINIT_FILE) -endif - @echo break main >> $(GDBINIT_FILE) - -debug: gdb-config $(BUILD_DIR)/$(TARGET).elf -ifeq ($(DEBUG_BACKEND), avarice) - @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. - @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ - $(BUILD_DIR)/$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) - @$(WINSHELL) /c pause - -else - @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ - $(DEBUG_MFREQ) --port $(DEBUG_PORT) -endif - @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) - - - - -# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. -COFFCONVERT = $(OBJCOPY) --debugging -COFFCONVERT += --change-section-address .data-0x800000 -COFFCONVERT += --change-section-address .bss-0x800000 -COFFCONVERT += --change-section-address .noinit-0x800000 -COFFCONVERT += --change-section-address .eeprom-0x810000 - - - -coff: $(BUILD_DIR)/$(TARGET).elf - @$(SECHO) $(MSG_COFF) $(BUILD_DIR)/$(TARGET).cof - $(COFFCONVERT) -O coff-avr $< $(BUILD_DIR)/$(TARGET).cof - - -extcoff: $(BUILD_DIR)/$(TARGET).elf - @$(SECHO) $(MSG_EXTENDED_COFF) $(BUILD_DIR)/$(TARGET).cof - $(COFFCONVERT) -O coff-ext-avr $< $(BUILD_DIR)/$(TARGET).cof - - - # Create final output files (.hex, .eep) from ELF output file. %.hex: %.elf @$(SILENT) || printf "$(MSG_FLASH) $@" | $(AWK_CMD) - $(eval CMD=$(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@) + $(eval CMD=$(HEX) $< $@) @$(BUILD_CMD) @if $(AUTOGEN); then \ $(SILENT) || printf "Copying $(TARGET).hex to keymaps/$(KEYMAP)/$(KEYBOARD)_$(KEYMAP).hex\n"; \ @@ -540,7 +342,7 @@ extcoff: $(BUILD_DIR)/$(TARGET).elf %.eep: %.elf @$(SILENT) || printf "$(MSG_EEPROM) $@" | $(AWK_CMD) - $(eval CMD=$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0) + $(eval CMD=$(EEP) $< $@ || exit 0) @$(BUILD_CMD) # Create extended listing file from ELF output file. @@ -622,7 +424,7 @@ show_path: @echo VPATH=$(VPATH) @echo SRC=$(SRC) -SUBDIRS := $(filter-out %/util/ %/doc/ %/keymaps/ %/old_keymap_files/,$(dir $(wildcard $(TOP_DIR)/keyboards/**/*/.))) +SUBDIRS := $(filter-out %/util/ %/doc/ %/keymaps/ %/old_keymap_files/,$(dir $(wildcard $(TOP_DIR)/keyboards/**/*/Makefile))) SUBDIRS := $(SUBDIRS) $(dir $(wildcard $(TOP_DIR)/keyboards/*/.)) SUBDIRS := $(sort $(SUBDIRS)) # $(error $(SUBDIRS)) -- cgit v1.2.3 From 1b319151aa8f4efb32a9146022d9de8c40eb5540 Mon Sep 17 00:00:00 2001 From: fredizzimo Date: Sat, 2 Jul 2016 04:57:59 +0300 Subject: Add warning when submodules are not updated (#469) * Add warning when submodules are not updated * Sh compatible syntax for dirty submodule check --- tmk_core/rules.mk | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 96eba24d67..7d3d8f9a6b 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -16,7 +16,6 @@ # - # Output format. (can be srec, ihex, binary) FORMAT = ihex @@ -243,6 +242,12 @@ MSG_COMPILING_CPP = Compiling: MSG_ASSEMBLING = Assembling: MSG_CLEANING = Cleaning project: MSG_CREATING_LIBRARY = Creating library: +MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \ + Some git sub-modules are out of date or modified, please consider runnning:$(BOLD)\n\ + git submodule sync --recursive\n\ + git submodule update --init --recursive$(NO_COLOR)\n\n\ + You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\ + or if you have modified the ChibiOS libraries yourself. \n\n # Define all object files. @@ -304,6 +309,13 @@ lib: $(LIBNAME) # the following magic strings to be generated by the compile job. begin: @$(SECHO) $(MSG_BEGIN) + git submodule status --recursive | \ + while IFS= read -r x; do \ + case "$$x" in \ + \ *) ;; \ + *) printf "$(MSG_SUBMODULE_DIRTY)";break;; \ + esac \ + done end: @$(SECHO) $(MSG_END) -- cgit v1.2.3 From f9a6e34c28f6de0f6ec505144acc287b90326436 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 5 Jul 2016 19:28:17 +0300 Subject: Add dfu-util command for programming Also add .bin generation, which is needed for dfu-util. --- tmk_core/rules.mk | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 7d3d8f9a6b..352e9314b6 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -234,6 +234,7 @@ MSG_COFF = Converting to AVR COFF: MSG_EXTENDED_COFF = Converting to AVR Extended COFF: MSG_FLASH = Creating load file for Flash: MSG_EEPROM = Creating load file for EEPROM: +MSG_BIN = Creating binary load file for Flash: MSG_EXTENDED_LISTING = Creating Extended Listing: MSG_SYMBOL_TABLE = Creating Symbol Table: MSG_LINKING = Linking: @@ -369,6 +370,11 @@ gccversion : $(eval CMD=$(NM) -n $< > $@ ) @$(BUILD_CMD) +%.bin: %.elf + @$(SILENT) || printf "$(MSG_BIN) $@" | $(AWK_CMD) + $(eval CMD=$(BIN) $< $@ || exit 0) + @$(BUILD_CMD) + # Create library from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).a .PRECIOUS : $(OBJ) -- cgit v1.2.3 From b86b0480d530c9d5f40bbe835f120b1c1b563e47 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Fri, 8 Jul 2016 17:20:37 +0300 Subject: Speed up compilation by not using recusive make The cleaning is done outside the targets, by checking the requested target name. --- tmk_core/rules.mk | 59 ++++++++++++++++++++----------------------------------- 1 file changed, 21 insertions(+), 38 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 352e9314b6..a518fc0c3f 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -271,23 +271,10 @@ ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) # Default target. -all: - @$(MAKE) begin - @$(MAKE) gccversion - @$(MAKE) sizebefore - @$(MAKE) clean_list # force clean each time - @$(MAKE) build - @$(MAKE) sizeafter - @$(MAKE) end +all: build sizeafter # Quick make that doesn't clean -quick: - @$(MAKE) begin - @$(MAKE) gccversion - @$(MAKE) sizebefore - @$(MAKE) build - @$(MAKE) sizeafter - @$(MAKE) end +quick: build sizeafter # Change the build target to build a HEX file or a library. build: elf hex @@ -303,13 +290,7 @@ sym: $(BUILD_DIR)/$(TARGET).sym LIBNAME=lib$(TARGET).a lib: $(LIBNAME) - - -# Eye candy. -# AVR Studio 3.x does not check make's exit code but relies on -# the following magic strings to be generated by the compile job. -begin: - @$(SECHO) $(MSG_BEGIN) +check_submodule: git submodule status --recursive | \ while IFS= read -r x; do \ case "$$x" in \ @@ -318,10 +299,6 @@ begin: esac \ done -end: - @$(SECHO) $(MSG_END) - - # Display size of file. HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex #ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf @@ -331,7 +308,7 @@ sizebefore: @if test -f $(TARGET).hex; then $(SECHO) $(MSG_SIZE_BEFORE); $(SILENT) || $(HEXSIZE); \ 2>/dev/null; $(SECHO); fi -sizeafter: +sizeafter: $(BUILD_DIR)/$(TARGET).hex @if test -f $(TARGET).hex; then $(SECHO); $(SECHO) $(MSG_SIZE_AFTER); $(SILENT) || $(HEXSIZE); \ 2>/dev/null; $(SECHO); fi # test file sizes eventually @@ -386,9 +363,9 @@ gccversion : # Link: create ELF output file from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).elf .PRECIOUS : $(OBJ) -%.elf: $(OBJ) +%.elf: gccversion sizebefore check_submodule $(OBJ) @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) - $(eval CMD=$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)) + $(eval CMD=$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)) @$(BUILD_CMD) # Compile: create object files from C source files. @@ -429,14 +406,7 @@ $(OBJDIR)/%.o : %.S $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ # Target: clean project. -clean: begin clean_list end - -clean_list : - @$(REMOVE) -r $(BUILD_DIR) - @$(REMOVE) -r $(TOP_DIR)/$(BUILD_DIR) - @$(REMOVE) -r $(KEYBOARD_PATH)/$(BUILD_DIR) - @if $$SUBPROJECT; then $(REMOVE) -r $(SUBPROJECT_PATH)/$(BUILD_DIR); fi - @$(REMOVE) -r $(KEYMAP_PATH)/$(BUILD_DIR) +clean: show_path: @echo VPATH=$(VPATH) @@ -496,6 +466,19 @@ all-keymaps-%: all-keymaps: all-keymaps-all +GOAL=$(MAKECMDGOALS) +ifeq ($(MAKECMDGOALS),) +GOAL = all +endif +CLEANING_GOALS=clean clean_list all +ifneq ($(findstring $(GOAL),$(CLEANING_GOALS)),) +$(shell $(REMOVE) -r $(BUILD_DIR) 2>/dev/null) +$(shell $(REMOVE) -r $(TOP_DIR)/$(BUILD_DIR)) +$(shell $(REMOVE) -r $(KEYBOARD_PATH)/$(BUILD_DIR)) +$(shell if $$SUBPROJECT; then $(REMOVE) -r $(SUBPROJECT_PATH)/$(BUILD_DIR); fi) +$(shell $(REMOVE) -r $(KEYMAP_PATH)/$(BUILD_DIR)) +endif + # Create build directory $(shell mkdir $(BUILD_DIR) 2>/dev/null) @@ -508,7 +491,7 @@ $(shell mkdir $(OBJDIR) 2>/dev/null) # Listing of phony targets. -.PHONY : all quick begin finish end sizebefore sizeafter gccversion \ +.PHONY : all quick finish sizebefore sizeafter gccversion \ build elf hex eep lss sym coff extcoff \ clean clean_list debug gdb-config show_path \ program teensy dfu flip dfu-ee flip-ee dfu-start \ -- cgit v1.2.3 From 1e3db59097f8c396d69179fdd66ef0131a6ba80d Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Fri, 8 Jul 2016 18:18:33 +0300 Subject: Fix the link target --- tmk_core/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index a518fc0c3f..543d3da8a0 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -365,7 +365,7 @@ gccversion : .PRECIOUS : $(OBJ) %.elf: gccversion sizebefore check_submodule $(OBJ) @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) - $(eval CMD=$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)) + $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out gccversion sizebefore check_submodule,$^) --output $@ $(LDFLAGS)) @$(BUILD_CMD) # Compile: create object files from C source files. -- cgit v1.2.3 From e8e300d5c4dd05b806869b648b93feeff1f8a7dc Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Fri, 8 Jul 2016 22:59:09 +0300 Subject: Fix name of makefile dep files The files can't start with a .dot, as the wildcard function wont find them. So this is fixed by removing the BUILD_DIR from the name. --- tmk_core/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 543d3da8a0..8d843cc983 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -260,7 +260,7 @@ LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst # Compiler flags to generate dependency files. #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d -GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$@).d +GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$(subst $(BUILD_DIR)/,,$@)).d # Combine all necessary flags and optional flags. -- cgit v1.2.3 From 6911ead027202da981862c9259ff4d962d51a519 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Fri, 8 Jul 2016 23:19:48 +0300 Subject: Use order only prerequisites to avoid re-linking The prerequisites at the start of the build process are order-only so that the trget don't link again. Also added as a dependency to the compilation to force the messages to be printed at the start --- tmk_core/rules.mk | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 8d843cc983..f13351ea19 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -360,49 +360,51 @@ gccversion : $(eval CMD=$(AR) $@ $(OBJ) ) @$(BUILD_CMD) +BEGIN = gccversion check_submodule sizebefore + # Link: create ELF output file from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).elf .PRECIOUS : $(OBJ) -%.elf: gccversion sizebefore check_submodule $(OBJ) +%.elf: $(OBJ) | $(BEGIN) @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) - $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out gccversion sizebefore check_submodule,$^) --output $@ $(LDFLAGS)) + $(eval CMD=$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)) @$(BUILD_CMD) # Compile: create object files from C source files. -$(OBJDIR)/%.o : %.c +$(OBJDIR)/%.o : %.c | $(BEGIN) @mkdir -p $(@D) @$(SILENT) || printf "$(MSG_COMPILING) $<" | $(AWK_CMD) $(eval CMD=$(CC) -c $(ALL_CFLAGS) $< -o $@) @$(BUILD_CMD) # Compile: create object files from C++ source files. -$(OBJDIR)/%.o : %.cpp +$(OBJDIR)/%.o : %.cpp | $(BEGIN) @mkdir -p $(@D) @$(SILENT) || printf "$(MSG_COMPILING_CPP) $<" | $(AWK_CMD) $(eval CMD=$(CC) -c $(ALL_CPPFLAGS) $< -o $@) @$(BUILD_CMD) # Compile: create assembler files from C source files. -%.s : %.c +%.s : %.c | $(BEGIN) @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) $(eval CMD=$(CC) -S $(ALL_CFLAGS) $< -o $@) @$(BUILD_CMD) # Compile: create assembler files from C++ source files. -%.s : %.cpp +%.s : %.cpp | $(BEGIN) @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) $(eval CMD=$(CC) -S $(ALL_CPPFLAGS) $< -o $@) @$(BUILD_CMD) # Assemble: create object files from assembler source files. -$(OBJDIR)/%.o : %.S +$(OBJDIR)/%.o : %.S | $(BEGIN) @mkdir -p $(@D) @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) $(eval CMD=$(CC) -c $(ALL_ASFLAGS) $< -o $@) @$(BUILD_CMD) # Create preprocessed source for use in sending a bug report. -%.i : %.c +%.i : %.c | $(BEGIN) $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ # Target: clean project. @@ -492,7 +494,7 @@ $(shell mkdir $(OBJDIR) 2>/dev/null) # Listing of phony targets. .PHONY : all quick finish sizebefore sizeafter gccversion \ -build elf hex eep lss sym coff extcoff \ +build elf hex eep lss sym coff extcoff check_submodule \ clean clean_list debug gdb-config show_path \ program teensy dfu flip dfu-ee flip-ee dfu-start \ all-keyboards-defaults all-keyboards all-keymaps \ -- cgit v1.2.3 From dd770547909ff0bbc391fbf38493cbd08285fb4c Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 27 Jul 2016 08:53:05 +0200 Subject: tmk_core/rules.mk: Make PRINT_ERROR* stop on error Instead of `&& false`, explicitly `exit 1` to make the rules using these macros fail. This fixes #571, and likely breaks Travis badly. Signed-off-by: Gergely Nagy --- tmk_core/rules.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index f13351ea19..2bf2a109fb 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -60,9 +60,9 @@ TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }' TAB_LOG_PLAIN = printf "$$LOG\n" AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }' AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }' -PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && false +PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && exit 1 PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) -PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && false && break +PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && exit 1 PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS) BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; -- cgit v1.2.3 From bf1c865c7a5d21cd7967bf676cafd18fc9f2254d Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 9 Jul 2016 20:58:19 +0300 Subject: Speed up ChibiOS keymap compilation By sharing the external library object files between the whole keyboard, instead of re-compiling them for each keymap. --- tmk_core/rules.mk | 50 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 17 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 2bf2a109fb..c81fa68541 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -253,6 +253,14 @@ MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \ # Define all object files. OBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(patsubst %.cpp,$(OBJDIR)/%.o,$(patsubst %.S,$(OBJDIR)/%.o,$(SRC)))) +# The files in the lib folder are shared between all keymaps, so generate that folder name by removing +# the keymap from the name +KBOBJDIR=$(subst _$(KEYMAP),,$(OBJDIR)) +# And fixup the object files to match +LIBOBJ = $(foreach v,$(OBJ),$(if $(findstring /lib/,$v),$v)) +NONLIBOBJ := $(filter-out $(LIBOBJ),$(OBJ)) +LIBOBJ := $(subst _$(KEYMAP)/,/,$(LIBOBJ)) +OBJ := $(LIBOBJ) $(NONLIBOBJ) # Define all listing files. LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst %.S,$(OBJDIR)/%.lst,$(SRC)))) @@ -370,20 +378,35 @@ BEGIN = gccversion check_submodule sizebefore $(eval CMD=$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)) @$(BUILD_CMD) +define GEN_OBJRULE # Compile: create object files from C source files. -$(OBJDIR)/%.o : %.c | $(BEGIN) - @mkdir -p $(@D) - @$(SILENT) || printf "$(MSG_COMPILING) $<" | $(AWK_CMD) - $(eval CMD=$(CC) -c $(ALL_CFLAGS) $< -o $@) - @$(BUILD_CMD) +$1/%.o : %.c | $(BEGIN) + @mkdir -p $$(@D) + @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) + $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$< -o $$@) + @$$(BUILD_CMD) # Compile: create object files from C++ source files. -$(OBJDIR)/%.o : %.cpp | $(BEGIN) - @mkdir -p $(@D) - @$(SILENT) || printf "$(MSG_COMPILING_CPP) $<" | $(AWK_CMD) - $(eval CMD=$(CC) -c $(ALL_CPPFLAGS) $< -o $@) +$1/%.o : %.cpp | $(BEGIN) + @mkdir -p $$(@D) + @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) + $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$< -o $$@) @$(BUILD_CMD) +# Assemble: create object files from assembler source files. +$1/%.o : %.S | $(BEGIN) + @mkdir -p $$(@D) + @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) + $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) + @$$(BUILD_CMD) + +endef + +# Since the object files could be in two different folders, generate +# separate rules for them, rather than having too generic rules +$(eval $(call GEN_OBJRULE,$(OBJDIR))) +$(eval $(call GEN_OBJRULE,$(KBOBJDIR))) + # Compile: create assembler files from C source files. %.s : %.c | $(BEGIN) @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) @@ -396,13 +419,6 @@ $(OBJDIR)/%.o : %.cpp | $(BEGIN) $(eval CMD=$(CC) -S $(ALL_CPPFLAGS) $< -o $@) @$(BUILD_CMD) -# Assemble: create object files from assembler source files. -$(OBJDIR)/%.o : %.S | $(BEGIN) - @mkdir -p $(@D) - @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) - $(eval CMD=$(CC) -c $(ALL_ASFLAGS) $< -o $@) - @$(BUILD_CMD) - # Create preprocessed source for use in sending a bug report. %.i : %.c | $(BEGIN) $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ @@ -486,7 +502,7 @@ $(shell mkdir $(BUILD_DIR) 2>/dev/null) # Create object files directory $(shell mkdir $(OBJDIR) 2>/dev/null) - +$(shell mkdir $(KBOBJDIR) 2>/dev/null) # Include the dependency files. -include $(shell mkdir $(BUILD_DIR)/.dep 2>/dev/null) $(wildcard $(BUILD_DIR)/.dep/*) -- cgit v1.2.3 From f11a0275a8e11a9e8393d8d64b45b62a1a018512 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 31 Jul 2016 13:24:25 +0300 Subject: Enable vpath seraching for source files only --- tmk_core/rules.mk | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index c81fa68541..f6819d7c31 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -15,6 +15,16 @@ # Carlos Lamas # +# Enable vpath seraching for source files only +# Without this, output files, could be read from the wrong .build directories +VPATH_SRC := $(VPATH) +vpath %.c $(VPATH_SRC) +vpath %.h $(VPATH_SRC) +vpath %.cpp $(VPATH_SRC) +vpath %.hpp $(VPATH_SRC) +vpath %.S $(VPATH_SRC) +VPATH := + # Output format. (can be srec, ihex, binary) FORMAT = ihex @@ -71,7 +81,7 @@ BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ # Each directory must be seperated by a space. # Use forward slashes for directory separators. # For a directory that has spaces, enclose it in quotes. -EXTRAINCDIRS += $(subst :, ,$(VPATH)) +EXTRAINCDIRS += $(subst :, ,$(VPATH_SRC)) # Compiler flag to set the C Standard level. -- cgit v1.2.3 From e58e9af2ab2c0e66a8456b48d46f4d71a66af27a Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 30 Jul 2016 18:16:34 +0300 Subject: More reliable .d file generation Also generated inside the obj dir instead of separate deps folder. --- tmk_core/rules.mk | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index f6819d7c31..8acb439321 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -278,7 +278,7 @@ LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst # Compiler flags to generate dependency files. #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d -GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$(subst $(BUILD_DIR)/,,$@)).d +GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@) # Combine all necessary flags and optional flags. @@ -288,6 +288,8 @@ ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) +MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@) + # Default target. all: build sizeafter @@ -390,17 +392,17 @@ BEGIN = gccversion check_submodule sizebefore define GEN_OBJRULE # Compile: create object files from C source files. -$1/%.o : %.c | $(BEGIN) +$1/%.o : %.c $1/%.d | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$< -o $$@) + $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$$(BUILD_CMD) # Compile: create object files from C++ source files. -$1/%.o : %.cpp | $(BEGIN) +$1/%.o : %.cpp $1/%.d | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$< -o $$@) + $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$(BUILD_CMD) # Assemble: create object files from assembler source files. @@ -409,9 +411,15 @@ $1/%.o : %.S | $(BEGIN) @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) @$$(BUILD_CMD) - endef +# We have to use static rules for the .d files for some reason +DEPS = $(patsubst %.o,%.d,$(OBJ)) +# Keep the .d files +.PRECIOUS: $(DEPS) +# Empty rule to force recompilation if the .d file is missing +$(DEPS): + # Since the object files could be in two different folders, generate # separate rules for them, rather than having too generic rules $(eval $(call GEN_OBJRULE,$(OBJDIR))) @@ -434,7 +442,7 @@ $(eval $(call GEN_OBJRULE,$(KBOBJDIR))) $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ # Target: clean project. -clean: +clean: show_path: @echo VPATH=$(VPATH) @@ -515,7 +523,7 @@ $(shell mkdir $(OBJDIR) 2>/dev/null) $(shell mkdir $(KBOBJDIR) 2>/dev/null) # Include the dependency files. --include $(shell mkdir $(BUILD_DIR)/.dep 2>/dev/null) $(wildcard $(BUILD_DIR)/.dep/*) +-include $(patsubst %.o,%.d,$(OBJ)) # Listing of phony targets. -- cgit v1.2.3 From 84bfb195545b0ba527f34c386d15d6f732a28de7 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 30 Jul 2016 22:07:01 +0300 Subject: Force compilation and linking when options changes --- tmk_core/rules.mk | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 8acb439321..ebcd372cac 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -284,8 +284,8 @@ GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@) # Combine all necessary flags and optional flags. # Add target processor to flags. # You can give extra flags at 'make' command line like: make EXTRAFLAGS=-DFOO=bar -ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) -ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) +ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(EXTRAFLAGS) +ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(EXTRAFLAGS) ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@) @@ -385,32 +385,51 @@ BEGIN = gccversion check_submodule sizebefore # Link: create ELF output file from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).elf .PRECIOUS : $(OBJ) -%.elf: $(OBJ) | $(BEGIN) +# Note the obj.txt depeendency is there to force linking if a source file is deleted +%.elf: $(OBJ) $(OBJDIR)/cflags.txt $(OBJDIR)/ldflags.txt $(OBJDIR)/obj.txt | $(BEGIN) @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) - $(eval CMD=$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)) + $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS)) @$(BUILD_CMD) define GEN_OBJRULE # Compile: create object files from C source files. -$1/%.o : %.c $1/%.d | $(BEGIN) +$1/%.o : %.c $1/%.d $1/cflags.txt | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$< -o $$@ && $$(MOVE_DEP)) + $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$$(BUILD_CMD) # Compile: create object files from C++ source files. -$1/%.o : %.cpp $1/%.d | $(BEGIN) +$1/%.o : %.cpp $1/%.d $1/cppflags.txt | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) + $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$(BUILD_CMD) # Assemble: create object files from assembler source files. -$1/%.o : %.S | $(BEGIN) +$1/%.o : %.S $1/asflags.txt | $(BEGIN) @mkdir -p $$(@D) @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) @$$(BUILD_CMD) + +$1/force: + +$1/cflags.txt: $1/force + echo '$$(ALL_CFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CFLAGS)' > $$@ + +$1/cppflags.txt: $1/force + echo '$$(ALL_CPPFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CPPFLAGS)' > $$@ + +$1/asflags.txt: $1/force + echo '$$(ALL_ASFLAGS)' | cmp -s - $$@ || echo '$$(ALL_ASFLAGS)' > $$@ + +$1/ldflags.txt: $1/force + echo '$$(LDFLAGS)' | cmp -s - $$@ || echo '$$(LDFLAGS)' > $$@ + +$1/obj.txt: $1/force + echo '$$(OBJ)' | cmp -s - $$@ || echo '$$(OBJ)' > $$@ + endef # We have to use static rules for the .d files for some reason -- cgit v1.2.3 From d5a947b32495625970d220349ca8f47e4cb2992a Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 31 Jul 2016 13:49:04 +0300 Subject: Also depend on the gcc version --- tmk_core/rules.mk | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index ebcd372cac..69f82dc836 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -393,21 +393,21 @@ BEGIN = gccversion check_submodule sizebefore define GEN_OBJRULE # Compile: create object files from C source files. -$1/%.o : %.c $1/%.d $1/cflags.txt | $(BEGIN) +$1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$$(BUILD_CMD) # Compile: create object files from C++ source files. -$1/%.o : %.cpp $1/%.d $1/cppflags.txt | $(BEGIN) +$1/%.o : %.cpp $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$(BUILD_CMD) # Assemble: create object files from assembler source files. -$1/%.o : %.S $1/asflags.txt | $(BEGIN) +$1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN) @mkdir -p $$(@D) @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) @@ -430,6 +430,8 @@ $1/ldflags.txt: $1/force $1/obj.txt: $1/force echo '$$(OBJ)' | cmp -s - $$@ || echo '$$(OBJ)' > $$@ +$1/compiler.txt: $1/force + $$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@ endef # We have to use static rules for the .d files for some reason -- cgit v1.2.3 From a0dc6221993b10834dd55f58057d3354ca0910c3 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 31 Jul 2016 14:17:32 +0300 Subject: Remove the quick commands and add proper clean --- tmk_core/rules.mk | 31 +++++-------------------------- 1 file changed, 5 insertions(+), 26 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 69f82dc836..d2350f27c1 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -45,11 +45,6 @@ ifeq ($(COLOR),true) BOLD=\033[1m endif -ifdef quick - QUICK = $(quick) -endif - -QUICK ?= false AUTOGEN ?= false ifneq ($(shell awk --version 2>/dev/null),) @@ -293,9 +288,6 @@ MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@) # Default target. all: build sizeafter -# Quick make that doesn't clean -quick: build sizeafter - # Change the build target to build a HEX file or a library. build: elf hex #build: elf hex eep lss sym @@ -464,6 +456,9 @@ $(eval $(call GEN_OBJRULE,$(KBOBJDIR))) # Target: clean project. clean: + $(REMOVE) -r $(OBJDIR) 2>/dev/null + $(REMOVE) -r $(KBOBJDIR) 2>/dev/null + $(REMOVE) $(BUILD_DIR)/$(TARGET).* show_path: @echo VPATH=$(VPATH) @@ -483,7 +478,6 @@ all-keyboards-defaults: all-keyboards-defaults-all KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboards/%/=/keyboards/%) all-keyboards-all: $(addsuffix -all,$(KEYBOARDS)) -all-keyboards-quick: $(addsuffix -quick,$(KEYBOARDS)) all-keyboards-clean: $(addsuffix -clean,$(KEYBOARDS)) all-keyboards: all-keyboards-all @@ -500,12 +494,10 @@ done endef define make_keyboard_helper -# Just remove the -quick, -all and so on from the first argument and pass it forward +# Just remove the -all and so on from the first argument and pass it forward $(call make_keyboard,$(subst -$2,,$1),$2) endef -/keyboards/%-quick: - $(call make_keyboard_helper,$@,quick) /keyboards/%-all: $(call make_keyboard_helper,$@,all) /keyboards/%-clean: @@ -523,19 +515,6 @@ all-keymaps-%: all-keymaps: all-keymaps-all -GOAL=$(MAKECMDGOALS) -ifeq ($(MAKECMDGOALS),) -GOAL = all -endif -CLEANING_GOALS=clean clean_list all -ifneq ($(findstring $(GOAL),$(CLEANING_GOALS)),) -$(shell $(REMOVE) -r $(BUILD_DIR) 2>/dev/null) -$(shell $(REMOVE) -r $(TOP_DIR)/$(BUILD_DIR)) -$(shell $(REMOVE) -r $(KEYBOARD_PATH)/$(BUILD_DIR)) -$(shell if $$SUBPROJECT; then $(REMOVE) -r $(SUBPROJECT_PATH)/$(BUILD_DIR); fi) -$(shell $(REMOVE) -r $(KEYMAP_PATH)/$(BUILD_DIR)) -endif - # Create build directory $(shell mkdir $(BUILD_DIR) 2>/dev/null) @@ -548,7 +527,7 @@ $(shell mkdir $(KBOBJDIR) 2>/dev/null) # Listing of phony targets. -.PHONY : all quick finish sizebefore sizeafter gccversion \ +.PHONY : all finish sizebefore sizeafter gccversion \ build elf hex eep lss sym coff extcoff check_submodule \ clean clean_list debug gdb-config show_path \ program teensy dfu flip dfu-ee flip-ee dfu-start \ -- cgit v1.2.3 From cc2df445ab3b0fd3998de7861b1c9ba0ad64aa8a Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 8 Aug 2016 11:06:47 +0300 Subject: Remove unneded code from tmk_core/rules.mk --- tmk_core/rules.mk | 91 ++----------------------------------------------------- 1 file changed, 2 insertions(+), 89 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index d2350f27c1..9aa4ac8cf8 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -34,43 +34,8 @@ FORMAT = ihex # (Note: 3 is not always the best optimization level. See avr-libc FAQ.) OPT = s -COLOR ?= true - -ifeq ($(COLOR),true) - NO_COLOR=\033[0m - OK_COLOR=\033[32;01m - ERROR_COLOR=\033[31;01m - WARN_COLOR=\033[33;01m - BLUE=\033[0;34m - BOLD=\033[1m -endif - AUTOGEN ?= false -ifneq ($(shell awk --version 2>/dev/null),) - AWK=awk -else - AWK=cat && test -endif - -OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n -ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n -WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n - -ifndef $(SILENT) - SILENT = false -endif - -TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }' -TAB_LOG_PLAIN = printf "$$LOG\n" -AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }' -AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }' -PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && exit 1 -PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) -PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && exit 1 -PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) -PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS) -BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; # List any extra directories to look for include files here. # Each directory must be seperated by a space. @@ -432,6 +397,7 @@ DEPS = $(patsubst %.o,%.d,$(OBJ)) .PRECIOUS: $(DEPS) # Empty rule to force recompilation if the .d file is missing $(DEPS): + # Since the object files could be in two different folders, generate # separate rules for them, rather than having too generic rules @@ -464,57 +430,6 @@ show_path: @echo VPATH=$(VPATH) @echo SRC=$(SRC) -SUBDIRS := $(filter-out %/util/ %/doc/ %/keymaps/ %/old_keymap_files/,$(dir $(wildcard $(TOP_DIR)/keyboards/**/*/Makefile))) -SUBDIRS := $(SUBDIRS) $(dir $(wildcard $(TOP_DIR)/keyboards/*/.)) -SUBDIRS := $(sort $(SUBDIRS)) -# $(error $(SUBDIRS)) -all-keyboards-defaults-%: - @for x in $(SUBDIRS) ; do \ - printf "Compiling with default: $$x" | $(AWK_CMD); \ - LOG=$$($(MAKE) -C $$x $(subst all-keyboards-defaults-,,$@) VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ - done - -all-keyboards-defaults: all-keyboards-defaults-all - -KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboards/%/=/keyboards/%) -all-keyboards-all: $(addsuffix -all,$(KEYBOARDS)) -all-keyboards-clean: $(addsuffix -clean,$(KEYBOARDS)) -all-keyboards: all-keyboards-all - -define make_keyboard -$(eval KEYBOARD=$(patsubst /keyboards/%,%,$1)) -$(eval SUBPROJECT=$(lastword $(subst /, ,$(KEYBOARD)))) -$(eval KEYBOARD=$(firstword $(subst /, ,$(KEYBOARD)))) -$(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.)))) -$(eval KEYMAPS+=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/*/.)))) -@for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)/$(SUBPROJECT)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \ - LOG=$$($(MAKE) -C $(TOP_DIR)$1 $2 keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ -done -endef - -define make_keyboard_helper -# Just remove the -all and so on from the first argument and pass it forward -$(call make_keyboard,$(subst -$2,,$1),$2) -endef - -/keyboards/%-all: - $(call make_keyboard_helper,$@,all) -/keyboards/%-clean: - $(call make_keyboard_helper,$@,clean) -/keyboards/%: - $(call make_keyboard_helper,$@,all) - -all-keymaps-%: - $(eval MAKECONFIG=$(call get_target,all-keymaps,$@)) - $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.)))) - @for x in $(KEYMAPS) ; do \ - printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \ - LOG=$$($(MAKE) $(subst all-keymaps-,,$@) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ - done - -all-keymaps: all-keymaps-all - # Create build directory $(shell mkdir $(BUILD_DIR) 2>/dev/null) @@ -530,6 +445,4 @@ $(shell mkdir $(KBOBJDIR) 2>/dev/null) .PHONY : all finish sizebefore sizeafter gccversion \ build elf hex eep lss sym coff extcoff check_submodule \ clean clean_list debug gdb-config show_path \ -program teensy dfu flip dfu-ee flip-ee dfu-start \ -all-keyboards-defaults all-keyboards all-keymaps \ -all-keyboards-defaults-% all-keyboards-% all-keymaps-% +program teensy dfu flip dfu-ee flip-ee dfu-start \ No newline at end of file -- cgit v1.2.3 From 60c6e79ecb032e9726809a295ab3e0011e6b2fb4 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 8 Aug 2016 11:19:29 +0300 Subject: Move git submodule check and version generation to main Makefile --- tmk_core/rules.mk | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 9aa4ac8cf8..e8e3de5719 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -267,15 +267,6 @@ sym: $(BUILD_DIR)/$(TARGET).sym LIBNAME=lib$(TARGET).a lib: $(LIBNAME) -check_submodule: - git submodule status --recursive | \ - while IFS= read -r x; do \ - case "$$x" in \ - \ *) ;; \ - *) printf "$(MSG_SUBMODULE_DIRTY)";break;; \ - esac \ - done - # Display size of file. HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex #ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf @@ -337,7 +328,7 @@ gccversion : $(eval CMD=$(AR) $@ $(OBJ) ) @$(BUILD_CMD) -BEGIN = gccversion check_submodule sizebefore +BEGIN = gccversion sizebefore # Link: create ELF output file from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).elf @@ -443,6 +434,6 @@ $(shell mkdir $(KBOBJDIR) 2>/dev/null) # Listing of phony targets. .PHONY : all finish sizebefore sizeafter gccversion \ -build elf hex eep lss sym coff extcoff check_submodule \ +build elf hex eep lss sym coff extcoff \ clean clean_list debug gdb-config show_path \ program teensy dfu flip dfu-ee flip-ee dfu-start \ No newline at end of file -- cgit v1.2.3 From 3aac4e95c91be3244d68f27159c2667904c8fddd Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 15 Aug 2016 08:20:16 +0300 Subject: More general system for generating several outputs --- tmk_core/rules.mk | 125 +++++++++++++++++------------------------------------- 1 file changed, 40 insertions(+), 85 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index e8e3de5719..9f6d8d9dfd 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -25,6 +25,18 @@ vpath %.hpp $(VPATH_SRC) vpath %.S $(VPATH_SRC) VPATH := +# Convert all SRC to OBJ +define OBJ_FROM_SRC +$(patsubst %.c,$1/%.o,$(patsubst %.cpp,$1/%.o,$(patsubst %.S,$1/%.o,$($1_SRC)))) +endef +$(foreach OUTPUT,$(OUTPUTS),$(eval $(OUTPUT)_OBJ +=$(call OBJ_FROM_SRC,$(OUTPUT)))) + +# Define a list of all objects +OBJ := $(foreach OUTPUT,$(OUTPUTS),$($(OUTPUT)_OBJ)) + +MASTER_OUTPUT := $(firstword $(OUTPUTS)) + + # Output format. (can be srec, ihex, binary) FORMAT = ihex @@ -53,17 +65,18 @@ CSTANDARD = -std=gnu99 # Place -D or -U options here for C sources -CDEFS += $(OPT_DEFS) +#CDEFS += # Place -D or -U options here for ASM sources -ADEFS += $(OPT_DEFS) +#ADEFS += # Place -D or -U options here for C++ sources #CPPDEFS += -D__STDC_LIMIT_MACROS #CPPDEFS += -D__STDC_CONSTANT_MACROS -CPPDEFS += $(OPT_DEFS) +#CPPDEFS += + @@ -134,7 +147,8 @@ endif # files -- see avr-libc docs [FIXME: not yet described there] # -listing-cont-lines: Sets the maximum number of continuation lines of hex # dump that will be displayed for a given single line of source input. -ASFLAGS += $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 +ASFLAGS += $(ADEFS) +ASFLAGS += -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) ifdef CONFIG_H ASFLAGS += -include $(CONFIG_H) @@ -193,48 +207,6 @@ COPY = cp WINSHELL = cmd SECHO = $(SILENT) || echo -# Define Messages -# English -MSG_ERRORS_NONE = Errors: none -MSG_BEGIN = -------- begin -------- -MSG_END = -------- end -------- -MSG_SIZE_BEFORE = Size before: -MSG_SIZE_AFTER = Size after: -MSG_COFF = Converting to AVR COFF: -MSG_EXTENDED_COFF = Converting to AVR Extended COFF: -MSG_FLASH = Creating load file for Flash: -MSG_EEPROM = Creating load file for EEPROM: -MSG_BIN = Creating binary load file for Flash: -MSG_EXTENDED_LISTING = Creating Extended Listing: -MSG_SYMBOL_TABLE = Creating Symbol Table: -MSG_LINKING = Linking: -MSG_COMPILING = Compiling: -MSG_COMPILING_CPP = Compiling: -MSG_ASSEMBLING = Assembling: -MSG_CLEANING = Cleaning project: -MSG_CREATING_LIBRARY = Creating library: -MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \ - Some git sub-modules are out of date or modified, please consider runnning:$(BOLD)\n\ - git submodule sync --recursive\n\ - git submodule update --init --recursive$(NO_COLOR)\n\n\ - You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\ - or if you have modified the ChibiOS libraries yourself. \n\n - - -# Define all object files. -OBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(patsubst %.cpp,$(OBJDIR)/%.o,$(patsubst %.S,$(OBJDIR)/%.o,$(SRC)))) -# The files in the lib folder are shared between all keymaps, so generate that folder name by removing -# the keymap from the name -KBOBJDIR=$(subst _$(KEYMAP),,$(OBJDIR)) -# And fixup the object files to match -LIBOBJ = $(foreach v,$(OBJ),$(if $(findstring /lib/,$v),$v)) -NONLIBOBJ := $(filter-out $(LIBOBJ),$(OBJ)) -LIBOBJ := $(subst _$(KEYMAP)/,/,$(LIBOBJ)) -OBJ := $(LIBOBJ) $(NONLIBOBJ) - -# Define all listing files. -LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst %.S,$(OBJDIR)/%.lst,$(SRC)))) - # Compiler flags to generate dependency files. #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d @@ -320,68 +292,66 @@ gccversion : $(eval CMD=$(BIN) $< $@ || exit 0) @$(BUILD_CMD) -# Create library from object files. -.SECONDARY : $(BUILD_DIR)/$(TARGET).a -.PRECIOUS : $(OBJ) -%.a: $(OBJ) - @$(SILENT) || printf "$(MSG_CREATING_LIBRARY) $@" | $(AWK_CMD) - $(eval CMD=$(AR) $@ $(OBJ) ) - @$(BUILD_CMD) - BEGIN = gccversion sizebefore # Link: create ELF output file from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).elf .PRECIOUS : $(OBJ) # Note the obj.txt depeendency is there to force linking if a source file is deleted -%.elf: $(OBJ) $(OBJDIR)/cflags.txt $(OBJDIR)/ldflags.txt $(OBJDIR)/obj.txt | $(BEGIN) +%.elf: $(OBJ) $(MASTER_OUTPUT)/cflags.txt $(MASTER_OUTPUT)/ldflags.txt $(MASTER_OUTPUT)/obj.txt | $(BEGIN) @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS)) @$(BUILD_CMD) + define GEN_OBJRULE +$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) +$1_CPPFLAGS= $$(ALL_CPPFLAGS) $$($1_DEFS) +$1_ASFLAGS= $$(ALL_ASFLAGS) $$($1_DEFS) + # Compile: create object files from C source files. $1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) + $$(eval CMD := $$(CC) -c $$($1_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$$(BUILD_CMD) # Compile: create object files from C++ source files. $1/%.o : %.cpp $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) + $$(eval CMD=$$(CC) -c $$($1_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) @$(BUILD_CMD) # Assemble: create object files from assembler source files. $1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN) @mkdir -p $$(@D) @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) - $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) + $$(eval CMD=$$(CC) -c $$($1_ASFLAGS) $$< -o $$@) @$$(BUILD_CMD) $1/force: $1/cflags.txt: $1/force - echo '$$(ALL_CFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CFLAGS)' > $$@ + echo '$$($1_CFLAGS)' | cmp -s - $$@ || echo '$$($1_CFLAGS)' > $$@ $1/cppflags.txt: $1/force - echo '$$(ALL_CPPFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CPPFLAGS)' > $$@ + echo '$$($1_CPPFLAGS)' | cmp -s - $$@ || echo '$$($1_CPPFLAGS)' > $$@ $1/asflags.txt: $1/force - echo '$$(ALL_ASFLAGS)' | cmp -s - $$@ || echo '$$(ALL_ASFLAGS)' > $$@ - -$1/ldflags.txt: $1/force - echo '$$(LDFLAGS)' | cmp -s - $$@ || echo '$$(LDFLAGS)' > $$@ - -$1/obj.txt: $1/force - echo '$$(OBJ)' | cmp -s - $$@ || echo '$$(OBJ)' > $$@ + echo '$$($1_ASFLAGS)' | cmp -s - $$@ || echo '$$($1_ASFLAGS)' > $$@ $1/compiler.txt: $1/force $$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@ endef +$(MASTER_OUTPUT)/obj.txt: $(MASTER_OUTPUT)/force + echo '$(OBJ)' | cmp -s - $$@ || echo '$(OBJ)' > $$@ + +$(MASTER_OUTPUT)/ldflags.txt: $(MASTER_OUTPUT)/force + echo '$(LDFLAGS)' | cmp -s - $$@ || echo '$(LDFLAGS)' > $$@ + + # We have to use static rules for the .d files for some reason DEPS = $(patsubst %.o,%.d,$(OBJ)) # Keep the .d files @@ -390,22 +360,7 @@ DEPS = $(patsubst %.o,%.d,$(OBJ)) $(DEPS): -# Since the object files could be in two different folders, generate -# separate rules for them, rather than having too generic rules -$(eval $(call GEN_OBJRULE,$(OBJDIR))) -$(eval $(call GEN_OBJRULE,$(KBOBJDIR))) - -# Compile: create assembler files from C source files. -%.s : %.c | $(BEGIN) - @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) - $(eval CMD=$(CC) -S $(ALL_CFLAGS) $< -o $@) - @$(BUILD_CMD) - -# Compile: create assembler files from C++ source files. -%.s : %.cpp | $(BEGIN) - @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) - $(eval CMD=$(CC) -S $(ALL_CPPFLAGS) $< -o $@) - @$(BUILD_CMD) +$(foreach OUTPUT,$(OUTPUTS),$(eval $(call GEN_OBJRULE,$(OUTPUT)))) # Create preprocessed source for use in sending a bug report. %.i : %.c | $(BEGIN) @@ -420,13 +375,13 @@ clean: show_path: @echo VPATH=$(VPATH) @echo SRC=$(SRC) + @echo OBJ=$(OBJ) # Create build directory $(shell mkdir $(BUILD_DIR) 2>/dev/null) # Create object files directory -$(shell mkdir $(OBJDIR) 2>/dev/null) -$(shell mkdir $(KBOBJDIR) 2>/dev/null) +$(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir $(OUTPUT) 2>/dev/null))) # Include the dependency files. -include $(patsubst %.o,%.d,$(OBJ)) -- cgit v1.2.3 From 33fbd3be36bf58c6a02fb6b4ae99dc5bca7c8e58 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 15 Aug 2016 08:45:36 +0300 Subject: Output specific include paths --- tmk_core/rules.mk | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 9f6d8d9dfd..7b2c842ed6 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -49,13 +49,6 @@ OPT = s AUTOGEN ?= false -# List any extra directories to look for include files here. -# Each directory must be seperated by a space. -# Use forward slashes for directory separators. -# For a directory that has spaces, enclose it in quotes. -EXTRAINCDIRS += $(subst :, ,$(VPATH_SRC)) - - # Compiler flag to set the C Standard level. # c89 = "ANSI" C # gnu89 = c89 plus GCC extensions @@ -104,7 +97,6 @@ CFLAGS += -Wstrict-prototypes #CFLAGS += -Wunreachable-code #CFLAGS += -Wsign-compare CFLAGS += -Wa,-adhlns=$(@:%.o=%.lst) -CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) CFLAGS += $(CSTANDARD) ifdef CONFIG_H CFLAGS += -include $(CONFIG_H) @@ -131,7 +123,6 @@ CPPFLAGS += -Wundef #CPPFLAGS += -Wunreachable-code #CPPFLAGS += -Wsign-compare CPPFLAGS += -Wa,-adhlns=$(@:%.o=%.lst) -CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) #CPPFLAGS += $(CSTANDARD) ifdef CONFIG_H CPPFLAGS += -include $(CONFIG_H) @@ -149,7 +140,6 @@ endif # dump that will be displayed for a given single line of source input. ASFLAGS += $(ADEFS) ASFLAGS += -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 -ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) ifdef CONFIG_H ASFLAGS += -include $(CONFIG_H) endif @@ -305,9 +295,11 @@ BEGIN = gccversion sizebefore define GEN_OBJRULE -$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) -$1_CPPFLAGS= $$(ALL_CPPFLAGS) $$($1_DEFS) -$1_ASFLAGS= $$(ALL_ASFLAGS) $$($1_DEFS) +$1_INCFLAGS := $$(patsubst %,-I%,$$($1_INC)) +$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) $$($1_INCFLAGS) +$1_CPPFLAGS= $$(ALL_CPPFLAGS) $$($1_DEFS) $$($1_INCFLAGS) +$1_ASFLAGS= $$(ALL_ASFLAGS) $$($1_DEFS) $$($1_INCFLAGS) +$$(info $$($1_INCFLAGS)) # Compile: create object files from C source files. $1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN) -- cgit v1.2.3 From 9028a412eaf95e37e98a9f2e4573653ec70d7e18 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 15 Aug 2016 08:58:05 +0300 Subject: Add output specific config file --- tmk_core/rules.mk | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 7b2c842ed6..977a2d0e53 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -98,9 +98,6 @@ CFLAGS += -Wstrict-prototypes #CFLAGS += -Wsign-compare CFLAGS += -Wa,-adhlns=$(@:%.o=%.lst) CFLAGS += $(CSTANDARD) -ifdef CONFIG_H - CFLAGS += -include $(CONFIG_H) -endif #---------------- Compiler Options C++ ---------------- @@ -124,10 +121,6 @@ CPPFLAGS += -Wundef #CPPFLAGS += -Wsign-compare CPPFLAGS += -Wa,-adhlns=$(@:%.o=%.lst) #CPPFLAGS += $(CSTANDARD) -ifdef CONFIG_H - CPPFLAGS += -include $(CONFIG_H) -endif - #---------------- Assembler Options ---------------- # -Wa,...: tell GCC to pass this to the assembler. @@ -140,9 +133,6 @@ endif # dump that will be displayed for a given single line of source input. ASFLAGS += $(ADEFS) ASFLAGS += -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 -ifdef CONFIG_H - ASFLAGS += -include $(CONFIG_H) -endif #---------------- Library Options ---------------- # Minimalistic printf version @@ -296,10 +286,12 @@ BEGIN = gccversion sizebefore define GEN_OBJRULE $1_INCFLAGS := $$(patsubst %,-I%,$$($1_INC)) -$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) $$($1_INCFLAGS) -$1_CPPFLAGS= $$(ALL_CPPFLAGS) $$($1_DEFS) $$($1_INCFLAGS) -$1_ASFLAGS= $$(ALL_ASFLAGS) $$($1_DEFS) $$($1_INCFLAGS) -$$(info $$($1_INCFLAGS)) +ifdef $1_CONFIG +$1_CONFIG_FLAGS += -include $$($1_CONFIG) +endif +$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS) +$1_CPPFLAGS= $$(ALL_CPPFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS) +$1_ASFLAGS= $$(ALL_ASFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS) # Compile: create object files from C source files. $1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN) -- cgit v1.2.3 From 48f8ab1ae2612960cbd82c1f9967fd118aae4c67 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Aug 2016 12:44:04 +0300 Subject: Fix the clean target It now properly cleans all the outputs --- tmk_core/rules.mk | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 977a2d0e53..21011c2808 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -352,8 +352,7 @@ $(foreach OUTPUT,$(OUTPUTS),$(eval $(call GEN_OBJRULE,$(OUTPUT)))) # Target: clean project. clean: - $(REMOVE) -r $(OBJDIR) 2>/dev/null - $(REMOVE) -r $(KBOBJDIR) 2>/dev/null + $(foreach OUTPUT,$(OUTPUTS), $(REMOVE) -r $(OUTPUT) 2>/dev/null) $(REMOVE) $(BUILD_DIR)/$(TARGET).* show_path: -- cgit v1.2.3 From 8a9aac6e3237a505682cc7249a8dfff6cb964343 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 22 Aug 2016 09:16:08 +0300 Subject: Rules for compiling and linking google test --- tmk_core/rules.mk | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 21011c2808..317f55e083 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -21,13 +21,14 @@ VPATH_SRC := $(VPATH) vpath %.c $(VPATH_SRC) vpath %.h $(VPATH_SRC) vpath %.cpp $(VPATH_SRC) +vpath %.cc $(VPATH_SRC) vpath %.hpp $(VPATH_SRC) vpath %.S $(VPATH_SRC) VPATH := # Convert all SRC to OBJ define OBJ_FROM_SRC -$(patsubst %.c,$1/%.o,$(patsubst %.cpp,$1/%.o,$(patsubst %.S,$1/%.o,$($1_SRC)))) +$(patsubst %.c,$1/%.o,$(patsubst %.cpp,$1/%.o,$(patsubst %.cc,$1/%.o,$(patsubst %.S,$1/%.o,$($1_SRC))))) endef $(foreach OUTPUT,$(OUTPUTS),$(eval $(OUTPUT)_OBJ +=$(call OBJ_FROM_SRC,$(OUTPUT)))) @@ -202,14 +203,6 @@ ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@) -# Default target. -all: build sizeafter - -# Change the build target to build a HEX file or a library. -build: elf hex -#build: elf hex eep lss sym -#build: lib - elf: $(BUILD_DIR)/$(TARGET).elf hex: $(BUILD_DIR)/$(TARGET).hex @@ -305,7 +298,13 @@ $1/%.o : %.cpp $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN) @mkdir -p $$(@D) @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) $$(eval CMD=$$(CC) -c $$($1_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) - @$(BUILD_CMD) + @$$(BUILD_CMD) + +$1/%.o : %.cc $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN) + @mkdir -p $$(@D) + @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) + $$(eval CMD=$$(CC) -c $$($1_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) + @$$(BUILD_CMD) # Assemble: create object files from assembler source files. $1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN) -- cgit v1.2.3 From 42baa6cf43ab1da79887e74b9ad71379c13094f9 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 17:43:35 +0300 Subject: Disable map file creation when building tests It causes strange linker warnings on cygwin. --- tmk_core/rules.mk | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 317f55e083..695fe0badf 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -161,6 +161,7 @@ SCANF_LIB = MATH_LIB = -lm +CREATE_MAP ?= yes #---------------- Linker Options ---------------- @@ -171,7 +172,10 @@ MATH_LIB = -lm # Comennt out "--relax" option to avoid a error such: # (.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12' # -LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref + +ifeq ($(CREATE_MAP),yes) + LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref +endif #LDFLAGS += -Wl,--relax LDFLAGS += $(EXTMEMOPTS) LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) -- cgit v1.2.3 From 03b1d142f2df39a98fd8013f364580c8534d044c Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Aug 2016 18:59:22 +0300 Subject: Add -p parameter to mkdir So that it's created even when there's a deeper structure --- tmk_core/rules.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 695fe0badf..79fc7119a6 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -364,10 +364,10 @@ show_path: @echo OBJ=$(OBJ) # Create build directory -$(shell mkdir $(BUILD_DIR) 2>/dev/null) +$(shell mkdir -p $(BUILD_DIR) 2>/dev/null) # Create object files directory -$(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir $(OUTPUT) 2>/dev/null))) +$(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir -p $(OUTPUT) 2>/dev/null))) # Include the dependency files. -include $(patsubst %.o,%.d,$(OBJ)) -- cgit v1.2.3 From 13f3c73386da9b15b255b014f5da81cd51613ca1 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 4 Sep 2016 23:26:49 +0300 Subject: Fix the ldflags.txt and obj.txt checks There was a minor typo, which caused the files to not be generated and therefore the elf files were always linked. --- tmk_core/rules.mk | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'tmk_core/rules.mk') diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 79fc7119a6..e4c8aecb2c 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -332,11 +332,13 @@ $1/compiler.txt: $1/force $$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@ endef +.PRECIOUS: $(MASTER_OUTPUT)/obj.txt $(MASTER_OUTPUT)/obj.txt: $(MASTER_OUTPUT)/force - echo '$(OBJ)' | cmp -s - $$@ || echo '$(OBJ)' > $$@ + echo '$(OBJ)' | cmp -s - $@ || echo '$(OBJ)' > $@ +.PRECIOUS: $(MASTER_OUTPUT)/ldflags.txt $(MASTER_OUTPUT)/ldflags.txt: $(MASTER_OUTPUT)/force - echo '$(LDFLAGS)' | cmp -s - $$@ || echo '$(LDFLAGS)' > $$@ + echo '$(LDFLAGS)' | cmp -s - $@ || echo '$(LDFLAGS)' > $@ # We have to use static rules for the .d files for some reason -- cgit v1.2.3