Makefile: various improvements

This commit is contained in:
Dale Whinham
2023-03-03 16:06:19 +00:00
parent 791f4a447a
commit a6a03f666a
4 changed files with 32 additions and 18 deletions

View File

@@ -2,10 +2,6 @@
# Build configuration
#
# Paths to ARM toolchains
ARM_HOME?=$(HOME)/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi
AARCH64_HOME?=$(HOME)/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-elf
# Valid options: pi3, pi3-64, pi4, pi4-64
BOARD?=pi3-64
HDMI_CONSOLE?=0
@@ -22,36 +18,47 @@ GC_SECTIONS?=1
ifeq ($(BOARD), pi2)
RASPBERRYPI=2
BITS=32
CPU_FLAGS=-mcpu=cortex-a7 -marm -mfpu=neon-vfpv4 -mfloat-abi=hard
PREFIX=arm-none-eabi-
KERNEL=kernel7
else ifeq ($(BOARD), pi3)
RASPBERRYPI=3
BITS=32
CPU_FLAGS=-mcpu=cortex-a53 -marm -mfpu=neon-fp-armv8 -mfloat-abi=hard
PREFIX=arm-none-eabi-
KERNEL=kernel8-32
else ifeq ($(BOARD), pi3-64)
RASPBERRYPI=3
BITS=64
CPU_FLAGS=-mcpu=cortex-a53 -mlittle-endian
PREFIX=aarch64-none-elf-
KERNEL=kernel8
else ifeq ($(BOARD), pi4)
RASPBERRYPI=4
BITS=32
CPU_FLAGS=-mcpu=cortex-a72 -marm -mfpu=neon-fp-armv8 -mfloat-abi=hard
PREFIX=arm-none-eabi-
KERNEL=kernel7l
else ifeq ($(BOARD), pi4-64)
RASPBERRYPI=4
BITS=64
CPU_FLAGS=-mcpu=cortex-a72 -mlittle-endian
PREFIX=aarch64-none-elf-
KERNEL=kernel8-rpi4
else
$(error Invalid board type "$(BOARD)"; please specify one of [ pi2 | pi3 | pi3-64 | pi4 | pi4-64 ])
endif
# Compiler flags for external dependencies
CFLAGS_EXTERNAL = $(CPU_FLAGS)
ifeq ($(strip $(GC_SECTIONS)),1)
CFLAGS_EXTERNAL += -ffunction-sections -fdata-sections
endif
ifeq ($(PREFIX), arm-none-eabi-)
CMAKE_TOOLCHAIN_FLAGS=-DARM_HOME=$(ARM_HOME) -DCMAKE_TOOLCHAIN_FILE=../cmake/arm-none-eabi.cmake
CMAKE_TOOLCHAIN_FLAGS=-DCMAKE_TOOLCHAIN_FILE=../cmake/arm-none-eabi.cmake
else
CMAKE_TOOLCHAIN_FLAGS=-DAARCH64_HOME=$(AARCH64_HOME) -DCMAKE_TOOLCHAIN_FILE=../cmake/aarch64-none-elf.cmake
CMAKE_TOOLCHAIN_FLAGS=-DCMAKE_TOOLCHAIN_FILE=../cmake/aarch64-none-elf.cmake
endif
# Paths
@@ -61,6 +68,7 @@ CIRCLE_STDLIB_CONFIG=$(CIRCLESTDLIBHOME)/Config.mk
CIRCLEHOME=$(CIRCLESTDLIBHOME)/libs/circle
CIRCLE_CONFIG=$(CIRCLEHOME)/Config.mk
NEWLIB_ARCH=$(firstword $(subst -, ,$(PREFIX)))-none-circle
NEWLIBDIR=$(CIRCLESTDLIBHOME)/install/$(NEWLIB_ARCH)
CIRCLE_STDLIB_LIBS=$(NEWLIBDIR)/lib/libm.a \
$(NEWLIBDIR)/lib/libc.a \
@@ -85,5 +93,3 @@ FLUIDSYNTHBUILDDIR=build-fluidsynth
FLUIDSYNTHLIB=$(FLUIDSYNTHBUILDDIR)/src/libfluidsynth.a
INIHHOME=$(realpath external/inih)
-include $(CIRCLE_STDLIB_CONFIG)

View File

@@ -5,7 +5,7 @@
include Config.mk
.DEFAULT_GOAL=all
.PHONY: circle-stdlib mt32emu fluidsynth all clean veryclean
.PHONY: submodules circle-stdlib mt32emu fluidsynth all clean veryclean
#
# Functions to apply/reverse patches only if not completely applied/reversed already
@@ -26,6 +26,14 @@ REVERSE_PATCH=sh -c ' \
patch --reverse --strip 1 --no-backup-if-mismatch -r - --directory $$1 < $$2 || (echo "Patch $$2 failed" >&2 && exit 1); \
fi' REVERSE_PATCH
#
# Get submodules
#
submodules:
@git submodule update --init --depth 1
@git -C external/circle-stdlib submodule update --init --depth 1 libs/circle libs/circle-newlib
@git -C external/circle-stdlib/libs/circle submodule update --init --depth 1 addon/wlan/hostap
#
# Configure circle-stdlib
#
@@ -69,8 +77,8 @@ $(CIRCLESTDLIBHOME)/.done: $(CIRCLE_STDLIB_CONFIG)
mt32emu: $(MT32EMUBUILDDIR)/.done
$(MT32EMUBUILDDIR)/.done: $(CIRCLESTDLIBHOME)/.done
@CFLAGS="$(CFLAGS_FOR_TARGET)" \
CXXFLAGS="$(CFLAGS_FOR_TARGET)" \
@CFLAGS="$(CFLAGS_EXTERNAL)" \
CXXFLAGS="$(CFLAGS_EXTERNAL)" \
cmake -B $(MT32EMUBUILDDIR) \
$(CMAKE_TOOLCHAIN_FLAGS) \
-DCMAKE_CXX_FLAGS_RELEASE="-Ofast" \
@@ -90,7 +98,7 @@ fluidsynth: $(FLUIDSYNTHBUILDDIR)/.done
$(FLUIDSYNTHBUILDDIR)/.done: $(CIRCLESTDLIBHOME)/.done
@${APPLY_PATCH} $(FLUIDSYNTHHOME) patches/fluidsynth-2.3.1-circle.patch
@CFLAGS="$(CFLAGS_FOR_TARGET)" \
@CFLAGS="$(CFLAGS_EXTERNAL)" \
cmake -B $(FLUIDSYNTHBUILDDIR) \
$(CMAKE_TOOLCHAIN_FLAGS) \
-DCMAKE_C_FLAGS_RELEASE="-Ofast -fopenmp-simd" \
@@ -138,14 +146,14 @@ clean:
#
# Clean kernel and all dependencies
#
veryclean: clean
mrproper: clean
# Reverse patches
@${REVERSE_PATCH} $(CIRCLEHOME) patches/circle-45-cp210x-remove-partnum-check.patch
@${REVERSE_PATCH} $(CIRCLEHOME) patches/circle-45-minimal-usb-drivers.patch
@${REVERSE_PATCH} $(FLUIDSYNTHHOME) patches/fluidsynth-2.3.1-circle.patch
# Clean circle-stdlib
@$(MAKE) -C $(CIRCLESTDLIBHOME) mrproper
@if [ -f $(CIRCLE_STDLIB_CONFIG) ]; then $(MAKE) -C $(CIRCLESTDLIBHOME) mrproper; fi
@$(RM) $(CIRCLESTDLIBHOME)/.done
# Clean mt32emu

View File

@@ -3,5 +3,5 @@ set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
set(CMAKE_C_COMPILER ${AARCH64_HOME}/bin/aarch64-none-elf-gcc)
set(CMAKE_CXX_COMPILER ${AARCH64_HOME}/bin/aarch64-none-elf-g++)
set(CMAKE_C_COMPILER aarch64-none-elf-gcc)
set(CMAKE_CXX_COMPILER aarch64-none-elf-g++)

View File

@@ -3,5 +3,5 @@ set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
set(CMAKE_C_COMPILER ${ARM_HOME}/bin/arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER ${ARM_HOME}/bin/arm-none-eabi-g++)
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)