Makefile 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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. LIBDIRS := $(COREDIR) $(COREDIR)/driverlib $(COREDIR)/avr
  38. LIBSOURCES := $(foreach dir, $(LIBDIRS), $(wildcard $(addprefix $(dir)/, *.c *.cpp)))
  39. SRCOBJS = $(addprefix $(BUILDDIR)/, $(notdir $(addsuffix .o, $(SOURCES))))
  40. LIBOBJS = $(addprefix $(BUILDDIR)/, $(notdir $(addsuffix .o, $(LIBSOURCES))))
  41. OBJECTS = $(addprefix $(BUILDDIR)/, $(notdir $(addsuffix .o, $(SOURCES) $(LIBSOURCES))))
  42. VPATH = $(LIBDIRS) $(SRCDIR)
  43. BIN := $(BUILDDIR)/$(NAME).bin
  44. EFI := $(BUILDDIR)/$(NAME).efi
  45. ### COMPILER OPTIONS
  46. CC := $(COMPILER)-gcc
  47. CXX := $(COMPILER)-g++
  48. LD := $(COMPILER)-ld
  49. AR := $(COMPILER)-ar
  50. OBJCOPY := $(COMPILER)-objcopy
  51. GDB := $(COMPILER)-gdb
  52. SIZE := $(COMPILER)-size
  53. CFLAGS := -c -Os -Wall -ffunction-sections -fdata-sections -mthumb
  54. CFLAGS += -mcpu=$(BOARD_BUILD_MCU) -DF_CPU=$(BOARD_BUILD_FCPU) -MMD -DARDUINO=$(ARDUINOCONST) -DENERGIA=$(ENERGIACONST)
  55. CXXFLAGS := -c -Os -Wall -fno-rtti -fno-exceptions -ffunction-sections -fdata-sections -mthumb
  56. CXXFLAGS += -mcpu=$(BOARD_BUILD_MCU) -DF_CPU=$(BOARD_BUILD_FCPU) -MMD -DARDUINO=$(ARDUINOCONST) -DENERGIA=$(ENERGIACONST)
  57. LINKFLAGS := -Os -nostartfiles -nostdlib -Wl,--gc-sections -T$(COREDIR)/$(BOARD_LDSCRIPT) -Wl,--entry=ResetISR -mthumb -mcpu=$(BOARD_BUILD_MCU)
  58. ### INCLUDES AND LIBRARIES
  59. INCLUDES := -I$(COREDIR) -I$(VARIANTLIB) -I$(ENERGIALIB)
  60. # default rule
  61. .DEFAULT_GOAL := all
  62. #_______________________________________________________________________________
  63. # RULES
  64. .PHONY: all binary upload clean boards monitor size
  65. all: binary
  66. binary: $(BIN)
  67. upload: binary size
  68. @echo "Uploading to board..."
  69. cd $(TOOLDIR) && $(UPLOADER) $(SERIALDEV) $(BIN)
  70. clean:
  71. rm -irf $(BUILDDIR)
  72. boards:
  73. @echo Available values for BOARD:
  74. @sed -ne '/^#/d; /^[^.]\+\.name=/p' $(BOARDS_FILE) | \
  75. sed -e 's/\([^.]\+\)\.name=\(.*\)/\1 \2/' \
  76. -e 's/\(.\{14\}\) *\(.*\)/\1 \2/'
  77. monitor:
  78. @echo Escape typing ~.
  79. cu -s 9600 -l $(SERIALDEV)
  80. size: $(EFI)
  81. $(info Binary sketch size: $(word 7, $(shell $(SIZE) $(EFI))) bytes (of a $(BOARD_FLASH_SIZE) byte maximum))
  82. # building the target
  83. $(BIN): $(EFI)
  84. @mkdir -p $(BUILDDIR)
  85. $(OBJCOPY) -O binary $< $@
  86. $(EFI): $(CORELIB)
  87. @mkdir -p $(BUILDDIR)
  88. $(CXX) $(LINKFLAGS) $(SRCOBJS) $< -L$(BUILDDIR) -lm -lc -lgcc -o $@
  89. $(CORELIB): $(OBJECTS)
  90. @mkdir -p $(BUILDDIR)
  91. $(AR) rcs $@ $(LIBOBJS)
  92. $(BUILDDIR)/%.c.o: %.c
  93. @mkdir -p $(BUILDDIR)
  94. $(CC) $(CFLAGS) $(INCLUDES) $< -o $@
  95. $(BUILDDIR)/%.cpp.o: %.cpp
  96. @mkdir -p $(BUILDDIR)
  97. $(CXX) $(CXXFLAGS) $(INCLUDES) $< -o $@