1LOCAL_DIR := $(GET_LOCAL_DIR) 2 3MODULE := $(LOCAL_DIR) 4 5WITH_KERNEL_VM=1 6 7ifeq ($(SUBARCH),x86-32) 8MEMBASE ?= 0x00000000 9KERNEL_BASE ?= 0x80000000 10KERNEL_LOAD_OFFSET ?= 0x00200000 11KERNEL_ASPACE_BASE ?= 0x80000000 12KERNEL_ASPACE_SIZE ?= 0x7ff00000 13USER_ASPACE_BASE ?= 0x00001000 14USER_ASPACE_SIZE ?= 0x7fffe000 15 16SUBARCH_DIR := $(LOCAL_DIR)/32 17endif 18ifeq ($(SUBARCH),x86-64) 19GLOBAL_DEFINES += \ 20 IS_64BIT=1 \ 21 22MEMBASE ?= 0 23KERNEL_BASE ?= 0xffffffff80000000 24KERNEL_LOAD_OFFSET ?= 0 25KERNEL_ASPACE_BASE ?= 0xffffff8000000000UL # -512GB 26KERNEL_ASPACE_SIZE ?= 0x0000008000000000UL 27USER_ASPACE_BASE ?= 0x0000000000001000UL 28USER_ASPACE_SIZE ?= 0x00007fffffffe000UL 29SUBARCH_DIR := $(LOCAL_DIR)/64 30endif 31 32SUBARCH_BUILDDIR := $(call TOBUILDDIR,$(SUBARCH_DIR)) 33 34GLOBAL_DEFINES += \ 35 ARCH_$(SUBARCH)=1 \ 36 MEMBASE=$(MEMBASE) \ 37 KERNEL_BASE=$(KERNEL_BASE) \ 38 KERNEL_LOAD_OFFSET=$(KERNEL_LOAD_OFFSET) \ 39 KERNEL_ASPACE_BASE=$(KERNEL_ASPACE_BASE) \ 40 KERNEL_ASPACE_SIZE=$(KERNEL_ASPACE_SIZE) \ 41 USER_ASPACE_BASE=$(USER_ASPACE_BASE) \ 42 USER_ASPACE_SIZE=$(USER_ASPACE_SIZE) \ 43 SMP_MAX_CPUS=1 \ 44 X86_WITH_FPU=1 45 46MODULE_SRCS += \ 47 $(SUBARCH_DIR)/start.S \ 48 $(SUBARCH_DIR)/asm.S \ 49 $(SUBARCH_DIR)/exceptions.S \ 50 $(SUBARCH_DIR)/mmu.c \ 51 $(SUBARCH_DIR)/ops.S \ 52 $(SUBARCH_DIR)/safecopy.S \ 53 $(SUBARCH_DIR)/usercopy.c \ 54\ 55 $(LOCAL_DIR)/arch.c \ 56 $(LOCAL_DIR)/cache.c \ 57 $(LOCAL_DIR)/gdt.S \ 58 $(LOCAL_DIR)/thread.c \ 59 $(LOCAL_DIR)/faults.c \ 60 $(LOCAL_DIR)/descriptor.c \ 61 $(LOCAL_DIR)/fpu.c 62 63include $(LOCAL_DIR)/toolchain.mk 64 65# set the default toolchain to x86 elf and set a #define 66ifeq ($(SUBARCH),x86-32) 67ifndef TOOLCHAIN_PREFIX 68TOOLCHAIN_PREFIX := $(ARCH_x86_TOOLCHAIN_PREFIX) 69endif 70endif # SUBARCH x86-32 71ifeq ($(SUBARCH),x86-64) 72ifndef TOOLCHAIN_PREFIX 73TOOLCHAIN_PREFIX := $(ARCH_x86_64_TOOLCHAIN_PREFIX) 74endif 75endif # SUBARCH x86-64 76 77$(warning ARCH_x86_TOOLCHAIN_PREFIX = $(ARCH_x86_TOOLCHAIN_PREFIX)) 78$(warning ARCH_x86_64_TOOLCHAIN_PREFIX = $(ARCH_x86_64_TOOLCHAIN_PREFIX)) 79$(warning TOOLCHAIN_PREFIX = $(TOOLCHAIN_PREFIX)) 80 81ARCH_COMPILEFLAGS += $(ARCH_$(ARCH)_COMPILEFLAGS) 82 83cc-option = $(shell if test -z "`$(1) $(2) -S -o /dev/null -xc /dev/null 2>&1`"; \ 84 then echo "$(2)"; else echo "$(3)"; fi ;) 85 86# disable SSP if the compiler supports it; it will break stuff 87GLOBAL_CFLAGS += $(call cc-option,$(CC),-fno-stack-protector,) 88 89GLOBAL_COMPILEFLAGS += -fasynchronous-unwind-tables 90GLOBAL_COMPILEFLAGS += -fno-pic 91GLOBAL_LDFLAGS += -z max-page-size=4096 92 93# do no use FPU/MMX/SSE/SSE2/SSE3/SSSE3/SSE4 instruction in kernel 94# this flag influences kernel part only 95ARCH_COMPILEFLAGS += -msoft-float 96 97ifeq ($(SUBARCH),x86-64) 98GLOBAL_COMPILEFLAGS += -fno-stack-protector 99GLOBAL_COMPILEFLAGS += -mcmodel=kernel 100GLOBAL_COMPILEFLAGS += -mno-red-zone 101endif # SUBARCH x86-64 102 103 104ARCH_OPTFLAGS := -O2 105 106LINKER_SCRIPT += $(SUBARCH_BUILDDIR)/kernel.ld 107 108# potentially generated files that should be cleaned out with clean make rule 109GENERATED += $(SUBARCH_BUILDDIR)/kernel.ld 110 111# rules for generating the linker scripts 112$(SUBARCH_BUILDDIR)/kernel.ld: $(SUBARCH_DIR)/kernel.ld $(wildcard arch/*.ld) linkerscript.phony 113 @echo generating $@ 114 @$(MKDIR) 115 $(NOECHO)sed "s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/;s/%KERNEL_BASE%/$(KERNEL_BASE)/;s/%KERNEL_LOAD_OFFSET%/$(KERNEL_LOAD_OFFSET)/" < $< > $@.tmp 116 @$(call TESTANDREPLACEFILE,$@.tmp,$@) 117 118linkerscript.phony: 119.PHONY: linkerscript.phony 120 121include make/module.mk 122