diff --git a/Kernel/Cargo.toml b/Kernel/Cargo.toml index 1017b5fb67b0094894333782eea18063ab29edb0..0e7c43f21a959bfcca18ec6a2b55ab5dde9dbde7 100644 --- a/Kernel/Cargo.toml +++ b/Kernel/Cargo.toml @@ -6,6 +6,9 @@ version = "0.0.0" path = "main/main.rs" crate-type = ["staticlib"] +[features] +acpica = [ "kernel/acpica" ] + [dependencies] kernel = { path = "Core" } syscalls = { path = "Modules/syscalls" } diff --git a/Kernel/Core/Cargo.toml b/Kernel/Core/Cargo.toml index e690200584966744e2f549a332a2bb4a84594f89..2c5ee9234522cfe230510b03b6814bf6cdd2a416 100644 --- a/Kernel/Core/Cargo.toml +++ b/Kernel/Core/Cargo.toml @@ -5,6 +5,10 @@ version = "0.0.0" [lib] path = "main.rs" +[features] +acpica = [ "va_list" ] + [dependencies] stack_dst = { path = "../../externals/crates.io/stack_dst", default-features = false } tag_safe = "0.2" +va_list = { version = "0.1", default-features = false, features = ["no_std"], optional = true } diff --git a/Kernel/Core/arch/amd64/acpi/mod.rs b/Kernel/Core/arch/amd64/acpi/mod.rs index c14a27a56a3f902c8d838129ff36e5cab88e890d..06258946b36cacaa702a1e82545a0bb83738fb52 100644 --- a/Kernel/Core/arch/amd64/acpi/mod.rs +++ b/Kernel/Core/arch/amd64/acpi/mod.rs @@ -10,10 +10,9 @@ use prelude::*; module_define!{ACPI, [], init} -#[cfg(use_acpica)] -#[path="acpica/mod.rs"] mod internal; -#[cfg(not(use_acpica))] -#[path="mine/mod.rs"] mod internal; +#[cfg_attr(any(use_acpica,feature="acpica"), path="acpica/mod.rs")] +#[cfg_attr(not(any(use_acpica,feature="acpica")), path="mine/mod.rs")] +mod internal; #[repr(u8)] #[derive(Copy,Clone,PartialEq)] diff --git a/Kernel/Makefile b/Kernel/Makefile index fd70a7dc19f300acb23b4fc3ca30e8484346f54d..ef9f18f561eca29a35f122fd511ad58dbfac3a8b 100644 --- a/Kernel/Makefile +++ b/Kernel/Makefile @@ -117,7 +117,7 @@ OBJS := $(filter-out $(EXT_CRATES:%=%.o), $(OBJS)) OBJS := $(OBJS:%=$(OBJDIR)%) LIBS := $(OBJDIR)libcore.rlib $(OBJDIR)libcompiler_builtins.rlib $(EXT_CRATES:%=$(OBJDIR)lib%.rlib) ifeq ($(USE_ACPICA),1) - LIBS += $(OBJDIR)acpica.a + LIBS += $(OBJDIR)libacpica.a endif .SUFFIXES: @@ -249,7 +249,7 @@ $(OBJDIR)libcompiler_builtins.rlib: $(RUSTUP_SRC_DIR)libcompiler_builtins/src/li $V$(ENV) $(RUSTC) $(RUSTFLAGS) --emit=link,dep-info --out-dir $(dir $@) --cfg feature=\"compiler-builtins\" $< --cfg stage0 @cp $(OBJDIR)core.d $(OBJDIR)libcore.d -$(OBJDIR)acpica.a: ../acpica/Makefile $(wildcard ../acpica/patches/source/include/platform/*) +$(OBJDIR)libacpica.a: ../acpica/Makefile $(wildcard ../acpica/patches/source/include/platform/*) make -C ../acpica TRIPLE=$(TRIPLE) ARCH=$(ARCH) srcdir make -C ../acpica TRIPLE=$(TRIPLE) ARCH=$(ARCH) cp ../acpica/acpica-$(TRIPLE).a $@ diff --git a/Kernel/Makefile-xargo b/Kernel/Makefile-xargo index 2cb7ab011f318983ff7521262b0d0583e84a2110..ec447a8dd9c884e2e5ed41685f9db4d06cc539fb 100644 --- a/Kernel/Makefile-xargo +++ b/Kernel/Makefile-xargo @@ -4,12 +4,20 @@ V ?= @ -include ../common.mk +# - ACPICA can only be used on x86_64/amd64 +ifeq ($(ARCH),amd64) + USE_ACPICA ?= 1 +else + USE_ACPICA = 0 +endif + -include BuildNum.$(ARCH).mk BUILDNUM ?= 1 OBJDIR := .obj/$(ARCH)/ OBJS := $(addprefix $(OBJDIR),start.ao log_cfg.ao libmain.a) +CARGO_FEATURES := ENV := RUST_VERSION="$(shell $(RUSTC) --version)" ENV += TK_GITSPEC="$(shell git log -n 1 | head -n 1 | awk '{print $$2}')" ENV += TK_VERSION="0.1" @@ -21,8 +29,10 @@ LINKFLAGS += --gc-sections # Prevents complaining about floating point methods #LINKFLAGS += --print-gc-sections EXCLUDE_FEATURES := -ifeq ($(ARCH),amd64) -EXCLUDE_FEATURES := 3dnow avx avx2 sse sse2 sse3 sse4.1 sse4.2 mmx + +ifeq ($(USE_ACPICA),1) + OBJS += $(OBJDIR)libacpica.a + CARGO_FEATURES += acpica endif XARGO := RUST_TARGET_PATH=$(abspath targets) $(XARGO) @@ -61,7 +71,7 @@ endif # $(OBJDIR)libmain.a: PHONY targets/target-$(ARCH).json @echo "[XARGO] . > $@" - $V$(ENV) $(XARGO) rustc --target=target-$(ARCH) --release -- -C target-feature=$(subst $(space),$(comma),$(EXCLUDE_FEATURES:%=-%)) + $V$(ENV) $(XARGO) rustc --target=target-$(ARCH) --release --features "$(CARGO_FEATURES)" -- -C target-feature=$(subst $(space),$(comma),$(EXCLUDE_FEATURES:%=-%)) @mkdir -p $(dir $@) @cp target/target-$(ARCH)/release/libmain.a $@ @@ -69,6 +79,12 @@ targets/target-$(ARCH).json: Core/arch/$(ARCH)/target.json @mkdir -p $(dir $@) $Vcp $< $@ +# ACPICA +$(OBJDIR)libacpica.a: ../acpica/Makefile $(wildcard ../acpica/patches/source/include/platform/*) + make -C ../acpica TRIPLE=$(TRIPLE) ARCH=$(ARCH) srcdir + make -C ../acpica TRIPLE=$(TRIPLE) ARCH=$(ARCH) + cp ../acpica/acpica-$(TRIPLE).a $@ + $(OBJDIR)%.ao: Core/arch/$(ARCH)/%.asm @echo [AS] -o $@ @mkdir -p $(dir $@) @@ -82,3 +98,4 @@ $(OBJDIR)log_cfg.ao: Core/log_cfg.S @echo [AS] -o $@ @mkdir -p $(dir $@) $V$(CC) -o $@ -c $< +