Makefile 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. # default energia software directory, check software exists
  2. ifndef ENERGIADIR
  3. ENERGIADIR := $(firstword $(wildcard ~/energia /usr/share/energia /opt/energia))
  4. endif
  5. ifeq "$(wildcard $(ENERGIADIR)/hardware/msp430/boards.txt)" ""
  6. $(error ENERGIADIR is not set correctly; energia software not found)
  7. endif
  8. # default versions
  9. ARDUINOCONST ?= 101
  10. ENERGIACONST ?= 17
  11. TOOLDIR := $(ENERGIADIR)/hardware/tools/lm4f/bin
  12. COMPILER := $(TOOLDIR)/arm-none-eabi
  13. UPLOADER := $(TOOLDIR)/cc3200prog
  14. BOARD := cc3200
  15. ENERGIABOARD := lpcc3200
  16. SERIALDEV := /dev/serial/by-id/usb-FTDI_USB__-__JTAG_SWD_cc3101-if01-port0
  17. # Compiled files output
  18. BUILDDIR := $(CURDIR)/build
  19. SRCDIR := $(CURDIR)
  20. # Project name
  21. NAME := tracker
  22. ### LOADING BOARD PARAMETERS
  23. BOARDS_FILE := $(ENERGIADIR)/hardware/$(BOARD)/boards.txt
  24. BOARD_BUILD_MCU := $(shell sed -ne "s/$(ENERGIABOARD).build.mcu=\(.*\)/\1/p" $(BOARDS_FILE))
  25. BOARD_BUILD_FCPU := $(shell sed -ne "s/$(ENERGIABOARD).build.f_cpu=\(.*\)/\1/p" $(BOARDS_FILE))
  26. BOARD_BUILD_VARIANT := $(shell sed -ne "s/$(ENERGIABOARD).build.variant=\(.*\)/\1/p" $(BOARDS_FILE))
  27. BOARD_UPLOAD_SPEED := $(shell sed -ne "s/$(ENERGIABOARD).upload.speed=\(.*\)/\1/p" $(BOARDS_FILE))
  28. BOARD_UPLOAD_PROTOCOL := $(shell sed -ne "s/$(ENERGIABOARD).upload.protocol=\(.*\)/\1/p" $(BOARDS_FILE))
  29. BOARD_FLASH_SIZE := $(shell sed -ne "s/$(ENERGIABOARD).upload.maximum_size=\(.*\)/\1/p" $(BOARDS_FILE))
  30. BOARD_LDSCRIPT := $(shell sed -ne "s/$(ENERGIABOARD).ldscript=\(.*\)/\1/p" $(BOARDS_FILE))
  31. ### DIRECTORY STRUCTURE
  32. ENERGIALIB := $(ENERGIADIR)/hardware/$(BOARD)/libraries
  33. VARIANTLIB := $(ENERGIADIR)/hardware/$(BOARD)/variants/$(BOARD_BUILD_VARIANT)
  34. COREDIR := $(ENERGIADIR)/hardware/$(BOARD)/cores/$(BOARD)
  35. CORELIB := $(BUILDDIR)/core.a
  36. SOURCES := $(wildcard *.c *.cc *.cpp)
  37. # External libraries
  38. LIBRARIES := $(foreach lib, $(filter $(notdir $(wildcard $(ENERGIALIB)/*)), \
  39. $(shell sed -ne "s/^ *\# *include *[<\"]\(.*\)\.h[>\"]/\1/p" $(SOURCES))), $(ENERGIALIB)/$(lib))
  40. LIBRARIES += $(foreach lib, $(LIBRARIES), $(lib)/utility)
  41. LIBDIRS := $(COREDIR) $(COREDIR)/driverlib $(CORELIB)/avr # This is corelib
  42. CORELIBSOURCES := $(foreach dir, $(LIBDIRS), $(wildcard $(addprefix $(dir)/, *.c *.cpp)))
  43. LIBSOURCES := $(foreach dir, $(LIBRARIES), $(wildcard $(addprefix $(dir)/, *.c *.cpp)))
  44. SRCOBJS = $(addprefix $(BUILDDIR)/, $(notdir $(addsuffix .o, $(SOURCES) $(LIBSOURCES))))
  45. LIBOBJS = $(addprefix $(BUILDDIR)/, $(notdir $(addsuffix .o, $(CORELIBSOURCES)))) # This is corelib
  46. OBJECTS = $(addprefix $(BUILDDIR)/, $(notdir $(addsuffix .o, $(SOURCES) $(LIBSOURCES))))
  47. $(info OBJS $(OBJECTS))
  48. VPATH = $(LIBRARIES) $(LIBDIRS) $(SRCDIR)
  49. $(info VPATH $(VPATH))
  50. BIN := $(BUILDDIR)/$(NAME).bin
  51. EFI := $(BUILDDIR)/$(NAME).efi
  52. ### COMPILER OPTIONS
  53. CC := $(COMPILER)-gcc
  54. CXX := $(COMPILER)-g++
  55. LD := $(COMPILER)-ld
  56. AR := $(COMPILER)-ar
  57. OBJCOPY := $(COMPILER)-objcopy
  58. GDB := $(COMPILER)-gdb
  59. SIZE := $(COMPILER)-size
  60. CFLAGS := -c -Os -Wall -ffunction-sections -fdata-sections -mthumb
  61. CFLAGS += -mcpu=$(BOARD_BUILD_MCU) -DF_CPU=$(BOARD_BUILD_FCPU) -MMD -DARDUINO=$(ARDUINOCONST) -DENERGIA=$(ENERGIACONST)
  62. CXXFLAGS := -c -Os -Wall -fno-rtti -fno-exceptions -ffunction-sections -fdata-sections -mthumb
  63. CXXFLAGS += -mcpu=$(BOARD_BUILD_MCU) -DF_CPU=$(BOARD_BUILD_FCPU) -MMD -DARDUINO=$(ARDUINOCONST) -DENERGIA=$(ENERGIACONST)
  64. LINKFLAGS := -Os -nostartfiles -nostdlib -Wl,--gc-sections -T$(COREDIR)/$(BOARD_LDSCRIPT) -Wl,--entry=ResetISR -mthumb -mcpu=$(BOARD_BUILD_MCU)
  65. ### INCLUDES AND LIBRARIES
  66. INCLUDES := -I$(COREDIR) -I$(VARIANTLIB) -I$(ENERGIALIB) $(addprefix -I, $(LIBRARIES))
  67. # default rule
  68. .DEFAULT_GOAL := all
  69. #_______________________________________________________________________________
  70. # RULES
  71. .PHONY: all binary upload clean boards monitor size upload_monitor
  72. all: binary
  73. binary: $(BIN)
  74. upload: binary size
  75. @echo "Uploading to board..."
  76. cd $(TOOLDIR) && $(UPLOADER) $(SERIALDEV) $(BIN)
  77. clean:
  78. rm -irf $(BUILDDIR)
  79. boards:
  80. @echo Available values for BOARD:
  81. @sed -ne '/^#/d; /^[^.]\+\.name=/p' $(BOARDS_FILE) | \
  82. sed -e 's/\([^.]\+\)\.name=\(.*\)/\1 \2/' \
  83. -e 's/\(.\{14\}\) *\(.*\)/\1 \2/'
  84. monitor:
  85. @echo Escape typing ~.
  86. cu -s 9600 -l $(SERIALDEV)
  87. size: $(EFI)
  88. $(info Binary sketch size: $(word 7, $(shell $(SIZE) $(EFI))) bytes (of a $(BOARD_FLASH_SIZE) byte maximum))
  89. upload_monitor: upload monitor
  90. # building the target
  91. $(BIN): $(EFI)
  92. @mkdir -p $(BUILDDIR)
  93. $(OBJCOPY) -O binary $< $@
  94. $(EFI): $(CORELIB) $(OBJECTS)
  95. @mkdir -p $(BUILDDIR)
  96. $(CXX) $(LINKFLAGS) $(SRCOBJS) $< -L$(BUILDDIR) -lm -lc -lgcc -o $@
  97. $(CORELIB): $(LIBOBJS)
  98. @mkdir -p $(BUILDDIR)
  99. $(AR) rcs $@ $(LIBOBJS)
  100. $(BUILDDIR)/%.c.o: %.c
  101. @mkdir -p $(BUILDDIR)
  102. $(CC) $(CFLAGS) $(INCLUDES) $< -o $@
  103. $(BUILDDIR)/%.cpp.o: %.cpp
  104. @mkdir -p $(BUILDDIR)
  105. $(CXX) $(CXXFLAGS) $(INCLUDES) $< -o $@