168 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
# Makefile for GRBL port to LPC17xx
 | 
						|
#
 | 
						|
# Copyright 2017 Todd Fleming
 | 
						|
#
 | 
						|
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
						|
# of this software and associated documentation files (the "Software"), to deal
 | 
						|
# in the Software without restriction, including without limitation the rights
 | 
						|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
						|
# copies of the Software, and to permit persons to whom the Software is
 | 
						|
# furnished to do so, subject to the following conditions:
 | 
						|
#
 | 
						|
# The above copyright notice and this permission notice shall be included in
 | 
						|
# all copies or substantial portions of the Software.
 | 
						|
#
 | 
						|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
						|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
						|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
						|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
						|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
						|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 | 
						|
# IN THE SOFTWARE.
 | 
						|
 | 
						|
PROJECT = grbl
 | 
						|
 | 
						|
INCLUDES =                                        \
 | 
						|
    -I CMSIS_5/CMSIS/Core/Include                 \
 | 
						|
    -I CMSIS_5/CMSIS/Driver/Include               \
 | 
						|
    -I CMSIS_5/Device/ARM/ARMCM3/Include          \
 | 
						|
    -I grbl                                       \
 | 
						|
    -I lpc17xx                                    \
 | 
						|
    -I smoother                                   \
 | 
						|
    -I VCOM_lib                                   \
 | 
						|
 | 
						|
# Compile all .c and .cpp files in these directories
 | 
						|
# Hack: .c files are compiled as if they were c++.
 | 
						|
SRC_DIRS =          \
 | 
						|
	grbl            \
 | 
						|
    smoother        \
 | 
						|
    VCOM_lib        \
 | 
						|
 | 
						|
# Compile all .c files in these directories, except ones on the exclude list.
 | 
						|
# These files get extra -Wno-* flags to reduce spam.
 | 
						|
CMSIS_SRC_DIRS =                                  \
 | 
						|
    NXP_LPC/LPC1700/CMSIS/Driver                  \
 | 
						|
    lpc17xx                                       \
 | 
						|
 | 
						|
# These error out because we haven't set up the #defines they need.
 | 
						|
# To include one, remove it from this list and add the appropriate
 | 
						|
# #defines to RTE_Components.h
 | 
						|
CMSIS_EXCLUDE_OBJECTS =             \
 | 
						|
    build/cmsis/CAN_LPC17xx.o       \
 | 
						|
    build/cmsis/EMAC_LPC17xx.o      \
 | 
						|
    build/cmsis/I2S_LPC17xx.o       \
 | 
						|
    build/cmsis/MCI_LPC177x_8x.o    \
 | 
						|
    build/cmsis/OTG_LPC17xx.o       \
 | 
						|
    build/cmsis/PIN_LPC177x_8x.o    \
 | 
						|
    build/cmsis/SPI_LPC17xx.o       \
 | 
						|
    build/cmsis/USBD_LPC17xx.o      \
 | 
						|
    build/cmsis/USBH_LPC17xx.o      \
 | 
						|
 | 
						|
LINKER_SCRIPT = lpc17xx/lpc1769.ld
 | 
						|
 | 
						|
AS      = arm-none-eabi-as
 | 
						|
CC      = arm-none-eabi-gcc
 | 
						|
CXX     = arm-none-eabi-g++
 | 
						|
LD      = arm-none-eabi-gcc
 | 
						|
OBJCOPY = arm-none-eabi-objcopy
 | 
						|
OBJDUMP = arm-none-eabi-objdump
 | 
						|
SIZE    = arm-none-eabi-size 
 | 
						|
 | 
						|
CFLAGS =                                \
 | 
						|
	-DCORE_M3                           \
 | 
						|
	-DLPC175x_6x                        \
 | 
						|
    -c                                  \
 | 
						|
    -fdata-sections                     \
 | 
						|
    -ffunction-sections                 \
 | 
						|
    -fmessage-length=0                  \
 | 
						|
    -fno-builtin                        \
 | 
						|
    -fno-delete-null-pointer-checks     \
 | 
						|
    -fno-exceptions                     \
 | 
						|
    -fomit-frame-pointer                \
 | 
						|
    -funsigned-char                     \
 | 
						|
    -mcpu=cortex-m3                     \
 | 
						|
    -MMD                                \
 | 
						|
    -MP                                 \
 | 
						|
    -mthumb                             \
 | 
						|
    -Os                                 \
 | 
						|
    -Wall                               \
 | 
						|
    -Wextra                             \
 | 
						|
 | 
						|
# Disable warnings in CMSIS
 | 
						|
CMSIS_CFLAGS = $(CFLAGS)                \
 | 
						|
	-Wno-incompatible-pointer-types     \
 | 
						|
	-Wno-maybe-uninitialized            \
 | 
						|
	-Wno-sign-compare                   \
 | 
						|
	-Wno-strict-aliasing                \
 | 
						|
	-Wno-switch                         \
 | 
						|
	-Wno-unused-but-set-variable        \
 | 
						|
	-Wno-unused-variable                \
 | 
						|
    -Wno-int-conversion                 \
 | 
						|
    -Wno-missing-field-initializers     \
 | 
						|
    -Wno-unused-function                \
 | 
						|
    -Wno-unused-parameter               \
 | 
						|
 | 
						|
# Disable warnings in .c files compiled as C++
 | 
						|
C_AS_CPP_CFLAGS = $(CFLAGS)             \
 | 
						|
    -Wno-unused-parameter               \
 | 
						|
 | 
						|
CXXFLAGS = $(CFLAGS)                    \
 | 
						|
    -fno-rtti                           \
 | 
						|
    -std=gnu++14                        \
 | 
						|
 | 
						|
LIBS = -Wl,--start-group -lgcc -lc -lm -Wl,--end-group
 | 
						|
 | 
						|
VPATH = $(SRC_DIRS) $(CMSIS_SRC_DIRS)
 | 
						|
 | 
						|
GET_OBJECTS = $(addprefix $(1),$(addsuffix .o,$(basename $(notdir $(wildcard $(foreach dir,$(2),$(dir)/*.c) $(foreach dir,$(2),$(dir)/*.cpp))))))
 | 
						|
 | 
						|
SRC_OBJECTS = $(call GET_OBJECTS,build/src/,$(SRC_DIRS))
 | 
						|
 | 
						|
CMSIS_OBJECTS = $(filter-out $(CMSIS_EXCLUDE_OBJECTS),$(call GET_OBJECTS,build/cmsis/,$(CMSIS_SRC_DIRS)))
 | 
						|
 | 
						|
ifeq ($(shell echo $$OS),$$OS)
 | 
						|
    MAKEDIR = @if not exist "$(1)" mkdir "$(1)"
 | 
						|
    RM = @if exist "$(1)" rmdir /S /Q "$(1)"
 | 
						|
else
 | 
						|
    MAKEDIR = $(SHELL) -c "mkdir -p \"$(1)\""
 | 
						|
    RM = $(SHELL) -c "rm -rf \"$(1)\""
 | 
						|
endif
 | 
						|
 | 
						|
build/cmsis/%.o : %.c
 | 
						|
	$(call MAKEDIR,build)
 | 
						|
	$(call MAKEDIR,build/cmsis)
 | 
						|
	$(CC) $(CMSIS_CFLAGS) $(INCLUDES) -o $@ $<
 | 
						|
 | 
						|
# hack: compile .c as c++
 | 
						|
build/src/%.o : %.c
 | 
						|
	$(call MAKEDIR,build)
 | 
						|
	$(call MAKEDIR,build/src)
 | 
						|
	$(CXX) $(CXXFLAGS) $(C_AS_CPP_CFLAGS) $(INCLUDES) -o $@ $<
 | 
						|
 | 
						|
build/src/%.o : %.cpp
 | 
						|
	$(call MAKEDIR,build)
 | 
						|
	$(call MAKEDIR,build/src)
 | 
						|
	$(CXX) $(CXXFLAGS) $(INCLUDES) -o $@ $<
 | 
						|
 | 
						|
.PHONY: default
 | 
						|
default: build/$(PROJECT).hex build/$(PROJECT).bin
 | 
						|
 | 
						|
build/$(PROJECT).elf: $(SRC_OBJECTS) $(CMSIS_OBJECTS) $(LINKER_SCRIPT)
 | 
						|
	$(LD) -mcpu=cortex-m3 -mthumb -specs=nosys.specs -T$(filter %.ld, $^) -o $@ $(filter %.o, $^) $(LIBS)
 | 
						|
 | 
						|
build/$(PROJECT).bin : build/$(PROJECT).elf
 | 
						|
	$(OBJCOPY) -O binary $^ $@
 | 
						|
 | 
						|
build/$(PROJECT).hex : build/$(PROJECT).elf
 | 
						|
	$(OBJCOPY) -O ihex $^ $@
 | 
						|
 | 
						|
.PHONY: flash
 | 
						|
flash: build/$(PROJECT).hex
 | 
						|
	fm COM(7, 115200) DEVICE(LPC1769, 0.000000, 0) HARDWARE(BOOTEXEC, 50, 100) ERASEUSED(build\$(PROJECT).hex, PROTECTISP) HEXFILE(build\$(PROJECT).hex, NOCHECKSUMS, NOFILL, PROTECTISP)
 | 
						|
 | 
						|
.PHONY: clean
 | 
						|
clean:
 | 
						|
	$(call RM,build)
 | 
						|
 | 
						|
-include $(wildcard build/src/*.d build/cmsis/*.d)
 |