| # Copyright 2025 Google LLC | |
| # Copyright ASPEED Technology Inc. | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| CROSS_COMPILE ?= aarch64-linux-gnu- | |
| CC = $(CROSS_COMPILE)gcc | |
| OBJCOPY = $(CROSS_COMPILE)objcopy | |
| OBJDUMP = $(CROSS_COMPILE)objdump | |
| GIT_VERSION := git-$(shell git rev-parse --short HEAD) | |
| # Why we use -no-pie -fno-pic in bare-metal builds: | |
| # | |
| # By default, modern GCC compilers enable PIE (Position-Independent Executable) | |
| # and PIC (Position-Independent Code) to improve security and relocation | |
| # flexibility. | |
| # | |
| # However, for raw binary (.bin) firmware and bootloaders: | |
| # - We don't have a dynamic loader or relocation mechanism. | |
| # - Function pointers must point to fixed physical addresses. | |
| # | |
| # These flags ensure that: | |
| # - Function calls and pointers are encoded as absolute/static addresses. | |
| # - The compiler does not emit references to the GOT (Global Offset Table), | |
| # which would be missing in a .bin context. | |
| # | |
| # Without these flags, function pointers in .data may be NULL or invalid at | |
| # runtime. | |
| CFLAGS = -Os -Wall -Wextra -g -mcpu=cortex-a35 -fno-stack-protector \ | |
| -no-pie -fno-pic \ | |
| -I ./include -I ../lib/libfdt -I ../lib/libc/minimal/include | |
| CFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\" | |
| ASFLAGS = $(CFLAGS) -Wa,-mcpu=cortex-a35 | |
| LDSCRIPT = bootrom.ld | |
| MAPFILE = bootrom.map | |
| LDFLAGS = -Wl,--build-id=none -static -nostdlib -T $(LDSCRIPT) -Wl,-Map=$(MAPFILE) | |
| OBJS := start.o image.o stor.o ast_loader.o fmc_image.o board_ast2700.o \ | |
| manifest.o manifest_image.o \ | |
| uart_aspeed.o uart_console.o ssp_tsp.o \ | |
| ../lib/libc/minimal/source/string/string.o \ | |
| ../lib/libfdt/fdt.o ../lib/libfdt/fdt_ro.o \ | |
| ../lib/libfdt/fdt_rw.o ../lib/libfdt/fdt_wip.o \ | |
| ../lib/libfdt/fdt_addresses.o | |
| .PHONY: all clean | |
| all: ast27x0_bootrom.bin ast27x0_bootrom.asm | |
| clean: | |
| rm -f *.o *.bin *.elf *.asm *.map ../lib/libfdt/*.o \ | |
| ../lib/libc/minimal/source/string/*.o | |
| ast27x0_bootrom.bin: ast27x0_bootrom.elf | |
| $(OBJCOPY) -O binary $< $@ | |
| ast27x0_bootrom.asm: ast27x0_bootrom.elf | |
| $(OBJDUMP) -S $< > $@ | |
| ast27x0_bootrom.elf: $(OBJS) $(LDSCRIPT) | |
| $(CC) -o $@ $(LDFLAGS) $(OBJS) |