2009-03-26 02:32:01 -04:00
|
|
|
LOCAL_DIR := $(GET_LOCAL_DIR)
|
|
|
|
|
|
2012-08-30 14:22:31 -07:00
|
|
|
MODULE := $(LOCAL_DIR)
|
|
|
|
|
|
2022-11-02 22:22:19 -07:00
|
|
|
MODULE_OPTIONS := extra_warnings
|
|
|
|
|
|
2022-08-07 16:28:03 -07:00
|
|
|
# x86 code always runs with the mmu enabled
|
|
|
|
|
WITH_KERNEL_VM := 1
|
2024-12-06 21:11:51 -08:00
|
|
|
ifneq ($(CPU),legacy)
|
|
|
|
|
WITH_SMP ?= 1
|
|
|
|
|
else
|
|
|
|
|
WITH_SMP ?= 0
|
|
|
|
|
endif
|
2015-06-11 12:05:12 -07:00
|
|
|
|
2016-02-24 18:59:31 -08:00
|
|
|
ifeq ($(SUBARCH),x86-32)
|
|
|
|
|
MEMBASE ?= 0x00000000
|
|
|
|
|
KERNEL_BASE ?= 0x80000000
|
|
|
|
|
KERNEL_LOAD_OFFSET ?= 0x00200000
|
|
|
|
|
KERNEL_ASPACE_BASE ?= 0x80000000
|
|
|
|
|
KERNEL_ASPACE_SIZE ?= 0x7ff00000
|
|
|
|
|
USER_ASPACE_BASE ?= 0
|
|
|
|
|
USER_ASPACE_SIZE ?= 0x80000000
|
|
|
|
|
|
|
|
|
|
SUBARCH_DIR := $(LOCAL_DIR)/32
|
|
|
|
|
endif
|
|
|
|
|
ifeq ($(SUBARCH),x86-64)
|
2015-06-11 12:05:12 -07:00
|
|
|
GLOBAL_DEFINES += \
|
2016-02-24 18:59:31 -08:00
|
|
|
IS_64BIT=1 \
|
|
|
|
|
|
|
|
|
|
MEMBASE ?= 0
|
|
|
|
|
KERNEL_BASE ?= 0xffffffff80000000
|
|
|
|
|
KERNEL_LOAD_OFFSET ?= 0x00200000
|
|
|
|
|
KERNEL_ASPACE_BASE ?= 0xffffff8000000000UL # -512GB
|
|
|
|
|
KERNEL_ASPACE_SIZE ?= 0x0000008000000000UL
|
|
|
|
|
USER_ASPACE_BASE ?= 0x0000000000000000UL
|
|
|
|
|
USER_ASPACE_SIZE ?= 0x0000800000000000UL
|
|
|
|
|
SUBARCH_DIR := $(LOCAL_DIR)/64
|
|
|
|
|
endif
|
2015-06-11 12:05:12 -07:00
|
|
|
|
2016-02-24 18:59:31 -08:00
|
|
|
SUBARCH_BUILDDIR := $(call TOBUILDDIR,$(SUBARCH_DIR))
|
2015-10-19 14:25:20 -07:00
|
|
|
|
2016-02-24 18:59:31 -08:00
|
|
|
GLOBAL_DEFINES += \
|
|
|
|
|
ARCH_$(SUBARCH)=1 \
|
|
|
|
|
MEMBASE=$(MEMBASE) \
|
|
|
|
|
KERNEL_BASE=$(KERNEL_BASE) \
|
|
|
|
|
KERNEL_LOAD_OFFSET=$(KERNEL_LOAD_OFFSET) \
|
|
|
|
|
KERNEL_ASPACE_BASE=$(KERNEL_ASPACE_BASE) \
|
|
|
|
|
KERNEL_ASPACE_SIZE=$(KERNEL_ASPACE_SIZE) \
|
2021-03-30 00:50:22 -07:00
|
|
|
ARCH_HAS_MMU=1
|
2015-06-11 12:05:12 -07:00
|
|
|
|
2024-12-06 21:11:51 -08:00
|
|
|
ifeq ($(WITH_SMP),1)
|
|
|
|
|
SMP_MAX_CPUS ?= 8
|
|
|
|
|
GLOBAL_DEFINES += \
|
|
|
|
|
WITH_SMP=1 \
|
|
|
|
|
SMP_MAX_CPUS=$(SMP_MAX_CPUS)
|
|
|
|
|
endif
|
|
|
|
|
|
2012-08-30 14:22:31 -07:00
|
|
|
MODULE_SRCS += \
|
2016-02-24 18:59:31 -08:00
|
|
|
$(SUBARCH_DIR)/start.S \
|
2019-01-03 23:42:31 -08:00
|
|
|
\
|
2016-02-24 18:59:31 -08:00
|
|
|
$(SUBARCH_DIR)/asm.S \
|
|
|
|
|
$(SUBARCH_DIR)/exceptions.S \
|
|
|
|
|
$(SUBARCH_DIR)/mmu.c \
|
|
|
|
|
$(SUBARCH_DIR)/ops.S \
|
|
|
|
|
\
|
2012-09-29 13:19:19 -07:00
|
|
|
$(LOCAL_DIR)/arch.c \
|
2012-08-30 14:22:31 -07:00
|
|
|
$(LOCAL_DIR)/cache.c \
|
2019-01-03 23:42:31 -08:00
|
|
|
$(LOCAL_DIR)/descriptor.c \
|
|
|
|
|
$(LOCAL_DIR)/faults.c \
|
|
|
|
|
$(LOCAL_DIR)/feature.c \
|
2016-02-24 18:59:31 -08:00
|
|
|
$(LOCAL_DIR)/gdt.S \
|
2024-12-06 00:03:23 -08:00
|
|
|
$(LOCAL_DIR)/mp.c \
|
2012-08-30 14:22:31 -07:00
|
|
|
$(LOCAL_DIR)/thread.c \
|
2018-12-30 21:03:27 -08:00
|
|
|
|
|
|
|
|
# legacy x86's dont have fpu support
|
|
|
|
|
ifneq ($(CPU),legacy)
|
|
|
|
|
GLOBAL_DEFINES += \
|
|
|
|
|
X86_WITH_FPU=1
|
|
|
|
|
|
|
|
|
|
MODULE_SRCS += \
|
2015-10-19 14:25:20 -07:00
|
|
|
$(LOCAL_DIR)/fpu.c
|
2020-05-16 14:08:32 -07:00
|
|
|
else
|
|
|
|
|
GLOBAL_DEFINES += WITH_NO_FP=1
|
2018-12-30 21:03:27 -08:00
|
|
|
endif
|
2009-03-26 02:32:01 -04:00
|
|
|
|
2016-02-24 18:59:31 -08:00
|
|
|
include $(LOCAL_DIR)/toolchain.mk
|
|
|
|
|
|
2009-03-26 02:32:01 -04:00
|
|
|
# set the default toolchain to x86 elf and set a #define
|
2016-02-24 18:59:31 -08:00
|
|
|
ifeq ($(SUBARCH),x86-32)
|
2014-08-10 20:04:38 -07:00
|
|
|
ifndef TOOLCHAIN_PREFIX
|
2016-02-24 18:59:31 -08:00
|
|
|
TOOLCHAIN_PREFIX := $(ARCH_x86_TOOLCHAIN_PREFIX)
|
2014-08-10 20:04:38 -07:00
|
|
|
endif
|
2016-02-24 18:59:31 -08:00
|
|
|
endif # SUBARCH x86-32
|
|
|
|
|
ifeq ($(SUBARCH),x86-64)
|
|
|
|
|
ifndef TOOLCHAIN_PREFIX
|
|
|
|
|
TOOLCHAIN_PREFIX := $(ARCH_x86_64_TOOLCHAIN_PREFIX)
|
|
|
|
|
endif
|
|
|
|
|
endif # SUBARCH x86-64
|
|
|
|
|
|
|
|
|
|
$(warning ARCH_x86_TOOLCHAIN_PREFIX = $(ARCH_x86_TOOLCHAIN_PREFIX))
|
|
|
|
|
$(warning ARCH_x86_64_TOOLCHAIN_PREFIX = $(ARCH_x86_64_TOOLCHAIN_PREFIX))
|
|
|
|
|
$(warning TOOLCHAIN_PREFIX = $(TOOLCHAIN_PREFIX))
|
2009-03-26 02:32:01 -04:00
|
|
|
|
2009-03-30 02:49:38 -04:00
|
|
|
cc-option = $(shell if test -z "`$(1) $(2) -S -o /dev/null -xc /dev/null 2>&1`"; \
|
|
|
|
|
then echo "$(2)"; else echo "$(3)"; fi ;)
|
|
|
|
|
|
|
|
|
|
# disable SSP if the compiler supports it; it will break stuff
|
2012-09-29 13:19:19 -07:00
|
|
|
GLOBAL_CFLAGS += $(call cc-option,$(CC),-fno-stack-protector,)
|
|
|
|
|
|
2018-10-13 11:40:10 -07:00
|
|
|
ARCH_COMPILEFLAGS += -fasynchronous-unwind-tables
|
|
|
|
|
ARCH_COMPILEFLAGS += -gdwarf-2
|
|
|
|
|
ARCH_COMPILEFLAGS += -fno-pic
|
|
|
|
|
ARCH_LDFLAGS += -z max-page-size=4096
|
2016-02-24 18:59:31 -08:00
|
|
|
|
|
|
|
|
ifeq ($(SUBARCH),x86-64)
|
2018-10-13 11:40:10 -07:00
|
|
|
ARCH_COMPILEFLAGS += -fno-stack-protector
|
|
|
|
|
ARCH_COMPILEFLAGS += -mcmodel=kernel
|
|
|
|
|
ARCH_COMPILEFLAGS += -mno-red-zone
|
2016-02-24 18:59:31 -08:00
|
|
|
endif # SUBARCH x86-64
|
|
|
|
|
|
2022-07-17 16:03:20 -07:00
|
|
|
# set switches to generate/not generate fpu code
|
|
|
|
|
ARCH_COMPILEFLAGS_FLOAT +=
|
|
|
|
|
ARCH_COMPILEFLAGS_NOFLOAT += -mgeneral-regs-only
|
|
|
|
|
|
2020-05-16 14:08:32 -07:00
|
|
|
# select default optimizations for different target cpu levels
|
2018-12-30 21:03:27 -08:00
|
|
|
ifeq ($(CPU),legacy)
|
2020-05-16 14:08:32 -07:00
|
|
|
# compile for 386 when selecting 'legacy' cpu support
|
2018-12-30 21:03:27 -08:00
|
|
|
ARCH_COMPILEFLAGS += -march=i386
|
|
|
|
|
ARCH_OPTFLAGS := -Os
|
2020-05-16 14:08:32 -07:00
|
|
|
GLOBAL_DEFINES += X86_LEGACY=1
|
|
|
|
|
else ifeq ($(SUBARCH),x86-32)
|
|
|
|
|
ARCH_COMPILEFLAGS += -march=i686
|
|
|
|
|
ARCH_OPTFLAGS := -O2
|
2022-07-24 16:59:45 -07:00
|
|
|
GLOBAL_DEFINES += X86_LEGACY=0
|
2024-12-06 21:11:51 -08:00
|
|
|
GLOBAL_DEFINES += WITH_SMP=1
|
2020-05-16 14:08:32 -07:00
|
|
|
else ifeq ($(SUBARCH),x86-64)
|
2022-07-24 20:03:46 -07:00
|
|
|
ARCH_COMPILEFLAGS += -march=x86-64
|
2020-05-16 14:08:32 -07:00
|
|
|
ARCH_OPTFLAGS := -O2
|
2022-07-24 16:59:45 -07:00
|
|
|
GLOBAL_DEFINES += X86_LEGACY=0
|
2024-12-06 21:11:51 -08:00
|
|
|
GLOBAL_DEFINES += WITH_SMP=1
|
2018-12-30 21:03:27 -08:00
|
|
|
endif
|
|
|
|
|
|
2018-10-13 11:40:10 -07:00
|
|
|
LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(GLOBAL_COMPILEFLAGS) $(ARCH_COMPILEFLAGS) -print-libgcc-file-name)
|
|
|
|
|
$(warning LIBGCC = $(LIBGCC))
|
|
|
|
|
|
2016-02-24 18:59:31 -08:00
|
|
|
LINKER_SCRIPT += $(SUBARCH_BUILDDIR)/kernel.ld
|
|
|
|
|
|
2009-03-26 02:32:01 -04:00
|
|
|
# potentially generated files that should be cleaned out with clean make rule
|
2016-02-24 18:59:31 -08:00
|
|
|
GENERATED += $(SUBARCH_BUILDDIR)/kernel.ld
|
2009-03-26 02:32:01 -04:00
|
|
|
|
|
|
|
|
# rules for generating the linker scripts
|
2016-02-24 18:59:31 -08:00
|
|
|
$(SUBARCH_BUILDDIR)/kernel.ld: $(SUBARCH_DIR)/kernel.ld $(wildcard arch/*.ld)
|
2009-03-26 02:32:01 -04:00
|
|
|
@echo generating $@
|
|
|
|
|
@$(MKDIR)
|
2016-02-24 18:59:31 -08:00
|
|
|
$(NOECHO)sed "s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/;s/%KERNEL_BASE%/$(KERNEL_BASE)/;s/%KERNEL_LOAD_OFFSET%/$(KERNEL_LOAD_OFFSET)/" < $< > $@.tmp
|
|
|
|
|
@$(call TESTANDREPLACEFILE,$@.tmp,$@)
|
2012-08-30 14:22:31 -07:00
|
|
|
|
|
|
|
|
include make/module.mk
|