Migrated more of the .vcproj support code to new conventions

This commit is contained in:
Jason Perkins 2014-03-11 12:10:33 -04:00
parent 8c54e7943f
commit 13c072594d
2 changed files with 178 additions and 91 deletions

View File

@ -436,14 +436,13 @@
m.moduleDefinitionFile,
m.generateManifest,
m.generateDebugInformation,
m.programDatabaseFile,
m.subSystem,
m.optimizeReferences,
m.enableCOMDATFolding,
m.entryPointSymbol,
m.importLibrary,
m.targetMachine,
m.randomizedBaseAddress,
m.dataExecutionPrevention,
}
else
return {
@ -481,6 +480,53 @@
------------
m.elements.VCManifestTool = function(cfg)
return {
m.additionalManifestFiles,
}
end
function m.VCManifestTool(cfg)
if cfg.kind ~= p.STATICLIB then
m.VCTool("VCManifestTool", cfg)
end
end
------------
m.elements.VCMIDLTool = function(cfg)
return {
m.targetEnvironment(cfg)
}
end
function m.VCMIDLTool(cfg)
m.VCTool("VCMIDLTool", cfg)
end
------------
m.elements.VCNMakeTool = function(cfg)
return {
m.buildCommandLine,
m.reBuildCommandLine,
m.cleanCommandLine,
m.output,
m.preprocessorDefinitions,
m.includeSearchPath,
m.forcedIncludes,
m.assemblySearchPath,
m.forcedUsingAssemblies,
m.compileAsManaged,
}
end
function m.VCNMakeTool(cfg)
m.VCTool("VCNMakeTool", cfg)
end
------------
m.elements.VCWebServiceProxyGeneratorTool = function(cfg)
return {}
end
@ -518,72 +564,6 @@
--
---------------------------------------------------------------------------
function m.VCManifestTool(cfg)
if cfg.kind == p.STATICLIB then
return
end
p.push('<Tool')
p.w('Name="VCManifestTool"')
if cfg.fake then
p.pop('/>')
return
end
local manifests = {}
for i, fname in ipairs(cfg.files) do
if path.getextension(fname) == ".manifest" then
table.insert(manifests, project.getrelative(cfg.project, fname))
end
end
if #manifests > 0 then
p.x('AdditionalManifestFiles="%s"', table.concat(manifests, ";"))
end
p.pop('/>')
end
function m.VCMIDLTool(cfg)
p.push('<Tool')
p.w('Name="VCMIDLTool"')
if cfg.fake then
p.pop('/>')
return
end
if cfg.architecture == "x64" then
p.w('TargetEnvironment="3"')
end
p.pop('/>')
end
function m.VCNMakeTool(cfg)
p.push('<Tool')
p.w('Name="VCNMakeTool"')
if cfg.fake then
p.pop('/>')
return
end
m.nmakeCommandLine(cfg, cfg.buildcommands, "Build")
m.nmakeCommandLine(cfg, cfg.rebuildcommands, "ReBuild")
m.nmakeCommandLine(cfg, cfg.cleancommands, "Clean")
m.nmakeOutput(cfg)
p.w('PreprocessorDefinitions=""')
p.w('IncludeSearchPath=""')
p.w('ForcedIncludes=""')
p.w('AssemblySearchPath=""')
p.w('ForcedUsingAssemblies=""')
p.w('CompileAsManaged=""')
p.pop('/>')
end
function m.VCResourceCompilerTool(cfg)
p.push('<Tool')
@ -948,6 +928,27 @@
end
function m.additionalManifestFiles(cfg)
local manifests = {}
for i, fname in ipairs(cfg.files) do
if path.getextension(fname) == ".manifest" then
table.insert(manifests, project.getrelative(cfg.project, fname))
end
end
if #manifests > 0 then
p.x('AdditionalManifestFiles="%s"', table.concat(manifests, ";"))
end
end
function m.assemblySearchPath(cfg)
p.w('AssemblySearchPath=""')
end
function m.VCCLCompilerTool_additionalOptions(cfg)
local opts = cfg.buildoptions
if cfg.flags.MultiProcessorCompile then
@ -959,6 +960,7 @@
end
function m.VCCLCompilerTool_fileConfig_additionalOptions(filecfg)
local opts = filecfg.buildoptions
if #opts > 0 then
@ -967,6 +969,7 @@
end
function m.VCCLExternalCompilerTool_additionalOptions(cfg, toolset)
local buildoptions = table.join(toolset.getcflags(cfg), toolset.getcxxflags(cfg), cfg.buildoptions)
if not cfg.flags.NoPCH and cfg.pchheader then
@ -978,6 +981,7 @@
end
function m.additionalLinkerOptions(cfg, toolset)
local flags = cfg.linkoptions
if toolset then
@ -989,6 +993,7 @@
end
function m.assemblyReferences(prj)
-- Visual Studio doesn't support per-config references
local cfg = project.getfirstconfig(prj)
@ -1001,6 +1006,7 @@
end
function m.basicRuntimeChecks(cfg)
if not config.isOptimizedBuild(cfg)
and not cfg.flags.Managed
@ -1010,12 +1016,23 @@
end
end
function m.bufferSecurityCheck(cfg)
if cfg.flags.NoBufferSecurityCheck then
p.w('BufferSecurityCheck="false"')
end
end
function m.buildCommandLine(cfg)
commands = table.concat(cfg.buildcommands, "\r\n")
p.x('BuildCommandLine="%s"', commands)
end
function m.characterSet(cfg)
if not vstudio.isMakefile(cfg) then
p.w('CharacterSet="%s"', iif(cfg.flags.Unicode, 1, 2))
@ -1023,6 +1040,14 @@
end
function m.cleanCommandLine(cfg)
commands = table.concat(cfg.cleancommands, "\r\n")
p.x('CleanCommandLine="%s"', commands)
end
function m.compileAs(cfg, toolset)
local prj, file = config.normalize(cfg)
local c = project.isc(prj)
@ -1048,6 +1073,12 @@
function m.compileAsManaged(cfg)
p.w('CompileAsManaged=""')
end
function m.configurationType(cfg)
local cfgtypes = {
Makefile = 0,
@ -1079,12 +1110,6 @@
end
function m.dataExecutionPrevention(cfg, toolset)
if toolset then
p.w('DataExecutionPrevention="0"')
end
end
function m.debugInformationFormat(cfg, toolset)
local fmt = iif(toolset, "0", m.symbols(cfg))
@ -1092,6 +1117,7 @@
end
function m.enableCOMDATFolding(cfg, toolset)
if config.isOptimizedBuild(cfg) and not toolset then
p.w('EnableCOMDATFolding="2"')
@ -1099,6 +1125,7 @@
end
function m.enableEnhancedInstructionSet(cfg)
local map = { SSE = "1", SSE2 = "2" }
local value = map[cfg.vectorextensions]
@ -1108,11 +1135,13 @@
end
function m.enableFunctionLevelLinking(cfg)
p.w('EnableFunctionLevelLinking="%s"', m.bool(true))
end
function m.entryPointSymbol(cfg, toolset)
if (cfg.kind == "ConsoleApp" or cfg.kind == "WindowedApp") and
not cfg.flags.WinMain and
@ -1123,6 +1152,7 @@
end
function m.exceptionHandling(cfg)
if cfg.flags.NoExceptions then
p.w('ExceptionHandling="%s"', iif(_ACTION < "vs2005", "FALSE", 0))
@ -1132,6 +1162,7 @@
end
function m.excludedFromBuild(filecfg)
if not filecfg or filecfg.flags.ExcludeFromBuild then
p.w('ExcludedFromBuild="true"')
@ -1139,6 +1170,7 @@
end
function m.floatingPointModel(cfg)
local map = { Strict = "1", Fast = "2" }
local value = map[cfg.floatingpoint]
@ -1148,6 +1180,7 @@
end
function m.forcedIncludeFiles(cfg)
if #cfg.forceincludes > 0 then
local includes = path.translate(project.getrelative(cfg.project, cfg.forceincludes))
@ -1160,6 +1193,19 @@
end
function m.forcedIncludes(cfg)
p.w('ForcedIncludes=""')
end
function m.forcedUsingAssemblies(cfg)
p.w('ForcedUsingAssemblies=""')
end
function m.keyword(prj)
local windows, managed, makefile
for cfg in project.eachconfig(prj) do
@ -1181,6 +1227,7 @@
end
function m.generateDebugInformation(cfg, toolset)
if not toolset then
p.w('GenerateDebugInformation="%s"', m.bool(m.symbols(cfg) ~= 0))
@ -1188,6 +1235,7 @@
end
function m.generateManifest(cfg, toolset)
if cfg.flags.NoManifest or toolset then
p.w('GenerateManifest="%s"', m.bool(false))
@ -1195,6 +1243,7 @@
end
function m.ignoreImportLibrary(cfg, toolset)
if cfg.flags.NoImportLib and not toolset then
p.w('IgnoreImportLibrary="%s"', m.bool(true))
@ -1202,6 +1251,7 @@
end
function m.importLibrary(cfg, toolset)
if cfg.kind == p.SHAREDLIB and not toolset then
local implibdir = cfg.linktarget.abspath
@ -1217,6 +1267,13 @@
end
function m.includeSearchPath(cfg)
p.w('IncludeSearchPath=""')
end
function m.intermediateDirectory(cfg)
local objdir
if not cfg.fake then
@ -1228,6 +1285,7 @@
end
function m.linkIncremental(cfg, toolset)
local value
if not toolset then
@ -1239,6 +1297,7 @@
end
function m.linkLibraryDependencies(cfg, toolset)
if vstudio.needsExplicitLink(cfg) and not toolset then
p.w('LinkLibraryDependencies="false"')
@ -1246,6 +1305,7 @@
end
function m.managedExtensions(cfg)
if cfg.flags.Managed then
p.w('ManagedExtensions="1"')
@ -1253,6 +1313,7 @@
end
function m.minimalRebuild(cfg)
if config.isDebugBuild(cfg) and
cfg.debugformat ~= "c7" and
@ -1265,6 +1326,7 @@
end
function m.moduleDefinitionFile(cfg, toolset)
if not toolset then
local deffile = config.findfile(cfg, ".def")
@ -1275,16 +1337,6 @@
end
function m.nmakeCommandLine(cfg, commands, phase)
commands = table.concat(commands, "\r\n")
p.w('%sCommandLine="%s"', phase, p.esc(commands))
end
function m.nmakeOutput(cfg)
p.w('Output="$(OutDir)%s"', cfg.buildtarget.name)
end
function m.objectFile(filecfg)
if path.iscppfile(filecfg.name) then
@ -1295,6 +1347,7 @@
end
function m.omitDefaultLib(cfg)
if cfg.flags.OmitDefaultLibrary then
p.w('OmitDefaultLibName="true"')
@ -1302,6 +1355,7 @@
end
function m.omitFramePointers(cfg)
if cfg.flags.NoFramePointer then
p.w('OmitFramePointers="%s"', m.bool(true))
@ -1309,6 +1363,7 @@
end
function m.optimization(cfg)
local map = { Off=0, On=3, Debug=0, Full=3, Size=1, Speed=2 }
local value = map[cfg.optimize]
@ -1318,6 +1373,7 @@
end
function m.optimizeReferences(cfg, toolset)
if config.isOptimizedBuild(cfg) and not toolset then
p.w('OptimizeReferences="2"')
@ -1325,17 +1381,26 @@
end
function m.output(cfg)
p.w('Output="$(OutDir)%s"', cfg.buildtarget.name)
end
function m.outputDirectory(cfg)
local outdir = project.getrelative(cfg.project, cfg.buildtarget.directory)
p.x('OutputDirectory="%s"', path.translate(outdir))
end
function m.outputFile(cfg)
p.x('OutputFile="$(OutDir)\\%s"', cfg.buildtarget.name)
end
function m.platforms(prj)
p.push('<Platforms>')
table.foreachi(m.architectures(prj), function(arch)
@ -1347,13 +1412,22 @@
end
function m.preprocessorDefinitions(cfg)
if #cfg.defines > 0 then
if #cfg.defines > 0 or vstudio.isMakefile(cfg) then
p.x('PreprocessorDefinitions="%s"', table.concat(cfg.defines, ";"))
end
end
function m.programDatabaseFile(cfg, toolset)
if toolset then
p.w('ProgramDatabaseFile=""')
end
end
function m.programDataBaseFileName(cfg, toolset)
if toolset then
p.w('ProgramDataBaseFileName=""')
@ -1361,16 +1435,19 @@
end
function m.projectGUID(prj)
p.w('ProjectGUID="{%s}"', prj.uuid)
end
function m.projectName(prj)
p.x('Name="%s"', prj.name)
end
function m.projectReferences(prj)
local deps = project.getdependencies(prj)
if #deps > 0 then
@ -1398,15 +1475,16 @@
end
function m.projectType(prj)
p.w('ProjectType="Visual C++"')
end
function m.randomizedBaseAddress(cfg, toolset)
if toolset then
p.w('RandomizedBaseAddress="1"')
end
function m.reBuildCommandLine(cfg)
commands = table.concat(cfg.rebuildcommands, "\r\n")
p.x('ReBuildCommandLine="%s"', commands)
end
@ -1420,6 +1498,7 @@
end
function m.resourcePreprocessorDefinitions(cfg)
local defs = table.join(cfg.defines, cfg.resdefines)
if #defs > 0 then
@ -1428,6 +1507,7 @@
end
function m.rootNamespace(prj)
local hasWindows = project.hasConfig(prj, function(cfg)
return cfg.system == p.WINDOWS
@ -1443,6 +1523,7 @@
end
function m.runtimeLibrary(cfg)
local runtimes = {
StaticRelease = 0,
@ -1475,6 +1556,13 @@
end
function m.targetEnvironment(cfg)
if cfg.architecture == "x64" then
p.w('TargetEnvironment="3"')
end
end
function m.targetFrameworkVersion(prj)
local windows, makefile
for cfg in project.eachconfig(prj) do

View File

@ -43,8 +43,7 @@
OutputFile="$(OutDir)\MyProject.elf"
LinkIncremental="0"
GenerateManifest="false"
RandomizedBaseAddress="1"
DataExecutionPrevention="0"
ProgramDatabaseFile=""
/>
]]
end