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 | config RUSTC_VERSION | ||||||
| 	int | 	int | ||||||
| 	default $(shell,$(srctree)/scripts/rustc-version.sh $(RUSTC)) | 	default $(rustc-version) | ||||||
| 	help | 	help | ||||||
| 	  It does not depend on `RUST` since that one may need to use the version | 	  It does not depend on `RUST` since that one may need to use the version | ||||||
| 	  in a `depends on`. | 	  in a `depends on`. | ||||||
|  | @ -78,6 +78,10 @@ config RUST_IS_AVAILABLE | ||||||
| 	  In particular, the Makefile target 'rustavailable' is useful to check | 	  In particular, the Makefile target 'rustavailable' is useful to check | ||||||
| 	  why the Rust toolchain is not being detected. | 	  why the Rust toolchain is not being detected. | ||||||
| 
 | 
 | ||||||
|  | config RUSTC_LLVM_VERSION | ||||||
|  | 	int | ||||||
|  | 	default $(rustc-llvm-version) | ||||||
|  | 
 | ||||||
| config CC_CAN_LINK | config CC_CAN_LINK | ||||||
| 	bool | 	bool | ||||||
| 	default $(success,$(srctree)/scripts/cc-can-link.sh $(CC) $(CLANG_FLAGS) $(USERCFLAGS) $(USERLDFLAGS) $(m64-flag)) if 64BIT | 	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) | m32-flag := $(cc-option-bit,-m32) | ||||||
| m64-flag := $(cc-option-bit,-m64) | 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>) | # $(rustc-option,<flag>) | ||||||
| # Return y if the Rust compiler supports <flag>, n otherwise | # Return y if the Rust compiler supports <flag>, n otherwise | ||||||
| # Calls to this should be guarded so that they are not evaluated if | # 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