Build: Add Configurations option (and add support for ReleaseWithDebug configuration)

This commit is contained in:
Lynix 2016-12-09 09:02:14 +01:00
parent 1334dc1fc2
commit 92d26ab18d
2 changed files with 55 additions and 13 deletions

View File

@ -7,6 +7,9 @@ BuildDependencies = true
-- Builds Nazara examples -- Builds Nazara examples
BuildExamples = true BuildExamples = true
-- Setup configurations array (valid values: Debug, Release, ReleaseWithDebug)
Configurations = "Debug,Release" -- "Debug,Release,ReleaseWithDebug"
-- Setup additionnals install directories, separated by a semi-colon ; (library binaries will be copied there) -- Setup additionnals install directories, separated by a semi-colon ; (library binaries will be copied there)
--InstallDir = "/usr/local/lib64" --InstallDir = "/usr/local/lib64"

View File

@ -114,12 +114,17 @@ function NazaraBuild:Execute()
-- Add lib/conf/arch to library search path -- Add lib/conf/arch to library search path
self:FilterLibDirectory("../lib/", libdirs) self:FilterLibDirectory("../lib/", libdirs)
configurations({ do
-- "DebugStatic", local linkTypes = {"Dynamic"} -- {"Static", "Dynamic"}
-- "ReleaseStatic", local configs = {}
"DebugDynamic", for k,linkType in pairs(linkTypes) do
"ReleaseDynamic" for k,config in pairs(self.Config["Configurations"]) do
}) table.insert(configs, config .. linkType)
end
end
configurations(configs)
end
language("C++") language("C++")
location(_ACTION) location(_ACTION)
@ -505,11 +510,35 @@ function NazaraBuild:LoadConfig()
AddBoolOption("ServerMode", "server", "Excludes client-only modules/tools/examples") AddBoolOption("ServerMode", "server", "Excludes client-only modules/tools/examples")
AddBoolOption("UniteModules", "united", "Builds all the modules as one united library") AddBoolOption("UniteModules", "united", "Builds all the modules as one united library")
-- InstallDir -- Configurations
newoption({ do
trigger = "install-path", newoption({
description = "Setup additionnals install directories (library binaries will be copied there)" trigger = "configurations",
}) description = "Override configurations target by a new set, separated by commas."
})
configTable["Configurations"] = configTable["Configurations"] or ""
if (_OPTIONS["configurations"] ~= nil) then
configTable["Configurations"] = _OPTIONS["configurations"]
end
local configs = {}
local validConfigs = {"Debug", "Release", "ReleaseWithDebug"}
local paths = string.explode(configTable["Configurations"], ",")
for k,v in pairs(paths) do
v = v:match("^%s*(.-)%s*$") -- Trim
if (#v > 0) then
if (table.contains(validConfigs, v)) then
table.insert(configs, v)
else
error("Invalid entry for configurations option: \"" .. v .. "\"")
end
end
end
if (#configs == 0) then
error("Invalid entry for configurations option: no option")
end
configTable["Configurations"] = configs configTable["Configurations"] = configs
end end
@ -609,16 +638,20 @@ function NazaraBuild:Process(infoTable)
if (not self.Config["UniteModules"] or infoTable.Type ~= "Module") then if (not self.Config["UniteModules"] or infoTable.Type ~= "Module") then
table.insert(infoTable.ConfigurationLibraries.DebugStatic, library .. "-s-d") table.insert(infoTable.ConfigurationLibraries.DebugStatic, library .. "-s-d")
table.insert(infoTable.ConfigurationLibraries.ReleaseStatic, library .. "-s") table.insert(infoTable.ConfigurationLibraries.ReleaseStatic, library .. "-s")
table.insert(infoTable.ConfigurationLibraries.ReleaseWithDebugStatic, library .. "-s")
table.insert(infoTable.ConfigurationLibraries.DebugDynamic, library .. "-d") table.insert(infoTable.ConfigurationLibraries.DebugDynamic, library .. "-d")
table.insert(infoTable.ConfigurationLibraries.ReleaseDynamic, library) table.insert(infoTable.ConfigurationLibraries.ReleaseDynamic, library)
table.insert(infoTable.ConfigurationLibraries.ReleaseWithDebugDynamic, library)
end end
elseif (libraryTable.Type == "ExternLib") then elseif (libraryTable.Type == "ExternLib") then
library = libraryTable.Name library = libraryTable.Name
table.insert(infoTable.ConfigurationLibraries.DebugStatic, library .. "-s-d") table.insert(infoTable.ConfigurationLibraries.DebugStatic, library .. "-s-d")
table.insert(infoTable.ConfigurationLibraries.ReleaseStatic, library .. "-s") table.insert(infoTable.ConfigurationLibraries.ReleaseStatic, library .. "-s")
table.insert(infoTable.ConfigurationLibraries.ReleaseWithDebugStatic, library .. "-s")
table.insert(infoTable.ConfigurationLibraries.DebugDynamic, library .. "-s-d") table.insert(infoTable.ConfigurationLibraries.DebugDynamic, library .. "-s-d")
table.insert(infoTable.ConfigurationLibraries.ReleaseDynamic, library .. "-s") table.insert(infoTable.ConfigurationLibraries.ReleaseDynamic, library .. "-s")
table.insert(infoTable.ConfigurationLibraries.ReleaseWithDebugDynamic, library .. "-s")
elseif (libraryTable.Type == "Tool") then elseif (libraryTable.Type == "Tool") then
library = "Nazara" .. libraryTable.Name library = "Nazara" .. libraryTable.Name
@ -640,8 +673,10 @@ function NazaraBuild:Process(infoTable)
table.insert(infoTable.ConfigurationLibraries.DebugStatic, library .. "-s-d") table.insert(infoTable.ConfigurationLibraries.DebugStatic, library .. "-s-d")
table.insert(infoTable.ConfigurationLibraries.ReleaseStatic, library .. "-s") table.insert(infoTable.ConfigurationLibraries.ReleaseStatic, library .. "-s")
table.insert(infoTable.ConfigurationLibraries.ReleaseWithDebugStatic, library .. "-s")
table.insert(infoTable.ConfigurationLibraries.DebugDynamic, library .. "-d") table.insert(infoTable.ConfigurationLibraries.DebugDynamic, library .. "-d")
table.insert(infoTable.ConfigurationLibraries.ReleaseDynamic, library) table.insert(infoTable.ConfigurationLibraries.ReleaseDynamic, library)
table.insert(infoTable.ConfigurationLibraries.ReleaseWithDebugDynamic, library)
else else
infoTable.Excluded = true infoTable.Excluded = true
infoTable.ExcludeReason = "dependency " .. library .. " has invalid type \"" .. libraryTable.Type .. "\"" infoTable.ExcludeReason = "dependency " .. library .. " has invalid type \"" .. libraryTable.Type .. "\""
@ -734,12 +769,14 @@ function NazaraBuild:PrepareGeneric()
filter({"kind:*Lib", "configurations:DebugDynamic"}) filter({"kind:*Lib", "configurations:DebugDynamic"})
targetsuffix("-d") targetsuffix("-d")
filter("configurations:Debug*") filter("configurations:*Debug*")
symbols("On") symbols("On")
filter("configurations:not *Debug*")
flags("NoFramePointer")
-- Setup some optimizations for release -- Setup some optimizations for release
filter("configurations:Release*") filter("configurations:Release*")
flags("NoFramePointer")
optimize("Speed") optimize("Speed")
vectorextensions("SSE2") vectorextensions("SSE2")
@ -961,8 +998,10 @@ function NazaraBuild:SetupInfoTable(infoTable)
infoTable.ConfigurationLibraries = {} infoTable.ConfigurationLibraries = {}
infoTable.ConfigurationLibraries.DebugStatic = {} infoTable.ConfigurationLibraries.DebugStatic = {}
infoTable.ConfigurationLibraries.ReleaseStatic = {} infoTable.ConfigurationLibraries.ReleaseStatic = {}
infoTable.ConfigurationLibraries.ReleaseWithDebugStatic = {}
infoTable.ConfigurationLibraries.DebugDynamic = {} infoTable.ConfigurationLibraries.DebugDynamic = {}
infoTable.ConfigurationLibraries.ReleaseDynamic = {} infoTable.ConfigurationLibraries.ReleaseDynamic = {}
infoTable.ConfigurationLibraries.ReleaseWithDebugDynamic = {}
infoTable.Excludable = true infoTable.Excludable = true
infoTable.LibraryPaths = {} infoTable.LibraryPaths = {}
infoTable.LibraryPaths.x86 = {} infoTable.LibraryPaths.x86 = {}