| 
									
										
										
										
											2022-10-27 22:56:31 +00:00
										 |  |  | # ---------------------------------------
 | 
					
						
							|  |  |  | # Common make definition for all examples
 | 
					
						
							|  |  |  | # ---------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-06 13:25:56 +07:00
										 |  |  | #-------------- TOP and CURRENT_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)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # strip off /tools/top.mk to get for example ../../..
 | 
					
						
							|  |  |  | # and Set TOP to an absolute path
 | 
					
						
							|  |  |  | TOP = $(abspath $(subst make.mk,../..,$(THIS_MAKEFILE))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Set CURRENT_PATH to the relative path from TOP to the current directory, ie examples/device/cdc_msc_freertos
 | 
					
						
							|  |  |  | CURRENT_PATH = $(subst $(TOP)/,,$(abspath .)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # 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
 | 
					
						
							|  |  |  | # Unfortunately, SHELL may point to sh or bash, which can't accept DOS syntax.
 | 
					
						
							|  |  |  | # We can't just use sh, because while sh and/or bash shell may be available,
 | 
					
						
							|  |  |  | # many Windows environments won't have utilities like realpath used below, so...
 | 
					
						
							|  |  |  | # Force DOS command shell on Windows.
 | 
					
						
							|  |  |  | SHELL := cmd.exe | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-27 22:56:31 +00:00
										 |  |  | # Build directory
 | 
					
						
							|  |  |  | BUILD := _build | 
					
						
							|  |  |  | PROJECT := $(notdir $(CURDIR)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Handy check parameter function
 | 
					
						
							|  |  |  | 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)))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #-------------- Fuzz harness compiler  ------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-28 20:37:12 +00:00
										 |  |  | CC ?= clang | 
					
						
							|  |  |  | CXX ?= clang++ | 
					
						
							|  |  |  | GDB ?= gdb | 
					
						
							| 
									
										
										
										
											2022-10-27 22:56:31 +00:00
										 |  |  | OBJCOPY = objcopy | 
					
						
							|  |  |  | SIZE = size | 
					
						
							|  |  |  | MKDIR = mkdir | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifeq ($(CMDEXE),1) | 
					
						
							|  |  |  |   CP = copy | 
					
						
							|  |  |  |   RM = del | 
					
						
							|  |  |  |   PYTHON = python | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |   SED = sed | 
					
						
							|  |  |  |   CP = cp | 
					
						
							|  |  |  |   RM = rm | 
					
						
							|  |  |  |   PYTHON = python3 | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-28 20:37:12 +00:00
										 |  |  | #-------------- Fuzz harness flags ------------
 | 
					
						
							|  |  |  | COVERAGE_FLAGS ?= -fsanitize-coverage=trace-pc-guard | 
					
						
							|  |  |  | SANITIZER_FLAGS ?= -fsanitize=fuzzer \
 | 
					
						
							|  |  |  |                    -fsanitize=address | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CFLAGS += $(COVERAGE_FLAGS) $(SANITIZER_FLAGS) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-27 22:56:31 +00:00
										 |  |  | #-------------- Source files and compiler flags --------------
 | 
					
						
							| 
									
										
										
										
											2022-12-08 10:39:54 +07:00
										 |  |  | INC += $(TOP)/test | 
					
						
							| 
									
										
										
										
											2022-10-27 22:56:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Compiler Flags
 | 
					
						
							|  |  |  | CFLAGS += \
 | 
					
						
							|  |  |  |   -ggdb \
 | 
					
						
							|  |  |  |   -fdata-sections \
 | 
					
						
							|  |  |  |   -ffunction-sections \
 | 
					
						
							|  |  |  |   -fno-strict-aliasing \
 | 
					
						
							|  |  |  |   -Wall \
 | 
					
						
							|  |  |  |   -Wextra \
 | 
					
						
							|  |  |  |   -Werror \
 | 
					
						
							|  |  |  |   -Wfatal-errors \
 | 
					
						
							|  |  |  |   -Wdouble-promotion \
 | 
					
						
							|  |  |  |   -Wstrict-prototypes \
 | 
					
						
							|  |  |  |   -Wstrict-overflow \
 | 
					
						
							|  |  |  |   -Werror-implicit-function-declaration \
 | 
					
						
							|  |  |  |   -Wfloat-equal \
 | 
					
						
							|  |  |  |   -Wundef \
 | 
					
						
							|  |  |  |   -Wshadow \
 | 
					
						
							|  |  |  |   -Wwrite-strings \
 | 
					
						
							|  |  |  |   -Wsign-compare \
 | 
					
						
							|  |  |  |   -Wmissing-format-attribute \
 | 
					
						
							|  |  |  |   -Wunreachable-code \
 | 
					
						
							|  |  |  |   -Wcast-align \
 | 
					
						
							|  |  |  |   -Wcast-qual \
 | 
					
						
							|  |  |  |   -Wnull-dereference \
 | 
					
						
							|  |  |  |   -Wuninitialized \
 | 
					
						
							|  |  |  |   -Wunused \
 | 
					
						
							| 
									
										
										
										
											2022-11-16 02:24:59 +00:00
										 |  |  |   -Wredundant-decls \
 | 
					
						
							|  |  |  |   -O1 | 
					
						
							| 
									
										
										
										
											2022-10-27 22:56:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | CFLAGS += \
 | 
					
						
							| 
									
										
										
										
											2022-12-08 10:30:22 +07:00
										 |  |  | 	-Wno-error=unreachable-code \
 | 
					
						
							| 
									
										
										
										
											2022-10-27 22:56:31 +00:00
										 |  |  |   -DOPT_MCU_FUZZ=1 \
 | 
					
						
							| 
									
										
										
										
											2023-01-20 15:40:32 -08:00
										 |  |  |   -DCFG_TUSB_MCU=OPT_MCU_FUZZ \
 | 
					
						
							| 
									
										
										
										
											2023-02-22 11:47:09 +07:00
										 |  |  |   -D_FUZZ | 
					
						
							| 
									
										
										
										
											2022-10-27 22:56:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | CXXFLAGS += \
 | 
					
						
							|  |  |  |   -xc++ \
 | 
					
						
							|  |  |  |   -Wno-c++11-narrowing \
 | 
					
						
							|  |  |  |   -fno-implicit-templates | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # conversion is too strict for most mcu driver, may be disable sign/int/arith-conversion
 | 
					
						
							|  |  |  | #  -Wconversion
 | 
					
						
							| 
									
										
										
										
											2023-03-17 16:12:49 +07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-27 22:56:31 +00:00
										 |  |  | # Debugging/Optimization
 | 
					
						
							|  |  |  | ifeq ($(DEBUG), 1) | 
					
						
							|  |  |  |   CFLAGS += -Og | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |   CFLAGS += $(CFLAGS_OPTIMIZED) | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Log level is mapped to TUSB DEBUG option
 | 
					
						
							|  |  |  | ifneq ($(LOG),) | 
					
						
							|  |  |  |   CMAKE_DEFSYM +=	-DLOG=$(LOG) | 
					
						
							|  |  |  |   CFLAGS += -DCFG_TUSB_DEBUG=$(LOG) | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Logger: default is uart, can be set to rtt or swo
 | 
					
						
							|  |  |  | ifneq ($(LOGGER),) | 
					
						
							|  |  |  | 	CMAKE_DEFSYM +=	-DLOGGER=$(LOGGER) | 
					
						
							|  |  |  | endif |