~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/rust/Makefile

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /rust/Makefile (Version linux-6.12-rc7) and /rust/Makefile (Version linux-2.6.0)


  1 # SPDX-License-Identifier: GPL-2.0                
  2                                                   
  3 # Where to place rustdoc generated documentati    
  4 rustdoc_output := $(objtree)/Documentation/out    
  5                                                   
  6 obj-$(CONFIG_RUST) += core.o compiler_builtins    
  7 always-$(CONFIG_RUST) += exports_core_generate    
  8                                                   
  9 # Missing prototypes are expected in the helpe    
 10 # for Rust only, thus there is no header nor p    
 11 obj-$(CONFIG_RUST) += helpers/helpers.o           
 12 CFLAGS_REMOVE_helpers/helpers.o = -Wmissing-pr    
 13                                                   
 14 always-$(CONFIG_RUST) += libmacros.so             
 15 no-clean-files += libmacros.so                    
 16                                                   
 17 always-$(CONFIG_RUST) += bindings/bindings_gen    
 18 obj-$(CONFIG_RUST) += alloc.o bindings.o kerne    
 19 always-$(CONFIG_RUST) += exports_alloc_generat    
 20     exports_bindings_generated.h exports_kerne    
 21                                                   
 22 always-$(CONFIG_RUST) += uapi/uapi_generated.r    
 23 obj-$(CONFIG_RUST) += uapi.o                      
 24                                                   
 25 ifdef CONFIG_RUST_BUILD_ASSERT_ALLOW              
 26 obj-$(CONFIG_RUST) += build_error.o               
 27 else                                              
 28 always-$(CONFIG_RUST) += build_error.o            
 29 endif                                             
 30                                                   
 31 obj-$(CONFIG_RUST) += exports.o                   
 32                                                   
 33 always-$(CONFIG_RUST_KERNEL_DOCTESTS) += docte    
 34 always-$(CONFIG_RUST_KERNEL_DOCTESTS) += docte    
 35                                                   
 36 obj-$(CONFIG_RUST_KERNEL_DOCTESTS) += doctests    
 37 obj-$(CONFIG_RUST_KERNEL_DOCTESTS) += doctests    
 38                                                   
 39 # Avoids running `$(RUSTC)` for the sysroot wh    
 40 ifdef CONFIG_RUST                                 
 41                                                   
 42 # `$(rust_flags)` is passed in case the user a    
 43 rustc_sysroot := $(shell MAKEFLAGS= $(RUSTC) $    
 44 rustc_host_target := $(shell $(RUSTC) --versio    
 45 RUST_LIB_SRC ?= $(rustc_sysroot)/lib/rustlib/s    
 46                                                   
 47 ifneq ($(quiet),)                                 
 48 rust_test_quiet=-q                                
 49 rustdoc_test_quiet=--test-args -q                 
 50 rustdoc_test_kernel_quiet=>/dev/null              
 51 endif                                             
 52                                                   
 53 core-cfgs = \                                     
 54     --cfg no_fp_fmt_parse                         
 55                                                   
 56 alloc-cfgs = \                                    
 57     --cfg no_global_oom_handling \                
 58     --cfg no_rc \                                 
 59     --cfg no_sync                                 
 60                                                   
 61 quiet_cmd_rustdoc = RUSTDOC $(if $(rustdoc_hos    
 62       cmd_rustdoc = \                             
 63         OBJTREE=$(abspath $(objtree)) \           
 64         $(RUSTDOC) $(if $(rustdoc_host),$(rust    
 65                 $(rustc_target_flags) -L$(objt    
 66                 -Zunstable-options --generate-    
 67                 --output $(rustdoc_output) \      
 68                 --crate-name $(subst rustdoc-,    
 69                 $(if $(rustdoc_host),,--sysroo    
 70                 @$(objtree)/include/generated/    
 71                                                   
 72 # The `html_logo_url` and `html_favicon_url` f    
 73 # can be used to specify a custom logo. Howeve    
 74 #   - The given value is used as-is, thus it c    
 75 #     (unlike the non-custom case) since the g    
 76 #   - It requires adding it to every crate.       
 77 #   - It requires changing `core` which comes     
 78 #                                                 
 79 # Using `-Zcrate-attr` would solve the last tw    
 80 # The https://github.com/rust-lang/rfcs/pull/3    
 81 # command-like flags to solve the issue. Meanw    
 82 # and then retouch the generated files.           
 83 rustdoc: rustdoc-core rustdoc-macros rustdoc-c    
 84     rustdoc-alloc rustdoc-kernel                  
 85         $(Q)cp $(srctree)/Documentation/images    
 86         $(Q)cp $(srctree)/Documentation/images    
 87         $(Q)find $(rustdoc_output) -name '*.ht    
 88                 -e 's:rust-logo-[0-9a-f]+\.svg    
 89                 -e 's:favicon-[0-9a-f]+\.svg:l    
 90                 -e 's:<link rel="alternate ico    
 91                 -e 's:<a href="srctree/([^"]+)    
 92         $(Q)for f in $(rustdoc_output)/static.    
 93                 echo ".logo-container > img {     
 94                                                   
 95 rustdoc-macros: private rustdoc_host = yes        
 96 rustdoc-macros: private rustc_target_flags = -    
 97     --extern proc_macro                           
 98 rustdoc-macros: $(src)/macros/lib.rs FORCE        
 99         +$(call if_changed,rustdoc)               
100                                                   
101 rustdoc-core: private rustc_target_flags = $(c    
102 rustdoc-core: $(RUST_LIB_SRC)/core/src/lib.rs     
103         +$(call if_changed,rustdoc)               
104                                                   
105 rustdoc-compiler_builtins: $(src)/compiler_bui    
106         +$(call if_changed,rustdoc)               
107                                                   
108 # We need to allow `rustdoc::broken_intra_doc_    
109 # `no_global_oom_handling` functions refer to     
110 # functions. Ideally `rustdoc` would have a wa    
111 # due to things that are "configured out" vs.     
112 rustdoc-alloc: private rustc_target_flags = $(    
113     -Arustdoc::broken_intra_doc_links             
114 rustdoc-alloc: $(RUST_LIB_SRC)/alloc/src/lib.r    
115         +$(call if_changed,rustdoc)               
116                                                   
117 rustdoc-kernel: private rustc_target_flags = -    
118     --extern build_error --extern macros=$(obj    
119     --extern bindings --extern uapi               
120 rustdoc-kernel: $(src)/kernel/lib.rs rustdoc-c    
121     rustdoc-compiler_builtins rustdoc-alloc $(    
122     $(obj)/bindings.o FORCE                       
123         +$(call if_changed,rustdoc)               
124                                                   
125 quiet_cmd_rustc_test_library = RUSTC TL $<        
126       cmd_rustc_test_library = \                  
127         OBJTREE=$(abspath $(objtree)) \           
128         $(RUSTC) $(rust_common_flags) \           
129                 @$(objtree)/include/generated/    
130                 --crate-type $(if $(rustc_test    
131                 --out-dir $(objtree)/$(obj)/te    
132                 -L$(objtree)/$(obj)/test \        
133                 --crate-name $(subst rusttest-    
134                                                   
135 rusttestlib-build_error: $(src)/build_error.rs    
136         +$(call if_changed,rustc_test_library)    
137                                                   
138 rusttestlib-macros: private rustc_target_flags    
139 rusttestlib-macros: private rustc_test_library    
140 rusttestlib-macros: $(src)/macros/lib.rs FORCE    
141         +$(call if_changed,rustc_test_library)    
142                                                   
143 rusttestlib-bindings: $(src)/bindings/lib.rs F    
144         +$(call if_changed,rustc_test_library)    
145                                                   
146 rusttestlib-uapi: $(src)/uapi/lib.rs FORCE        
147         +$(call if_changed,rustc_test_library)    
148                                                   
149 quiet_cmd_rustdoc_test = RUSTDOC T $<             
150       cmd_rustdoc_test = \                        
151         OBJTREE=$(abspath $(objtree)) \           
152         $(RUSTDOC) --test $(rust_common_flags)    
153                 @$(objtree)/include/generated/    
154                 $(rustc_target_flags) $(rustdo    
155                 $(rustdoc_test_quiet) \           
156                 -L$(objtree)/$(obj)/test --out    
157                 --crate-name $(subst rusttest-    
158                                                   
159 quiet_cmd_rustdoc_test_kernel = RUSTDOC TK $<     
160       cmd_rustdoc_test_kernel = \                 
161         rm -rf $(objtree)/$(obj)/test/doctests    
162         mkdir -p $(objtree)/$(obj)/test/doctes    
163         OBJTREE=$(abspath $(objtree)) \           
164         $(RUSTDOC) --test $(rust_flags) \         
165                 -L$(objtree)/$(obj) --extern a    
166                 --extern build_error --extern     
167                 --extern bindings --extern uap    
168                 --no-run --crate-name kernel -    
169                 --sysroot=/dev/null \             
170                 --test-builder $(objtree)/scri    
171                 $< $(rustdoc_test_kernel_quiet    
172         $(objtree)/scripts/rustdoc_test_gen       
173                                                   
174 %/doctests_kernel_generated.rs %/doctests_kern    
175     $(src)/kernel/lib.rs $(obj)/kernel.o \        
176     $(objtree)/scripts/rustdoc_test_builder \     
177     $(objtree)/scripts/rustdoc_test_gen FORCE     
178         +$(call if_changed,rustdoc_test_kernel    
179                                                   
180 # We cannot use `-Zpanic-abort-tests` because     
181 # so for the moment we skip `-Cpanic=abort`.      
182 quiet_cmd_rustc_test = RUSTC T  $<                
183       cmd_rustc_test = \                          
184         OBJTREE=$(abspath $(objtree)) \           
185         $(RUSTC) --test $(rust_common_flags) \    
186                 @$(objtree)/include/generated/    
187                 $(rustc_target_flags) --out-di    
188                 -L$(objtree)/$(obj)/test \        
189                 --crate-name $(subst rusttest-    
190         $(objtree)/$(obj)/test/$(subst rusttes    
191                 $(rustc_test_run_flags)           
192                                                   
193 rusttest: rusttest-macros rusttest-kernel         
194                                                   
195 rusttest-macros: private rustc_target_flags =     
196 rusttest-macros: private rustdoc_test_target_f    
197 rusttest-macros: $(src)/macros/lib.rs FORCE       
198         +$(call if_changed,rustc_test)            
199         +$(call if_changed,rustdoc_test)          
200                                                   
201 rusttest-kernel: private rustc_target_flags =     
202     --extern build_error --extern macros --ext    
203 rusttest-kernel: $(src)/kernel/lib.rs \           
204     rusttestlib-build_error rusttestlib-macros    
205     rusttestlib-uapi FORCE                        
206         +$(call if_changed,rustc_test)            
207         +$(call if_changed,rustc_test_library)    
208                                                   
209 ifdef CONFIG_CC_IS_CLANG                          
210 bindgen_c_flags = $(c_flags)                      
211 else                                              
212 # bindgen relies on libclang to parse C. Ideal    
213 # plugin backend and/or the Clang driver would    
214 #                                                 
215 # For the moment, here we are tweaking the fla    
216 # and some kernel configurations may not work     
217 # if we end up using one of those structs).       
218 bindgen_skip_c_flags := -mno-fp-ret-in-387 -mp    
219         -mskip-rax-setup -mgeneral-regs-only -    
220         -mindirect-branch=thunk-extern -mindir    
221         -mfunction-return=thunk-extern -mrecor    
222         -mindirect-branch-cs-prefix -mstack-pr    
223         -mno-pointers-to-nested-functions -mno    
224         -mno-strict-align -mstrict-align \        
225         -fconserve-stack -falign-jumps=% -fali    
226         -femit-struct-debug-baseonly -fno-ipa-    
227         -fno-partial-inlining -fplugin-arg-arm    
228         -fno-reorder-blocks -fno-allow-store-d    
229         -fzero-call-used-regs=% -fno-stack-cla    
230         -fno-inline-functions-called-once -fsa    
231         -fstrict-flex-arrays=% -fmin-function-    
232         --param=% --param asan-%                  
233                                                   
234 # Derived from `scripts/Makefile.clang`.          
235 BINDGEN_TARGET_x86      := x86_64-linux-gnu       
236 BINDGEN_TARGET_arm64    := aarch64-linux-gnu      
237 BINDGEN_TARGET          := $(BINDGEN_TARGET_$(    
238                                                   
239 # All warnings are inhibited since GCC builds     
240 # many GCC warnings are not supported by Clang    
241 # some configurations, with new GCC versions,     
242 bindgen_extra_c_flags = -w --target=$(BINDGEN_    
243                                                   
244 # Auto variable zero-initialization requires a    
245 # clang that is going to be removed sometime i    
246 # clang-18), so make sure to pass this option     
247 # (libclang major version < 16).                  
248 #                                                 
249 # https://github.com/llvm/llvm-project/issues/    
250 # https://github.com/llvm/llvm-project/blob/ll    
251 ifdef CONFIG_INIT_STACK_ALL_ZERO                  
252 libclang_maj_ver=$(shell $(BINDGEN) $(srctree)    
253 ifeq ($(shell expr $(libclang_maj_ver) \< 16),    
254 bindgen_extra_c_flags += -enable-trivial-auto-    
255 endif                                             
256 endif                                             
257                                                   
258 bindgen_c_flags = $(filter-out $(bindgen_skip_    
259         $(bindgen_extra_c_flags)                  
260 endif                                             
261                                                   
262 ifdef CONFIG_LTO                                  
263 bindgen_c_flags_lto = $(filter-out $(CC_FLAGS_    
264 else                                              
265 bindgen_c_flags_lto = $(bindgen_c_flags)          
266 endif                                             
267                                                   
268 bindgen_c_flags_final = $(bindgen_c_flags_lto)    
269                                                   
270 quiet_cmd_bindgen = BINDGEN $@                    
271       cmd_bindgen = \                             
272         $(BINDGEN) $< $(bindgen_target_flags)     
273                 --use-core --with-derive-defau    
274                 --no-debug '.*' --enable-funct    
275                 -o $@ -- $(bindgen_c_flags_fin    
276                 $(bindgen_target_cflags) $(bin    
277                                                   
278 $(obj)/bindings/bindings_generated.rs: private    
279     $(shell grep -Ev '^#|^$$' $(src)/bindgen_p    
280 $(obj)/bindings/bindings_generated.rs: private    
281     sed -Ei 's/pub const RUST_CONST_HELPER_([a    
282 $(obj)/bindings/bindings_generated.rs: $(src)/    
283     $(src)/bindgen_parameters FORCE               
284         $(call if_changed_dep,bindgen)            
285                                                   
286 $(obj)/uapi/uapi_generated.rs: private bindgen    
287     $(shell grep -Ev '^#|^$$' $(src)/bindgen_p    
288 $(obj)/uapi/uapi_generated.rs: $(src)/uapi/uap    
289     $(src)/bindgen_parameters FORCE               
290         $(call if_changed_dep,bindgen)            
291                                                   
292 # See `CFLAGS_REMOVE_helpers.o` above. In addi    
293 # with `-Wmissing-declarations` (unlike GCC),     
294 # given it is `libclang`; but for consistency,    
295 # a potential future GCC backend for `bindgen`    
296 $(obj)/bindings/bindings_helpers_generated.rs:    
297     --blocklist-type '.*' --allowlist-var '' \    
298     --allowlist-function 'rust_helper_.*'         
299 $(obj)/bindings/bindings_helpers_generated.rs:    
300     -I$(objtree)/$(obj) -Wno-missing-prototype    
301 $(obj)/bindings/bindings_helpers_generated.rs:    
302     sed -Ei 's/pub fn rust_helper_([a-zA-Z0-9_    
303 $(obj)/bindings/bindings_helpers_generated.rs:    
304         $(call if_changed_dep,bindgen)            
305                                                   
306 quiet_cmd_exports = EXPORTS $@                    
307       cmd_exports = \                             
308         $(NM) -p --defined-only $< \              
309                 | awk '$$2~/(T|R|D|B)/ && $$3!    
310                                                   
311 $(obj)/exports_core_generated.h: $(obj)/core.o    
312         $(call if_changed,exports)                
313                                                   
314 $(obj)/exports_alloc_generated.h: $(obj)/alloc    
315         $(call if_changed,exports)                
316                                                   
317 # Even though Rust kernel modules should never    
318 # symbols from the `bindings` crate and the C     
319 # because Rust generics and inlined functions     
320 # in the crate where they are defined. Other h    
321 # functions, may not be exported, in principle    
322 # compiler does not guarantee codegen will be     
323 # function either. Therefore, we export all sy    
324 # In the future, this may be revisited to redu    
325 # the compiler is informed about the places co    
326 $(obj)/exports_helpers_generated.h: $(obj)/hel    
327         $(call if_changed,exports)                
328                                                   
329 $(obj)/exports_bindings_generated.h: $(obj)/bi    
330         $(call if_changed,exports)                
331                                                   
332 $(obj)/exports_kernel_generated.h: $(obj)/kern    
333         $(call if_changed,exports)                
334                                                   
335 quiet_cmd_rustc_procmacro = $(RUSTC_OR_CLIPPY_    
336       cmd_rustc_procmacro = \                     
337         $(RUSTC_OR_CLIPPY) $(rust_common_flags    
338                 -Clinker-flavor=gcc -Clinker=$    
339                 -Clink-args='$(call escsq,$(KB    
340                 --emit=dep-info=$(depfile) --e    
341                 --crate-type proc-macro \         
342                 --crate-name $(patsubst lib%.s    
343                                                   
344 # Procedural macros can only be used with the     
345 $(obj)/libmacros.so: $(src)/macros/lib.rs FORC    
346         +$(call if_changed_dep,rustc_procmacro    
347                                                   
348 quiet_cmd_rustc_library = $(if $(skip_clippy),    
349       cmd_rustc_library = \                       
350         OBJTREE=$(abspath $(objtree)) \           
351         $(if $(skip_clippy),$(RUSTC),$(RUSTC_O    
352                 $(filter-out $(skip_flags),$(r    
353                 --emit=dep-info=$(depfile) --e    
354                 --emit=metadata=$(dir $@)$(pat    
355                 --crate-type rlib -L$(objtree)    
356                 --crate-name $(patsubst %.o,%,    
357                 --sysroot=/dev/null \             
358         $(if $(rustc_objcopy),;$(OBJCOPY) $(ru    
359         $(cmd_objtool)                            
360                                                   
361 rust-analyzer:                                    
362         $(Q)$(srctree)/scripts/generate_rust_a    
363                 --cfgs='core=$(core-cfgs)' --c    
364                 $(realpath $(srctree)) $(realp    
365                 $(rustc_sysroot) $(RUST_LIB_SR    
366                 $(if $(KBUILD_EXTMOD),$(extmod    
367                                                   
368 redirect-intrinsics = \                           
369         __addsf3 __eqsf2 __extendsfdf2 __gesf2    
370         __adddf3 __eqdf2 __ledf2 __ltdf2 __mul    
371         __muloti4 __multi3 \                      
372         __udivmodti4 __udivti3 __umodti3          
373                                                   
374 ifneq ($(or $(CONFIG_ARM64),$(and $(CONFIG_RIS    
375         # These intrinsics are defined for ARM    
376         redirect-intrinsics += \                  
377                 __ashrti3 \                       
378                 __ashlti3 __lshrti3               
379 endif                                             
380                                                   
381 define rule_rustc_library                         
382         $(call cmd_and_fixdep,rustc_library)      
383         $(call cmd,gen_objtooldep)                
384 endef                                             
385                                                   
386 $(obj)/core.o: private skip_clippy = 1            
387 $(obj)/core.o: private skip_flags = -Wunreacha    
388 $(obj)/core.o: private rustc_objcopy = $(forea    
389 $(obj)/core.o: private rustc_target_flags = $(    
390 $(obj)/core.o: $(RUST_LIB_SRC)/core/src/lib.rs    
391     $(wildcard $(objtree)/include/config/RUSTC    
392         +$(call if_changed_rule,rustc_library)    
393 ifneq ($(or $(CONFIG_X86_64),$(CONFIG_X86_32))    
394 $(obj)/core.o: scripts/target.json                
395 endif                                             
396                                                   
397 $(obj)/compiler_builtins.o: private rustc_objc    
398 $(obj)/compiler_builtins.o: $(src)/compiler_bu    
399         +$(call if_changed_rule,rustc_library)    
400                                                   
401 $(obj)/alloc.o: private skip_clippy = 1           
402 $(obj)/alloc.o: private skip_flags = -Wunreach    
403 $(obj)/alloc.o: private rustc_target_flags = $    
404 $(obj)/alloc.o: $(RUST_LIB_SRC)/alloc/src/lib.    
405         +$(call if_changed_rule,rustc_library)    
406                                                   
407 $(obj)/build_error.o: $(src)/build_error.rs $(    
408         +$(call if_changed_rule,rustc_library)    
409                                                   
410 $(obj)/bindings.o: $(src)/bindings/lib.rs \       
411     $(obj)/compiler_builtins.o \                  
412     $(obj)/bindings/bindings_generated.rs \       
413     $(obj)/bindings/bindings_helpers_generated    
414         +$(call if_changed_rule,rustc_library)    
415                                                   
416 $(obj)/uapi.o: $(src)/uapi/lib.rs \               
417     $(obj)/compiler_builtins.o \                  
418     $(obj)/uapi/uapi_generated.rs FORCE           
419         +$(call if_changed_rule,rustc_library)    
420                                                   
421 $(obj)/kernel.o: private rustc_target_flags =     
422     --extern build_error --extern macros --ext    
423 $(obj)/kernel.o: $(src)/kernel/lib.rs $(obj)/a    
424     $(obj)/libmacros.so $(obj)/bindings.o $(ob    
425         +$(call if_changed_rule,rustc_library)    
426                                                   
427 endif # CONFIG_RUST                               
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php