When compiling Clang with Visual Studio 2017 as a compiler, I randomly see the following errors:
7>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(321,5): error MSB3491: Impossible d'écrire des lignes dans le fichier "LLVMDemangle.dir\Release\LLVMDemangle.tlog\LLVMDemangle.lastbuildstate". Le processus ne peut pas accéder au fichier 'F:\svn\build\NATIVE\lib\Demangle\LLVMDemangle.dir\Release\LLVMDemangle.tlog\LLVMDemangle.lastbuildstate', car il est en cours d'utilisation par un autre processus. [F:\svn\build\NATIVE\lib\Demangle\LLVMDemangle.vcxproj] 7>Génération du projet "F:\svn\build\NATIVE\lib\Demangle\LLVMDemangle.vcxproj" terminée (cibles par défaut) -- ÉCHEC.
This says basically that some target files are locked by another process.
This is caused by Clang-tablegen and LLVM-tablegen explicitly compiling at the same time, through a custom build command:
"C:\Program Files\CMake\bin\cmake.exe" --build F:/svn/build/NATIVE --target clang-tblgen --config Release
and:
"C:\Program Files\CMake\bin\cmake.exe" --build F:/svn/build/NATIVE --target llvm-tblgen --config Release
...thus compiling dependencies at the same time, in the same target folders.
This workaround simply makes Clang-tablegen depend on LLVM-tablegen which prevents this issue. Unless you can suggest a better way?
Full log:
6>------ Build started: Project: LLVM-tablegen-host, Configuration: Debug x64 ------ 7>------ Build started: Project: CLANG-tablegen-host, Configuration: Debug x64 ------ 6>Building native TableGen... 7>Building native TableGen... 6>Microsoft (R) Build Engine version 15.8.169+g1ccb72aefa pour .NET Framework 6>Copyright (C) Microsoft Corporation. Tous droits réservés. 6> 7>Microsoft (R) Build Engine version 15.8.169+g1ccb72aefa pour .NET Framework 7>Copyright (C) Microsoft Corporation. Tous droits réservés. 7> 6>La génération a démarré 2018-11-05 17:39:04. 7>La génération a démarré 2018-11-05 17:39:04. 6>Projet "F:\svn\build\NATIVE\utils\TableGen\llvm-tblgen.vcxproj" sur le noud 1 (cibles par défaut). 6>Le projet "F:\svn\build\NATIVE\utils\TableGen\llvm-tblgen.vcxproj" (1) génère "F:\svn\build\NATIVE\ZERO_CHECK.vcxproj" (2) sur le noud 1 (cibles par défaut). 7>Projet "F:\svn\build\NATIVE\tools\clang\utils\TableGen\clang-tblgen.vcxproj" sur le noud 1 (cibles par défaut). 7>Le projet "F:\svn\build\NATIVE\tools\clang\utils\TableGen\clang-tblgen.vcxproj" (1) génère "F:\svn\build\NATIVE\ZERO_CHECK.vcxproj" (2) sur le noud 1 (cibles par défaut). 6>InitializeBuildStatus: 6> Création de "x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild", car "AlwaysCreate" a été spécifié. 7>InitializeBuildStatus: 7> Mise à jour de l'horodatage "x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild". 6>CustomBuild: 6> Toutes les sorties sont à jour. 7>CustomBuild: 7> Toutes les sorties sont à jour. 7>FinalizeBuildStatus: 7> Suppression du fichier "x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild". 7> Mise à jour de l'horodatage "x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastbuildstate". 7>Génération du projet "F:\svn\build\NATIVE\ZERO_CHECK.vcxproj" terminée (cibles par défaut). 6>FinalizeBuildStatus: 6> Suppression du fichier "x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild". 6> Mise à jour de l'horodatage "x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastbuildstate". 6>Génération du projet "F:\svn\build\NATIVE\ZERO_CHECK.vcxproj" terminée (cibles par défaut). 6>Le projet "F:\svn\build\NATIVE\utils\TableGen\llvm-tblgen.vcxproj" (1) génère "F:\svn\build\NATIVE\lib\Demangle\LLVMDemangle.vcxproj" (3) sur le noud 1 (cibles par défaut). 6>InitializeBuildStatus: 6> Création de "LLVMDemangle.dir\Release\LLVMDemangle.tlog\unsuccessfulbuild", car "AlwaysCreate" a été spécifié. 6>CustomBuild: 6> Toutes les sorties sont à jour. 7>Le projet "F:\svn\build\NATIVE\tools\clang\utils\TableGen\clang-tblgen.vcxproj" (1) génère "F:\svn\build\NATIVE\lib\Demangle\LLVMDemangle.vcxproj" (3) sur le noud 1 (cibles par défaut). 7>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(321,5): error MSB3491: Impossible d'écrire des lignes dans le fichier "LLVMDemangle.dir\Release\LLVMDemangle.tlog\LLVMDemangle.lastbuildstate". Le processus ne peut pas accéder au fichier 'F:\svn\build\NATIVE\lib\Demangle\LLVMDemangle.dir\Release\LLVMDemangle.tlog\LLVMDemangle.lastbuildstate', car il est en cours d'utilisation par un autre processus. [F:\svn\build\NATIVE\lib\Demangle\LLVMDemangle.vcxproj] 7>Génération du projet "F:\svn\build\NATIVE\lib\Demangle\LLVMDemangle.vcxproj" terminée (cibles par défaut) -- ÉCHEC. 6>ClCompile: 6> Toutes les sorties sont à jour. 7>Le projet "F:\svn\build\NATIVE\tools\clang\utils\TableGen\clang-tblgen.vcxproj" (1) génère "F:\svn\build\NATIVE\lib\Support\LLVMSupport.vcxproj" (4) sur le noud 1 (cibles par défaut). 7>InitializeBuildStatus: 7> Création de "LLVMSupport.dir\Release\LLVMSupport.tlog\unsuccessfulbuild", car "AlwaysCreate" a été spécifié. 7>CustomBuild: 7> Toutes les sorties sont à jour. 7>ClCompile: 7> Toutes les sorties sont à jour. 6>Lib: 6> Toutes les sorties sont à jour. 6> LLVMDemangle.vcxproj -> F:\svn\build\NATIVE\Release\lib\LLVMDemangle.lib 6>FinalizeBuildStatus: 6> Suppression du fichier "LLVMDemangle.dir\Release\LLVMDemangle.tlog\unsuccessfulbuild". 6> Mise à jour de l'horodatage "LLVMDemangle.dir\Release\LLVMDemangle.tlog\LLVMDemangle.lastbuildstate". 6>Génération du projet "F:\svn\build\NATIVE\lib\Demangle\LLVMDemangle.vcxproj" terminée (cibles par défaut). 6>Le projet "F:\svn\build\NATIVE\utils\TableGen\llvm-tblgen.vcxproj" (1) génère "F:\svn\build\NATIVE\lib\Support\LLVMSupport.vcxproj" (4) sur le noud 1 (cibles par défaut). 6>InitializeBuildStatus: 6> Mise à jour de l'horodatage "LLVMSupport.dir\Release\LLVMSupport.tlog\unsuccessfulbuild". 6>CustomBuild: 6> Toutes les sorties sont à jour. 7> Toutes les sorties sont à jour. 7>Lib: 7> Toutes les sorties sont à jour. 7> LLVMSupport.vcxproj -> F:\svn\build\NATIVE\Release\lib\LLVMSupport.lib 7>FinalizeBuildStatus: 7> Suppression du fichier "LLVMSupport.dir\Release\LLVMSupport.tlog\unsuccessfulbuild". 7> Mise à jour de l'horodatage "LLVMSupport.dir\Release\LLVMSupport.tlog\LLVMSupport.lastbuildstate". 7>Génération du projet "F:\svn\build\NATIVE\lib\Support\LLVMSupport.vcxproj" terminée (cibles par défaut). 6>ClCompile: 6> Toutes les sorties sont à jour. 7>Le projet "F:\svn\build\NATIVE\tools\clang\utils\TableGen\clang-tblgen.vcxproj" (1) génère "F:\svn\build\NATIVE\lib\TableGen\LLVMTableGen.vcxproj" (5) sur le noud 1 (cibles par défaut). 7>InitializeBuildStatus: 7> Création de "LLVMTableGen.dir\Release\LLVMTableGen.tlog\unsuccessfulbuild", car "AlwaysCreate" a été spécifié. 7>CustomBuild: 7> Toutes les sorties sont à jour. 7>ClCompile: 7> Toutes les sorties sont à jour. 7>Lib: 7> Toutes les sorties sont à jour. 7> LLVMTableGen.vcxproj -> F:\svn\build\NATIVE\Release\lib\LLVMTableGen.lib 7>FinalizeBuildStatus: 7> Suppression du fichier "LLVMTableGen.dir\Release\LLVMTableGen.tlog\unsuccessfulbuild". 7> Mise à jour de l'horodatage "LLVMTableGen.dir\Release\LLVMTableGen.tlog\LLVMTableGen.lastbuildstate". 7>Génération du projet "F:\svn\build\NATIVE\lib\TableGen\LLVMTableGen.vcxproj" terminée (cibles par défaut). 6> Toutes les sorties sont à jour. 6>Lib: 6> Toutes les sorties sont à jour. 6> LLVMSupport.vcxproj -> F:\svn\build\NATIVE\Release\lib\LLVMSupport.lib 6>FinalizeBuildStatus: 6> Mise à jour de l'horodatage "LLVMSupport.dir\Release\LLVMSupport.tlog\LLVMSupport.lastbuildstate". 6>Génération du projet "F:\svn\build\NATIVE\lib\Support\LLVMSupport.vcxproj" terminée (cibles par défaut). 6>Le projet "F:\svn\build\NATIVE\utils\TableGen\llvm-tblgen.vcxproj" (1) génère "F:\svn\build\NATIVE\lib\TableGen\LLVMTableGen.vcxproj" (5) sur le noud 1 (cibles par défaut). 6>InitializeBuildStatus: 6> Création de "LLVMTableGen.dir\Release\LLVMTableGen.tlog\unsuccessfulbuild", car "AlwaysCreate" a été spécifié. 6>CustomBuild: 6> Toutes les sorties sont à jour. 6>ClCompile: 6> Toutes les sorties sont à jour. 6>Lib: 6> Toutes les sorties sont à jour. 6> LLVMTableGen.vcxproj -> F:\svn\build\NATIVE\Release\lib\LLVMTableGen.lib 6>FinalizeBuildStatus: 6> Suppression du fichier "LLVMTableGen.dir\Release\LLVMTableGen.tlog\unsuccessfulbuild". 6> Mise à jour de l'horodatage "LLVMTableGen.dir\Release\LLVMTableGen.tlog\LLVMTableGen.lastbuildstate". 6>Génération du projet "F:\svn\build\NATIVE\lib\TableGen\LLVMTableGen.vcxproj" terminée (cibles par défaut). 7>Le projet "F:\svn\build\NATIVE\tools\clang\utils\TableGen\clang-tblgen.vcxproj" (1) génère "F:\svn\build\NATIVE\tools\clang\utils\TableGen\obj.clang-tblgen.vcxproj" (6) sur le noud 1 (cibles par défaut). 7>InitializeBuildStatus: 7> Création de "obj.clang-tblgen.dir\Release\obj.clang-tblgen.tlog\unsuccessfulbuild", car "AlwaysCreate" a été spécifié. 7>CustomBuild: 7> Toutes les sorties sont à jour. 7>ClCompile: 7> Toutes les sorties sont à jour. 7>Lib: 7> Toutes les sorties sont à jour. 7> obj.clang-tblgen.vcxproj -> F:\svn\build\NATIVE\tools\clang\utils\TableGen\obj.clang-tblgen.dir\Release\obj.clang-tblgen.lib 7>FinalizeBuildStatus: 7> Suppression du fichier "obj.clang-tblgen.dir\Release\obj.clang-tblgen.tlog\unsuccessfulbuild". 7> Mise à jour de l'horodatage "obj.clang-tblgen.dir\Release\obj.clang-tblgen.tlog\obj.clang-tblgen.lastbuildstate". 7>Génération du projet "F:\svn\build\NATIVE\tools\clang\utils\TableGen\obj.clang-tblgen.vcxproj" terminée (cibles par défaut). 7>Génération du projet "F:\svn\build\NATIVE\tools\clang\utils\TableGen\clang-tblgen.vcxproj" terminée (cibles par défaut) -- ÉCHEC. 7> 7>ÉCHEC de la build. 7> 7>"F:\svn\build\NATIVE\tools\clang\utils\TableGen\clang-tblgen.vcxproj" (cible par défaut) (1) -> 7>"F:\svn\build\NATIVE\lib\Demangle\LLVMDemangle.vcxproj" (cible par défaut) (3) -> 7>(InitializeBuildStatus cible) -> 7>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(321,5): error MSB3491: Impossible d'écrire des lignes dans le fichier "LLVMDemangle.dir\Release\LLVMDemangle.tlog\LLVMDemangle.lastbuildstate". Le processus ne peut pas accéder au fichier 'F:\svn\build\NATIVE\lib\Demangle\LLVMDemangle.dir\Release\LLVMDemangle.tlog\LLVMDemangle.lastbuildstate', car il est en cours d'utilisation par un autre processus. [F:\svn\build\NATIVE\lib\Demangle\LLVMDemangle.vcxproj] 7> 7> 0 Avertissement(s) 7> 1 Erreur(s) 7> 7>Temps écoulé 00:00:00.79 7>Done building project "CLANG-tablegen-host.vcxproj" -- FAILED.
Please add a comment here about why this dependency exists. There's no real dependency, it just exists to serialize the two build steps that share the same resource (the build directory).
Actually, I suppose the proper fix for arbitrary projects using tablegen is to chain them all together, otherwise you can imagine lld tablegen and clang tablegen racing to use the same host build dir. Ew. Perhaps... make that a FIXME for now.