Fix debug PCH builds with MSVC 2012 and later
With MSVC 2013 and newer, using pre-compiled headers with .pdb debugging fails with the following error message: fatal error C1041: cannot open program database '[...]\prog.pdb'; if multiple CL.EXE write to the same .PDB file, please use /FS So we use /FS when PCH is enabled. When PCH is enabled and debugging is disabled, this will have no effect since .pdb files will not be written.
This commit is contained in:
parent
69756fdabb
commit
88f1d400c0
|
@ -1694,9 +1694,9 @@ rule FORTRAN_DEP_HACK
|
||||||
|
|
||||||
if target.has_pch():
|
if target.has_pch():
|
||||||
tfilename = self.get_target_filename_abs(target)
|
tfilename = self.get_target_filename_abs(target)
|
||||||
return compiler.get_compile_debugfile_args(tfilename)
|
return compiler.get_compile_debugfile_args(tfilename, pch=True)
|
||||||
else:
|
else:
|
||||||
return compiler.get_compile_debugfile_args(objfile)
|
return compiler.get_compile_debugfile_args(objfile, pch=False)
|
||||||
|
|
||||||
def get_link_debugfile_args(self, linker, target, outname):
|
def get_link_debugfile_args(self, linker, target, outname):
|
||||||
return linker.get_link_debugfile_args(outname)
|
return linker.get_link_debugfile_args(outname)
|
||||||
|
|
|
@ -435,7 +435,7 @@ class Compiler():
|
||||||
|
|
||||||
# Some compilers (msvc) write debug info to a separate file.
|
# Some compilers (msvc) write debug info to a separate file.
|
||||||
# These args specify where it should be written.
|
# These args specify where it should be written.
|
||||||
def get_compile_debugfile_args(self, rel_obj):
|
def get_compile_debugfile_args(self, rel_obj, **kwargs):
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def get_link_debugfile_args(self, rel_obj):
|
def get_link_debugfile_args(self, rel_obj):
|
||||||
|
@ -1883,10 +1883,19 @@ class VisualStudioCCompiler(CCompiler):
|
||||||
raise MesonException('Compiling test app failed.')
|
raise MesonException('Compiling test app failed.')
|
||||||
return not(warning_text in stde or warning_text in stdo)
|
return not(warning_text in stde or warning_text in stdo)
|
||||||
|
|
||||||
def get_compile_debugfile_args(self, rel_obj):
|
def get_compile_debugfile_args(self, rel_obj, pch=False):
|
||||||
pdbarr = rel_obj.split('.')[:-1]
|
pdbarr = rel_obj.split('.')[:-1]
|
||||||
pdbarr += ['pdb']
|
pdbarr += ['pdb']
|
||||||
return ['/Fd' + '.'.join(pdbarr)]
|
args = ['/Fd' + '.'.join(pdbarr)]
|
||||||
|
# When generating a PDB file with PCH, all compile commands write
|
||||||
|
# to the same PDB file. Hence, we need to serialize the PDB
|
||||||
|
# writes using /FS since we do parallel builds. This slows down the
|
||||||
|
# build obviously, which is why we only do this when PCH is on.
|
||||||
|
# This was added in Visual Studio 2013 (MSVC 18.0). Before that it was
|
||||||
|
# always on: https://msdn.microsoft.com/en-us/library/dn502518.aspx
|
||||||
|
if pch and mesonlib.version_compare(self.version, '>=18.0'):
|
||||||
|
args = ['/FS'] + args
|
||||||
|
return args
|
||||||
|
|
||||||
def get_link_debugfile_args(self, targetfile):
|
def get_link_debugfile_args(self, targetfile):
|
||||||
pdbarr = targetfile.split('.')[:-1]
|
pdbarr = targetfile.split('.')[:-1]
|
||||||
|
|
Loading…
Reference in New Issue