Ported VCCompilerTool, VCLinkerTool, VCManifestTool and supporting function and tests to new platforms API
This commit is contained in:
parent
63a568dd3f
commit
3f0f15942a
@ -24,11 +24,6 @@
|
||||
"base/bake.lua",
|
||||
"base/api.lua",
|
||||
"base/cmdline.lua",
|
||||
"tools/dotnet.lua",
|
||||
"tools/gcc.lua",
|
||||
"tools/msc.lua",
|
||||
"tools/ow.lua",
|
||||
"tools/snc.lua",
|
||||
"base/validate.lua",
|
||||
"base/help.lua",
|
||||
"base/premake.lua",
|
||||
@ -37,9 +32,15 @@
|
||||
"project/project.lua",
|
||||
"project/config.lua",
|
||||
"project/oven.lua",
|
||||
|
||||
"base/solution.lua",
|
||||
|
||||
-- tool APIs
|
||||
"tools/dotnet.lua",
|
||||
"tools/gcc.lua",
|
||||
"tools/msc.lua",
|
||||
"tools/ow.lua",
|
||||
"tools/snc.lua",
|
||||
|
||||
-- CodeBlocks action
|
||||
"actions/codeblocks/_codeblocks.lua",
|
||||
"actions/codeblocks/codeblocks_workspace.lua",
|
||||
|
@ -48,6 +48,22 @@
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
-- Translate the architecture settings for a configuration into a Visual
|
||||
-- Studio compatible identifier.
|
||||
--
|
||||
|
||||
function vstudio.architecture(cfg)
|
||||
if cfg.system == premake.XBOX360 then
|
||||
return "Xbox 360"
|
||||
end
|
||||
if cfg.architecture == "x32" then
|
||||
return "Win32"
|
||||
end
|
||||
return cfg.architecture or "Win32"
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Returns the full, absolute path to the Visual Studio project file
|
||||
-- corresponding to a particular project object.
|
||||
@ -114,20 +130,6 @@
|
||||
end
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Translate the architecture settings for a configuration into a Visual
|
||||
-- Studio compatible identifier.
|
||||
--
|
||||
|
||||
function vstudio.architecture(cfg)
|
||||
if cfg.architecture == "x32" then
|
||||
return "Win32"
|
||||
end
|
||||
return cfg.architecture or "Win32"
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Process the solution's list of configurations and platforms, creates a list
|
||||
-- of build configuration/platform pairs in a Visual Studio compatible format.
|
||||
|
@ -1,7 +1,7 @@
|
||||
--
|
||||
-- vs200x_vcproj.lua
|
||||
-- Generate a Visual Studio 2002-2008 C/C++ project.
|
||||
-- Copyright (c) 2009-2011 Jason Perkins and the Premake project
|
||||
-- Copyright (c) 2009-2012 Jason Perkins and the Premake project
|
||||
--
|
||||
|
||||
premake.vstudio.vc200x = { }
|
||||
@ -31,15 +31,11 @@
|
||||
_p(1,'<Configurations>')
|
||||
for cfg in project.eachconfig(prj) do
|
||||
vc200x.configuration(cfg)
|
||||
vc200x.tools(cfg)
|
||||
end
|
||||
|
||||
--[[
|
||||
|
||||
for _, block in ipairs(getsections(_ACTION, cfginfo.src_platform)) do
|
||||
|
||||
if blockmap[block] then
|
||||
blockmap[block](cfg)
|
||||
|
||||
-- Build event blocks --
|
||||
elseif block == "VCPreBuildEventTool" then
|
||||
vc200x.buildstepsblock("VCPreBuildEventTool", cfg.prebuildcommands)
|
||||
@ -75,11 +71,7 @@
|
||||
_p(3,'/>')
|
||||
|
||||
-- End Xbox 360 custom sections --
|
||||
|
||||
else
|
||||
_p(3,'<Tool')
|
||||
_p(4,'Name="%s"', block)
|
||||
_p(3,'/>')
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
@ -104,6 +96,19 @@
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Return the version-specific text for a boolean value.
|
||||
--
|
||||
|
||||
local function bool(value)
|
||||
if (_ACTION < "vs2005") then
|
||||
return iif(value, "TRUE", "FALSE")
|
||||
else
|
||||
return iif(value, "true", "false")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Writes the opening XML declaration for both the project file
|
||||
-- and the project user file.
|
||||
@ -204,31 +209,456 @@
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
-- Everything below this point is a candidate for deprecation
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Return the version-specific text for a boolean value.
|
||||
-- Write out the tool elements for a specific configuration.
|
||||
--
|
||||
|
||||
local function bool(value)
|
||||
if (_ACTION < "vs2005") then
|
||||
return iif(value, "TRUE", "FALSE")
|
||||
else
|
||||
return iif(value, "true", "false")
|
||||
function vc200x.tools(cfg)
|
||||
for _, tool in ipairs(vc200x.gettools(cfg)) do
|
||||
if vc200x.toolmap[tool] then
|
||||
vc200x.toolmap[tool](cfg)
|
||||
else
|
||||
vc200x.tool(tool)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Return the optimization code.
|
||||
-- Return the list of tools required to build a specific configuration.
|
||||
-- Each tool gets represented by an XML element in the project file.
|
||||
--
|
||||
|
||||
function vc200x.gettools(cfg)
|
||||
if _ACTION == "vs2002" then
|
||||
return {
|
||||
"VCCLCompilerTool",
|
||||
"VCCustomBuildTool",
|
||||
"VCLinkerTool",
|
||||
"VCMIDLTool",
|
||||
"VCPostBuildEventTool",
|
||||
"VCPreBuildEventTool",
|
||||
"VCPreLinkEventTool",
|
||||
"VCResourceCompilerTool",
|
||||
"VCWebServiceProxyGeneratorTool",
|
||||
"VCWebDeploymentTool"
|
||||
}
|
||||
end
|
||||
if _ACTION == "vs2003" then
|
||||
return {
|
||||
"VCCLCompilerTool",
|
||||
"VCCustomBuildTool",
|
||||
"VCLinkerTool",
|
||||
"VCMIDLTool",
|
||||
"VCPostBuildEventTool",
|
||||
"VCPreBuildEventTool",
|
||||
"VCPreLinkEventTool",
|
||||
"VCResourceCompilerTool",
|
||||
"VCWebServiceProxyGeneratorTool",
|
||||
"VCXMLDataGeneratorTool",
|
||||
"VCWebDeploymentTool",
|
||||
"VCManagedWrapperGeneratorTool",
|
||||
"VCAuxiliaryManagedWrapperGeneratorTool"
|
||||
}
|
||||
end
|
||||
if cfg.system == premake.XBOX360 then
|
||||
return {
|
||||
"VCPreBuildEventTool",
|
||||
"VCCustomBuildTool",
|
||||
"VCXMLDataGeneratorTool",
|
||||
"VCWebServiceProxyGeneratorTool",
|
||||
"VCMIDLTool",
|
||||
"VCCLCompilerTool",
|
||||
"VCManagedResourceCompilerTool",
|
||||
"VCResourceCompilerTool",
|
||||
"VCPreLinkEventTool",
|
||||
"VCLinkerTool",
|
||||
"VCALinkTool",
|
||||
"VCX360ImageTool",
|
||||
"VCBscMakeTool",
|
||||
"VCX360DeploymentTool",
|
||||
"VCPostBuildEventTool",
|
||||
"DebuggerTool",
|
||||
}
|
||||
end
|
||||
return {
|
||||
"VCPreBuildEventTool",
|
||||
"VCCustomBuildTool",
|
||||
"VCXMLDataGeneratorTool",
|
||||
"VCWebServiceProxyGeneratorTool",
|
||||
"VCMIDLTool",
|
||||
"VCCLCompilerTool",
|
||||
"VCManagedResourceCompilerTool",
|
||||
"VCResourceCompilerTool",
|
||||
"VCPreLinkEventTool",
|
||||
"VCLinkerTool",
|
||||
"VCALinkTool",
|
||||
"VCManifestTool",
|
||||
"VCXDCMakeTool",
|
||||
"VCBscMakeTool",
|
||||
"VCFxCopTool",
|
||||
"VCAppVerifierTool",
|
||||
"VCWebDeploymentTool",
|
||||
"VCPostBuildEventTool"
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Write out an empty tool element.
|
||||
--
|
||||
|
||||
function vc200x.tool(name)
|
||||
_p(3,'<Tool')
|
||||
_p(4,'Name="%s"', name)
|
||||
_p(3,'/>')
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Write out the VCCLCompilerTool element.
|
||||
--
|
||||
|
||||
function vc200x.VCCLCompilerTool_ng(cfg)
|
||||
_p(3,'<Tool')
|
||||
_p(4,'Name="%s"', iif(cfg.system ~= premake.XBOX360, "VCCLCompilerTool", "VCCLX360CompilerTool"))
|
||||
|
||||
if cfg.system == premake.PS3 then
|
||||
vc200x.VCCLCompilerTool_ps3_ng(cfg)
|
||||
else
|
||||
vc200x.VCCLCompilerTool_windows(cfg)
|
||||
end
|
||||
|
||||
_p(3,'/>')
|
||||
end
|
||||
|
||||
function vc200x.VCCLCompilerTool_windows(cfg)
|
||||
if #cfg.buildoptions > 0 then
|
||||
_x(4,'AdditionalOptions="%s"', table.concat(cfg.buildoptions, " "))
|
||||
end
|
||||
|
||||
_p(4,'Optimization="%s"', vc200x.optimization(cfg))
|
||||
|
||||
if cfg.flags.NoFramePointer then
|
||||
_p(4,'OmitFramePointers="%s"', bool(true))
|
||||
end
|
||||
|
||||
if #cfg.includedirs > 0 then
|
||||
_x(4,'AdditionalIncludeDirectories="%s"', path.translate(table.concat(cfg.includedirs, ";")))
|
||||
end
|
||||
|
||||
if #cfg.defines > 0 then
|
||||
_x(4,'PreprocessorDefinitions="%s"', table.concat(cfg.defines, ";"))
|
||||
end
|
||||
|
||||
if premake.config.isdebugbuild(cfg) and
|
||||
cfg.debugformat ~= "c7" and
|
||||
not cfg.flags.NoMinimalRebuild and
|
||||
not cfg.flags.Managed
|
||||
then
|
||||
_p(4,'MinimalRebuild="%s"', bool(true))
|
||||
end
|
||||
|
||||
if cfg.flags.NoExceptions then
|
||||
_p(4,'ExceptionHandling="%s"', iif(_ACTION < "vs2005", "FALSE", 0))
|
||||
elseif cfg.flags.SEH and _ACTION > "vs2003" then
|
||||
_p(4,'ExceptionHandling="2"')
|
||||
end
|
||||
|
||||
if vc200x.optimization(cfg) == 0 and not cfg.flags.Managed then
|
||||
_p(4,'BasicRuntimeChecks="3"')
|
||||
end
|
||||
|
||||
if vc200x.optimization(cfg) ~= 0 then
|
||||
_p(4,'StringPooling="%s"', bool(true))
|
||||
end
|
||||
|
||||
local runtime
|
||||
if premake.config.isdebugbuild(cfg) then
|
||||
runtime = iif(cfg.flags.StaticRuntime, 1, 3)
|
||||
else
|
||||
runtime = iif(cfg.flags.StaticRuntime, 0, 2)
|
||||
end
|
||||
_p(4,'RuntimeLibrary="%s"', runtime)
|
||||
|
||||
_p(4,'EnableFunctionLevelLinking="%s"', bool(true))
|
||||
|
||||
if _ACTION > "vs2003" and cfg.system ~= "Xbox360" and cfg.architecture ~= "x64" then
|
||||
if cfg.flags.EnableSSE then
|
||||
_p(4,'EnableEnhancedInstructionSet="1"')
|
||||
elseif cfg.flags.EnableSSE2 then
|
||||
_p(4,'EnableEnhancedInstructionSet="2"')
|
||||
end
|
||||
end
|
||||
|
||||
if _ACTION < "vs2005" then
|
||||
if cfg.flags.FloatFast then
|
||||
_p(4,'ImproveFloatingPointConsistency="%s"', bool(false))
|
||||
elseif cfg.flags.FloatStrict then
|
||||
_p(4,'ImproveFloatingPointConsistency="%s"', bool(true))
|
||||
end
|
||||
else
|
||||
if cfg.flags.FloatFast then
|
||||
_p(4,'FloatingPointModel="2"')
|
||||
elseif cfg.flags.FloatStrict then
|
||||
_p(4,'FloatingPointModel="1"')
|
||||
end
|
||||
end
|
||||
|
||||
if _ACTION < "vs2005" and not cfg.flags.NoRTTI then
|
||||
_p(4,'RuntimeTypeInfo="%s"', bool(true))
|
||||
elseif _ACTION > "vs2003" and cfg.flags.NoRTTI and not cfg.flags.Managed then
|
||||
_p(4,'RuntimeTypeInfo="%s"', bool(false))
|
||||
end
|
||||
|
||||
if cfg.flags.NativeWChar then
|
||||
_p(4,'TreatWChar_tAsBuiltInType="%s"', bool(true))
|
||||
elseif cfg.flags.NoNativeWChar then
|
||||
_p(4,'TreatWChar_tAsBuiltInType="%s"', bool(false))
|
||||
end
|
||||
|
||||
if not cfg.flags.NoPCH and cfg.pchheader then
|
||||
_p(4,'UsePrecompiledHeader="%s"', iif(_ACTION < "vs2005", 3, 2))
|
||||
_x(4,'PrecompiledHeaderThrough="%s"', path.getname(cfg.pchheader))
|
||||
else
|
||||
_p(4,'UsePrecompiledHeader="%s"', iif(_ACTION > "vs2003" or cfg.flags.NoPCH, 0, 2))
|
||||
end
|
||||
|
||||
_p(4,'WarningLevel="%s"', iif(cfg.flags.ExtraWarnings, 4, 3))
|
||||
|
||||
if cfg.flags.FatalWarnings then
|
||||
_p(4,'WarnAsError="%s"', bool(true))
|
||||
end
|
||||
|
||||
if _ACTION < "vs2008" and not cfg.flags.Managed then
|
||||
_p(4,'Detect64BitPortabilityProblems="%s"', bool(not cfg.flags.No64BitChecks))
|
||||
end
|
||||
|
||||
_x(4,'ProgramDataBaseFileName="$(OutDir)\\%s.pdb"', config.gettargetinfo(cfg).basename)
|
||||
|
||||
_p(4,'DebugInformationFormat="%s"', vc200x.symbols(cfg))
|
||||
|
||||
if cfg.project.language == "C" then
|
||||
_p(4, 'CompileAs="1"')
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function vc200x.VCCLCompilerTool_ps3_ng(cfg)
|
||||
local buildoptions = table.join(premake.snc.getcflags(cfg), premake.snc.getcxxflags(cfg), cfg.buildoptions)
|
||||
|
||||
if not cfg.flags.NoPCH and cfg.pchheader then
|
||||
_p(4,'UsePrecompiledHeader="%s"', iif(_ACTION < "vs2005", 3, 2))
|
||||
_x(4,'PrecompiledHeaderThrough="%s"', path.getname(cfg.pchheader))
|
||||
table.insert(buildoptions, '--use_pch="$(IntDir)/$(TargetName).pch"')
|
||||
else
|
||||
_p(4,'UsePrecompiledHeader="%s"', iif(_ACTION > "vs2003" or cfg.flags.NoPCH, 0, 2))
|
||||
end
|
||||
|
||||
_x(4,'AdditionalOptions="%s"', table.concat(buildoptions, " "))
|
||||
|
||||
if #cfg.includedirs > 0 then
|
||||
_x(4,'AdditionalIncludeDirectories="%s"', path.translate(table.concat(cfg.includedirs, ";")))
|
||||
end
|
||||
|
||||
if #cfg.defines > 0 then
|
||||
_x(4,'PreprocessorDefinitions="%s"', table.concat(cfg.defines, ";"))
|
||||
end
|
||||
|
||||
_x(4,'ProgramDataBaseFileName="$(OutDir)\\%s.pdb"', config.gettargetinfo(cfg).basename)
|
||||
|
||||
_p(4,'DebugInformationFormat="0"')
|
||||
_p(4,'CompileAs="0"')
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Write out the VCLinkerTool element.
|
||||
--
|
||||
|
||||
function vc200x.VCLinkerTool_ng(cfg)
|
||||
_p(3,'<Tool')
|
||||
|
||||
if cfg.kind == premake.STATICLIB then
|
||||
_p(4,'Name="VCLibrarianTool"')
|
||||
if cfg.system == premake.PS3 then
|
||||
vc200x.VCLinkerTool_ps3_ng(cfg)
|
||||
else
|
||||
vc200x.VCLinkerTool_windows_static(cfg)
|
||||
end
|
||||
else
|
||||
_p(4,'Name="%s"', iif(cfg.platform ~= "Xbox360", "VCLinkerTool", "VCX360LinkerTool"))
|
||||
if cfg.system == premake.PS3 then
|
||||
vc200x.VCLinkerTool_ps3_ng(cfg)
|
||||
else
|
||||
vc200x.VCLinkerTool_windows(cfg)
|
||||
end
|
||||
end
|
||||
|
||||
_p(3,'/>')
|
||||
end
|
||||
|
||||
|
||||
function vc200x.VCLinkerTool_windows(cfg)
|
||||
if cfg.flags.NoImportLib then
|
||||
_p(4,'IgnoreImportLibrary="%s"', bool(true))
|
||||
end
|
||||
|
||||
if #cfg.linkoptions > 0 then
|
||||
_x(4,'AdditionalOptions="%s"', table.concat(cfg.linkoptions, " "))
|
||||
end
|
||||
|
||||
if #cfg.links > 0 then
|
||||
_x(4,'AdditionalDependencies="%s"', table.concat(path.translate(config.getlinks(cfg, "all", "fullpath"), " ")))
|
||||
end
|
||||
|
||||
_x(4,'OutputFile="$(OutDir)\\%s"', config.gettargetinfo(cfg).name)
|
||||
|
||||
_p(4,'LinkIncremental="%s"', iif(premake.config.isincrementallink(cfg) , 2, 1))
|
||||
|
||||
if #cfg.libdirs > 0 then
|
||||
_x(4,'AdditionalLibraryDirectories="%s"', table.concat(path.translate(cfg.libdirs) , ";"))
|
||||
end
|
||||
|
||||
local deffile = config.findfile(cfg, ".def")
|
||||
if deffile then
|
||||
_p(4,'ModuleDefinitionFile="%s"', deffile)
|
||||
end
|
||||
|
||||
if cfg.flags.NoManifest then
|
||||
_p(4,'GenerateManifest="%s"', bool(false))
|
||||
end
|
||||
|
||||
_p(4,'GenerateDebugInformation="%s"', bool(vc200x.symbols(cfg) ~= 0))
|
||||
|
||||
if vc200x.symbols(cfg) >= 3 then
|
||||
_x(4,'ProgramDataBaseFileName="$(OutDir)\\%s.pdb"', config.gettargetinfo(cfg).basename)
|
||||
end
|
||||
|
||||
_p(4,'SubSystem="%s"', iif(cfg.kind == "ConsoleApp", 1, 2))
|
||||
|
||||
if vc200x.optimization(cfg) ~= 0 then
|
||||
_p(4,'OptimizeReferences="2"')
|
||||
_p(4,'EnableCOMDATFolding="2"')
|
||||
end
|
||||
|
||||
if (cfg.kind == "ConsoleApp" or cfg.kind == "WindowedApp") and not cfg.flags.WinMain then
|
||||
_p(4,'EntryPointSymbol="mainCRTStartup"')
|
||||
end
|
||||
|
||||
if cfg.kind == "SharedLib" then
|
||||
local implibname = config.getlinkinfo(cfg).fullpath
|
||||
-- I can't actually stop the import lib, but I can hide it in the objects directory
|
||||
if cfg.flags.NoImportLib then
|
||||
local objdir = config.getuniqueobjdir(cfg)
|
||||
implibname = path.join(objdir, path.getname(implibname))
|
||||
end
|
||||
_x(4,'ImportLibrary="%s"', path.translate(implibname))
|
||||
end
|
||||
|
||||
_p(4,'TargetMachine="%d"', iif(cfg.architecture == "x64", 17, 1))
|
||||
end
|
||||
|
||||
|
||||
function vc200x.VCLinkerTool_windows_static(cfg)
|
||||
if #cfg.links > 0 then
|
||||
_x(4,'AdditionalDependencies="%s"', table.concat(config.getlinks(cfg, "all", "fullpath"), " "))
|
||||
end
|
||||
|
||||
_x(4,'OutputFile="$(OutDir)\\%s"', config.gettargetinfo(cfg).name)
|
||||
|
||||
if #cfg.libdirs > 0 then
|
||||
_x(4,'AdditionalLibraryDirectories="%s"', path.translate(table.concat(cfg.libdirs, ";")))
|
||||
end
|
||||
|
||||
local opts = {}
|
||||
if cfg.architecture == premake.X32 then
|
||||
table.insert(opts, "/MACHINE:X86")
|
||||
elseif cfg.architecture == premake.X64 then
|
||||
table.insert(opts, "/MACHINE:X64")
|
||||
end
|
||||
opts = table.join(opts, cfg.linkoptions)
|
||||
if #opts > 0 then
|
||||
_x(4,'AdditionalOptions="%s"', table.concat(opts, " "))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function vc200x.VCLinkerTool_ps3_ng(cfg)
|
||||
local buildoptions = table.join(premake.snc.getldflags_ng(cfg), cfg.linkoptions)
|
||||
if #buildoptions > 0 then
|
||||
_x(4,'AdditionalOptions="%s"', table.concat(buildoptions, " "))
|
||||
end
|
||||
|
||||
if #cfg.links > 0 then
|
||||
_x(4,'AdditionalDependencies="%s"', table.concat(config.getlinks(cfg, "all", "fullpath"), " "))
|
||||
end
|
||||
|
||||
_x(4,'OutputFile="$(OutDir)\\%s"', config.gettargetinfo(cfg).name)
|
||||
|
||||
if cfg.kind ~= premake.STATICLIB then
|
||||
_p(4,'LinkIncremental="0"')
|
||||
end
|
||||
|
||||
if #cfg.libdirs > 0 then
|
||||
_x(4,'AdditionalLibraryDirectories="%s"', table.concat(path.translate(cfg.libdirs) , ";"))
|
||||
end
|
||||
|
||||
if cfg.kind ~= premake.STATICLIB then
|
||||
_p(4,'GenerateManifest="%s"', bool(false))
|
||||
_p(4,'ProgramDatabaseFile=""')
|
||||
_p(4,'RandomizedBaseAddress="1"')
|
||||
_p(4,'DataExecutionPrevention="0"')
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Write out the <VCManifest> element.
|
||||
--
|
||||
|
||||
function vc200x.VCManifestTool_ng(cfg)
|
||||
local manifests = {}
|
||||
for _, fname in ipairs(cfg.files) do
|
||||
if path.getextension(fname) == ".manifest" then
|
||||
table.insert(manifests, project.getrelative(cfg.project, fname))
|
||||
end
|
||||
end
|
||||
|
||||
_p(3,'<Tool')
|
||||
_p(4,'Name="VCManifestTool"')
|
||||
if #manifests > 0 then
|
||||
_x(4,'AdditionalManifestFiles="%s"', table.concat(manifests, ";"))
|
||||
end
|
||||
_p(3,'/>')
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Map tool names to output functions. Tools that aren't listed will
|
||||
-- output a standard empty tool element.
|
||||
--
|
||||
|
||||
vc200x.toolmap = {
|
||||
VCCLCompilerTool = vc200x.VCCLCompilerTool_ng,
|
||||
VCLinkerTool = vc200x.VCLinkerTool_ng,
|
||||
VCManifestTool = vc200x.VCManifestTool,
|
||||
--[[
|
||||
VCMIDLTool = vc200x.VCMIDLTool,
|
||||
VCResourceCompilerTool = vc200x.VCResourceCompilerTool,
|
||||
--]]
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
-- Translate Premake flags into a Visual Studio optimization value.
|
||||
--
|
||||
|
||||
function vc200x.optimization(cfg)
|
||||
local result = 0
|
||||
|
||||
-- step through the flags in the order they were specified, so
|
||||
-- later flags can override an earlier value
|
||||
for _, value in ipairs(cfg.flags) do
|
||||
if (value == "Optimize") then
|
||||
result = 3
|
||||
@ -238,10 +668,40 @@
|
||||
result = 2
|
||||
end
|
||||
end
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Return the debugging symbols level for a configuration.
|
||||
--
|
||||
|
||||
function vc200x.symbols(cfg)
|
||||
if not cfg.flags.Symbols then
|
||||
return 0
|
||||
elseif cfg.debugformat == "c7" then
|
||||
return 1
|
||||
else
|
||||
-- Edit-and-continue doesn't work for some configurations
|
||||
if cfg.flags.NoEditAndContinue or
|
||||
vc200x.optimization(cfg) ~= 0 or
|
||||
cfg.flags.Managed or
|
||||
cfg.system == "x64" or
|
||||
cfg.platform == "x64" -- TODO: remove this when the _ng stuff goes live
|
||||
then
|
||||
return 3
|
||||
else
|
||||
return 4
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
-- Everything below this point is a candidate for deprecation
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Write the project file header
|
||||
@ -395,30 +855,6 @@
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Return the debugging symbols level for a configuration.
|
||||
--
|
||||
|
||||
function vc200x.symbols(cfg)
|
||||
if not cfg.flags.Symbols then
|
||||
return 0
|
||||
elseif cfg.debugformat == "c7" then
|
||||
return 1
|
||||
else
|
||||
-- Edit-and-continue doesn't work for some configurations
|
||||
if cfg.flags.NoEditAndContinue or
|
||||
vc200x.optimization(cfg) ~= 0 or
|
||||
cfg.flags.Managed or
|
||||
cfg.platform == "x64"
|
||||
then
|
||||
return 3
|
||||
else
|
||||
return 4
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Compiler block for Windows and XBox360 platforms.
|
||||
--
|
||||
@ -592,7 +1028,7 @@
|
||||
end
|
||||
|
||||
if cfg.kind == "SharedLib" then
|
||||
local implibname = cfg.linktarget.fullpath
|
||||
local implibname = config.getlinkinfo(cfg).fullpath
|
||||
_p(4,'ImportLibrary="%s"', iif(cfg.flags.NoImportLib, cfg.objectsdir .. "\\" .. path.getname(implibname), implibname))
|
||||
end
|
||||
|
||||
@ -705,6 +1141,27 @@
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Write out the <VCManifest> element.
|
||||
--
|
||||
|
||||
function vc200x.VCManifestTool(cfg)
|
||||
local manifests = {}
|
||||
for _, fname in ipairs(cfg.files) do
|
||||
if path.getextension(fname) == ".manifest" then
|
||||
table.insert(manifests, fname)
|
||||
end
|
||||
end
|
||||
|
||||
_p(3,'<Tool')
|
||||
_p(4,'Name="VCManifestTool"')
|
||||
if #manifests > 0 then
|
||||
_x(4,'AdditionalManifestFiles="%s"', table.concat(manifests, ";"))
|
||||
end
|
||||
_p(3,'/>')
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Resource compiler block.
|
||||
--
|
||||
@ -728,30 +1185,6 @@
|
||||
|
||||
_p(3,'/>')
|
||||
end
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Manifest block.
|
||||
--
|
||||
|
||||
function vc200x.VCManifestTool(cfg)
|
||||
-- locate all manifest files
|
||||
local manifests = { }
|
||||
for _, fname in ipairs(cfg.files) do
|
||||
if path.getextension(fname) == ".manifest" then
|
||||
table.insert(manifests, fname)
|
||||
end
|
||||
end
|
||||
|
||||
_p(3,'<Tool')
|
||||
_p(4,'Name="VCManifestTool"')
|
||||
if #manifests > 0 then
|
||||
_p(4,'AdditionalManifestFiles="%s"', premake.esc(table.concat(manifests, ";")))
|
||||
end
|
||||
_p(3,'/>')
|
||||
end
|
||||
|
||||
|
||||
|
||||
--
|
||||
|
@ -359,6 +359,7 @@
|
||||
"ps3",
|
||||
"solaris",
|
||||
"windows",
|
||||
"xbox360"
|
||||
},
|
||||
},
|
||||
|
||||
|
@ -17,6 +17,9 @@
|
||||
premake.STATICLIB = "StaticLib"
|
||||
premake.WINDOWEDAPP = "WindowedApp"
|
||||
premake.WINDOWS = "windows"
|
||||
premake.X32 = "x32"
|
||||
premake.X64 = "x64"
|
||||
premake.XBOX360 = "xbox360"
|
||||
|
||||
|
||||
--
|
||||
|
@ -98,6 +98,28 @@
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Locate a project by name, case insensitive.
|
||||
--
|
||||
-- @param sln
|
||||
-- The solution to query.
|
||||
-- @param name
|
||||
-- The name of the projec to find.
|
||||
-- @return
|
||||
-- The project object, or nil if a matching project could not be found.
|
||||
--
|
||||
|
||||
function premake.solution.findproject(sln, name)
|
||||
name = name:lower()
|
||||
for _, prj in ipairs(sln.projects) do
|
||||
if name == prj.name:lower() then
|
||||
return prj
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Retrieve a solution by name or index.
|
||||
--
|
||||
|
@ -10,21 +10,244 @@
|
||||
|
||||
|
||||
--
|
||||
-- Figures out the right form for file paths returned from
|
||||
-- this configuration.
|
||||
-- Helper function for getlinkinfo() and gettargetinfo(); builds the
|
||||
-- name parts for a configuration, for building or linking.
|
||||
--
|
||||
-- @param cfg
|
||||
-- The configuration object being queried.
|
||||
-- @param kind
|
||||
-- The target kind (SharedLib, StaticLib).
|
||||
-- @param field
|
||||
-- One of "target" or "implib", used to locate the naming information
|
||||
-- in the configuration object (i.e. targetdir, targetname, etc.)
|
||||
-- @return
|
||||
-- A target info object; see one of getlinkinfo() or gettargetinfo()
|
||||
-- for more information.
|
||||
--
|
||||
|
||||
local function buildtargetinfo(cfg, kind, field)
|
||||
local basedir = project.getlocation(cfg.project)
|
||||
|
||||
local directory = cfg[field.."dir"] or cfg.targetdir or basedir
|
||||
directory = path.getrelative(basedir, directory)
|
||||
|
||||
local basename = cfg[field.."name"] or cfg.targetname or cfg.project.name
|
||||
|
||||
local bundlename = ""
|
||||
local bundlepath = ""
|
||||
local extension = ""
|
||||
local prefix = ""
|
||||
local suffix = ""
|
||||
|
||||
if kind == premake.STATICLIB then
|
||||
if cfg.system ~= premake.WINDOWS then
|
||||
prefix = "lib"
|
||||
extension = ".a"
|
||||
else
|
||||
extension = ".lib"
|
||||
end
|
||||
|
||||
elseif cfg.system == premake.WINDOWS then
|
||||
if kind == premake.CONSOLEAPP or kind == premake.WINDOWEDAPP then
|
||||
extension = ".exe"
|
||||
elseif kind == premake.SHAREDLIB then
|
||||
extension = ".dll"
|
||||
end
|
||||
|
||||
elseif cfg.system == premake.MACOSX then
|
||||
if kind == premake.WINDOWEDAPP then
|
||||
bundlename = basename .. ".app"
|
||||
bundlepath = path.join(directory, bundlename)
|
||||
bundlepath = path.join(bundlepath, "Contents/MacOS")
|
||||
elseif kind == premake.SHAREDLIB then
|
||||
prefix = "lib"
|
||||
extension = ".dylib"
|
||||
end
|
||||
|
||||
elseif cfg.system == premake.PS3 then
|
||||
if kind == premake.CONSOLEAPP or kind == premake.WINDOWEDAPP then
|
||||
extension = ".elf"
|
||||
end
|
||||
|
||||
else
|
||||
if kind == premake.SHAREDLIB then
|
||||
prefix = "lib"
|
||||
extension = ".so"
|
||||
end
|
||||
end
|
||||
|
||||
prefix = cfg.targetprefix or prefix
|
||||
suffix = cfg.targetsuffix or suffix
|
||||
|
||||
local info = {}
|
||||
info.directory = directory
|
||||
info.basename = basename .. suffix
|
||||
info.name = prefix .. info.basename .. extension
|
||||
info.fullpath = path.join(info.directory, info.name)
|
||||
info.bundlename = bundlename
|
||||
info.bundlepath = bundlepath
|
||||
info.prefix = prefix
|
||||
info.suffix = suffix
|
||||
return info
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Check a configuration for a source code file with the specified
|
||||
-- extension. Used for locating special files, such as Windows
|
||||
-- ".def" module definition files.
|
||||
--
|
||||
-- @param cfg
|
||||
-- The configuration object to query.
|
||||
-- @param ext
|
||||
-- The file extension for which to search.
|
||||
-- @return
|
||||
-- The full file name if found, nil otherwise.
|
||||
--
|
||||
|
||||
function config.findfile(cfg, ext)
|
||||
for _, fname in ipairs(cfg.files) do
|
||||
if fname:endswith(ext) then
|
||||
return project.getrelative(cfg.project, fname)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Retrieve linking information for a specific configuration. That is,
|
||||
-- the path information that is required to link against the library
|
||||
-- built by this configuration.
|
||||
--
|
||||
-- @param cfg
|
||||
-- The configuration object to query.
|
||||
-- @return
|
||||
-- One of "windows" or "posix".
|
||||
-- A table with these values:
|
||||
-- basename - the target with no directory or file extension
|
||||
-- name - the target name and extension, with no directory
|
||||
-- directory - relative path to the target, with no file name
|
||||
-- prefix - the file name prefix
|
||||
-- suffix - the file name suffix
|
||||
-- fullpath - directory, name, and extension
|
||||
--
|
||||
|
||||
function config.getpathstyle(cfg)
|
||||
if premake.action.current().os == premake.WINDOWS then
|
||||
return premake.WINDOWS
|
||||
else
|
||||
return premake.POSIX
|
||||
function config.getlinkinfo(cfg)
|
||||
-- have I cached results from a previous call?
|
||||
if cfg.linkinfo then
|
||||
return cfg.linkinfo
|
||||
end
|
||||
|
||||
-- if an import library is in use, switch the target kind
|
||||
local kind = cfg.kind
|
||||
local field = "target"
|
||||
if premake.iscppproject(cfg.project) then
|
||||
if cfg.system == premake.WINDOWS and kind == premake.SHAREDLIB and not cfg.flags.NoImportLib then
|
||||
kind = premake.STATICLIB
|
||||
field = "implib"
|
||||
end
|
||||
end
|
||||
|
||||
local info = buildtargetinfo(cfg, kind, field)
|
||||
|
||||
-- cache the results for future calls
|
||||
cfg.linktinfo = info
|
||||
return info
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Retrieve a list of link targets from a configuration.
|
||||
--
|
||||
-- @param cfg
|
||||
-- The configuration object to query.
|
||||
-- @param kind
|
||||
-- The type of links to retrieve; one of:
|
||||
-- siblings - linkable sibling projects
|
||||
-- system - system (non-sibling) libraries
|
||||
-- dependencies - all sibling dependencies, including non-linkable
|
||||
-- all - return everything
|
||||
-- @param part
|
||||
-- How the link target should be expressed; one of:
|
||||
-- name - the decorated library name with no directory
|
||||
-- basename - the undecorated library name
|
||||
-- directory - just the directory, no name
|
||||
-- fullpath - full path with decorated name
|
||||
-- object - return the project object of the dependency
|
||||
-- @return
|
||||
-- An array containing the requested link target information.
|
||||
--
|
||||
|
||||
function config.getlinks(cfg, kind, part)
|
||||
-- if I'm building a list of link directories, include libdirs
|
||||
local result = iif (part == "directory" and kind == "all", cfg.libdirs, {})
|
||||
|
||||
local function canlink(source, target)
|
||||
-- can't link executables
|
||||
if (target.kind ~= "SharedLib" and target.kind ~= "StaticLib") then
|
||||
return false
|
||||
end
|
||||
-- can't link managed and unmanaged projects
|
||||
if premake.iscppproject(source.project) then
|
||||
return premake.iscppproject(target.project)
|
||||
elseif premake.isdotnetproject(source.project) then
|
||||
return premake.isdotnetproject(target.project)
|
||||
end
|
||||
end
|
||||
|
||||
for _, link in ipairs(cfg.links) do
|
||||
local item
|
||||
|
||||
-- is this a sibling project?
|
||||
local prj = premake.solution.findproject(cfg.solution, link)
|
||||
if prj and kind ~= "system" then
|
||||
|
||||
local prjcfg = project.getconfig(prj, cfg.buildcfg, cfg.platform)
|
||||
if kind == "dependencies" or canlink(cfg, prjcfg) then
|
||||
if part == "object" then
|
||||
item = prjcfg
|
||||
elseif part == "basename" then
|
||||
item = config.getlinkinfo(prjcfg).basename
|
||||
else
|
||||
item = path.rebase(config.getlinkinfo(prjcfg).fullpath,
|
||||
project.getlocation(prjcfg.project),
|
||||
project.getlocation(cfg.project))
|
||||
if item == "directory" then
|
||||
item = path.getdirectory(item)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
elseif not prj and (kind == "system" or kind == "all") then
|
||||
|
||||
if part == "directory" then
|
||||
local dir = path.getdirectory(link)
|
||||
if dir ~= "." then
|
||||
item = dir
|
||||
end
|
||||
elseif part == "fullpath" then
|
||||
item = link
|
||||
if cfg.system == premake.WINDOWS then
|
||||
if premake.iscppproject(cfg.project) then
|
||||
item = item .. ".lib"
|
||||
elseif premake.isdotnetproject(cfg.project) then
|
||||
item = item .. ".dll"
|
||||
end
|
||||
end
|
||||
if item:find("/", nil, true) then
|
||||
item = project.getrelative(cfg.project, item)
|
||||
end
|
||||
else
|
||||
item = link
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
if item and not table.contains(result, item) then
|
||||
table.insert(result, item)
|
||||
end
|
||||
end
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
|
||||
@ -50,68 +273,7 @@
|
||||
return cfg.targetinfo
|
||||
end
|
||||
|
||||
local basedir = project.getlocation(cfg.project)
|
||||
|
||||
local directory = cfg.targetdir or basedir
|
||||
directory = path.getrelative(basedir, directory)
|
||||
|
||||
local basename = cfg.targetname or cfg.project.name
|
||||
|
||||
local bundlename = ""
|
||||
local bundlepath = ""
|
||||
local extension = ""
|
||||
local prefix = ""
|
||||
local suffix = ""
|
||||
|
||||
if cfg.kind == premake.STATICLIB then
|
||||
if cfg.system ~= premake.WINDOWS then
|
||||
prefix = "lib"
|
||||
extension = ".a"
|
||||
else
|
||||
extension = ".lib"
|
||||
end
|
||||
|
||||
elseif cfg.system == premake.WINDOWS then
|
||||
if cfg.kind == premake.CONSOLEAPP or cfg.kind == premake.WINDOWEDAPP then
|
||||
extension = ".exe"
|
||||
elseif cfg.kind == premake.SHAREDLIB then
|
||||
extension = ".dll"
|
||||
end
|
||||
|
||||
elseif cfg.system == premake.MACOSX then
|
||||
if cfg.kind == premake.WINDOWEDAPP then
|
||||
bundlename = basename .. ".app"
|
||||
bundlepath = path.join(directory, bundlename)
|
||||
bundlepath = path.join(bundlepath, "Contents/MacOS")
|
||||
elseif cfg.kind == premake.SHAREDLIB then
|
||||
prefix = "lib"
|
||||
extension = ".dylib"
|
||||
end
|
||||
|
||||
elseif cfg.system == premake.PS3 then
|
||||
if cfg.kind == premake.CONSOLEAPP or cfg.kind == premake.WINDOWEDAPP then
|
||||
extension = ".elf"
|
||||
end
|
||||
|
||||
else
|
||||
if cfg.kind == premake.SHAREDLIB then
|
||||
prefix = "lib"
|
||||
extension = ".so"
|
||||
end
|
||||
end
|
||||
|
||||
prefix = cfg.targetprefix or prefix
|
||||
suffix = cfg.targetsuffix or suffix
|
||||
|
||||
local info = {}
|
||||
info.directory = directory
|
||||
info.basename = basename .. suffix
|
||||
info.name = prefix .. info.basename .. extension
|
||||
info.fullpath = path.join(info.directory, info.name)
|
||||
info.bundlename = bundlename
|
||||
info.bundlepath = bundlepath
|
||||
info.prefix = prefix
|
||||
info.suffix = suffix
|
||||
local info = buildtargetinfo(cfg, cfg.kind, "target")
|
||||
|
||||
-- cache the results for future calls
|
||||
cfg.targetinfo = info
|
||||
@ -138,6 +300,11 @@
|
||||
--
|
||||
|
||||
function config.getuniqueobjdir(cfg)
|
||||
-- have I cached results from a previous call?
|
||||
if cfg.uniqueobjdir then
|
||||
return cfg.uniqueobjdir
|
||||
end
|
||||
|
||||
-- compute the four options for a specific configuration
|
||||
local function getobjdirs(cfg)
|
||||
local dirs = { }
|
||||
@ -166,9 +333,10 @@
|
||||
-- first one that isn't in conflict
|
||||
local dirs = getobjdirs(cfg)
|
||||
for _, dir in ipairs(dirs) do
|
||||
if counts[dir] == 1 then
|
||||
local prjlocation = project.getlocation(cfg.project)
|
||||
return path.getrelative(prjlocation, dir)
|
||||
if counts[dir] == 1 then
|
||||
-- cache the result before returning
|
||||
cfg.uniqueobjdir = project.getrelative(cfg.project, dir)
|
||||
return cfg.uniqueobjdir
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -145,7 +145,9 @@
|
||||
|
||||
function oven.merge(cfg, block, filterField)
|
||||
if filterField then
|
||||
oven.mergefield(cfg, filterField, block[filterField])
|
||||
if block[filterField] then
|
||||
oven.mergefield(cfg, filterField, block[filterField])
|
||||
end
|
||||
else
|
||||
for key, value in pairs(block) do
|
||||
if not nomerge[key] then
|
||||
|
@ -89,8 +89,9 @@
|
||||
cfg.platform = platform
|
||||
|
||||
-- For backward compatibility with the old platforms API, use platform
|
||||
-- as the default architecture, if it would be a valid value.
|
||||
-- as the default system or architecture if it would be a valid value.
|
||||
if cfg.platform then
|
||||
cfg.system = premake.checkvalue(cfg.platform, premake.fields.system.allowed)
|
||||
cfg.architecture = premake.checkvalue(cfg.platform, premake.fields.architecture.allowed)
|
||||
end
|
||||
|
||||
@ -148,3 +149,19 @@
|
||||
end
|
||||
return location
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Return the relative path from the project to the specified file.
|
||||
--
|
||||
-- @param prj
|
||||
-- The project object to query.
|
||||
-- @param filename
|
||||
-- The full path to the file.
|
||||
-- @return
|
||||
-- The relative path from the project to the file.
|
||||
--
|
||||
|
||||
function project.getrelative(prj, filename)
|
||||
return path.getrelative(project.getlocation(prj), filename)
|
||||
end
|
||||
|
@ -1,12 +1,13 @@
|
||||
--
|
||||
-- snc.lua
|
||||
-- Provides Sony SNC-specific configuration strings.
|
||||
-- Copyright (c) 2010 Jason Perkins and the Premake project
|
||||
-- Copyright (c) 2010-2012 Jason Perkins and the Premake project
|
||||
--
|
||||
|
||||
|
||||
premake.snc = { }
|
||||
|
||||
local config = premake5.config
|
||||
|
||||
|
||||
-- TODO: Will cfg.system == "windows" ever be true for SNC? If
|
||||
-- not, remove the conditional blocks that use this test.
|
||||
@ -66,7 +67,7 @@
|
||||
|
||||
function premake.snc.getcflags(cfg)
|
||||
local result = table.translate(cfg.flags, cflags)
|
||||
table.insert(result, platforms[cfg.platform].flags)
|
||||
table.insert(result, platforms["PS3"].flags)
|
||||
if cfg.kind == "SharedLib" then
|
||||
table.insert(result, "-fPIC")
|
||||
end
|
||||
@ -85,6 +86,27 @@
|
||||
-- Returns a list of linker flags, based on the supplied configuration.
|
||||
--
|
||||
|
||||
function premake.snc.getldflags_ng(cfg)
|
||||
local result = { }
|
||||
|
||||
if not cfg.flags.Symbols then
|
||||
table.insert(result, "-s")
|
||||
end
|
||||
|
||||
if cfg.kind == "SharedLib" then
|
||||
table.insert(result, "-shared")
|
||||
if not cfg.flags.NoImportLib then
|
||||
table.insert(result, '-Wl,--out-implib="' .. config.getlinkinfo(cfg).fullpath .. '"')
|
||||
end
|
||||
end
|
||||
|
||||
local platform = platforms["PS3"]
|
||||
table.insert(result, platform.flags)
|
||||
table.insert(result, platform.ldflags)
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
function premake.snc.getldflags(cfg)
|
||||
local result = { }
|
||||
|
||||
@ -99,7 +121,7 @@
|
||||
end
|
||||
end
|
||||
|
||||
local platform = platforms[cfg.platform]
|
||||
local platform = platforms["PS3"]
|
||||
table.insert(result, platform.flags)
|
||||
table.insert(result, platform.ldflags)
|
||||
|
||||
|
@ -1,597 +0,0 @@
|
||||
--
|
||||
-- tests/test_vs200x_vcproj.lua
|
||||
-- Automated test suite for Visual Studio 2002-2008 C/C++ project generation.
|
||||
-- Copyright (c) 2009 Jason Perkins and the Premake project
|
||||
--
|
||||
|
||||
T.vs200x_vcproj = { }
|
||||
local suite = T.vs200x_vcproj
|
||||
local vc200x = premake.vstudio.vc200x
|
||||
|
||||
|
||||
--
|
||||
-- Configure a solution for testing
|
||||
--
|
||||
|
||||
local sln, prj
|
||||
function suite.setup()
|
||||
_ACTION = "vs2005"
|
||||
|
||||
sln = solution "MySolution"
|
||||
configurations { "Debug", "Release" }
|
||||
platforms {}
|
||||
|
||||
project "DotNetProject" -- to test handling of .NET platform in solution
|
||||
language "C#"
|
||||
kind "ConsoleApp"
|
||||
|
||||
prj = project "MyProject"
|
||||
language "C++"
|
||||
kind "ConsoleApp"
|
||||
uuid "AE61726D-187C-E440-BD07-2556188A6565"
|
||||
end
|
||||
|
||||
local function prepare()
|
||||
premake.bake.buildconfigs()
|
||||
sln.vstudio_configs = premake.vstudio.buildconfigs(sln)
|
||||
|
||||
local cfg = premake.getconfig(sln.projects[2])
|
||||
cfg.name = prj.name
|
||||
cfg.blocks = prj.blocks
|
||||
prj = cfg
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Make sure I've got the basic layout correct
|
||||
--
|
||||
|
||||
function suite.BasicLayout()
|
||||
prepare()
|
||||
vc200x.generate(prj)
|
||||
test.capture [[
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="MyProject"
|
||||
ProjectGUID="{AE61726D-187C-E440-BD07-2556188A6565}"
|
||||
RootNamespace="MyProject"
|
||||
Keyword="Win32Proj"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="."
|
||||
IntermediateDirectory="obj\Debug\MyProject"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="0"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\MyProject.exe"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories=""
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="1"
|
||||
EntryPointSymbol="mainCRTStartup"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="."
|
||||
IntermediateDirectory="obj\Release\MyProject"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="0"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\MyProject.exe"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories=""
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="1"
|
||||
EntryPointSymbol="mainCRTStartup"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Test Xbox360 handling
|
||||
--
|
||||
|
||||
function suite.PlatformsList_OnXbox360()
|
||||
platforms { "Native", "Xbox360" }
|
||||
prepare()
|
||||
vc200x.Platforms(prj)
|
||||
test.capture [[
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
<Platform
|
||||
Name="Xbox 360"
|
||||
/>
|
||||
</Platforms>
|
||||
]]
|
||||
end
|
||||
|
||||
function suite.CompilerBlock_OnXbox360()
|
||||
platforms { "Xbox360" }
|
||||
prepare()
|
||||
vc200x.VCCLCompilerTool(premake.getconfig(prj, "Debug", "Xbox360"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLX360CompilerTool"
|
||||
Optimization="0"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="0"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Test PS3 handling
|
||||
--
|
||||
|
||||
function suite.PlatformsList_OnPS3()
|
||||
platforms { "Native", "PS3" }
|
||||
prepare()
|
||||
vc200x.Platforms(prj)
|
||||
test.capture [[
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
]]
|
||||
end
|
||||
|
||||
function suite.CompilerBlock_OnPS3()
|
||||
platforms { "PS3" }
|
||||
flags { "Symbols" }
|
||||
includedirs { "include/pkg1", "include/pkg2" }
|
||||
defines { "DEFINE1", "DEFINE2" }
|
||||
prepare()
|
||||
vc200x.VCCLCompilerTool_PS3(premake.getconfig(prj, "Debug", "PS3"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UsePrecompiledHeader="0"
|
||||
AdditionalOptions=""
|
||||
AdditionalIncludeDirectories="include\pkg1;include\pkg2"
|
||||
PreprocessorDefinitions="DEFINE1;DEFINE2"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="0"
|
||||
CompileAs="0"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
function suite.LinkerBlock_OnPS3ConsoleApp()
|
||||
platforms { "PS3" }
|
||||
prepare()
|
||||
vc200x.VCLinkerTool_PS3(premake.getconfig(prj, "Debug", "PS3"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalOptions="-s"
|
||||
OutputFile="$(OutDir)\MyProject.elf"
|
||||
LinkIncremental="0"
|
||||
AdditionalLibraryDirectories=""
|
||||
GenerateManifest="false"
|
||||
ProgramDatabaseFile=""
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
function suite.LinkerBlock_OnPS3StaticLib()
|
||||
platforms { "PS3" }
|
||||
kind "StaticLib"
|
||||
prepare()
|
||||
vc200x.VCLinkerTool_PS3(premake.getconfig(prj, "Debug", "PS3"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
AdditionalOptions="-s"
|
||||
OutputFile="$(OutDir)\libMyProject.a"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
function suite.LinkerBlock_OnPS3SharedLink()
|
||||
platforms { "PS3" }
|
||||
links { "MyLibrary" }
|
||||
project "MyLibrary"
|
||||
language "C++"
|
||||
kind "SharedLib"
|
||||
prepare()
|
||||
vc200x.VCLinkerTool_PS3(premake.getconfig(prj, "Debug", "PS3"))
|
||||
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalOptions="-s"
|
||||
AdditionalDependencies="libMyLibrary.a"
|
||||
OutputFile="$(OutDir)\MyProject.elf"
|
||||
LinkIncremental="0"
|
||||
AdditionalLibraryDirectories=""
|
||||
GenerateManifest="false"
|
||||
ProgramDatabaseFile=""
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Test manifest file handling.
|
||||
--
|
||||
|
||||
function suite.VCManifestTool_OnNoManifests()
|
||||
files { "hello.c", "goodbye.c" }
|
||||
prepare()
|
||||
vc200x.VCManifestTool(premake.getconfig(prj, "Debug"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
function suite.VCManifestTool_OnNoManifests()
|
||||
files { "hello.c", "project1.manifest", "goodbye.c", "project2.manifest" }
|
||||
prepare()
|
||||
vc200x.VCManifestTool(premake.getconfig(prj, "Debug"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
AdditionalManifestFiles="project1.manifest;project2.manifest"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Test precompiled header handling
|
||||
--
|
||||
|
||||
function suite.CompilerBlock_OnPCH()
|
||||
pchheader "source/common.h"
|
||||
pchsource "source/common.cpp"
|
||||
prepare()
|
||||
vc200x.VCCLCompilerTool(premake.getconfig(prj, "Debug"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="2"
|
||||
PrecompiledHeaderThrough="common.h"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="0"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Floating point flag tests
|
||||
--
|
||||
|
||||
function suite.CompilerBlock_OnFpFast()
|
||||
flags { "FloatFast" }
|
||||
prepare()
|
||||
vc200x.VCCLCompilerTool(premake.getconfig(prj, "Debug"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
FloatingPointModel="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="0"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
function suite.CompilerBlock_OnFpStrict()
|
||||
flags { "FloatStrict" }
|
||||
prepare()
|
||||
vc200x.VCCLCompilerTool(premake.getconfig(prj, "Debug"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
FloatingPointModel="1"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="0"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- PDB file naming tests
|
||||
--
|
||||
|
||||
function suite.CompilerBlock_OnTargetName()
|
||||
targetname "foob"
|
||||
prepare()
|
||||
vc200x.VCCLCompilerTool(premake.getconfig(prj, "Debug"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
ProgramDataBaseFileName="$(OutDir)\foob.pdb"
|
||||
DebugInformationFormat="0"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Compilation option tests
|
||||
--
|
||||
|
||||
function suite.CompilerBlock_OnNoMinimalRebuild()
|
||||
flags { "Symbols", "NoMinimalRebuild" }
|
||||
prepare()
|
||||
vc200x.VCCLCompilerTool(premake.getconfig(prj, "Debug"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- C language support
|
||||
--
|
||||
|
||||
function suite.CompilerBlock_RuntimeLibrary_IsDebug_OnSymbolsNoOptimize()
|
||||
language "C"
|
||||
flags { "Symbols" }
|
||||
prepare()
|
||||
vc200x.VCCLCompilerTool(premake.getconfig(prj, "Debug"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="4"
|
||||
CompileAs="1"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
function suite.noLinkIncrementalFlag_valueEqualsOne()
|
||||
flags { "NoIncrementalLink" }
|
||||
prepare()
|
||||
vc200x.VCLinkerTool(premake.getconfig(prj, "Debug"))
|
||||
local result = io.endcapture()
|
||||
test.string_contains(result,'LinkIncremental="1"')
|
||||
end
|
||||
|
||||
function suite.staticLib_platformX64_MachineX64SetInAdditionalOptions()
|
||||
local sln1 = solution "sol"
|
||||
configurations { "foo" }
|
||||
platforms {'x64'}
|
||||
|
||||
local prj1 = project "prj"
|
||||
language 'C++'
|
||||
kind 'StaticLib'
|
||||
|
||||
premake.bake.buildconfigs()
|
||||
sln1.vstudio_configs = premake.vstudio.buildconfigs(sln1)
|
||||
prj1= premake.getconfig(sln1.projects[1])
|
||||
vc200x.generate(prj1)
|
||||
local result = io.endcapture()
|
||||
test.string_contains(result,'AdditionalOptions="/MACHINE:X64"')
|
||||
end
|
||||
|
||||
function suite.staticLib_platformX32_MachineX86SetInAdditionalOptions()
|
||||
local sln1 = solution "sol"
|
||||
configurations { "foo" }
|
||||
platforms {'x32'}
|
||||
|
||||
local prj1 = project "prj"
|
||||
language 'C++'
|
||||
kind 'StaticLib'
|
||||
|
||||
premake.bake.buildconfigs()
|
||||
sln1.vstudio_configs = premake.vstudio.buildconfigs(sln1)
|
||||
prj1= premake.getconfig(sln1.projects[1])
|
||||
vc200x.generate(prj1)
|
||||
local result = io.endcapture()
|
||||
test.string_contains(result,'AdditionalOptions="/MACHINE:X86"')
|
||||
end
|
@ -1,116 +0,0 @@
|
||||
--
|
||||
-- tests/actions/vstudio/test_vs200x_vcproj_linker.lua
|
||||
-- Automated tests for Visual Studio 2002-2008 C/C++ linker block.
|
||||
-- Copyright (c) 2009-2011 Jason Perkins and the Premake project
|
||||
--
|
||||
|
||||
T.vs200x_vcproj_linker = { }
|
||||
local suite = T.vs200x_vcproj_linker
|
||||
local vc200x = premake.vstudio.vc200x
|
||||
|
||||
|
||||
--
|
||||
-- Setup/Teardown
|
||||
--
|
||||
|
||||
local sln, prj
|
||||
function suite.setup()
|
||||
_ACTION = "vs2005"
|
||||
sln, prj = test.createsolution()
|
||||
end
|
||||
|
||||
local function prepare()
|
||||
premake.bake.buildconfigs()
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Test default linker blocks for each target kind
|
||||
-- (ConsoleApp, StaticLib, etc.)
|
||||
--
|
||||
|
||||
function suite.DefaultLinkerBlock_OnConsoleApp()
|
||||
kind "ConsoleApp"
|
||||
prepare()
|
||||
vc200x.VCLinkerTool(premake.getconfig(prj, "Debug"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\MyProject.exe"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories=""
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="1"
|
||||
EntryPointSymbol="mainCRTStartup"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
function suite.DefaultLinkerBlock_OnWindowedApp()
|
||||
kind "WindowedApp"
|
||||
prepare()
|
||||
vc200x.VCLinkerTool(premake.getconfig(prj, "Debug"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\MyProject.exe"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories=""
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="2"
|
||||
EntryPointSymbol="mainCRTStartup"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
function suite.DefaultLinkerBlock_OnSharedLib()
|
||||
kind "SharedLib"
|
||||
prepare()
|
||||
vc200x.VCLinkerTool(premake.getconfig(prj, "Debug"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\MyProject.dll"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories=""
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="2"
|
||||
ImportLibrary="MyProject.lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
function suite.DefaultLinkerBlock_OnStaticLib()
|
||||
kind "StaticLib"
|
||||
prepare()
|
||||
vc200x.VCLinkerTool(premake.getconfig(prj, "Debug"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
OutputFile="$(OutDir)\MyProject.lib"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- linkoptions tests
|
||||
--
|
||||
|
||||
function suite.AdditionalOptions_OnStaticLib()
|
||||
kind "StaticLib"
|
||||
linkoptions { "/ltcg", "/lZ" }
|
||||
prepare()
|
||||
vc200x.VCLinkerTool(premake.getconfig(prj, "Debug"))
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
OutputFile="$(OutDir)\MyProject.lib"
|
||||
AdditionalOptions="/ltcg /lZ"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
@ -1,7 +1,7 @@
|
||||
--
|
||||
-- tests/actions/vstudio/vc200x/test_compiler_block.lua
|
||||
-- Validate generation of filter blocks in Visual Studio 200x C/C++ projects.
|
||||
-- Copyright (c) 2011 Jason Perkins and the Premake project
|
||||
-- Copyright (c) 2011-2012 Jason Perkins and the Premake project
|
||||
--
|
||||
|
||||
T.vs200x_compiler_block = { }
|
||||
@ -21,10 +21,8 @@
|
||||
end
|
||||
|
||||
local function prepare()
|
||||
premake.bake.buildconfigs()
|
||||
sln.vstudio_configs = premake.vstudio.buildconfigs(sln)
|
||||
local cfg = premake.getconfig(prj, "Debug")
|
||||
vc200x.VCCLCompilerTool(cfg)
|
||||
local cfg = premake5.project.getconfig(prj, "Debug")
|
||||
vc200x.VCCLCompilerTool_ng(cfg)
|
||||
end
|
||||
|
||||
|
||||
@ -32,7 +30,7 @@
|
||||
-- Verify the basic structure of the compiler block with no flags or settings.
|
||||
--
|
||||
|
||||
function suite.defaultSettings()
|
||||
function suite.looksGood_onDefaultSettings()
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
@ -55,7 +53,7 @@
|
||||
-- debug runtime library must be selected.
|
||||
--
|
||||
|
||||
function suite.onSymbolsFlag()
|
||||
function suite.looksGood_onSymbolsFlag()
|
||||
flags "Symbols"
|
||||
prepare()
|
||||
test.capture [[
|
||||
@ -80,7 +78,7 @@
|
||||
-- The release runtime library must be used.
|
||||
--
|
||||
|
||||
function suite.onSymbolsAndOptimizeFlags()
|
||||
function suite.looksGood_onSymbolsAndOptimizeFlags()
|
||||
flags { "Symbols", "Optimize" }
|
||||
prepare()
|
||||
test.capture [[
|
||||
@ -103,7 +101,7 @@
|
||||
-- Verify the handling of the C7 debug information format.
|
||||
--
|
||||
|
||||
function suite.onC7DebugFormat()
|
||||
function suite.looksGood_onC7DebugFormat()
|
||||
flags "Symbols"
|
||||
debugformat "C7"
|
||||
prepare()
|
||||
@ -121,3 +119,208 @@
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the handling of precompiled headers.
|
||||
--
|
||||
|
||||
function suite.compilerBlock_OnPCH()
|
||||
pchheader "source/common.h"
|
||||
pchsource "source/common.cpp"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="2"
|
||||
PrecompiledHeaderThrough="common.h"
|
||||
WarningLevel="3"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="0"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Floating point flag tests
|
||||
--
|
||||
|
||||
function suite.compilerBlock_OnFpFast()
|
||||
flags { "FloatFast" }
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
FloatingPointModel="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="0"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
function suite.compilerBlock_OnFpStrict()
|
||||
flags { "FloatStrict" }
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
FloatingPointModel="1"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="0"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify that the PDB file uses the target name if specified.
|
||||
--
|
||||
|
||||
function suite.pdfUsesTargetName_onTargetName()
|
||||
targetname "foob"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
ProgramDataBaseFileName="$(OutDir)\foob.pdb"
|
||||
DebugInformationFormat="0"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Check that the "minimal rebuild" flag is applied correctly.
|
||||
--
|
||||
|
||||
function suite.minimalRebuildFlagsSet_onMinimalRebuildAndSymbols()
|
||||
flags { "Symbols", "NoMinimalRebuild" }
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Check that the CompileAs value is set correctly for C language projects.
|
||||
--
|
||||
|
||||
function suite.compileAsSet_onC()
|
||||
language "C"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="0"
|
||||
CompileAs="1"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the correct runtime library is used when symbols are enabled.
|
||||
--
|
||||
|
||||
function suite.runtimeLibraryIsDebug_onSymbolsNoOptimize()
|
||||
flags { "Symbols" }
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the basic structure when targeting the Xbox360.
|
||||
--
|
||||
|
||||
function suite.looksGood_onXbox360()
|
||||
system "Xbox360"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLX360CompilerTool"
|
||||
Optimization="0"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="0"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the basic structure when targeting the PS3.
|
||||
--
|
||||
|
||||
function suite.looksGood_onPS3()
|
||||
system "PS3"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UsePrecompiledHeader="0"
|
||||
AdditionalOptions=""
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
DebugInformationFormat="0"
|
||||
CompileAs="0"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
@ -1,95 +1,274 @@
|
||||
--
|
||||
-- tests/actions/vstudio/vc200x/test_linker_block.lua
|
||||
-- Validate generation of filter blocks in Visual Studio 200x C/C++ projects.
|
||||
-- Copyright (c) 2011 Jason Perkins and the Premake project
|
||||
--
|
||||
|
||||
T.vs200x_linker_block = { }
|
||||
local suite = T.vs200x_linker_block
|
||||
local vc200x = premake.vstudio.vc200x
|
||||
|
||||
|
||||
--
|
||||
-- Setup/teardown
|
||||
--
|
||||
|
||||
local sln, prj
|
||||
|
||||
function suite.setup()
|
||||
_ACTION = "vs2008"
|
||||
sln, prj = test.createsolution()
|
||||
end
|
||||
|
||||
local function prepare()
|
||||
premake.bake.buildconfigs()
|
||||
sln.vstudio_configs = premake.vstudio.buildconfigs(sln)
|
||||
local cfg = premake.getconfig(prj, "Debug")
|
||||
vc200x.VCLinkerTool(cfg)
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the basic structure of the linker block with no flags or settings.
|
||||
--
|
||||
|
||||
function suite.defaultSettings()
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\MyProject.exe"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories=""
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="1"
|
||||
EntryPointSymbol="mainCRTStartup"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the handling of the Symbols flag.
|
||||
--
|
||||
|
||||
function suite.onSymbolsFlag()
|
||||
flags "Symbols"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\MyProject.exe"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories=""
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
SubSystem="1"
|
||||
EntryPointSymbol="mainCRTStartup"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the handling of the C7 debug information format.
|
||||
--
|
||||
|
||||
function suite.onC7DebugFormat()
|
||||
flags "Symbols"
|
||||
debugformat "C7"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\MyProject.exe"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories=""
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
EntryPointSymbol="mainCRTStartup"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
--
|
||||
-- tests/actions/vstudio/vc200x/test_linker_block.lua
|
||||
-- Validate generation of VCLinkerTool blocks in Visual Studio 200x C/C++ projects.
|
||||
-- Copyright (c) 2009-2012 Jason Perkins and the Premake project
|
||||
--
|
||||
|
||||
T.vs200x_linker_block = { }
|
||||
local suite = T.vs200x_linker_block
|
||||
local vc200x = premake.vstudio.vc200x
|
||||
|
||||
|
||||
--
|
||||
-- Setup/teardown
|
||||
--
|
||||
|
||||
local sln, prj
|
||||
|
||||
function suite.setup()
|
||||
_ACTION = "vs2008"
|
||||
sln, prj = test.createsolution()
|
||||
end
|
||||
|
||||
local function prepare()
|
||||
local cfg = premake5.project.getconfig(prj, "Debug")
|
||||
vc200x.VCLinkerTool_ng(cfg)
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the basic structure of the console app linker block.
|
||||
--
|
||||
|
||||
function suite.onConsoleApp()
|
||||
kind "ConsoleApp"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\MyProject.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="1"
|
||||
EntryPointSymbol="mainCRTStartup"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the basic structure of windowed app linker block.
|
||||
--
|
||||
|
||||
function suite.onWindowedApp()
|
||||
kind "WindowedApp"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\MyProject.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="2"
|
||||
EntryPointSymbol="mainCRTStartup"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the basic structure of static library linker block.
|
||||
--
|
||||
|
||||
function suite.onSharedLib()
|
||||
kind "SharedLib"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\MyProject.dll"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="2"
|
||||
ImportLibrary="MyProject.lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the basic structure of static library linker block.
|
||||
--
|
||||
|
||||
function suite.onStaticLib()
|
||||
kind "StaticLib"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
OutputFile="$(OutDir)\MyProject.lib"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the handling of the Symbols flag.
|
||||
--
|
||||
|
||||
function suite.onSymbolsFlag()
|
||||
flags "Symbols"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\MyProject.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the handling of the C7 debug information format.
|
||||
--
|
||||
|
||||
function suite.onC7DebugFormat()
|
||||
flags "Symbols"
|
||||
debugformat "C7"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\MyProject.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
EntryPointSymbol="mainCRTStartup"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- If a module definition file is present, make sure it is specified.
|
||||
--
|
||||
|
||||
function suite.onModuleDefinitionFile()
|
||||
files { "MyProject.def" }
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\MyProject.exe"
|
||||
LinkIncremental="2"
|
||||
ModuleDefinitionFile="MyProject.def"
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify handling of the NoIncrementalLink flag.
|
||||
--
|
||||
|
||||
function suite.onNoIncrementalLink()
|
||||
flags { "NoIncrementalLink" }
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\MyProject.exe"
|
||||
LinkIncremental="1"
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify that link options are specified.
|
||||
--
|
||||
|
||||
function suite.additionalOptionsUsed_onStaticLib()
|
||||
kind "StaticLib"
|
||||
linkoptions { "/ltcg", "/lZ" }
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
OutputFile="$(OutDir)\MyProject.lib"
|
||||
AdditionalOptions="/ltcg /lZ"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify machine option settings for 32-bit builds.
|
||||
--
|
||||
|
||||
function suite.machineOptionSet_on32BitStaticLib()
|
||||
kind "StaticLib"
|
||||
architecture "x32"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
OutputFile="$(OutDir)\MyProject.lib"
|
||||
AdditionalOptions="/MACHINE:X86"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify machine option settings for 64-bit builds.
|
||||
--
|
||||
|
||||
function suite.machineOptionSet_on64BitStaticLib()
|
||||
kind "StaticLib"
|
||||
architecture "x64"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
OutputFile="$(OutDir)\MyProject.lib"
|
||||
AdditionalOptions="/MACHINE:X64"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the structure of a PS3 console application.
|
||||
--
|
||||
|
||||
function suite.looksGood_onPS3ConsoleApp()
|
||||
system "PS3"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalOptions="-s"
|
||||
OutputFile="$(OutDir)\MyProject.elf"
|
||||
LinkIncremental="0"
|
||||
GenerateManifest="false"
|
||||
ProgramDatabaseFile=""
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the structure of a PS3 static library.
|
||||
--
|
||||
|
||||
function suite.looksGood_onPS3StaticLib()
|
||||
system "PS3"
|
||||
kind "StaticLib"
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
AdditionalOptions="-s"
|
||||
OutputFile="$(OutDir)\libMyProject.a"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
|
57
tests/actions/vstudio/vc200x/test_manifest_block.lua
Executable file
57
tests/actions/vstudio/vc200x/test_manifest_block.lua
Executable file
@ -0,0 +1,57 @@
|
||||
--
|
||||
-- tests/actions/vstudio/vc200x/test_manifest_block.lua
|
||||
-- Validate generation of VCManifest elements Visual Studio 200x C/C++ projects.
|
||||
-- Copyright (c) 2090-2012 Jason Perkins and the Premake project
|
||||
--
|
||||
|
||||
T.vs200x_manifest_block = { }
|
||||
local suite = T.vs200x_manifest_block
|
||||
local vc200x = premake.vstudio.vc200x
|
||||
|
||||
|
||||
--
|
||||
-- Setup/teardown
|
||||
--
|
||||
|
||||
local sln, prj
|
||||
|
||||
function suite.setup()
|
||||
_ACTION = "vs2008"
|
||||
sln, prj = test.createsolution()
|
||||
end
|
||||
|
||||
local function prepare()
|
||||
local cfg = premake5.project.getconfig(prj, "Debug")
|
||||
vc200x.VCManifestTool_ng(cfg)
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- The manifest tool should empty if there are no manifest files.
|
||||
--
|
||||
|
||||
function suite.isEmpty_onNoManifests()
|
||||
files { "hello.c" }
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- If manifest file(s) are present, they should be listed.
|
||||
--
|
||||
|
||||
function suite.listsFiles_onManifests()
|
||||
files { "hello.c", "project1.manifest", "goodbye.c", "project2.manifest" }
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
AdditionalManifestFiles="project1.manifest;project2.manifest"
|
||||
/>
|
||||
]]
|
||||
end
|
@ -32,11 +32,11 @@
|
||||
function suite.win32Listed_onNoPlatforms()
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
]]
|
||||
end
|
||||
|
||||
@ -50,11 +50,11 @@
|
||||
platforms { "Static", "Dynamic" }
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
]]
|
||||
end
|
||||
|
||||
@ -67,13 +67,47 @@
|
||||
platforms { "x32", "x64" }
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
<Platform
|
||||
Name="x64"
|
||||
/>
|
||||
</Platforms>
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the PS3 platform.
|
||||
--
|
||||
|
||||
function suite.platformIsCorrect_onPS3()
|
||||
platforms { "PS3" }
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
<Platform
|
||||
Name="x64"
|
||||
/>
|
||||
</Platforms>
|
||||
]]
|
||||
]]
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Verify the Xbox360 platform.
|
||||
--
|
||||
|
||||
function suite.platformIsCorrect_onXbox360()
|
||||
platforms { "Xbox360" }
|
||||
prepare()
|
||||
test.capture [[
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Xbox 360"
|
||||
/>
|
||||
</Platforms>
|
||||
]]
|
||||
end
|
||||
|
@ -114,7 +114,7 @@
|
||||
-- Use the correct keyword for Managed C++ projects.
|
||||
--
|
||||
|
||||
function suite.structureIsCorrect_onDefaultValues()
|
||||
function suite.keywordIsCorrect_onManagedC()
|
||||
flags { "Managed" }
|
||||
prepare()
|
||||
test.capture [[
|
||||
|
@ -75,8 +75,6 @@
|
||||
-- Visual Studio tests
|
||||
dofile("test_vs2002_sln.lua")
|
||||
dofile("test_vs2003_sln.lua")
|
||||
dofile("actions/vstudio/test_vs200x_vcproj.lua")
|
||||
dofile("actions/vstudio/test_vs200x_vcproj_linker.lua")
|
||||
dofile("actions/vstudio/test_vs2010_vcxproj.lua")
|
||||
dofile("actions/vstudio/test_vs2010_flags.lua")
|
||||
dofile("actions/vstudio/test_vs2010_project_kinds.lua")
|
||||
@ -106,6 +104,7 @@
|
||||
dofile("actions/vstudio/vc200x/test_files.lua")
|
||||
dofile("actions/vstudio/vc200x/test_filters.lua")
|
||||
dofile("actions/vstudio/vc200x/test_linker_block.lua")
|
||||
dofile("actions/vstudio/vc200x/test_manifest_block.lua")
|
||||
dofile("actions/vstudio/vc200x/test_mfc.lua")
|
||||
dofile("actions/vstudio/vc200x/test_platforms.lua")
|
||||
dofile("actions/vstudio/vc200x/test_project.lua")
|
||||
|
@ -232,3 +232,12 @@
|
||||
cfg = oven.merge(oven.merge({}, sln), prj)
|
||||
test.isequal({"*.prj","*.prjx"}, cfg.vpaths["Project"])
|
||||
end
|
||||
|
||||
|
||||
|
||||
function suite.testInProgress()
|
||||
kind("ConsoleApp")
|
||||
prj = project("MyProject")
|
||||
local cfg = premake5.oven.bake(prj, { "Debug", nil }, "kind")
|
||||
test.isequal("ConsoleApp", cfg.kind)
|
||||
end
|
||||
|
@ -23,10 +23,10 @@
|
||||
prj = project("MyProject")
|
||||
end
|
||||
|
||||
local function collect(fn)
|
||||
local function collect(fn, field)
|
||||
prepare()
|
||||
local result = { }
|
||||
for cfg in premake.project.eachconfig(prj) do
|
||||
for cfg in premake.project.eachconfig(prj, field) do
|
||||
table.insert(result, fn(cfg))
|
||||
end
|
||||
return result
|
||||
@ -106,3 +106,16 @@
|
||||
local r = collect(function(cfg) return (cfg.architecture or "nil") end)
|
||||
test.isequal("x32|x64|nil", table.concat(r, "|"))
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- If a filter field is used, that field's value should be returned.
|
||||
--
|
||||
|
||||
function suite.returnsFieldValue_onFilterField()
|
||||
configurations { "Debug" }
|
||||
kind "ConsoleApp"
|
||||
local r = collect(function(cfg) return cfg.kind end, "kind")
|
||||
test.isequal("ConsoleApp", table.concat(r))
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user