Compartir a través de


Selección de características de LLVM

Instalación de una biblioteca

Veremos llvm como ejemplo. Puede instalarlo mediante:

> vcpkg install llvm

o a través de un manifiesto con:

{
  "dependencies": ["llvm"]
}

Con llvm instalado ahora, podemos ejecutar:

> installed\x86-windows\bin\llc.exe --version

Vemos:

  Registered Targets:
    x86    - 32-bit X86: Pentium-Pro and above
    x86-64 - 64-bit X86: EM64T and AMD64

Instalación de características adicionales

Pero llvm admite muchos más destinos, de ARM a SPARC a SystemZ. Sin embargo, claramente nuestra instalación actual no incluye ARM como destino; por lo tanto, necesitamos aprender cómo vcpkg nos permite instalar otros destinos de LLVM. El puerto llvm permite esto a través de las características "target-*".

Si hacemos lo siguiente:

> vcpkg search llvm

Podemos ver:

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.
...

Podemos instalar cualquiera de estos destinos mediante la sintaxis install-feature:

> vcpkg install llvm[target-arm] # Installs LLVM with the ARM target
{
  "dependencies": [{ "name": "llvm", "features": ["target-arm"] }]
}

No participar en las características predeterminadas

El puerto llvm incluye algunas características predeterminadas que puede que no desee como usuario: por ejemplo, la clang característica es predeterminada, lo que significa que vcpkg install llvm también compilará e instalará clang. Si está escribiendo un compilador que usa LLVM como back-end, es probable que no le interese instalar clang, y podemos hacerlo deshabilitando las características predeterminadas con la "característica" especial core :

> vcpkg install llvm[core,target-arm] # removing the default-feature with "core" also removes all of the default targets you get

o en archivos de manifiesto:

{
  "dependencies": [{
    "name": "llvm",
    "default-features": false,
    "features": ["target-arm"]
  }]
}