forked from mirrors/linux
		
	kbuild: rust: add CONFIG_RUSTC_LLVM_VERSION
				
					
				
			Each version of Rust supports a range of LLVM versions. There are cases where we want to gate a config on the LLVM version instead of the Rust version. Normalized cfi integer tags are one example [1]. The invocation of rustc-version is being moved from init/Kconfig to scripts/Kconfig.include for consistency with cc-version. Link: https://lore.kernel.org/all/20240925-cfi-norm-kasan-fix-v1-1-0328985cdf33@google.com/ [1] Signed-off-by: Gary Guo <gary@garyguo.net> Link: https://lore.kernel.org/r/20241011114040.3900487-1-gary@garyguo.net [ Added missing `-llvm` to the Usage documentation. - Miguel ] Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
		
							parent
							
								
									e72a076c62
								
							
						
					
					
						commit
						af0121c2d3
					
				
					 3 changed files with 30 additions and 1 deletions
				
			
		|  | @ -62,7 +62,7 @@ config LLD_VERSION | |||
| 
 | ||||
| config RUSTC_VERSION | ||||
| 	int | ||||
| 	default $(shell,$(srctree)/scripts/rustc-version.sh $(RUSTC)) | ||||
| 	default $(rustc-version) | ||||
| 	help | ||||
| 	  It does not depend on `RUST` since that one may need to use the version | ||||
| 	  in a `depends on`. | ||||
|  | @ -78,6 +78,10 @@ config RUST_IS_AVAILABLE | |||
| 	  In particular, the Makefile target 'rustavailable' is useful to check | ||||
| 	  why the Rust toolchain is not being detected. | ||||
| 
 | ||||
| config RUSTC_LLVM_VERSION | ||||
| 	int | ||||
| 	default $(rustc-llvm-version) | ||||
| 
 | ||||
| config CC_CAN_LINK | ||||
| 	bool | ||||
| 	default $(success,$(srctree)/scripts/cc-can-link.sh $(CC) $(CLANG_FLAGS) $(USERCFLAGS) $(USERLDFLAGS) $(m64-flag)) if 64BIT | ||||
|  |  | |||
|  | @ -65,6 +65,9 @@ cc-option-bit = $(if-success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null,$ | |||
| m32-flag := $(cc-option-bit,-m32) | ||||
| m64-flag := $(cc-option-bit,-m64) | ||||
| 
 | ||||
| rustc-version := $(shell,$(srctree)/scripts/rustc-version.sh $(RUSTC)) | ||||
| rustc-llvm-version := $(shell,$(srctree)/scripts/rustc-llvm-version.sh $(RUSTC)) | ||||
| 
 | ||||
| # $(rustc-option,<flag>) | ||||
| # Return y if the Rust compiler supports <flag>, n otherwise | ||||
| # Calls to this should be guarded so that they are not evaluated if | ||||
|  |  | |||
							
								
								
									
										22
									
								
								scripts/rustc-llvm-version.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										22
									
								
								scripts/rustc-llvm-version.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| #!/bin/sh | ||||
| # SPDX-License-Identifier: GPL-2.0 | ||||
| # | ||||
| # Usage: $ ./rustc-llvm-version.sh rustc | ||||
| # | ||||
| # Print the LLVM version that the Rust compiler uses in a 6 digit form. | ||||
| 
 | ||||
| # Convert the version string x.y.z to a canonical up-to-6-digits form. | ||||
| get_canonical_version() | ||||
| { | ||||
| 	IFS=. | ||||
| 	set -- $1 | ||||
| 	echo $((10000 * $1 + 100 * $2 + $3)) | ||||
| } | ||||
| 
 | ||||
| if output=$("$@" --version --verbose 2>/dev/null | grep LLVM); then | ||||
| 	set -- $output | ||||
| 	get_canonical_version $3 | ||||
| else | ||||
| 	echo 0 | ||||
| 	exit 1 | ||||
| fi | ||||
		Loading…
	
		Reference in a new issue
	
	 Gary Guo
						Gary Guo