Выбор функций LLVM
Установка библиотеки
Мы рассмотрим llvm в качестве примера. Его можно установить с помощью:
> vcpkg install llvm
или с помощью манифеста с помощью:
{
"dependencies": ["llvm"]
}
После установки llvm мы можем выполнить следующее:
> installed\x86-windows\bin\llc.exe --version
Мы видим:
Registered Targets:
x86 - 32-bit X86: Pentium-Pro and above
x86-64 - 64-bit X86: EM64T and AMD64
Установка дополнительных функций
Но llvm поддерживает гораздо больше целевых объектов, от ARM до SPARC до SystemZ. Однако, очевидно, что текущая установка не включает ARM в качестве целевого объекта; Таким образом, нам нужно узнать, как vcpkg позволяет устанавливать другие целевые объекты LLVM. Порт llvm позволяет использовать эти функции с помощью функций target-*.
Если мы делаем:
> vcpkg search llvm
Мы видим:
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.
...
Мы можем установить любой из этих целевых объектов с помощью синтаксиса компонента установки:
> vcpkg install llvm[target-arm] # Installs LLVM with the ARM target
{
"dependencies": [{ "name": "llvm", "features": ["target-arm"] }]
}
Отказ от функций по умолчанию
Порт llvm включает несколько функций по умолчанию, которые вы можете использовать как пользователь, возможно, не требуется: например, clang
эта функция используется по умолчанию, что означает, что vcpkg install llvm
также будет выполнять сборку и установку clang.
Если вы пишете компилятор, использующий LLVM в качестве серверной части, скорее всего, вы не заинтересованы в установке clang, и мы можем сделать это, отключив функции по умолчанию со специальными core
функциями:
> vcpkg install llvm[core,target-arm] # removing the default-feature with "core" also removes all of the default targets you get
или в файлах манифеста:
{
"dependencies": [{
"name": "llvm",
"default-features": false,
"features": ["target-arm"]
}]
}