Files
picovga-RGsB/Makefile.inc
2021-06-10 19:07:49 +02:00

488 lines
16 KiB
Makefile

# Includes from main Makefile
##############################################################################
# Input files
# ASM source files
ifneq ($(findstring -DPICO_NO_FLASH=0, $(DEFINE)),) # boot loader only if flash
ASRC += ../_boot2/boot2_w25q080_bin.S
endif
# ASM sdk
ASRC += ../_sdk/bit_ops_aeabi.S
ASRC += ../_sdk/crt0.S
ASRC += ../_sdk/divider.S
ASRC += ../_sdk/divider0.S
ASRC += ../_sdk/double_aeabi.S
ASRC += ../_sdk/double_v1_rom_shim.S
ASRC += ../_sdk/float_aeabi.S
ASRC += ../_sdk/float_v1_rom_shim.S
ASRC += ../_sdk/irq_handler_chain.S
ASRC += ../_sdk/mem_ops_aeabi.S
ASRC += ../_sdk/pico_int64_ops_aeabi.S
# ASM picovga
ASRC += ../_picovga/render/vga_atext.S
ASRC += ../_picovga/render/vga_attrib8.S
ASRC += ../_picovga/render/vga_color.S
ASRC += ../_picovga/render/vga_ctext.S
ASRC += ../_picovga/render/vga_dtext.S
ASRC += ../_picovga/render/vga_fastsprite.S
ASRC += ../_picovga/render/vga_ftext.S
ASRC += ../_picovga/render/vga_graph1.S
ASRC += ../_picovga/render/vga_graph2.S
ASRC += ../_picovga/render/vga_graph4.S
ASRC += ../_picovga/render/vga_graph8.S
ASRC += ../_picovga/render/vga_graph8mat.S
ASRC += ../_picovga/render/vga_graph8persp.S
ASRC += ../_picovga/render/vga_gtext.S
ASRC += ../_picovga/render/vga_level.S
ASRC += ../_picovga/render/vga_levelgrad.S
ASRC += ../_picovga/render/vga_mtext.S
ASRC += ../_picovga/render/vga_oscil.S
ASRC += ../_picovga/render/vga_oscline.S
ASRC += ../_picovga/render/vga_persp.S
ASRC += ../_picovga/render/vga_persp2.S
ASRC += ../_picovga/render/vga_plane2.S
ASRC += ../_picovga/render/vga_progress.S
ASRC += ../_picovga/render/vga_sprite.S
ASRC += ../_picovga/render/vga_tile.S
ASRC += ../_picovga/render/vga_tile2.S
ASRC += ../_picovga/render/vga_tilepersp.S
ASRC += ../_picovga/render/vga_tilepersp15.S
ASRC += ../_picovga/render/vga_tilepersp2.S
ASRC += ../_picovga/render/vga_tilepersp3.S
ASRC += ../_picovga/render/vga_tilepersp4.S
ASRC += ../_picovga/vga_blitkey.S
ASRC += ../_picovga/vga_render.S
# C sdk
CSRC += ../_sdk/adc.c
CSRC += ../_sdk/binary_info.c
CSRC += ../_sdk/bootrom.c
CSRC += ../_sdk/claim.c
CSRC += ../_sdk/clocks.c
CSRC += ../_sdk/critical_section.c
CSRC += ../_sdk/datetime.c
CSRC += ../_sdk/dma.c
CSRC += ../_sdk/double_init_rom.c
CSRC += ../_sdk/double_math.c
CSRC += ../_sdk/flash.c
CSRC += ../_sdk/float_init_rom.c
CSRC += ../_sdk/float_math.c
CSRC += ../_sdk/gpio.c
CSRC += ../_sdk/i2c.c
CSRC += ../_sdk/interp.c
CSRC += ../_sdk/irq.c
CSRC += ../_sdk/lock_core.c
CSRC += ../_sdk/mem_ops.c
CSRC += ../_sdk/multicore.c
CSRC += ../_sdk/mutex.c
CSRC += ../_sdk/pheap.c
CSRC += ../_sdk/pico_malloc.c
CSRC += ../_sdk/pio.c
CSRC += ../_sdk/platform.c
CSRC += ../_sdk/pll.c
CSRC += ../_sdk/printf.c
CSRC += ../_sdk/queue.c
CSRC += ../_sdk/rp2040_usb_device_enumeration.c
CSRC += ../_sdk/rtc.c
CSRC += ../_sdk/runtime.c
CSRC += ../_sdk/sem.c
CSRC += ../_sdk/spi.c
CSRC += ../_sdk/stdio.c
CSRC += ../_sdk/stdio_semihosting.c
CSRC += ../_sdk/stdio_uart.c
CSRC += ../_sdk/stdio_usb.c
CSRC += ../_sdk/stdio_usb_descriptors.c
CSRC += ../_sdk/stdlib.c
CSRC += ../_sdk/sync.c
CSRC += ../_sdk/time.c
CSRC += ../_sdk/timeout_helper.c
CSRC += ../_sdk/timer.c
CSRC += ../_sdk/uart.c
CSRC += ../_sdk/unique_id.c
CSRC += ../_sdk/vreg.c
CSRC += ../_sdk/watchdog.c
CSRC += ../_sdk/xosc.c
# C tinyusb
CSRC += ../_tinyusb/bsp/raspberry_pi_pico/board_raspberry_pi_pico.c
CSRC += ../_tinyusb/class/audio/audio_device.c
CSRC += ../_tinyusb/class/bth/bth_device.c
CSRC += ../_tinyusb/class/cdc/cdc_device.c
CSRC += ../_tinyusb/class/cdc/cdc_host.c
CSRC += ../_tinyusb/class/cdc/cdc_rndis_host.c
CSRC += ../_tinyusb/class/dfu/dfu_rt_device.c
CSRC += ../_tinyusb/class/hid/hid_device.c
CSRC += ../_tinyusb/class/hid/hid_host.c
CSRC += ../_tinyusb/class/midi/midi_device.c
CSRC += ../_tinyusb/class/msc/msc_device.c
CSRC += ../_tinyusb/class/msc/msc_host.c
CSRC += ../_tinyusb/class/net/net_device.c
CSRC += ../_tinyusb/class/usbtmc/usbtmc_device.c
CSRC += ../_tinyusb/class/vendor/vendor_device.c
CSRC += ../_tinyusb/class/vendor/vendor_host.c
CSRC += ../_tinyusb/common/tusb_fifo.c
CSRC += ../_tinyusb/device/usbd.c
CSRC += ../_tinyusb/device/usbd_control.c
CSRC += ../_tinyusb/host/ehci/ehci.c
CSRC += ../_tinyusb/host/ohci/ohci.c
CSRC += ../_tinyusb/host/hub.c
CSRC += ../_tinyusb/host/usbh.c
CSRC += ../_tinyusb/host/usbh_control.c
CSRC += ../_tinyusb/portable/raspberrypi/rp2040/dcd_rp2040.c
CSRC += ../_tinyusb/portable/raspberrypi/rp2040/hcd_rp2040.c
CSRC += ../_tinyusb/portable/raspberrypi/rp2040/rp2040_usb.c
CSRC += ../_tinyusb/tusb.c
# C picovga
SRC += ../_picovga/vga.cpp
SRC += ../_picovga/vga_layer.cpp
SRC += ../_picovga/vga_pal.cpp
SRC += ../_picovga/vga_screen.cpp
SRC += ../_picovga/vga_util.cpp
SRC += ../_picovga/vga_vmode.cpp
SRC += ../_picovga/util/canvas.cpp
SRC += ../_picovga/util/mat2d.cpp
SRC += ../_picovga/util/overclock.cpp
SRC += ../_picovga/util/print.cpp
SRC += ../_picovga/util/rand.cpp
SRC += ../_picovga/util/pwmsnd.cpp
SRC += ../_picovga/font/font_bold_8x8.cpp
SRC += ../_picovga/font/font_bold_8x14.cpp
SRC += ../_picovga/font/font_bold_8x16.cpp
SRC += ../_picovga/font/font_boldB_8x14.cpp
SRC += ../_picovga/font/font_boldB_8x16.cpp
SRC += ../_picovga/font/font_game_8x8.cpp
SRC += ../_picovga/font/font_ibm_8x8.cpp
SRC += ../_picovga/font/font_ibm_8x14.cpp
SRC += ../_picovga/font/font_ibm_8x16.cpp
SRC += ../_picovga/font/font_ibmtiny_8x8.cpp
SRC += ../_picovga/font/font_italic_8x8.cpp
SRC += ../_picovga/font/font_thin_8x8.cpp
# C++ sdk
SRC += ../_sdk/new_delete.cpp
# Includes
IPATH += -I./src
IPATH += -I../_sdk/include
IPATH += -I../_tinyusb
##############################################################################
# Configuration
# destination filename
TARGET = program
# stack size of one CPU core (should be 4KB to fit into SRAM banks 4 and 5)
STACK_SIZE = 0x1000
# temporary build directory
TEMP = ./build
# Base makefile (to ensure recompilation after change)
MAKEFILE = ./Makefile
# Base include file (to ensure recompilation after change)
INCLUDEFILE = ./src/include.h
# linker script
LDSCRIPT = ../memmap_default.ld
ifneq ($(findstring -DPICO_COPY_TO_RAM=1, $(DEFINE)),)
LDSCRIPT = ../memmap_copy_to_ram.ld
endif
ifneq ($(findstring -DPICO_NO_FLASH=1, $(DEFINE)),)
LDSCRIPT = ../memmap_no_flash.ld
endif
# -nostartfiles
# CPU Architecture
MARCH = armv6-m
# CPU
MCU = cortex-m0plus
##############################################################################
# Compilation flags
# define MCU
ARCHCFG = -march=${MARCH} -mcpu=${MCU} -mthumb
# === ASM flags
# MCU
AFLAGS = $(ARCHCFG)
# === C flags
# MCU
CFLAGS = $(ARCHCFG)
# Optimization level
#CFLAGS += -O0 # do no optimization
#CFLAGS += -O1 # optimize minimally
#CFLAGS += -O2 # optimize more
CFLAGS += -O3 # optimize even more
#CFLAGS += -Ofast # optimize for speed
#CFLAGS += -Og -g3 # optimize for debugger (use together with -g0..-g3, level of debugging information)
#CFLAGS += -Os # optimize for size
# create separate sections (to enable eliminate unused sections)
CFLAGS += -ffunction-sections -fdata-sections
# use unsigned char (this is default for ARM cpu)
CFLAGS += -funsigned-char
# generate debug informations
CFLAGS += -g3
# === C++ flags
CPPFLAGS = $(CFLAGS)
# do not use exceptions and unwind frames
CPPFLAGS += -fno-exceptions -fno-unwind-tables
CPPFLAGS += -fno-rtti -fno-use-cxa-atexit -std=gnu++17
# === Linker flags
# MCU
LDFLAGS = $(ARCHCFG)
# no built in
LDFLAGS += -Wl,--build-id=none
# libc without system functions
LDFLAGS += --specs=nosys.specs
# generate map file
LDFLAGS += -Wl,-Map=$(TARGET).map
# Linker script
LDFLAGS += -Wl,-script=$(LDSCRIPT)
# eliminate unused sections
LDFLAGS += -Wl,--gc-sections
# no start files if not flash
ifneq ($(findstring -DPICO_NO_FLASH=1, $(DEFINE)),)
LDFLAGS += -nostartfiles
endif
# wrap library functions
LDFLAGS+=-Wl,--wrap=sprintf -Wl,--wrap=snprintf -Wl,--wrap=vsnprintf
LDFLAGS+=-Wl,--wrap=__clzsi2 -Wl,--wrap=__clzdi2 -Wl,--wrap=__ctzsi2 -Wl,--wrap=__ctzdi2
LDFLAGS+=-Wl,--wrap=__popcountsi2 -Wl,--wrap=__popcountdi2
LDFLAGS+=-Wl,--wrap=__clz -Wl,--wrap=__clzl -Wl,--wrap=__clzll
LDFLAGS+=-Wl,--wrap=__aeabi_idiv -Wl,--wrap=__aeabi_idivmod -Wl,--wrap=__aeabi_ldivmod
LDFLAGS+=-Wl,--wrap=__aeabi_uidiv -Wl,--wrap=__aeabi_uidivmod -Wl,--wrap=__aeabi_uldivmod
LDFLAGS+=-Wl,--wrap=__aeabi_dadd -Wl,--wrap=__aeabi_ddiv -Wl,--wrap=__aeabi_dmul -Wl,--wrap=__aeabi_drsub
LDFLAGS+=-Wl,--wrap=__aeabi_dsub -Wl,--wrap=__aeabi_cdcmpeq -Wl,--wrap=__aeabi_cdrcmple
LDFLAGS+=-Wl,--wrap=__aeabi_cdcmple -Wl,--wrap=__aeabi_dcmpeq -Wl,--wrap=__aeabi_dcmplt
LDFLAGS+=-Wl,--wrap=__aeabi_dcmple -Wl,--wrap=__aeabi_dcmpge -Wl,--wrap=__aeabi_dcmpgt
LDFLAGS+=-Wl,--wrap=__aeabi_dcmpun -Wl,--wrap=__aeabi_i2d -Wl,--wrap=__aeabi_l2d
LDFLAGS+=-Wl,--wrap=__aeabi_ui2d -Wl,--wrap=__aeabi_ul2d -Wl,--wrap=__aeabi_d2iz
LDFLAGS+=-Wl,--wrap=__aeabi_d2lz -Wl,--wrap=__aeabi_d2uiz -Wl,--wrap=__aeabi_d2ulz
LDFLAGS+=-Wl,--wrap=__aeabi_d2f -Wl,--wrap=sqrt -Wl,--wrap=cos -Wl,--wrap=sin -Wl,--wrap=tan
LDFLAGS+=-Wl,--wrap=atan2 -Wl,--wrap=exp -Wl,--wrap=log -Wl,--wrap=ldexp -Wl,--wrap=copysign
LDFLAGS+=-Wl,--wrap=trunc -Wl,--wrap=floor -Wl,--wrap=ceil -Wl,--wrap=round -Wl,--wrap=sincos
LDFLAGS+=-Wl,--wrap=asin -Wl,--wrap=acos -Wl,--wrap=atan -Wl,--wrap=sinh -Wl,--wrap=cosh
LDFLAGS+=-Wl,--wrap=tanh -Wl,--wrap=asinh -Wl,--wrap=acosh -Wl,--wrap=atanh -Wl,--wrap=exp2
LDFLAGS+=-Wl,--wrap=log2 -Wl,--wrap=exp10 -Wl,--wrap=log10 -Wl,--wrap=pow -Wl,--wrap=powint
LDFLAGS+=-Wl,--wrap=hypot -Wl,--wrap=cbrt -Wl,--wrap=fmod -Wl,--wrap=drem -Wl,--wrap=remainder
LDFLAGS+=-Wl,--wrap=remquo -Wl,--wrap=expm1 -Wl,--wrap=log1p -Wl,--wrap=fma -Wl,--wrap=__aeabi_lmul
LDFLAGS+=-Wl,--wrap=__aeabi_fadd -Wl,--wrap=__aeabi_fdiv -Wl,--wrap=__aeabi_fmul
LDFLAGS+=-Wl,--wrap=__aeabi_frsub -Wl,--wrap=__aeabi_fsub -Wl,--wrap=__aeabi_cfcmpeq
LDFLAGS+=-Wl,--wrap=__aeabi_cfrcmple -Wl,--wrap=__aeabi_cfcmple -Wl,--wrap=__aeabi_fcmpeq
LDFLAGS+=-Wl,--wrap=__aeabi_fcmplt -Wl,--wrap=__aeabi_fcmple -Wl,--wrap=__aeabi_fcmpge
LDFLAGS+=-Wl,--wrap=__aeabi_fcmpgt -Wl,--wrap=__aeabi_fcmpun -Wl,--wrap=__aeabi_i2f
LDFLAGS+=-Wl,--wrap=__aeabi_l2f -Wl,--wrap=__aeabi_ui2f -Wl,--wrap=__aeabi_ul2f
LDFLAGS+=-Wl,--wrap=__aeabi_f2iz -Wl,--wrap=__aeabi_f2lz -Wl,--wrap=__aeabi_f2uiz
LDFLAGS+=-Wl,--wrap=__aeabi_f2ulz -Wl,--wrap=__aeabi_f2d -Wl,--wrap=sqrtf -Wl,--wrap=cosf
LDFLAGS+=-Wl,--wrap=sinf -Wl,--wrap=tanf -Wl,--wrap=atan2f -Wl,--wrap=expf -Wl,--wrap=logf
LDFLAGS+=-Wl,--wrap=ldexpf -Wl,--wrap=copysignf -Wl,--wrap=truncf -Wl,--wrap=floorf
LDFLAGS+=-Wl,--wrap=ceilf -Wl,--wrap=roundf -Wl,--wrap=sincosf -Wl,--wrap=asinf
LDFLAGS+=-Wl,--wrap=acosf -Wl,--wrap=atanf -Wl,--wrap=sinhf -Wl,--wrap=coshf -Wl,--wrap=tanhf
LDFLAGS+=-Wl,--wrap=asinhf -Wl,--wrap=acoshf -Wl,--wrap=atanhf -Wl,--wrap=exp2f -Wl,--wrap=log2f
LDFLAGS+=-Wl,--wrap=exp10f -Wl,--wrap=log10f -Wl,--wrap=powf -Wl,--wrap=powintf -Wl,--wrap=hypotf
LDFLAGS+=-Wl,--wrap=cbrtf -Wl,--wrap=fmodf -Wl,--wrap=dremf -Wl,--wrap=remainderf -Wl,--wrap=remquof
LDFLAGS+=-Wl,--wrap=expm1f -Wl,--wrap=log1pf -Wl,--wrap=fmaf -Wl,--wrap=malloc -Wl,--wrap=calloc
LDFLAGS+=-Wl,--wrap=free -Wl,--wrap=memcpy -Wl,--wrap=memset -Wl,--wrap=__aeabi_memcpy
LDFLAGS+=-Wl,--wrap=__aeabi_memset -Wl,--wrap=__aeabi_memcpy4 -Wl,--wrap=__aeabi_memset4
LDFLAGS+=-Wl,--wrap=__aeabi_memcpy8 -Wl,--wrap=__aeabi_memset8 -Wl,--wrap=printf -Wl,--wrap=vprintf
LDFLAGS+=-Wl,--wrap=puts -Wl,--wrap=putchar
##############################################################################
# Compiler
# compiler base
COMP = arm-none-eabi-
# C compiler name
CC = ${COMP}gcc
# C++ compiler name
CPP = ${COMP}g++
# ASM compiler name
AS = ${COMP}gcc
# Linker
LD = ${COMP}g++
# Object dump
OD = ${COMP}objdump
# Object copy
OC = ${COMP}objcopy
# Names
NM = ${COMP}nm
# Size
SZ = ${COMP}size
# uf2
UF = ../_exe/elf2uf2.exe
##############################################################################
# File list
# list of all source files
ALLSRC = $(ASRC) $(CSRC) $(SRC)
# list of all files without directory and without extension
ALLBASE = $(notdir $(basename $(ALLSRC)))
# list of all object files *.o
ALLOBJ = $(addprefix $(TEMP)/, $(addsuffix .o, $(ALLBASE)))
##############################################################################
# Clear temporary directory (use "make clean")
clean:
@rm -rf $(TEMP)
@rm -f ./$(TARGET).bin ./$(TARGET).hex ./$(TARGET).lst ./$(TARGET).map ./$(TARGET).sym ./$(TARGET).siz ./$(TARGET).uf2
##############################################################################
# Compile all (use "make all")
all: createdirs elf bin hex lst sym siz uf2
##############################################################################
# Create temporary directory
createdirs:
@mkdir -p $(TEMP)
##############################################################################
# Dependencies of output files
elf: $(TEMP)/$(TARGET).elf
bin: ./$(TARGET).bin
hex: ./$(TARGET).hex
lst: ./$(TARGET).lst
sym: ./$(TARGET).sym
siz: ./$(TARGET).siz
uf2: ./$(TARGET).uf2
##############################################################################
# Create .bin file from .elf file
./$(TARGET).bin: $(TEMP)/$(TARGET).elf
@echo bin $@
@$(OC) -O binary $< $@
##############################################################################
# Create .hex file from .elf file
./$(TARGET).hex: $(TEMP)/$(TARGET).elf
@echo hex $@
@$(OC) -O ihex $< $@
##############################################################################
# Create .lst file from .elf file
./$(TARGET).lst: $(TEMP)/$(TARGET).elf
@echo lst $@
@$(OD) -d -S $< > $@
##############################################################################
# Create .sym file from .elf file
./$(TARGET).sym: $(TEMP)/$(TARGET).elf
@echo sym $@
@$(NM) -n $< > $@
##############################################################################
# Create .siz file from .elf file
./$(TARGET).siz: $(TEMP)/$(TARGET).elf
@echo siz $@
@$(SZ) $< > $@
##############################################################################
# Create .uf2 file from .elf file
./$(TARGET).uf2: $(TEMP)/$(TARGET).elf
@echo uf2 $@
@$(UF) $< $@
##############################################################################
# Create .o files from .c files
define CC_TEMP
$(TEMP)/$(notdir $(basename $(1))).o : $(1) $(MAKEFILE) $(INCLUDEFILE)
@echo CC $$<
@$(CC) $$(DEFINE) $$(IPATH) $$(CFLAGS) -std=gnu11 -c $$< -o $$@
endef
$(foreach src, $(CSRC), $(eval $(call CC_TEMP, $(src))))
##############################################################################
# Create .o files from .cpp files
define CPP_TEMP
$(TEMP)/$(notdir $(basename $(1))).o : $(1) $(MAKEFILE) $(INCLUDEFILE)
@echo C++ $$<
@$(CPP) $$(DEFINE) $$(IPATH) $$(CPPFLAGS) -c $$< -o $$@
endef
$(foreach src, $(SRC), $(eval $(call CPP_TEMP, $(src))))
##############################################################################
# Create .o files from .S files
define AS_TEMP
$(TEMP)/$(notdir $(basename $(1))).o : $(1) $(MAKEFILE) $(INCLUDEFILE)
@echo ASM $$<
@$(CC) $$(DEFINE) $$(IPATH) $$(AFLAGS) -c $$< -o $$@
endef
$(foreach src, $(ASRC), $(eval $(call AS_TEMP, $(src))))
##############################################################################
# Create .elf from .o files
$(TEMP)/$(TARGET).elf: $(ALLOBJ) $(MAKEFILE) $(LDSCRIPT)
@echo ld $@
@$(LD) $(LDFLAGS) $(ALLOBJ) -o $@
##############################################################################
# Head dependencies, to recompile C after changing H
ifneq (${MAKECMDGOALS},clean)
-include $(wildcard $(TEMP)/*.d)
endif
##############################################################################
# List of dependencies not creating files
.PHONY: clean all createdirs elf bin hex lst sym siz uf2