diff --git a/build/config.lua b/build/config.lua.default.lua similarity index 57% rename from build/config.lua rename to build/config.lua.default.lua index 16bf08d33..b30566fcb 100644 --- a/build/config.lua +++ b/build/config.lua.default.lua @@ -24,3 +24,18 @@ ServerMode = false -- Builds modules as one united library (useless on POSIX systems) UniteModules = false + +-- Qt5 directories (required for ShaderNodes editor) +--Qt5IncludeDir = [[C:\Projets\Libs\Qt\5.15.0\msvc2019\include]] +--Qt5BinDir_x86 = [[C:\Projets\Libs\Qt\5.15.0\msvc2019\bin]] +--Qt5BinDir_x64 = [[C:\Projets\Libs\Qt\5.15.0\msvc2019_64\bin]] +--Qt5LibDir_x86 = [[C:\Projets\Libs\Qt\5.15.0\msvc2019\lib]] +--Qt5LibDir_x64 = [[C:\Projets\Libs\Qt\5.15.0\msvc2019_64\lib]] + + +-- QtNodes directories (required for ShaderNodes editor) +--QtNodesIncludeDir = [[C:\Projets\Libs\nodeeditor\include]] +--QtNodesBinDir_x86 = [[C:\Projets\Libs\nodeeditor\build32\bin\Release]] +--QtNodesBinDir_x64 = [[C:\Projets\Libs\nodeeditor\build64\bin\Release]] +--QtNodesLibDir_x86 = [[C:\Projets\Libs\nodeeditor\build32\lib\Release]] +--QtNodesLibDir_x64 = [[C:\Projets\Libs\nodeeditor\build64\lib\Release]] \ No newline at end of file diff --git a/build/scripts/common.lua b/build/scripts/common.lua index 1564b9505..1edf10fd3 100644 --- a/build/scripts/common.lua +++ b/build/scripts/common.lua @@ -699,6 +699,24 @@ local PosixOSes = { ["solaris"] = true } +local function ProcessOption(libName, option, enable) + return libName:gsub("%%" .. option .. "%((.+)%)", enable and "%1" or "") +end + +local function HandleLib(infoTable, libName) + local debugDynamic = ProcessOption(ProcessOption(libName, "d", true), "s", false) + local debugStatic = ProcessOption(ProcessOption(libName, "d", true), "s", true) + local releaseStatic = ProcessOption(ProcessOption(libName, "d", false), "s", true) + local releaseDynamic = ProcessOption(ProcessOption(libName, "d", false), "s", false) + + table.insert(infoTable.ConfigurationLibraries.DebugStatic, debugStatic) + table.insert(infoTable.ConfigurationLibraries.ReleaseStatic, releaseStatic) + table.insert(infoTable.ConfigurationLibraries.ReleaseWithDebugStatic, releaseStatic) + table.insert(infoTable.ConfigurationLibraries.DebugDynamic, debugDynamic) + table.insert(infoTable.ConfigurationLibraries.ReleaseDynamic, releaseDynamic) + table.insert(infoTable.ConfigurationLibraries.ReleaseWithDebugDynamic, releaseDynamic) +end + function NazaraBuild:Process(infoTable) if (infoTable.Excluded) then return false @@ -718,16 +736,11 @@ function NazaraBuild:Process(infoTable) if (_OPTIONS["united"]) then library = "NazaraEngine" else - library = "Nazara" .. libraryTable.Name + library = "Nazara" .. libraryTable.Name .. "%s(-s)%d(-d)" end 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) + HandleLib(infoTable, library) end elseif (libraryTable.Type == "ExternLib") then library = libraryTable.Name @@ -735,15 +748,10 @@ function NazaraBuild:Process(infoTable) if (self.Config["BuildDependencies"]) then table.insert(libraries, library) else - 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") + HandleLib(infoTable, library) end elseif (libraryTable.Type == "Tool") then - library = "Nazara" .. libraryTable.Name + library = "Nazara" .. libraryTable.Name .. "%s(-s)%d(-d)" -- Import tools includes for k,v in ipairs(libraryTable.Includes) do @@ -761,19 +769,14 @@ function NazaraBuild:Process(infoTable) end end - 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) + HandleLib(infoTable, library) else infoTable.Excluded = true infoTable.ExcludeReason = "dependency " .. library .. " has invalid type \"" .. libraryTable.Type .. "\"" return false end else - table.insert(libraries, library) + HandleLib(infoTable, library) end end infoTable.Libraries = libraries @@ -881,9 +884,11 @@ function NazaraBuild:PreconfigGenericProject() filter("configurations:*Dynamic") kind("SharedLib") - -- Enable MSVC conformance (not required but better) + -- Enable MSVC conformance (not required but better) and some extra warnings filter("action:vs*") buildoptions({"/permissive-", "/Zc:__cplusplus", "/Zc:referenceBinding", "/Zc:throwingNew"}) + --enablewarnings("4062") -- switch case not handled + buildoptions("/w44062") -- looks like enablewarnings is broken currently for msvc -- Enable SSE math and vectorization optimizations filter({"configurations:Release*", clangGccActions}) diff --git a/build/scripts/tools/shadernodes.lua b/build/scripts/tools/shadernodes.lua index bcf9a1593..cc0b63cb3 100644 --- a/build/scripts/tools/shadernodes.lua +++ b/build/scripts/tools/shadernodes.lua @@ -12,12 +12,7 @@ TOOL.Defines = { TOOL.Includes = { "../include", "../extlibs/include", - "../src", - [[C:\Projets\Libs\Qt\5.15.0\msvc2019_64\include]], - [[C:\Projets\Libs\Qt\5.15.0\msvc2019_64\include\QtCore]], - [[C:\Projets\Libs\Qt\5.15.0\msvc2019_64\include\QtGui]], - [[C:\Projets\Libs\Qt\5.15.0\msvc2019_64\include\QtWidgets]], - [[C:\Projets\Libs\nodeeditor\include]], + "../src" } TOOL.Files = { @@ -27,16 +22,71 @@ TOOL.Files = { } TOOL.Libraries = { - "NazaraCore", - "NazaraShader", - "NazaraUtility", - "Qt5Cored", - "Qt5Guid", - "Qt5Widgetsd", - "nodes" + "NazaraCore%s(-s)%d(-d)", + "NazaraShader%s(-s)%d(-d)", + "NazaraUtility%s(-s)%d(-d)", + "Qt5Core%d(d)", + "Qt5Gui%d(d)", + "Qt5Widgets%d(d)", + "nodes%d(d)" } -TOOL.LibraryPaths.x64 = { - [[C:\Projets\Libs\Qt\5.15.0\msvc2019_64\lib]], - [[C:\Projets\Libs\nodeeditor\build\lib\Debug]] -} +local function AppendValues(tab, value) + if (type(value) == "table") then + for _, v in pairs(value) do + AppendValues(tab, v) + end + else + table.insert(tab, value) + end +end + +function TOOL:ValidateLib(libName) + local config = NazaraBuild:GetConfig() + local includes = config[libName .. "IncludeDir"] + local binDir32 = config[libName .. "BinDir_x86"] + local binDir64 = config[libName .. "BinDir_x64"] + local libDir32 = config[libName .. "LibDir_x86"] + local libDir64 = config[libName .. "LibDir_x64"] + if (not includes) then + return false, "missing " .. libName .. " includes directories in config.lua" + end + + if (not libDir32 and not libDir64) then + return false, "missing " .. libName .. " library search directories in config.lua" + end + + AppendValues(self.Includes, includes) + + if (binDir32) then + AppendValues(self.BinaryPaths.x86, binDir32) + end + + if (binDir64) then + AppendValues(self.BinaryPaths.x64, binDir64) + end + + if (libDir32) then + AppendValues(self.LibraryPaths.x86, libDir32) + end + + if (libDir64) then + AppendValues(self.LibraryPaths.x64, libDir64) + end + + return true +end + +function TOOL:Validate() + local success, err = self:ValidateLib("Qt5") + if (not success) then + return false, err + end + + local success, err = self:ValidateLib("QtNodes") + if (not success) then + return false, err + end + + return true +end \ No newline at end of file