Makefile (681c5b51dc6b8ff1ec05555243eccf64a08cb2fd) | Makefile (4e1746656839ab1e88d76eec4d2fa0b41d585604) |
---|---|
1# SPDX-License-Identifier: GPL-2.0 2 3obj-$(CONFIG_RUST) += core.o compiler_builtins.o 4always-$(CONFIG_RUST) += exports_core_generated.h 5 6# Missing prototypes are expected in the helpers since these are exported 7# for Rust only, thus there is no header nor prototypes. 8obj-$(CONFIG_RUST) += helpers.o 9CFLAGS_REMOVE_helpers.o = -Wmissing-prototypes -Wmissing-declarations 10 11always-$(CONFIG_RUST) += libmacros.so 12no-clean-files += libmacros.so 13 14always-$(CONFIG_RUST) += bindings/bindings_generated.rs bindings/bindings_helpers_generated.rs 15obj-$(CONFIG_RUST) += alloc.o bindings.o kernel.o 16always-$(CONFIG_RUST) += exports_alloc_generated.h exports_bindings_generated.h \ 17 exports_kernel_generated.h 18 | 1# SPDX-License-Identifier: GPL-2.0 2 3obj-$(CONFIG_RUST) += core.o compiler_builtins.o 4always-$(CONFIG_RUST) += exports_core_generated.h 5 6# Missing prototypes are expected in the helpers since these are exported 7# for Rust only, thus there is no header nor prototypes. 8obj-$(CONFIG_RUST) += helpers.o 9CFLAGS_REMOVE_helpers.o = -Wmissing-prototypes -Wmissing-declarations 10 11always-$(CONFIG_RUST) += libmacros.so 12no-clean-files += libmacros.so 13 14always-$(CONFIG_RUST) += bindings/bindings_generated.rs bindings/bindings_helpers_generated.rs 15obj-$(CONFIG_RUST) += alloc.o bindings.o kernel.o 16always-$(CONFIG_RUST) += exports_alloc_generated.h exports_bindings_generated.h \ 17 exports_kernel_generated.h 18 |
19always-$(CONFIG_RUST) += uapi/uapi_generated.rs 20obj-$(CONFIG_RUST) += uapi.o 21 |
|
19ifdef CONFIG_RUST_BUILD_ASSERT_ALLOW 20obj-$(CONFIG_RUST) += build_error.o 21else 22always-$(CONFIG_RUST) += build_error.o 23endif 24 25obj-$(CONFIG_RUST) += exports.o 26 --- 81 unchanged lines hidden (view full) --- 108# due to things that are "configured out" vs. entirely non-existing ones. 109rustdoc-alloc: private rustc_target_flags = $(alloc-cfgs) \ 110 -Arustdoc::broken_intra_doc_links 111rustdoc-alloc: $(src)/alloc/lib.rs rustdoc-core rustdoc-compiler_builtins FORCE 112 $(call if_changed,rustdoc) 113 114rustdoc-kernel: private rustc_target_flags = --extern alloc \ 115 --extern build_error --extern macros=$(objtree)/$(obj)/libmacros.so \ | 22ifdef CONFIG_RUST_BUILD_ASSERT_ALLOW 23obj-$(CONFIG_RUST) += build_error.o 24else 25always-$(CONFIG_RUST) += build_error.o 26endif 27 28obj-$(CONFIG_RUST) += exports.o 29 --- 81 unchanged lines hidden (view full) --- 111# due to things that are "configured out" vs. entirely non-existing ones. 112rustdoc-alloc: private rustc_target_flags = $(alloc-cfgs) \ 113 -Arustdoc::broken_intra_doc_links 114rustdoc-alloc: $(src)/alloc/lib.rs rustdoc-core rustdoc-compiler_builtins FORCE 115 $(call if_changed,rustdoc) 116 117rustdoc-kernel: private rustc_target_flags = --extern alloc \ 118 --extern build_error --extern macros=$(objtree)/$(obj)/libmacros.so \ |
116 --extern bindings | 119 --extern bindings --extern uapi |
117rustdoc-kernel: $(src)/kernel/lib.rs rustdoc-core rustdoc-macros \ 118 rustdoc-compiler_builtins rustdoc-alloc $(obj)/libmacros.so \ 119 $(obj)/bindings.o FORCE 120 $(call if_changed,rustdoc) 121 122quiet_cmd_rustc_test_library = RUSTC TL $< 123 cmd_rustc_test_library = \ 124 OBJTREE=$(abspath $(objtree)) \ --- 11 unchanged lines hidden (view full) --- 136rusttestlib-macros: private rustc_target_flags = --extern proc_macro 137rusttestlib-macros: private rustc_test_library_proc = yes 138rusttestlib-macros: $(src)/macros/lib.rs rusttest-prepare FORCE 139 $(call if_changed,rustc_test_library) 140 141rusttestlib-bindings: $(src)/bindings/lib.rs rusttest-prepare FORCE 142 $(call if_changed,rustc_test_library) 143 | 120rustdoc-kernel: $(src)/kernel/lib.rs rustdoc-core rustdoc-macros \ 121 rustdoc-compiler_builtins rustdoc-alloc $(obj)/libmacros.so \ 122 $(obj)/bindings.o FORCE 123 $(call if_changed,rustdoc) 124 125quiet_cmd_rustc_test_library = RUSTC TL $< 126 cmd_rustc_test_library = \ 127 OBJTREE=$(abspath $(objtree)) \ --- 11 unchanged lines hidden (view full) --- 139rusttestlib-macros: private rustc_target_flags = --extern proc_macro 140rusttestlib-macros: private rustc_test_library_proc = yes 141rusttestlib-macros: $(src)/macros/lib.rs rusttest-prepare FORCE 142 $(call if_changed,rustc_test_library) 143 144rusttestlib-bindings: $(src)/bindings/lib.rs rusttest-prepare FORCE 145 $(call if_changed,rustc_test_library) 146 |
147rusttestlib-uapi: $(src)/uapi/lib.rs rusttest-prepare FORCE 148 $(call if_changed,rustc_test_library) 149 |
|
144quiet_cmd_rustdoc_test = RUSTDOC T $< 145 cmd_rustdoc_test = \ 146 OBJTREE=$(abspath $(objtree)) \ 147 $(RUSTDOC) --test $(rust_common_flags) \ 148 @$(objtree)/include/generated/rustc_cfg \ 149 $(rustc_target_flags) $(rustdoc_test_target_flags) \ 150 --sysroot $(objtree)/$(obj)/test/sysroot $(rustdoc_test_quiet) \ 151 -L$(objtree)/$(obj)/test --output $(objtree)/$(obj)/doc \ --- 66 unchanged lines hidden (view full) --- 218 219rusttest-macros: private rustc_target_flags = --extern proc_macro 220rusttest-macros: private rustdoc_test_target_flags = --crate-type proc-macro 221rusttest-macros: $(src)/macros/lib.rs rusttest-prepare FORCE 222 $(call if_changed,rustc_test) 223 $(call if_changed,rustdoc_test) 224 225rusttest-kernel: private rustc_target_flags = --extern alloc \ | 150quiet_cmd_rustdoc_test = RUSTDOC T $< 151 cmd_rustdoc_test = \ 152 OBJTREE=$(abspath $(objtree)) \ 153 $(RUSTDOC) --test $(rust_common_flags) \ 154 @$(objtree)/include/generated/rustc_cfg \ 155 $(rustc_target_flags) $(rustdoc_test_target_flags) \ 156 --sysroot $(objtree)/$(obj)/test/sysroot $(rustdoc_test_quiet) \ 157 -L$(objtree)/$(obj)/test --output $(objtree)/$(obj)/doc \ --- 66 unchanged lines hidden (view full) --- 224 225rusttest-macros: private rustc_target_flags = --extern proc_macro 226rusttest-macros: private rustdoc_test_target_flags = --crate-type proc-macro 227rusttest-macros: $(src)/macros/lib.rs rusttest-prepare FORCE 228 $(call if_changed,rustc_test) 229 $(call if_changed,rustdoc_test) 230 231rusttest-kernel: private rustc_target_flags = --extern alloc \ |
226 --extern build_error --extern macros --extern bindings | 232 --extern build_error --extern macros --extern bindings --extern uapi |
227rusttest-kernel: $(src)/kernel/lib.rs rusttest-prepare \ | 233rusttest-kernel: $(src)/kernel/lib.rs rusttest-prepare \ |
228 rusttestlib-build_error rusttestlib-macros rusttestlib-bindings FORCE | 234 rusttestlib-build_error rusttestlib-macros rusttestlib-bindings \ 235 rusttestlib-uapi FORCE |
229 $(call if_changed,rustc_test) 230 $(call if_changed,rustc_test_library) 231 232ifdef CONFIG_CC_IS_CLANG 233bindgen_c_flags = $(c_flags) 234else 235# bindgen relies on libclang to parse C. Ideally, bindgen would support a GCC 236# plugin backend and/or the Clang driver would be perfectly compatible with GCC. --- 20 unchanged lines hidden (view full) --- 257BINDGEN_TARGET_x86 := x86_64-linux-gnu 258BINDGEN_TARGET := $(BINDGEN_TARGET_$(SRCARCH)) 259 260# All warnings are inhibited since GCC builds are very experimental, 261# many GCC warnings are not supported by Clang, they may only appear in 262# some configurations, with new GCC versions, etc. 263bindgen_extra_c_flags = -w --target=$(BINDGEN_TARGET) 264 | 236 $(call if_changed,rustc_test) 237 $(call if_changed,rustc_test_library) 238 239ifdef CONFIG_CC_IS_CLANG 240bindgen_c_flags = $(c_flags) 241else 242# bindgen relies on libclang to parse C. Ideally, bindgen would support a GCC 243# plugin backend and/or the Clang driver would be perfectly compatible with GCC. --- 20 unchanged lines hidden (view full) --- 264BINDGEN_TARGET_x86 := x86_64-linux-gnu 265BINDGEN_TARGET := $(BINDGEN_TARGET_$(SRCARCH)) 266 267# All warnings are inhibited since GCC builds are very experimental, 268# many GCC warnings are not supported by Clang, they may only appear in 269# some configurations, with new GCC versions, etc. 270bindgen_extra_c_flags = -w --target=$(BINDGEN_TARGET) 271 |
265# Auto variable zero-initialization requires an additional special option with 266# clang that is going to be removed sometime in the future (likely in 267# clang-18), so make sure to pass this option only if clang supports it 268# (libclang major version < 16). 269# 270# https://github.com/llvm/llvm-project/issues/44842 271# https://github.com/llvm/llvm-project/blob/llvmorg-16.0.0-rc2/clang/docs/ReleaseNotes.rst#deprecated-compiler-flags 272ifdef CONFIG_INIT_STACK_ALL_ZERO 273libclang_maj_ver=$(shell $(BINDGEN) $(srctree)/scripts/rust_is_available_bindgen_libclang.h 2>&1 | sed -ne 's/.*clang version \([0-9]*\).*/\1/p') 274ifeq ($(shell expr $(libclang_maj_ver) \< 16), 1) 275bindgen_extra_c_flags += -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang 276endif 277endif 278 | |
279bindgen_c_flags = $(filter-out $(bindgen_skip_c_flags), $(c_flags)) \ 280 $(bindgen_extra_c_flags) 281endif 282 283ifdef CONFIG_LTO 284bindgen_c_flags_lto = $(filter-out $(CC_FLAGS_LTO), $(bindgen_c_flags)) 285else 286bindgen_c_flags_lto = $(bindgen_c_flags) --- 5 unchanged lines hidden (view full) --- 292 cmd_bindgen = \ 293 $(BINDGEN) $< $(bindgen_target_flags) \ 294 --use-core --with-derive-default --ctypes-prefix core::ffi --no-layout-tests \ 295 --no-debug '.*' \ 296 --size_t-is-usize -o $@ -- $(bindgen_c_flags_final) -DMODULE \ 297 $(bindgen_target_cflags) $(bindgen_target_extra) 298 299$(obj)/bindings/bindings_generated.rs: private bindgen_target_flags = \ | 272bindgen_c_flags = $(filter-out $(bindgen_skip_c_flags), $(c_flags)) \ 273 $(bindgen_extra_c_flags) 274endif 275 276ifdef CONFIG_LTO 277bindgen_c_flags_lto = $(filter-out $(CC_FLAGS_LTO), $(bindgen_c_flags)) 278else 279bindgen_c_flags_lto = $(bindgen_c_flags) --- 5 unchanged lines hidden (view full) --- 285 cmd_bindgen = \ 286 $(BINDGEN) $< $(bindgen_target_flags) \ 287 --use-core --with-derive-default --ctypes-prefix core::ffi --no-layout-tests \ 288 --no-debug '.*' \ 289 --size_t-is-usize -o $@ -- $(bindgen_c_flags_final) -DMODULE \ 290 $(bindgen_target_cflags) $(bindgen_target_extra) 291 292$(obj)/bindings/bindings_generated.rs: private bindgen_target_flags = \ |
300 $(shell grep -v '^#\|^$$' $(srctree)/$(src)/bindgen_parameters) | 293 $(shell grep -v '^\#\|^$$' $(srctree)/$(src)/bindgen_parameters) |
301$(obj)/bindings/bindings_generated.rs: $(src)/bindings/bindings_helper.h \ 302 $(src)/bindgen_parameters FORCE 303 $(call if_changed_dep,bindgen) 304 | 294$(obj)/bindings/bindings_generated.rs: $(src)/bindings/bindings_helper.h \ 295 $(src)/bindgen_parameters FORCE 296 $(call if_changed_dep,bindgen) 297 |
298$(obj)/uapi/uapi_generated.rs: private bindgen_target_flags = \ 299 $(shell grep -v '^#\|^$$' $(srctree)/$(src)/bindgen_parameters) 300$(obj)/uapi/uapi_generated.rs: $(src)/uapi/uapi_helper.h \ 301 $(src)/bindgen_parameters FORCE 302 $(call if_changed_dep,bindgen) 303 |
|
305# See `CFLAGS_REMOVE_helpers.o` above. In addition, Clang on C does not warn 306# with `-Wmissing-declarations` (unlike GCC), so it is not strictly needed here 307# given it is `libclang`; but for consistency, future Clang changes and/or 308# a potential future GCC backend for `bindgen`, we disable it too. 309$(obj)/bindings/bindings_helpers_generated.rs: private bindgen_target_flags = \ 310 --blacklist-type '.*' --whitelist-var '' \ 311 --whitelist-function 'rust_helper_.*' 312$(obj)/bindings/bindings_helpers_generated.rs: private bindgen_target_cflags = \ --- 84 unchanged lines hidden (view full) --- 397 $(call if_changed_dep,rustc_library) 398 399$(obj)/bindings.o: $(src)/bindings/lib.rs \ 400 $(obj)/compiler_builtins.o \ 401 $(obj)/bindings/bindings_generated.rs \ 402 $(obj)/bindings/bindings_helpers_generated.rs FORCE 403 $(call if_changed_dep,rustc_library) 404 | 304# See `CFLAGS_REMOVE_helpers.o` above. In addition, Clang on C does not warn 305# with `-Wmissing-declarations` (unlike GCC), so it is not strictly needed here 306# given it is `libclang`; but for consistency, future Clang changes and/or 307# a potential future GCC backend for `bindgen`, we disable it too. 308$(obj)/bindings/bindings_helpers_generated.rs: private bindgen_target_flags = \ 309 --blacklist-type '.*' --whitelist-var '' \ 310 --whitelist-function 'rust_helper_.*' 311$(obj)/bindings/bindings_helpers_generated.rs: private bindgen_target_cflags = \ --- 84 unchanged lines hidden (view full) --- 396 $(call if_changed_dep,rustc_library) 397 398$(obj)/bindings.o: $(src)/bindings/lib.rs \ 399 $(obj)/compiler_builtins.o \ 400 $(obj)/bindings/bindings_generated.rs \ 401 $(obj)/bindings/bindings_helpers_generated.rs FORCE 402 $(call if_changed_dep,rustc_library) 403 |
404$(obj)/uapi.o: $(src)/uapi/lib.rs \ 405 $(obj)/compiler_builtins.o \ 406 $(obj)/uapi/uapi_generated.rs FORCE 407 $(call if_changed_dep,rustc_library) 408 |
|
405$(obj)/kernel.o: private rustc_target_flags = --extern alloc \ | 409$(obj)/kernel.o: private rustc_target_flags = --extern alloc \ |
406 --extern build_error --extern macros --extern bindings | 410 --extern build_error --extern macros --extern bindings --extern uapi |
407$(obj)/kernel.o: $(src)/kernel/lib.rs $(obj)/alloc.o $(obj)/build_error.o \ | 411$(obj)/kernel.o: $(src)/kernel/lib.rs $(obj)/alloc.o $(obj)/build_error.o \ |
408 $(obj)/libmacros.so $(obj)/bindings.o FORCE | 412 $(obj)/libmacros.so $(obj)/bindings.o $(obj)/uapi.o FORCE |
409 $(call if_changed_dep,rustc_library) 410 411endif # CONFIG_RUST | 413 $(call if_changed_dep,rustc_library) 414 415endif # CONFIG_RUST |