diff --git a/Config.mk b/Config.mk index 6e4eb2f..43b70f7 100644 --- a/Config.mk +++ b/Config.mk @@ -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) diff --git a/Makefile b/Makefile index 3b17f5b..05de6e7 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/cmake/aarch64-none-elf.cmake b/cmake/aarch64-none-elf.cmake index 4edebac..2780a90 100644 --- a/cmake/aarch64-none-elf.cmake +++ b/cmake/aarch64-none-elf.cmake @@ -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++) diff --git a/cmake/arm-none-eabi.cmake b/cmake/arm-none-eabi.cmake index 7c717dc..1cc765b 100644 --- a/cmake/arm-none-eabi.cmake +++ b/cmake/arm-none-eabi.cmake @@ -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++)