This lets some code decide whether or not there's any mmu present to use. Also kernel VM will complain if it isn't set as an extra safety.
128 lines
3.0 KiB
Makefile
128 lines
3.0 KiB
Makefile
LOCAL_DIR := $(GET_LOCAL_DIR)
|
|
|
|
MODULE := $(LOCAL_DIR)
|
|
|
|
GLOBAL_DEFINES += \
|
|
ARM64_CPU_$(ARM_CPU)=1 \
|
|
ARM_ISA_ARMV8=1 \
|
|
IS_64BIT=1
|
|
|
|
MODULE_SRCS += \
|
|
$(LOCAL_DIR)/arch.c \
|
|
$(LOCAL_DIR)/asm.S \
|
|
$(LOCAL_DIR)/exceptions.S \
|
|
$(LOCAL_DIR)/exceptions_c.c \
|
|
$(LOCAL_DIR)/fpu.c \
|
|
$(LOCAL_DIR)/thread.c \
|
|
$(LOCAL_DIR)/spinlock.S \
|
|
$(LOCAL_DIR)/start.S \
|
|
$(LOCAL_DIR)/cache-ops.S \
|
|
|
|
# $(LOCAL_DIR)/arm/start.S \
|
|
$(LOCAL_DIR)/arm/cache.c \
|
|
$(LOCAL_DIR)/arm/ops.S \
|
|
$(LOCAL_DIR)/arm/faults.c \
|
|
$(LOCAL_DIR)/arm/dcc.S
|
|
|
|
GLOBAL_DEFINES += \
|
|
ARCH_DEFAULT_STACK_SIZE=4096
|
|
|
|
# if its requested we build with SMP, arm generically supports 4 cpus
|
|
ifeq ($(WITH_SMP),1)
|
|
SMP_MAX_CPUS ?= 4
|
|
SMP_CPU_CLUSTER_SHIFT ?= 8
|
|
SMP_CPU_ID_BITS ?= 24 # Ignore aff3 bits for now since they are not next to aff2
|
|
|
|
GLOBAL_DEFINES += \
|
|
WITH_SMP=1 \
|
|
SMP_MAX_CPUS=$(SMP_MAX_CPUS) \
|
|
SMP_CPU_CLUSTER_SHIFT=$(SMP_CPU_CLUSTER_SHIFT) \
|
|
SMP_CPU_ID_BITS=$(SMP_CPU_ID_BITS)
|
|
|
|
MODULE_SRCS += \
|
|
$(LOCAL_DIR)/mp.c
|
|
else
|
|
GLOBAL_DEFINES += \
|
|
SMP_MAX_CPUS=1
|
|
endif
|
|
|
|
ARCH_OPTFLAGS := -O2
|
|
|
|
# we have a mmu and want the vmm/pmm
|
|
WITH_KERNEL_VM ?= 1
|
|
|
|
ifeq ($(WITH_KERNEL_VM),1)
|
|
|
|
MODULE_SRCS += \
|
|
$(LOCAL_DIR)/mmu.c
|
|
|
|
KERNEL_ASPACE_BASE ?= 0xffff000000000000
|
|
KERNEL_ASPACE_SIZE ?= 0x0001000000000000
|
|
USER_ASPACE_BASE ?= 0x0000000001000000
|
|
USER_ASPACE_SIZE ?= 0x0000fffffe000000
|
|
|
|
GLOBAL_DEFINES += \
|
|
KERNEL_ASPACE_BASE=$(KERNEL_ASPACE_BASE) \
|
|
KERNEL_ASPACE_SIZE=$(KERNEL_ASPACE_SIZE) \
|
|
USER_ASPACE_BASE=$(USER_ASPACE_BASE) \
|
|
USER_ASPACE_SIZE=$(USER_ASPACE_SIZE) \
|
|
ARCH_HAS_MMU=1
|
|
|
|
KERNEL_BASE ?= $(KERNEL_ASPACE_BASE)
|
|
KERNEL_LOAD_OFFSET ?= 0
|
|
|
|
GLOBAL_DEFINES += \
|
|
KERNEL_BASE=$(KERNEL_BASE) \
|
|
KERNEL_LOAD_OFFSET=$(KERNEL_LOAD_OFFSET)
|
|
|
|
else
|
|
|
|
KERNEL_BASE ?= $(MEMBASE)
|
|
KERNEL_LOAD_OFFSET ?= 0
|
|
|
|
endif
|
|
|
|
GLOBAL_DEFINES += \
|
|
MEMBASE=$(MEMBASE) \
|
|
MEMSIZE=$(MEMSIZE)
|
|
|
|
# try to find the toolchain
|
|
include $(LOCAL_DIR)/toolchain.mk
|
|
TOOLCHAIN_PREFIX := $(ARCH_$(ARCH)_TOOLCHAIN_PREFIX)
|
|
$(info TOOLCHAIN_PREFIX = $(TOOLCHAIN_PREFIX))
|
|
|
|
ARCH_COMPILEFLAGS += $(ARCH_$(ARCH)_COMPILEFLAGS)
|
|
ARCH_COMPILEFLAGS += -fno-omit-frame-pointer
|
|
|
|
ARCH_LDFLAGS += -z max-page-size=4096
|
|
|
|
LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(GLOBAL_COMPILEFLAGS) $(ARCH_COMPILEFLAGS) -print-libgcc-file-name)
|
|
|
|
# make sure some bits were set up
|
|
MEMVARS_SET := 0
|
|
ifneq ($(MEMBASE),)
|
|
MEMVARS_SET := 1
|
|
endif
|
|
ifneq ($(MEMSIZE),)
|
|
MEMVARS_SET := 1
|
|
endif
|
|
ifeq ($(MEMVARS_SET),0)
|
|
$(error missing MEMBASE or MEMSIZE variable, please set in target rules.mk)
|
|
endif
|
|
|
|
# potentially generated files that should be cleaned out with clean make rule
|
|
GENERATED += \
|
|
$(BUILDDIR)/system-onesegment.ld
|
|
|
|
# rules for generating the linker script
|
|
$(BUILDDIR)/system-onesegment.ld: $(LOCAL_DIR)/system-onesegment.ld $(wildcard arch/*.ld) linkerscript.phony
|
|
@echo generating $@
|
|
@$(MKDIR)
|
|
$(NOECHO)sed "s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/;s/%KERNEL_BASE%/$(KERNEL_BASE)/;s/%KERNEL_LOAD_OFFSET%/$(KERNEL_LOAD_OFFSET)/" < $< > $@.tmp
|
|
@$(call TESTANDREPLACEFILE,$@.tmp,$@)
|
|
|
|
linkerscript.phony:
|
|
.PHONY: linkerscript.phony
|
|
|
|
include make/module.mk
|