summaryrefslogtreecommitdiffstats
path: root/scripts/Makefile.lib
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/Makefile.lib')
-rw-r--r--scripts/Makefile.lib37
1 files changed, 36 insertions, 1 deletions
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 3d599716940c..939062f389d3 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -20,6 +20,8 @@ endif
# flags that take effect in current and sub directories
KBUILD_AFLAGS += $(subdir-asflags-y)
KBUILD_CFLAGS += $(subdir-ccflags-y)
+KBUILD_RUSTCFLAGS += $(subdir-rustcflags-y)
+KBUILD_CARGOFLAGS += $(subdir-cargoflags-y)
# Figure out what we need to build from the various variables
# ===========================================================================
@@ -126,6 +128,14 @@ _c_flags = $(filter-out $(CFLAGS_REMOVE_$(target-stem).o), \
$(filter-out $(ccflags-remove-y), \
$(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(ccflags-y)) \
$(CFLAGS_$(target-stem).o))
+_rustc_flags = $(filter-out $(RUSTCFLAGS_REMOVE_$(target-stem).o), \
+ $(filter-out $(rustcflags-remove-y), \
+ $(KBUILD_RUSTCFLAGS) $(rustcflags-y)) \
+ $(RUSTCFLAGS_$(target-stem).o))
+_cargo_flags = $(filter-out $(CARGOFLAGS_REMOVE_$(target-stem).o), \
+ $(filter-out $(cargoflags-remove-y), \
+ $(KBUILD_CARGOFLAGS) $(cargoflags-y)) \
+ $(CARGOFLAGS_$(target-stem).o))
_a_flags = $(filter-out $(AFLAGS_REMOVE_$(target-stem).o), \
$(filter-out $(asflags-remove-y), \
$(KBUILD_CPPFLAGS) $(KBUILD_AFLAGS) $(asflags-y)) \
@@ -185,7 +195,8 @@ _cpp_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj)
endif
endif
-part-of-module = $(if $(filter $(basename $@).o, $(real-obj-m)),y)
+# TODO: quick hack
+part-of-module = $(if $(filter $(basename $@).o,$(real-obj-m)),y,$(and $(real-obj-m),$(shell echo $@ | sed -E 's!.+/out/lib.+\.a!y!;t;d')))
quiet_modtag = $(if $(part-of-module),[M], )
modkern_cflags = \
@@ -193,6 +204,16 @@ modkern_cflags = \
$(KBUILD_CFLAGS_MODULE) $(CFLAGS_MODULE), \
$(KBUILD_CFLAGS_KERNEL) $(CFLAGS_KERNEL) $(modfile_flags))
+modkern_rustcflags = \
+ $(if $(part-of-module), \
+ $(KBUILD_RUSTCFLAGS_MODULE) $(RUSTCFLAGS_MODULE), \
+ $(KBUILD_RUSTCFLAGS_KERNEL) $(RUSTCFLAGS_KERNEL))
+
+modkern_cargoflags = \
+ $(if $(part-of-module), \
+ $(KBUILD_CARGOFLAGS_MODULE) $(CARGOFLAGS_MODULE), \
+ $(KBUILD_CARGOFLAGS_KERNEL) $(CARGOFLAGS_KERNEL))
+
modkern_aflags = $(if $(part-of-module), \
$(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE), \
$(KBUILD_AFLAGS_KERNEL) $(AFLAGS_KERNEL))
@@ -202,6 +223,20 @@ c_flags = -Wp,-MMD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
$(_c_flags) $(modkern_cflags) \
$(basename_flags) $(modname_flags)
+# Needed for the Rust bindings
+# TODO: we unconditionally pass `KBUILD_CFLAGS_MODULE` to avoid having
+# dual bindings, but ideally we should generate two set of bindings
+RUST_BINDGEN_CFLAGS = $(c_flags) $(KBUILD_CFLAGS_MODULE)
+export RUST_BINDGEN_CFLAGS
+
+rustc_flags = $(_rustc_flags) $(modkern_rustcflags)
+
+# Passed by cargo
+RUSTFLAGS = $(rustc_flags)
+export RUSTFLAGS
+
+cargo_flags = $(_cargo_flags) $(modkern_cargoflags)
+
a_flags = -Wp,-MMD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
$(_a_flags) $(modkern_aflags)