You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.8 KiB
Makefile
102 lines
2.8 KiB
Makefile
# VEXcode mkenv.mk 2019_06_06_01
|
|
|
|
# macros to help with windows paths that include spaces
|
|
sp :=
|
|
sp +=
|
|
qs = $(subst ?,$(sp),$1)
|
|
sq = $(subst $(sp),?,$1)
|
|
|
|
# default platform and build location
|
|
PLATFORM = vexv5
|
|
BUILD = build
|
|
|
|
# version for clang headers
|
|
ifneq ("$(origin HEADERS)", "command line")
|
|
HEADERS = 8.0.0
|
|
endif
|
|
|
|
# Project name passed from app
|
|
ifeq ("$(origin P)", "command line")
|
|
PROJECT = $(P)
|
|
else
|
|
PROJECT = $(notdir $(call sq,$(abspath ${CURDIR})))
|
|
endif
|
|
|
|
# Toolchain path passed from app
|
|
ifeq ("$(origin T)", "command line")
|
|
TOOLCHAIN = $(T)
|
|
endif
|
|
ifndef TOOLCHAIN
|
|
TOOLCHAIN = ${HOME}/sdk
|
|
endif
|
|
|
|
# Verbose flag passed from app
|
|
ifeq ("$(origin V)", "command line")
|
|
BUILD_VERBOSE=$(V)
|
|
endif
|
|
|
|
# allow verbose to be set by makefile if not set by app
|
|
ifndef BUILD_VERBOSE
|
|
ifndef VERBOSE
|
|
BUILD_VERBOSE = 0
|
|
else
|
|
BUILD_VERBOSE = $(VERBOSE)
|
|
endif
|
|
endif
|
|
|
|
# use verbose flag
|
|
ifeq ($(BUILD_VERBOSE),0)
|
|
Q = @
|
|
else
|
|
Q =
|
|
endif
|
|
|
|
# compile and link tools
|
|
CC = clang
|
|
CXX = clang
|
|
OBJCOPY = arm-none-eabi-objcopy
|
|
SIZE = arm-none-eabi-size
|
|
LINK = arm-none-eabi-ld
|
|
ARCH = arm-none-eabi-ar
|
|
ECHO = @echo
|
|
DEFINES = -DVexV5
|
|
|
|
# platform specific macros
|
|
ifeq ($(OS),Windows_NT)
|
|
$(info windows build for platform $(PLATFORM))
|
|
SHELL = cmd.exe
|
|
MKDIR = md "$(@D)" 2> nul || :
|
|
RMDIR = rmdir /S /Q
|
|
CLEAN = $(RMDIR) $(BUILD) 2> nul || :
|
|
else
|
|
$(info unix build for platform $(PLATFORM))
|
|
MKDIR = mkdir -p "$(@D)" 2> /dev/null || :
|
|
RMDIR = rm -rf
|
|
CLEAN = $(RMDIR) $(BUILD) 2> /dev/null || :
|
|
endif
|
|
|
|
# toolchain include and lib locations
|
|
TOOL_INC = -I"$(TOOLCHAIN)/$(PLATFORM)/clang/$(HEADERS)/include" -I"$(TOOLCHAIN)/$(PLATFORM)/gcc/include" -I"$(TOOLCHAIN)/$(PLATFORM)/gcc/include/c++/4.9.3" -I"$(TOOLCHAIN)/$(PLATFORM)/gcc/include/c++/4.9.3/arm-none-eabi/armv7-ar/thumb"
|
|
TOOL_LIB = -L"$(TOOLCHAIN)/$(PLATFORM)/gcc/libs"
|
|
|
|
# compiler flags
|
|
CFLAGS_CL = -target thumbv7-none-eabi -fshort-enums -Wno-unknown-attributes -U__INT32_TYPE__ -U__UINT32_TYPE__ -D__INT32_TYPE__=long -D__UINT32_TYPE__='unsigned long'
|
|
CFLAGS_V7 = -march=armv7-a -mfpu=neon -mfloat-abi=softfp
|
|
CFLAGS = ${CFLAGS_CL} ${CFLAGS_V7} -Os -Wall -Werror=return-type -ansi -std=gnu99 $(DEFINES)
|
|
CXX_FLAGS = ${CFLAGS_CL} ${CFLAGS_V7} -Os -Wall -Werror=return-type -fno-rtti -fno-threadsafe-statics -fno-exceptions -std=gnu++11 -ffunction-sections -fdata-sections $(DEFINES)
|
|
|
|
# linker flags
|
|
LNK_FLAGS = -nostdlib -T "$(TOOLCHAIN)/$(PLATFORM)/lscript.ld" -R "$(TOOLCHAIN)/$(PLATFORM)/stdlib_0.lib" -Map="$(BUILD)/$(PROJECT).map" --gc-section -L"$(TOOLCHAIN)/$(PLATFORM)" ${TOOL_LIB}
|
|
|
|
# future statuc library
|
|
PROJECTLIB = lib$(PROJECT)
|
|
ARCH_FLAGS = rcs
|
|
|
|
# libraries
|
|
LIBS = --start-group -lv5rt -lstdc++ -lc -lm -lgcc --end-group
|
|
|
|
# include file paths
|
|
INC += $(addprefix -I, ${INC_F})
|
|
INC += -I"$(TOOLCHAIN)/$(PLATFORM)/include"
|
|
INC += ${TOOL_INC}
|