1# Copyright 2018 The Fuchsia Authors 2# 3# Use of this source code is governed by a MIT-style 4# license that can be found in the LICENSE file or at 5# https://opensource.org/licenses/MIT 6 7BOOT_SHIM_DIR := $(GET_LOCAL_DIR) 8 9BOOT_SHIM_BUILDDIR := $(BUILDDIR)/boot-shim/$(PLATFORM_BOARD_NAME) 10 11BOOT_SHIM_SRCS := \ 12 $(BOOT_SHIM_DIR)/boot-shim.S \ 13 $(BOOT_SHIM_DIR)/boot-shim.c \ 14 $(BOOT_SHIM_DIR)/debug.c \ 15 $(BOOT_SHIM_DIR)/devicetree.c \ 16 $(BOOT_SHIM_DIR)/util.c \ 17 $(BOOT_SHIM_DIR)/$(PLATFORM_BOARD_NAME)-uart.c \ 18 kernel/lib/libc/string/memcpy.c \ 19 kernel/lib/libc/string/memmove.c \ 20 kernel/lib/libc/string/memset.c \ 21 kernel/lib/libc/string/strcmp.c \ 22 kernel/lib/libc/string/strncmp.c \ 23 system/ulib/libzbi/zbi.c \ 24 25BOOT_SHIM_OBJS := $(BOOT_SHIM_SRCS:%=$(BOOT_SHIM_BUILDDIR)/%.o) 26 27ALLSRCS += $(BOOT_SHIM_SRCS) 28ALLOBJS += $(BOOT_SHIM_OBJS) 29 30BOOT_SHIM_LD := $(BOOT_SHIM_DIR)/boot-shim.ld 31BOOT_SHIM_ELF := $(BOOT_SHIM_BUILDDIR)/boot-shim.elf 32BOOT_SHIM_BIN := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-boot-shim.bin 33 34KERNEL_ALIGN := 65536 35SHIM_DEFINES := -DKERNEL_ALIGN=$(KERNEL_ALIGN) 36SHIM_INCLUDES := -Ikernel/include -Ikernel/lib/libc/include -Isystem/public 37SHIM_INCLUDES += -Ikernel/arch/arm64/include 38SHIM_INCLUDES += -Isystem/ulib/ddk/include # for ddk/protocol/platform-defs.h 39SHIM_INCLUDES += -Isystem/ulib/libzbi/include 40SHIM_CFLAGS := $(NO_SAFESTACK) $(NO_SANITIZERS) 41 42# The shim code runs with alignment checking enabled, so make sure the 43# compiler doesn't use any unaligned memory accesses. 44SHIM_CFLAGS += -mstrict-align 45 46# for including target specific headers 47SHIM_INCLUDES += -Ikernel/target/arm64/board/$(PLATFORM_BOARD_NAME) 48 49# capture board specific variables for the build rules 50$(BOOT_SHIM_BIN): BOOT_SHIM_BUILDDIR:=$(BOOT_SHIM_BUILDDIR) 51$(BOOT_SHIM_BIN): BOOT_SHIM_OBJS:=$(BOOT_SHIM_OBJS) 52$(BOOT_SHIM_BIN): BOOT_SHIM_ELF:=$(BOOT_SHIM_ELF) 53$(BOOT_SHIM_BIN): BOOT_SHIM_BIN:=$(BOOT_SHIM_BIN) 54$(BOOT_SHIM_BIN): SHIM_INCLUDES:=$(SHIM_INCLUDES) 55 56$(BOOT_SHIM_BUILDDIR)/%.S.o: %.S 57 @$(MKDIR) 58 $(call BUILDECHO, compiling $<) 59 $(NOECHO)$(CC) $(SHIM_INCLUDES) $(SHIM_DEFINES) $(GLOBAL_COMPILEFLAGS) $(ARCH_COMPILEFLAGS) $(GLOBAL_OPTFLAGS) $(GLOBAL_ASMFLAGS) $(KERNEL_ASMFLAGS) $(ARCH_ASMFLAGS) -c $< -MMD -MP -MT $@ -MF $(@:%o=%d) -o $@ 60 61$(BOOT_SHIM_BUILDDIR)/%.c.o: %.c 62 @$(MKDIR) 63 $(call BUILDECHO, compiling $<) 64 $(NOECHO)$(CC) $(SHIM_INCLUDES) $(SHIM_DEFINES) $(GLOBAL_COMPILEFLAGS) $(KERNEL_COMPILEFLAGS) $(ARCH_COMPILEFLAGS) $(GLOBAL_OPTFLAGS) $(GLOBAL_CFLAGS) $(KERNEL_CFLAGS) $(ARCH_CFLAGS) $(SHIM_CFLAGS) -c $< -MMD -MP -MT $@ -MF $(@:%o=%d) -o $@ 65 66$(BOOT_SHIM_ELF): $(BOOT_SHIM_OBJS) $(BOOT_SHIM_LD) 67 $(call BUILDECHO,linking $@) 68 $(NOECHO)$(LD) $(GLOBAL_LDFLAGS) $(KERNEL_LDFLAGS) --build-id=none $(BOOT_SHIM_OBJS) -defsym KERNEL_ALIGN=$(KERNEL_ALIGN) -T $(BOOT_SHIM_LD) -o $@ 69 70# The shim code should be purely position-independent code. 71$(BOOT_SHIM_ELF).pure-stamp: $(BOOT_SHIM_ELF) scripts/gen-kaslr-fixups.sh 72 $(call BUILDECHO,checking $<) 73 $(NOECHO)scripts/gen-kaslr-fixups.sh --pure \ 74 $< '$(READELF)' '$(OBJDUMP)' $@ 75 76$(BOOT_SHIM_BIN): $(BOOT_SHIM_ELF) $(BOOT_SHIM_ELF).pure-stamp 77 $(call BUILDECHO,generating $@) 78 $(NOECHO)$(OBJCOPY) -O binary $< $@ 79GENERATED += $(BOOT_SHIM_BIN) 80