diff --git a/Kernel/Makefile b/Kernel/Makefile index 45b50f12..2f3455bf 100644 --- a/Kernel/Makefile +++ b/Kernel/Makefile @@ -6,24 +6,16 @@ GIT_COMMIT_SHORT = $(shell git rev-parse --short HEAD) HEADERS := $(sort $(dir $(wildcard ./include/*))) $(sort $(dir $(wildcard ./include_std/*))) INCLUDE_DIR = -I./include -I./include_std -BMP_SOURCES := $(shell find ./ -type f -name '*.bmp') -PSF_SOURCES := $(shell find ./ -type f -name '*.psf') -ifeq ($(OSARCH), amd64) -S_SOURCES := $(shell find ./ -type f -name '*.S' -not -path "./arch/i386/*" -not -path "./arch/aarch64/*") -s_SOURCES := $(shell find ./ -type f -name '*.s' -not -path "./arch/i386/*" -not -path "./arch/aarch64/*") -C_SOURCES := $(shell find ./ -type f -name '*.c' -not -path "./arch/i386/*" -not -path "./arch/aarch64/*") -CXX_SOURCES := $(shell find ./ -type f -name '*.cpp' -not -path "./arch/i386/*" -not -path "./arch/aarch64/*") -else ifeq ($(OSARCH), i386) -S_SOURCES := $(shell find ./ -type f -name '*.S' -not -path "./arch/amd64/*" -not -path "./arch/aarch64/*") -s_SOURCES := $(shell find ./ -type f -name '*.s' -not -path "./arch/amd64/*" -not -path "./arch/aarch64/*") -C_SOURCES := $(shell find ./ -type f -name '*.c' -not -path "./arch/amd64/*" -not -path "./arch/aarch64/*") -CXX_SOURCES := $(shell find ./ -type f -name '*.cpp' -not -path "./arch/amd64/*" -not -path "./arch/aarch64/*") -else ifeq ($(OSARCH), aarch64) -S_SOURCES := $(shell find ./ -type f -name '*.S' -not -path "./arch/amd64/*" -not -path "./arch/i386/*") -s_SOURCES := $(shell find ./ -type f -name '*.s' -not -path "./arch/amd64/*" -not -path "./arch/i386/*") -C_SOURCES := $(shell find ./ -type f -name '*.c' -not -path "./arch/amd64/*" -not -path "./arch/i386/*") -CXX_SOURCES := $(shell find ./ -type f -name '*.cpp' -not -path "./arch/amd64/*" -not -path "./arch/i386/*") -endif # OSARCH +define find-sources + $(shell find ./ -type f -name '$1' $(shell echo $(foreach arch,$(filter-out $(OSARCH),$(AVAILABLE_ARCHS)), -not -path \"./arch/$(arch)/*\")) -print0 | xargs -0) +endef + +BMP_SOURCES := $(call find-sources,*.bmp) +PSF_SOURCES := $(call find-sources,*.psf) +S_SOURCES := $(call find-sources,*.S) +s_SOURCES := $(call find-sources,*.s) +C_SOURCES := $(call find-sources,*.c) +CXX_SOURCES := $(call find-sources,*.cpp) OBJ = $(BMP_SOURCES:.bmp=.o) $(PSF_SOURCES:.psf=.o) $(s_SOURCES:.s=.o) $(S_SOURCES:.S=.o) $(C_SOURCES:.c=.o) $(CXX_SOURCES:.cpp=.o) STACK_USAGE_OBJ = $(C_SOURCES:.c=.su) $(CXX_SOURCES:.cpp=.su) diff --git a/config.mk b/config.mk index da9d9dcf..1e697c58 100644 --- a/config.mk +++ b/config.mk @@ -5,8 +5,8 @@ DEBUG = 1 # Operating system name. OSNAME = Fennix -# OS architecture: amd64, i386, aarch64 -OSARCH = amd64 +# OS architecture, check AVAILABLE_ARCHS for available options. +OSARCH = i386 # Kernel version. KERNEL_VERSION = dev @@ -53,28 +53,27 @@ USE_LIBC = internal # Do not change anything below this line unless # you know what you are doing. -ifeq ($(OSARCH), amd64) -COMPILER_ARCH = x86_64 -__CONF_QEMU_PATH := $(__CONF_QEMU_PATH)/bin/qemu-system-x86_64 -else ifeq ($(OSARCH), i386) -COMPILER_ARCH = i386 -__CONF_QEMU_PATH := $(__CONF_QEMU_PATH)/bin/qemu-system-i386 -else ifeq ($(OSARCH), aarch64) -COMPILER_ARCH = aarch64 -__CONF_QEMU_PATH := $(__CONF_QEMU_PATH)/bin/qemu-system-aarch64 +# Available architectures. Do not change +export AVAILABLE_ARCHS := amd64 i386 aarch64 + +ifneq ($(filter $(OSARCH),$(AVAILABLE_ARCHS)),$(OSARCH)) +$(error OSARCH=$(OSARCH) is not a supported architecture. Choose one of: $(AVAILABLE_ARCHS)) endif -export __CONF_QEMU_PATH +ARCH_MAP := amd64=x86_64 i386=i386 aarch64=aarch64 +COMPILER_ARCH := $(patsubst $(OSARCH)=%,%,$(filter $(OSARCH)=%,$(ARCH_MAP))) +__CONF_QEMU_PATH := $(__CONF_QEMU_PATH)/bin/qemu-system-$(COMPILER_ARCH) +TOOLCHAIN_PREFIX := $(COMPILER_PATH)/bin/$(COMPILER_ARCH)-fennix- -export __CONF_CC := $(COMPILER_PATH)/bin/$(COMPILER_ARCH)-fennix-gcc -export __CONF_CXX := $(COMPILER_PATH)/bin/$(COMPILER_ARCH)-fennix-g++ -export __CONF_LD := $(COMPILER_PATH)/bin/$(COMPILER_ARCH)-fennix-ld -export __CONF_AS := $(COMPILER_PATH)/bin/$(COMPILER_ARCH)-fennix-as -export __CONF_AR := $(COMPILER_PATH)/bin/$(COMPILER_ARCH)-fennix-ar -export __CONF_NM := $(COMPILER_PATH)/bin/$(COMPILER_ARCH)-fennix-nm -export __CONF_OBJCOPY := $(COMPILER_PATH)/bin/$(COMPILER_ARCH)-fennix-objcopy -export __CONF_OBJDUMP := $(COMPILER_PATH)/bin/$(COMPILER_ARCH)-fennix-objdump -export __CONF_GDB := $(COMPILER_PATH)/bin/$(COMPILER_ARCH)-fennix-gdb +export __CONF_CC := $(TOOLCHAIN_PREFIX)gcc +export __CONF_CXX := $(TOOLCHAIN_PREFIX)g++ +export __CONF_LD := $(TOOLCHAIN_PREFIX)ld +export __CONF_AS := $(TOOLCHAIN_PREFIX)as +export __CONF_AR := $(TOOLCHAIN_PREFIX)ar +export __CONF_NM := $(TOOLCHAIN_PREFIX)nm +export __CONF_OBJCOPY := $(TOOLCHAIN_PREFIX)objcopy +export __CONF_OBJDUMP := $(TOOLCHAIN_PREFIX)objdump +export __CONF_GDB := $(TOOLCHAIN_PREFIX)gdb export DEBUG export OSNAME