web-dev-qa-db-fra.com

Intégrer LLVM Clang 4.x.x/5.x.x/6.x.x dans Visual Studio 2017

La version officielle de LLVM 4.0 pour Windows s'intègre à Visual Studio jusqu'à Visual Studio 2015. Malheureusement, il ne prend toujours pas en charge Visual Studio 2017.

Lorsque vous essayez de définir le Platform Toolset d'un projet sur LLVM-vs2014, une erreur se produit.

Savez-vous un moyen de le faire fonctionner?


Mettre à jour

En 2018, LLVM 6.0 ne prend toujours pas officiellement en charge l'intégration à Visual Studio 2017 (version 15.X.X), mais uniquement à l'ensemble d'outils Visual Studio 2015 (version 14.X.X).

7
plasmacel

Enfin, j'ai trouvé un brillant rapport GitHub avec les jeux d'outils de la plate-forme MSBuild requis qui intègre LLVM clang 5.0.0 dans Visual Studio 2017. Après avoir suivi les instructions du fichier README, vous disposerez de deux nouveaux jeux d’outils de plate-forme, LLVM-vs2017 et LLVM-vs2017_xp. Problème résolu.

Mettre à jour

J'ai créé un fichier fork qui a été mis à jour pour LLVM 6.0.0 et fournit une meilleure intégration en fournissant les chemins d'inclusion et de bibliothèque de LLVM/clang.

Merci à Royi , qui s’est rendu compte que les fichiers .prop originaux sont explicitement conçus pour LLVM 5.0 et qu’il manquait l’ajout des dossiers lib ( $(LLVMInstallDir)\lib) et include ($(LLVMInstallDir)\lib\clang\6.0.0\include) appropriés. 

7
plasmacel

Certaines cibles msbuild ne sont livrées qu'avec le jeu d'outils C++ v140 et VS 2017 installe uniquement le jeu d'outils v141 par défaut. Si vous ouvrez le programme d'installation de VS 2017, recherchez la case à cocher pour le jeu d'outils v140 et installez-la. Les bonnes cibles ms ++ C++ seront disponibles et le tout fonctionnera.

10
keith

Le projet LLVM prend désormais explicitement en charge Visual Studio 2017 via https://marketplace.visualstudio.com/items?itemName=LLVMExtensions.llvm-toolchain

2
thakis

J'ai compris comment intégrer LLVM Clang 7.0 à la mise à jour 15.5.6 de Visual Studio 2017. v1913 avec prise en charge complète du débogage sous PDB à l'aide des dernières versions de LLVM.

c'est-à-dire, lld-link/DEBUG: GHASH; clang-cl -mllvm -emit-codeview-ghash-section Drapeau de clang-cl.

C'est un processus en trois étapes.

  1. Installer le dernier fichier llvm
  2. Mettez à jour toolset.props, toolset.targets dans VS pour prendre en charge le dernier clang
  3. Sélectionnez le nouvel ensemble d'outils à utiliser pour construire votre projet C/C++ ou autre

À partir de la mise à jour 15.4.5 de Visual Studio 2017, Clang C2 "expérimental" de Microsoft ne fonctionne plus. Par conséquent, les correctifs ci-dessus sont nécessaires pour utiliser clang pour compiler du code doté d'une capacité de débogage complète pour PDB (et pas seulement pour CodeView/Z7 limité). Cela devient également une suite plus complète pour les générations de test de portabilité, car vous pouvez créer et déboguer des PDB pour Windows en utilisant tous les composants LLVM, du compilateur Clang au backend LLVM codegen et à l'éditeur de liens LLVM.

À la vôtre, David

1
smallscript

LLVM/Clang a maintenant un correctif mis à jour qui vous permet de l’utiliser avec VS2017. Mais ils ne supportent toujours pas directement VS2017. J'ai demandé à la liste de diffusion des développeurs LLVM de mettre à jour leur prise en charge de VS2017, alors j'espère qu'ils le feront. S'ils écoutent ce que j'ai dit. 

1
Osman Zakir

Départ le 09 janvier 2018 http://planet.clang.org/

Regardez le "Essayez-le!" section:

Si vous utilisez déjà clang-cl et lld-link sous Windows aujourd'hui, vous pouvez essayer ceci. Deux indicateurs sont nécessaires pour l'activer, un pour le compilateur et un pour l'éditeur de liens: Pour permettre l’émission d’une section .debug $ H par le compilateur, vous devrez passer l’indicateur non documenté -mllvm -emit-codeview-ghash-section à clang-cl (cet indicateur devrait disparaître à l’avenir, une fois celui-ci considéré stable et assez bon pour être allumé par défaut) . Pour que lld-link utilise ces informations, vous devrez passer le /DEBUG:GHASH à lld.

Vous devez simplement passer les indicateurs -mllvm -emit-codeview-ghash-section dans votre zone projets c ++} "Ligne de commande: options supplémentaires" ou les placer directement dans le fichier "toolset.props" que vous avez créé dans C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Platforms\Win32\PlatformToolsets\LLVM-vs2017 ou C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Platforms\x64\PlatformToolsets\LLVM-vs2017. .

La clé est qu'en ajoutant ces options cli, vous indiquez à clang d'émettre des informations de débogage que le lld (ou lld-link) comprendra et utilisera pour produire pleinement fichiers PDB remplis. Ce ne sont pas les limités qu'il a fabriqués avant les baisses de LLVM 7.0 antérieures au 9 janvier 2018.

toolset.targets: (toute version)

<Project ToolsVersion="14.1" 
xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
  <Import Project="$(VCTargetsPath)\Microsoft.CppCommon.targets" />
</Project>

toolset.props: (version Win32)

<Project xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">  
  <Import Project="$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\v141\Microsoft.Cpp.$(Platform).v141.props" Condition="Exists('$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\v141\Microsoft.Cpp.$(Platform).v141.props')"/>
  <Import Project="$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\v141\Toolset.props" Condition="Exists('$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\v141\Toolset.props')"/>

  <PropertyGroup>
    <LLVMInstallDir>$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\LLVM\LLVM)</LLVMInstallDir>
    <LLVMInstallDir Condition="'$(LLVMInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\LLVM\LLVM)</LLVMInstallDir>
    <ExecutablePath>$(LLVMInstallDir)\msbuild-bin;$(ExecutablePath)</ExecutablePath>
    <LibraryPath>$(LLVMInstallDir)\lib\clang\7.0\lib\windows;$(LibraryPath)</LibraryPath>
  </PropertyGroup>

  <ItemDefinitionGroup>
    <ClCompile>
      <!-- remove the implicit vcxxx.pdb path to avoid rebuilds every time as clang-cl only supports /Z7 -->
      <ProgramDataBaseFileName></ProgramDataBaseFileName>
      <!-- Set the value of _MSC_VER to claim for compatibility -->
      <AdditionalOptions>-m32 -fmsc-version=1913 %(AdditionalOptions)</AdditionalOptions>
    </ClCompile>
  </ItemDefinitionGroup>
</Project>

Pour x64, remplacez -m32 par -m64

j'ai également activé les compilateurs Microsofts ARM et ARM64 pour la création d'applications Windows-10-ARM natives (et non d'UWP modern-com-junk). Mais, pour l'instant, je n'ai pas suffisamment fouillé dans les sources clang pour configurer correctement quelque chose de similaire pour ARM en fonction de ce que -m32 et -m64 font pour Intel code-gen.

Voir ces articles:

0
smallscript