initial commit
This commit is contained in:
commit
b44ce7bd77
2716 files changed
+559005
No files matched your search
+185
@@ -0,0 +1,185 @@
|
||||
# ---------------------------------------
|
||||
# Common make definition for all examples
|
||||
# ---------------------------------------
|
||||
|
||||
# upper helper function
|
||||
to_upper = $(subst a,A,$(subst b,B,$(subst c,C,$(subst d,D,$(subst e,E,$(subst f,F,$(subst g,G,$(subst h,H,$(subst i,I,$(subst j,J,$(subst k,K,$(subst l,L,$(subst m,M,$(subst n,N,$(subst o,O,$(subst p,P,$(subst q,Q,$(subst r,R,$(subst s,S,$(subst t,T,$(subst u,U,$(subst v,V,$(subst w,W,$(subst x,X,$(subst y,Y,$(subst z,Z,$(subst -,_,$(1))))))))))))))))))))))))))))
|
||||
|
||||
#-------------------------------------------------------------
|
||||
# Toolchain
|
||||
# Can be changed via TOOLCHAIN=gcc|clang or CC=arm-none-eabi-gcc|clang
|
||||
#-------------------------------------------------------------
|
||||
ifneq (,$(findstring clang,$(CC)))
|
||||
TOOLCHAIN = clang
|
||||
else ifneq (,$(findstring gcc,$(CC)))
|
||||
TOOLCHAIN = gcc
|
||||
endif
|
||||
|
||||
# Default to GCC
|
||||
ifndef TOOLCHAIN
|
||||
TOOLCHAIN = gcc
|
||||
endif
|
||||
|
||||
#-------------- TOP and EXAMPLE_PATH ------------
|
||||
|
||||
# Set TOP to be the path to get from the current directory (where make was invoked) to the top of the tree.
|
||||
# $(lastword $(MAKEFILE_LIST)) returns the name of this makefile relative to where make was invoked.
|
||||
THIS_MAKEFILE := $(lastword $(MAKEFILE_LIST))
|
||||
|
||||
# Set TOP to an absolute path
|
||||
TOP = $(abspath $(subst family_support.mk,../..,$(THIS_MAKEFILE)))
|
||||
|
||||
# Set EXAMPLE_PATH to the relative path from TOP to the current directory, ie examples/device/cdc_msc
|
||||
EXAMPLE_PATH = $(subst $(TOP)/,,$(abspath .))
|
||||
|
||||
#-------------- Linux/Windows ------------
|
||||
# Detect whether shell style is windows or not
|
||||
# https://stackoverflow.com/questions/714100/os-detecting-makefile/52062069#52062069
|
||||
ifeq '$(findstring ;,$(PATH))' ';'
|
||||
# PATH contains semicolon - so we're definitely on Windows.
|
||||
CMDEXE := 1
|
||||
|
||||
# makefile shell commands should use syntax for DOS CMD, not unix sh
|
||||
# Force DOS command shell on Windows.
|
||||
SHELL := cmd.exe
|
||||
endif
|
||||
|
||||
ifeq ($(CMDEXE),1)
|
||||
CP = copy
|
||||
RM = del
|
||||
MKDIR = mkdir
|
||||
PYTHON = python
|
||||
else
|
||||
CP = cp
|
||||
RM = rm
|
||||
MKDIR = mkdir
|
||||
PYTHON = python3
|
||||
endif
|
||||
|
||||
# Build directory
|
||||
BUILD := _build/$(BOARD)
|
||||
|
||||
PROJECT := $(notdir $(CURDIR))
|
||||
|
||||
#-------------------------------------------------------------
|
||||
# Family and Board
|
||||
#-------------------------------------------------------------
|
||||
BOARD_PATH := $(subst $(TOP)/,,$(wildcard $(TOP)/hw/bsp/*/boards/$(BOARD)))
|
||||
FAMILY := $(word 3, $(subst /, ,$(BOARD_PATH)))
|
||||
FAMILY_PATH = hw/bsp/$(FAMILY)
|
||||
|
||||
ifeq ($(BOARD_PATH),)
|
||||
$(info You must provide a BOARD parameter with 'BOARD=')
|
||||
$(error Invalid BOARD specified)
|
||||
endif
|
||||
|
||||
# Include Family and Board specific defs
|
||||
include $(TOP)/$(FAMILY_PATH)/family.mk
|
||||
SRC_C += $(subst $(TOP)/,,$(wildcard $(TOP)/$(FAMILY_PATH)/*.c))
|
||||
|
||||
#-------------------------------------------------------------
|
||||
# Source files and compiler flags
|
||||
#-------------------------------------------------------------
|
||||
# tinyusb makefile
|
||||
include $(TOP)/src/tinyusb.mk
|
||||
SRC_C += $(TINYUSB_SRC_C)
|
||||
|
||||
# Include all source C in family & board folder
|
||||
SRC_C += hw/bsp/board.c
|
||||
SRC_C += $(subst $(TOP)/,,$(wildcard $(TOP)/$(BOARD_PATH)/*.c))
|
||||
|
||||
INC += \
|
||||
$(TOP)/$(FAMILY_PATH) \
|
||||
$(TOP)/src \
|
||||
$(TOP)/hw \
|
||||
|
||||
BOARD_UPPER = $(call to_upper,$(BOARD))
|
||||
CFLAGS += -DBOARD_$(BOARD_UPPER)
|
||||
|
||||
ifdef CFLAGS_CLI
|
||||
CFLAGS += $(CFLAGS_CLI)
|
||||
endif
|
||||
|
||||
# use max3421 as host controller
|
||||
ifeq (${MAX3421_HOST},1)
|
||||
SRC_C += src/portable/analog/max3421/hcd_max3421.c
|
||||
CFLAGS += -DCFG_TUH_MAX3421=1
|
||||
endif
|
||||
|
||||
# Log level is mapped to TUSB DEBUG option
|
||||
ifneq ($(LOG),)
|
||||
CFLAGS += -DCFG_TUSB_DEBUG=$(LOG)
|
||||
endif
|
||||
|
||||
# Logger: default is uart, can be set to rtt or swo
|
||||
ifeq ($(LOGGER),rtt)
|
||||
CFLAGS += -DLOGGER_RTT
|
||||
#CFLAGS += -DSEGGER_RTT_MODE_DEFAULT=SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL
|
||||
INC += $(TOP)/lib/SEGGER_RTT/RTT
|
||||
SRC_C += lib/SEGGER_RTT/RTT/SEGGER_RTT.c
|
||||
endif
|
||||
ifeq ($(LOGGER),swo)
|
||||
CFLAGS += -DLOGGER_SWO
|
||||
else
|
||||
CFLAGS += -DLOGGER_UART
|
||||
endif
|
||||
|
||||
# CPU specific flags
|
||||
ifdef CPU_CORE
|
||||
include ${TOP}/examples/build_system/make/cpu/$(CPU_CORE).mk
|
||||
endif
|
||||
|
||||
# toolchain specific - select based on CPU architecture
|
||||
ifdef CPU_CORE
|
||||
ifneq (,$(filter cortex% arm%,$(CPU_CORE)))
|
||||
# ARM/Cortex architecture
|
||||
include ${TOP}/examples/build_system/make/toolchain/arm_$(TOOLCHAIN).mk
|
||||
else ifneq (,$(filter rv%,$(CPU_CORE)))
|
||||
# RISC-V architecture
|
||||
include ${TOP}/examples/build_system/make/toolchain/riscv_$(TOOLCHAIN).mk
|
||||
else
|
||||
$(error Unsupported CPU_CORE architecture: $(CPU_CORE). Must start with cortex, arm, or rv)
|
||||
endif
|
||||
else
|
||||
# Default to ARM if CPU_CORE not specified
|
||||
include ${TOP}/examples/build_system/make/toolchain/arm_$(TOOLCHAIN).mk
|
||||
endif
|
||||
|
||||
#---------------------- FreeRTOS -----------------------
|
||||
FREERTOS_SRC = lib/FreeRTOS-Kernel
|
||||
FREERTOS_PORTABLE_PATH = $(FREERTOS_SRC)/portable/GCC
|
||||
|
||||
ifeq ($(RTOS),freertos)
|
||||
SRC_C += \
|
||||
$(FREERTOS_SRC)/list.c \
|
||||
$(FREERTOS_SRC)/queue.c \
|
||||
$(FREERTOS_SRC)/tasks.c \
|
||||
$(FREERTOS_SRC)/timers.c \
|
||||
$(subst $(TOP)/,,$(wildcard $(TOP)/$(FREERTOS_PORTABLE_SRC)/*.c))
|
||||
|
||||
SRC_S += $(subst $(TOP)/,,$(wildcard $(TOP)/$(FREERTOS_PORTABLE_SRC)/*.s))
|
||||
INC += \
|
||||
$(TOP)/hw/bsp/$(FAMILY)/FreeRTOSConfig \
|
||||
$(TOP)/$(FREERTOS_SRC)/include \
|
||||
$(TOP)/$(FREERTOS_PORTABLE_SRC)
|
||||
|
||||
CFLAGS += -DCFG_TUSB_OS=OPT_OS_FREERTOS
|
||||
|
||||
# Suppress FreeRTOSConfig.h warnings
|
||||
CFLAGS += -Wno-error=redundant-decls
|
||||
|
||||
# Suppress FreeRTOS source warnings
|
||||
CFLAGS += -Wno-error=cast-qual
|
||||
CFLAGS += -Wno-error=null-dereference
|
||||
|
||||
# FreeRTOS (lto + Os) linker issue
|
||||
LDFLAGS += -Wl,--undefined=vTaskSwitchContext
|
||||
endif
|
||||
|
||||
#---------------- Helper ----------------
|
||||
check_defined = \
|
||||
$(strip $(foreach 1,$1, \
|
||||
$(call __check_defined,$1,$(strip $(value 2)))))
|
||||
__check_defined = \
|
||||
$(if $(value $1),, \
|
||||
$(error Undefined make flag: $1$(if $2, ($2))))
|
||||
Reference in new issue
Block a user