93 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			93 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | # Selecting Library Features
 | ||
|  | 
 | ||
|  | **The latest version of this documentation is available on [GitHub](https://github.com/Microsoft/vcpkg/tree/master/docs/users/selecting-library-features.md).** | ||
|  | 
 | ||
|  | ## Installing a library
 | ||
|  | 
 | ||
|  | We will look at [llvm](https://llvm.org/) as an example. You could install it using: | ||
|  | 
 | ||
|  | ```powershell | ||
|  | > vcpkg install llvm
 | ||
|  | ``` | ||
|  | or via a manifest with | ||
|  | ```json | ||
|  | { | ||
|  |   "dependencies": ["llvm"] | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | With llvm now installed, we can execute: | ||
|  | 
 | ||
|  | ```powershell | ||
|  | > installed\x86-windows\bin\llc.exe --version
 | ||
|  | ``` | ||
|  | 
 | ||
|  | we see: | ||
|  | 
 | ||
|  | ```powershell | ||
|  |   Registered Targets: | ||
|  |     x86    - 32-bit X86: Pentium-Pro and above | ||
|  |     x86-64 - 64-bit X86: EM64T and AMD64 | ||
|  | ``` | ||
|  | 
 | ||
|  | ## Installing additional features
 | ||
|  | 
 | ||
|  | But [llvm supports many more targets](https://llvm.org/docs/GettingStarted.html#local-llvm-configuration), from ARM to SPARC to SystemZ. | ||
|  | However, clearly our current installation doesn't include ARM as a target; | ||
|  | thus, we need to learn how vcpkg allows us to install other LLVM targets. | ||
|  | The llvm port allows this via the "target-*" features. | ||
|  | 
 | ||
|  | If we do: | ||
|  | 
 | ||
|  | ```powershell | ||
|  | > vcpkg search llvm
 | ||
|  | ``` | ||
|  | 
 | ||
|  | We can see: | ||
|  | 
 | ||
|  | ``` | ||
|  | llvm                 10.0.0#6         The LLVM Compiler Infrastructure | ||
|  | llvm[clang]                           Build C Language Family Front-end. | ||
|  | llvm[clang-tools-extra]               Build Clang tools. | ||
|  | ... | ||
|  | llvm[target-all]                      Build with all backends. | ||
|  | llvm[target-amdgpu]                   Build with AMDGPU backend. | ||
|  | llvm[target-arm]                      Build with ARM backend. | ||
|  | ... | ||
|  | ``` | ||
|  | 
 | ||
|  | We can install any of these targets by using the install-feature syntax: | ||
|  | 
 | ||
|  | ```powershell | ||
|  | > vcpkg install llvm[target-arm] # Installs LLVM with the ARM target
 | ||
|  | ``` | ||
|  | ```json | ||
|  | { | ||
|  |   "dependencies": [{ "name": "llvm", "features": ["target-arm"] }] | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | ## Opting out of default features
 | ||
|  | 
 | ||
|  | The llvm port includes a few default features that you as a user may not want: for example, | ||
|  | the `clang` feature is default, which means that `vcpkg install llvm` will also build and install clang. | ||
|  | If you are writing a compiler that uses LLVM as a backend, | ||
|  | you're likely not interested in installing clang as well, | ||
|  | and we can do that by disabling default features with the special `core` "feature": | ||
|  | ```powershell | ||
|  | > vcpkg install llvm[core,target-arm] # removing the default-feature with "core" also removes all of the default targets you get
 | ||
|  | ``` | ||
|  | or in manifest files: | ||
|  | ```json | ||
|  | { | ||
|  |   "dependencies": [{ | ||
|  |     "name": "llvm", | ||
|  |     "default-features": false, | ||
|  |     "features": ["target-arm"] | ||
|  |   }] | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | # Further reading
 | ||
|  | - The [Feature Packages](../specifications/feature-packages.md) specification was the initial design for features. |