1LOCAL_DIR := $(GET_LOCAL_DIR) 2 3MODULE := $(LOCAL_DIR) 4 5GLOBAL_DEFINES += \ 6 ARM64_CPU_$(ARM_CPU)=1 \ 7 ARM_ISA_ARMV8=1 \ 8 IS_64BIT=1 9 10MODULE_SRCS += \ 11 $(LOCAL_DIR)/arch.c \ 12 $(LOCAL_DIR)/asm.S \ 13 $(LOCAL_DIR)/exceptions.S \ 14 $(LOCAL_DIR)/exceptions_c.c \ 15 $(LOCAL_DIR)/fpu.c \ 16 $(LOCAL_DIR)/thread.c \ 17 $(LOCAL_DIR)/spinlock.S \ 18 $(LOCAL_DIR)/start.S \ 19 $(LOCAL_DIR)/cache-ops.S \ 20 21# $(LOCAL_DIR)/arm/start.S \ 22 $(LOCAL_DIR)/arm/cache.c \ 23 $(LOCAL_DIR)/arm/ops.S \ 24 $(LOCAL_DIR)/arm/faults.c \ 25 $(LOCAL_DIR)/arm/dcc.S 26 27GLOBAL_DEFINES += \ 28 ARCH_DEFAULT_STACK_SIZE=4096 29 30# if its requested we build with SMP, arm generically supports 4 cpus 31ifeq ($(WITH_SMP),1) 32SMP_MAX_CPUS ?= 4 33SMP_CPU_CLUSTER_SHIFT ?= 8 34SMP_CPU_ID_BITS ?= 24 # Ignore aff3 bits for now since they are not next to aff2 35 36GLOBAL_DEFINES += \ 37 WITH_SMP=1 \ 38 SMP_MAX_CPUS=$(SMP_MAX_CPUS) \ 39 SMP_CPU_CLUSTER_SHIFT=$(SMP_CPU_CLUSTER_SHIFT) \ 40 SMP_CPU_ID_BITS=$(SMP_CPU_ID_BITS) 41 42MODULE_SRCS += \ 43 $(LOCAL_DIR)/mp.c 44else 45GLOBAL_DEFINES += \ 46 SMP_MAX_CPUS=1 47endif 48 49ARCH_OPTFLAGS := -O2 50 51# we have a mmu and want the vmm/pmm 52WITH_KERNEL_VM ?= 1 53 54ifeq ($(WITH_KERNEL_VM),1) 55 56MODULE_SRCS += \ 57 $(LOCAL_DIR)/mmu.c 58 59KERNEL_ASPACE_BASE ?= 0xffff000000000000 60KERNEL_ASPACE_SIZE ?= 0x0001000000000000 61USER_ASPACE_BASE ?= 0x0000000001000000 62USER_ASPACE_SIZE ?= 0x0000fffffe000000 63 64GLOBAL_DEFINES += \ 65 KERNEL_ASPACE_BASE=$(KERNEL_ASPACE_BASE) \ 66 KERNEL_ASPACE_SIZE=$(KERNEL_ASPACE_SIZE) \ 67 USER_ASPACE_BASE=$(USER_ASPACE_BASE) \ 68 USER_ASPACE_SIZE=$(USER_ASPACE_SIZE) \ 69 ARCH_HAS_MMU=1 70 71KERNEL_BASE ?= $(KERNEL_ASPACE_BASE) 72KERNEL_LOAD_OFFSET ?= 0 73 74GLOBAL_DEFINES += \ 75 KERNEL_BASE=$(KERNEL_BASE) \ 76 KERNEL_LOAD_OFFSET=$(KERNEL_LOAD_OFFSET) 77 78else 79 80KERNEL_BASE ?= $(MEMBASE) 81KERNEL_LOAD_OFFSET ?= 0 82 83endif 84 85GLOBAL_DEFINES += \ 86 MEMBASE=$(MEMBASE) \ 87 MEMSIZE=$(MEMSIZE) 88 89# try to find the toolchain 90include $(LOCAL_DIR)/toolchain.mk 91TOOLCHAIN_PREFIX := $(ARCH_$(ARCH)_TOOLCHAIN_PREFIX) 92$(info TOOLCHAIN_PREFIX = $(TOOLCHAIN_PREFIX)) 93 94ARCH_COMPILEFLAGS += $(ARCH_$(ARCH)_COMPILEFLAGS) 95ARCH_COMPILEFLAGS += -fno-omit-frame-pointer 96 97ARCH_LDFLAGS += -z max-page-size=4096 98 99LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(GLOBAL_COMPILEFLAGS) $(ARCH_COMPILEFLAGS) -print-libgcc-file-name) 100 101# make sure some bits were set up 102MEMVARS_SET := 0 103ifneq ($(MEMBASE),) 104MEMVARS_SET := 1 105endif 106ifneq ($(MEMSIZE),) 107MEMVARS_SET := 1 108endif 109ifeq ($(MEMVARS_SET),0) 110$(error missing MEMBASE or MEMSIZE variable, please set in target rules.mk) 111endif 112 113# potentially generated files that should be cleaned out with clean make rule 114GENERATED += \ 115 $(BUILDDIR)/system-onesegment.ld 116 117# rules for generating the linker script 118$(BUILDDIR)/system-onesegment.ld: $(LOCAL_DIR)/system-onesegment.ld $(wildcard arch/*.ld) linkerscript.phony 119 @echo generating $@ 120 @$(MKDIR) 121 $(NOECHO)sed "s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/;s/%KERNEL_BASE%/$(KERNEL_BASE)/;s/%KERNEL_LOAD_OFFSET%/$(KERNEL_LOAD_OFFSET)/" < $< > $@.tmp 122 @$(call TESTANDREPLACEFILE,$@.tmp,$@) 123 124linkerscript.phony: 125.PHONY: linkerscript.phony 126 127include make/module.mk 128