From 92d26ab18d2034c85ec640407886dbc85993c701 Mon Sep 17 00:00:00 2001 From: Lynix Date: Fri, 9 Dec 2016 09:02:14 +0100 Subject: [PATCH] Build: Add Configurations option (and add support for ReleaseWithDebug configuration) --- build/config.lua | 3 ++ build/scripts/common.lua | 65 ++++++++++++++++++++++++++++++++-------- 2 files changed, 55 insertions(+), 13 deletions(-) diff --git a/build/config.lua b/build/config.lua index 8370331c7..8ecc7c24e 100644 --- a/build/config.lua +++ b/build/config.lua @@ -7,6 +7,9 @@ BuildDependencies = true -- Builds Nazara examples 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) --InstallDir = "/usr/local/lib64" diff --git a/build/scripts/common.lua b/build/scripts/common.lua index 985eea518..e3ea13d62 100644 --- a/build/scripts/common.lua +++ b/build/scripts/common.lua @@ -114,12 +114,17 @@ function NazaraBuild:Execute() -- Add lib/conf/arch to library search path self:FilterLibDirectory("../lib/", libdirs) - configurations({ - -- "DebugStatic", - -- "ReleaseStatic", - "DebugDynamic", - "ReleaseDynamic" - }) + do + local linkTypes = {"Dynamic"} -- {"Static", "Dynamic"} + local configs = {} + for k,linkType in pairs(linkTypes) do + for k,config in pairs(self.Config["Configurations"]) do + table.insert(configs, config .. linkType) + end + end + + configurations(configs) + end language("C++") location(_ACTION) @@ -505,11 +510,35 @@ function NazaraBuild:LoadConfig() AddBoolOption("ServerMode", "server", "Excludes client-only modules/tools/examples") AddBoolOption("UniteModules", "united", "Builds all the modules as one united library") - -- InstallDir - newoption({ - trigger = "install-path", - description = "Setup additionnals install directories (library binaries will be copied there)" - }) + -- Configurations + do + newoption({ + 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 end @@ -609,16 +638,20 @@ function NazaraBuild:Process(infoTable) if (not self.Config["UniteModules"] or infoTable.Type ~= "Module") then table.insert(infoTable.ConfigurationLibraries.DebugStatic, library .. "-s-d") 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.ReleaseDynamic, library) + table.insert(infoTable.ConfigurationLibraries.ReleaseWithDebugDynamic, library) end elseif (libraryTable.Type == "ExternLib") then library = libraryTable.Name table.insert(infoTable.ConfigurationLibraries.DebugStatic, library .. "-s-d") 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.ReleaseDynamic, library .. "-s") + table.insert(infoTable.ConfigurationLibraries.ReleaseWithDebugDynamic, library .. "-s") elseif (libraryTable.Type == "Tool") then library = "Nazara" .. libraryTable.Name @@ -640,8 +673,10 @@ function NazaraBuild:Process(infoTable) table.insert(infoTable.ConfigurationLibraries.DebugStatic, library .. "-s-d") 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.ReleaseDynamic, library) + table.insert(infoTable.ConfigurationLibraries.ReleaseWithDebugDynamic, library) else infoTable.Excluded = true infoTable.ExcludeReason = "dependency " .. library .. " has invalid type \"" .. libraryTable.Type .. "\"" @@ -734,12 +769,14 @@ function NazaraBuild:PrepareGeneric() filter({"kind:*Lib", "configurations:DebugDynamic"}) targetsuffix("-d") - filter("configurations:Debug*") + filter("configurations:*Debug*") symbols("On") + filter("configurations:not *Debug*") + flags("NoFramePointer") + -- Setup some optimizations for release filter("configurations:Release*") - flags("NoFramePointer") optimize("Speed") vectorextensions("SSE2") @@ -961,8 +998,10 @@ function NazaraBuild:SetupInfoTable(infoTable) infoTable.ConfigurationLibraries = {} infoTable.ConfigurationLibraries.DebugStatic = {} infoTable.ConfigurationLibraries.ReleaseStatic = {} + infoTable.ConfigurationLibraries.ReleaseWithDebugStatic = {} infoTable.ConfigurationLibraries.DebugDynamic = {} infoTable.ConfigurationLibraries.ReleaseDynamic = {} + infoTable.ConfigurationLibraries.ReleaseWithDebugDynamic = {} infoTable.Excludable = true infoTable.LibraryPaths = {} infoTable.LibraryPaths.x86 = {}