Skip to content

Commit fe84c59

Browse files
authored
Merge pull request #580 from wingunder/master
Moved the PARSE_BOARD macro and added the TOOL_PREFIX variable for setting up tool chains.
2 parents 089b535 + 62d23d6 commit fe84c59

File tree

8 files changed

+233
-368
lines changed

8 files changed

+233
-368
lines changed

Arduino.mk

Lines changed: 132 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -388,28 +388,129 @@ endif
388388
########################################################################
389389
# Arduino and system paths
390390

391+
# Third party hardware and core like ATtiny or ATmega 16
392+
ifdef ALTERNATE_CORE
393+
$(call show_config_variable,ALTERNATE_CORE,[USER])
394+
395+
ifndef ALTERNATE_CORE_PATH
396+
ALTERNATE_CORE_PATH = $(ARDUINO_SKETCHBOOK)/hardware/$(ALTERNATE_CORE)/$(ARCHITECTURE)
397+
endif
398+
endif
399+
400+
ifdef ALTERNATE_CORE_PATH
401+
402+
ifdef ALTERNATE_CORE
403+
$(call show_config_variable,ALTERNATE_CORE_PATH,[COMPUTED], (from ARDUINO_SKETCHBOOK and ALTERNATE_CORE))
404+
else
405+
$(call show_config_variable,ALTERNATE_CORE_PATH,[USER])
406+
endif
407+
408+
ifndef ARDUINO_VAR_PATH
409+
ARDUINO_VAR_PATH = $(ALTERNATE_CORE_PATH)/variants
410+
$(call show_config_variable,ARDUINO_VAR_PATH,[COMPUTED],(from ALTERNATE_CORE_PATH))
411+
endif
412+
413+
ifndef BOARDS_TXT
414+
BOARDS_TXT = $(ALTERNATE_CORE_PATH)/boards.txt
415+
$(call show_config_variable,BOARDS_TXT,[COMPUTED],(from ALTERNATE_CORE_PATH))
416+
endif
417+
418+
else
419+
420+
ifndef ARDUINO_VAR_PATH
421+
ARDUINO_VAR_PATH = $(ARDUINO_DIR)/hardware/$(ARDMK_VENDOR)/$(ARCHITECTURE)/variants
422+
$(call show_config_variable,ARDUINO_VAR_PATH,[COMPUTED],(from ARDUINO_DIR))
423+
else
424+
$(call show_config_variable,ARDUINO_VAR_PATH,[USER])
425+
endif
426+
427+
ifndef BOARDS_TXT
428+
BOARDS_TXT = $(ARDUINO_DIR)/hardware/$(ARDMK_VENDOR)/$(ARCHITECTURE)/boards.txt
429+
$(call show_config_variable,BOARDS_TXT,[COMPUTED],(from ARDUINO_DIR))
430+
else
431+
$(call show_config_variable,BOARDS_TXT,[USER])
432+
endif
433+
434+
endif
435+
436+
ifeq (,$(wildcard $(BOARDS_TXT)))
437+
$(error Currently BOARDS_TXT='$(BOARDS_TXT)', which is not an existing file or an invalid filename.)
438+
endif
439+
440+
ifndef TOOL_PREFIX
441+
TOOL_PREFIX = avr
442+
endif
443+
391444
ifndef CC_NAME
392-
CC_NAME = avr-gcc
445+
CC_NAME := $(call PARSE_BOARD,$(BOARD_TAG),build.command.gcc)
446+
ifndef CC_NAME
447+
CC_NAME := $(TOOL_PREFIX)-gcc
448+
else
449+
$(call show_config_variable,CC_NAME,[COMPUTED])
450+
endif
393451
endif
394452

395453
ifndef CXX_NAME
396-
CXX_NAME = avr-g++
454+
CXX_NAME := $(call PARSE_BOARD,$(BOARD_TAG),build.command.g++)
455+
ifndef CXX_NAME
456+
CXX_NAME := $(TOOL_PREFIX)-g++
457+
else
458+
$(call show_config_variable,CXX_NAME,[COMPUTED])
459+
endif
460+
endif
461+
462+
ifndef AS_NAME
463+
AS_NAME := $(call PARSE_BOARD,$(BOARD_TAG),build.command.as)
464+
ifndef AS_NAME
465+
AS_NAME := $(TOOL_PREFIX)-as
466+
else
467+
$(call show_config_variable,AS_NAME,[COMPUTED])
468+
endif
397469
endif
398470

399471
ifndef OBJCOPY_NAME
400-
OBJCOPY_NAME = avr-objcopy
472+
OBJCOPY_NAME := $(call PARSE_BOARD,$(BOARD_TAG),build.command.objcopy)
473+
ifndef OBJCOPY_NAME
474+
OBJCOPY_NAME := $(TOOL_PREFIX)-objcopy
475+
else
476+
$(call show_config_variable,OBJCOPY_NAME,[COMPUTED])
477+
endif
401478
endif
402479

403480
ifndef OBJDUMP_NAME
404-
OBJDUMP_NAME = avr-objdump
481+
OBJDUMP_NAME := $(call PARSE_BOARD,$(BOARD_TAG),build.command.objdump)
482+
ifndef OBJDUMP_NAME
483+
OBJDUMP_NAME := $(TOOL_PREFIX)-objdump
484+
else
485+
$(call show_config_variable,OBJDUMP_NAME,[COMPUTED])
486+
endif
487+
endif
488+
489+
ifndef AR_NAME
490+
AR_NAME := $(call PARSE_BOARD,$(BOARD_TAG),build.command.ar)
491+
ifndef AR_NAME
492+
AR_NAME := $(TOOL_PREFIX)-ar
493+
else
494+
$(call show_config_variable,AR_NAME,[COMPUTED])
495+
endif
405496
endif
406497

407498
ifndef SIZE_NAME
408-
SIZE_NAME = avr-size
499+
SIZE_NAME := $(call PARSE_BOARD,$(BOARD_TAG),build.command.size)
500+
ifndef SIZE_NAME
501+
SIZE_NAME := $(TOOL_PREFIX)-size
502+
else
503+
$(call show_config_variable,SIZE_NAME,[COMPUTED])
504+
endif
409505
endif
410506

411507
ifndef NM_NAME
412-
NM_NAME = avr-nm
508+
NM_NAME := $(call PARSE_BOARD,$(BOARD_TAG),build.command.nm)
509+
ifndef NM_NAME
510+
NM_NAME := $(TOOL_PREFIX)-nm
511+
else
512+
$(call show_config_variable,NM_NAME,[COMPUTED])
513+
endif
413514
endif
414515

415516
ifndef AVR_TOOLS_DIR
@@ -457,8 +558,8 @@ ifndef AVR_TOOLS_DIR
457558
AVR_TOOLS_DIR = $(SYSTEMPATH_AVR_TOOLS_DIR)
458559
$(call show_config_variable,AVR_TOOLS_DIR,[AUTODETECTED],(found in $$PATH))
459560
else
460-
# One last attempt using avr-gcc in case using arm
461-
SYSTEMPATH_AVR_TOOLS_DIR := $(call dir_if_exists,$(abspath $(dir $(shell which $(avr-gcc)))/..))
561+
# One last attempt using $(TOOL_PREFIX)-gcc in case using arm
562+
SYSTEMPATH_AVR_TOOLS_DIR := $(call dir_if_exists,$(abspath $(dir $(shell which $($(TOOL_PREFIX)-gcc)))/..))
462563
ifdef SYSTEMPATH_AVR_TOOLS_DIR
463564
AVR_TOOLS_DIR = $(SYSTEMPATH_AVR_TOOLS_DIR)
464565
$(call show_config_variable,AVR_TOOLS_DIR,[AUTODETECTED],(found in $$PATH))
@@ -483,8 +584,8 @@ else
483584

484585
endif #ndef AVR_TOOLS_DIR
485586

486-
ifndef AVR_TOOLS_PATH
487-
AVR_TOOLS_PATH = $(AVR_TOOLS_DIR)/bin
587+
ifndef TOOLS_PATH
588+
TOOLS_PATH = $(AVR_TOOLS_DIR)/bin
488589
endif
489590

490591
ifndef ARDUINO_LIB_PATH
@@ -505,51 +606,6 @@ else
505606
$(call show_config_variable,ARDUINO_PLATFORM_LIB_PATH,[USER])
506607
endif
507608

508-
# Third party hardware and core like ATtiny or ATmega 16
509-
ifdef ALTERNATE_CORE
510-
$(call show_config_variable,ALTERNATE_CORE,[USER])
511-
512-
ifndef ALTERNATE_CORE_PATH
513-
ALTERNATE_CORE_PATH = $(ARDUINO_SKETCHBOOK)/hardware/$(ALTERNATE_CORE)/$(ARCHITECTURE)
514-
endif
515-
endif
516-
517-
ifdef ALTERNATE_CORE_PATH
518-
519-
ifdef ALTERNATE_CORE
520-
$(call show_config_variable,ALTERNATE_CORE_PATH,[COMPUTED], (from ARDUINO_SKETCHBOOK and ALTERNATE_CORE))
521-
else
522-
$(call show_config_variable,ALTERNATE_CORE_PATH,[USER])
523-
endif
524-
525-
ifndef ARDUINO_VAR_PATH
526-
ARDUINO_VAR_PATH = $(ALTERNATE_CORE_PATH)/variants
527-
$(call show_config_variable,ARDUINO_VAR_PATH,[COMPUTED],(from ALTERNATE_CORE_PATH))
528-
endif
529-
530-
ifndef BOARDS_TXT
531-
BOARDS_TXT = $(ALTERNATE_CORE_PATH)/boards.txt
532-
$(call show_config_variable,BOARDS_TXT,[COMPUTED],(from ALTERNATE_CORE_PATH))
533-
endif
534-
535-
else
536-
537-
ifndef ARDUINO_VAR_PATH
538-
ARDUINO_VAR_PATH = $(ARDUINO_DIR)/hardware/$(ARDMK_VENDOR)/$(ARCHITECTURE)/variants
539-
$(call show_config_variable,ARDUINO_VAR_PATH,[COMPUTED],(from ARDUINO_DIR))
540-
else
541-
$(call show_config_variable,ARDUINO_VAR_PATH,[USER])
542-
endif
543-
544-
ifndef BOARDS_TXT
545-
BOARDS_TXT = $(ARDUINO_DIR)/hardware/$(ARDMK_VENDOR)/$(ARCHITECTURE)/boards.txt
546-
$(call show_config_variable,BOARDS_TXT,[COMPUTED],(from ARDUINO_DIR))
547-
else
548-
$(call show_config_variable,BOARDS_TXT,[USER])
549-
endif
550-
551-
endif
552-
553609
########################################################################
554610
# Miscellaneous
555611

@@ -585,11 +641,6 @@ else
585641
$(call show_config_variable,BOARD_TAG,[USER])
586642
endif
587643

588-
ifndef PARSE_BOARD
589-
# result = $(call READ_BOARD_TXT, 'boardname', 'parameter')
590-
PARSE_BOARD = $(shell grep -Ev '^\#' $(BOARDS_TXT) | grep -E "^[ \t]*$(1).$(2)=" | cut -d = -f 2 | cut -d : -f 2)
591-
endif
592-
593644
# If NO_CORE is set, then we don't have to parse boards.txt file
594645
# But the user might have to define MCU, F_CPU etc
595646
ifeq ($(strip $(NO_CORE)),)
@@ -826,7 +877,7 @@ endif
826877
ifeq ($(strip $(NO_CORE)),)
827878
ifdef ARDUINO_CORE_PATH
828879
CORE_C_SRCS = $(wildcard $(ARDUINO_CORE_PATH)/*.c)
829-
CORE_C_SRCS += $(wildcard $(ARDUINO_CORE_PATH)/avr-libc/*.c)
880+
CORE_C_SRCS += $(wildcard $(ARDUINO_CORE_PATH)/$(TOOL_PREFIX)-libc/*.c)
830881
CORE_CPP_SRCS = $(wildcard $(ARDUINO_CORE_PATH)/*.cpp)
831882
CORE_AS_SRCS = $(wildcard $(ARDUINO_CORE_PATH)/*.S)
832883

@@ -936,18 +987,22 @@ TARGET_EEP = $(OBJDIR)/$(TARGET).eep
936987
TARGET_BIN = $(OBJDIR)/$(TARGET).bin
937988
CORE_LIB = $(OBJDIR)/libcore.a
938989

939-
# Names of executables - chipKIT needs to override all to set paths to PIC32
940-
# tools, and we can't use "?=" assignment because these are already implicitly
990+
# Names of executables
991+
# In the rare case of wanting to override a path and/or excecutable
992+
# name, the OVERRIDE_EXECUTABLES variable must be defned and _all_
993+
# the excecutables (CC, CXX, AS, OBJCOPY, OBJDUMP AR, SIZE and NM)
994+
# _must_ be defined in the calling makefile.
995+
# We can't use "?=" assignment because these are already implicitly
941996
# defined by Make (e.g. $(CC) == cc).
942997
ifndef OVERRIDE_EXECUTABLES
943-
CC = $(AVR_TOOLS_PATH)/$(CC_NAME)
944-
CXX = $(AVR_TOOLS_PATH)/$(CXX_NAME)
945-
AS = $(AVR_TOOLS_PATH)/$(AS_NAME)
946-
OBJCOPY = $(AVR_TOOLS_PATH)/$(OBJCOPY_NAME)
947-
OBJDUMP = $(AVR_TOOLS_PATH)/$(OBJDUMP_NAME)
948-
AR = $(AVR_TOOLS_PATH)/$(AR_NAME)
949-
SIZE = $(AVR_TOOLS_PATH)/$(SIZE_NAME)
950-
NM = $(AVR_TOOLS_PATH)/$(NM_NAME)
998+
CC = $(TOOLS_PATH)/$(CC_NAME)
999+
CXX = $(TOOLS_PATH)/$(CXX_NAME)
1000+
AS = $(TOOLS_PATH)/$(AS_NAME)
1001+
OBJCOPY = $(TOOLS_PATH)/$(OBJCOPY_NAME)
1002+
OBJDUMP = $(TOOLS_PATH)/$(OBJDUMP_NAME)
1003+
AR = $(TOOLS_PATH)/$(AR_NAME)
1004+
SIZE = $(TOOLS_PATH)/$(SIZE_NAME)
1005+
NM = $(TOOLS_PATH)/$(NM_NAME)
9511006
endif
9521007

9531008
REMOVE = rm -rf
@@ -1083,15 +1138,15 @@ ifneq ($(CATERINA),)
10831138
CPPFLAGS += -DUSB_VID=$(USB_VID) -DUSB_PID=$(USB_PID)
10841139
endif
10851140

1086-
# avr-gcc version that we can do maths on
1141+
# $(TOOL_PREFIX)-gcc version that we can do maths on
10871142
CC_VERNUM = $(shell $(CC) -dumpversion | sed 's/\.//g')
10881143

10891144
# moved from above so we can find version-dependant ar
1090-
ifndef AR_NAME
1145+
ifeq ($(TOOL_PREFIX), avr)
10911146
ifeq ($(shell expr $(CC_VERNUM) '>' 490), 1)
1092-
AR_NAME = avr-gcc-ar
1147+
AR_NAME := $(TOOL_PREFIX)-gcc-ar
10931148
else
1094-
AR_NAME = avr-ar
1149+
AR_NAME := $(TOOL_PREFIX)-ar
10951150
endif
10961151
endif
10971152

@@ -1409,7 +1464,7 @@ CTAGS_CMD = $(CTAGS_EXEC) $(CTAGS_OPTS) -auf
14091464

14101465
# If avrdude is installed separately, it can find its own config file
14111466
ifndef AVRDUDE
1412-
AVRDUDE = $(AVR_TOOLS_PATH)/avrdude
1467+
AVRDUDE = $(TOOLS_PATH)/avrdude
14131468
endif
14141469

14151470
# Default avrdude options
@@ -1752,7 +1807,7 @@ help:
17521807
make debug_init - start openocd gdb server\n\
17531808
make debug - connect to gdb target and begin debugging\n\
17541809
make size - show the size of the compiled output (relative to\n\
1755-
resources, if you have a patched avr-size).\n\
1810+
resources, if you have a patched $(TOOL_PREFIX)-size).\n\
17561811
make verify_size - verify that the size of the final file is less than\n\
17571812
the capacity of the micro controller.\n\
17581813
make symbol_sizes - generate a .sym file containing symbols and their\n\

Common.mk

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@ COMMON_INCLUDED = TRUE
55
# (directory and optional filename) exists
66
dir_if_exists = $(if $(wildcard $(1)$(2)),$(1))
77

8+
ifndef PARSE_BOARD
9+
# result = $(call READ_BOARD_TXT, 'boardname', 'parameter')
10+
PARSE_BOARD = $(shell if [ -f $(BOARDS_TXT) ]; \
11+
then \
12+
grep -Ev '^\#' $(BOARDS_TXT) | \
13+
grep -E "^[ \t]*$(1).$(2)=" | \
14+
cut -d = -f 2 | \
15+
cut -d : -f 2; \
16+
fi)
17+
endif
18+
819
# Run a shell script if it exists. Stops make on error.
920
runscript_if_exists = \
1021
$(if $(wildcard $(1)), \

HISTORY.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ I tried to give credit whenever possible. If I have missed anyone, kindly add it
2222
- New: Compatibility with deprecated pgmspace.h API can now be disabled since it sometimes causes bogus compiler warnings (issue #546)
2323
- New: Support Arduino ARM SAMD devices (Zero, M0 Pro, Feather M0). (https://github.com/tuna-f1sh)
2424
- New: Support Arduino ARM SAM devices (Due). (https://github.com/tuna-f1sh)
25+
- New: Moved the PARSE_BOARD macro to Common.mk and use only this to parse the boards.txt file. (https://github.com/wingunder)
26+
- New: Added the TOOL_PREFIX variable for setting up the executable tools centrally and generically. (https://github.com/wingunder)
2527

2628
### 1.6.0 (2017-07-11)
2729
- Fix: Allowed for SparkFun's weird usb pid/vid submenu shenanigans (issue #499). (https://github.com/sej7278)

0 commit comments

Comments
 (0)