diff options
Diffstat (limited to 'scripts/Makefile.lib')
-rw-r--r-- | scripts/Makefile.lib | 37 |
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) |