summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/genie/src/actions/fastbuild/fastbuild_solution.lua
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/genie/src/actions/fastbuild/fastbuild_solution.lua')
-rw-r--r--3rdparty/genie/src/actions/fastbuild/fastbuild_solution.lua142
1 files changed, 142 insertions, 0 deletions
diff --git a/3rdparty/genie/src/actions/fastbuild/fastbuild_solution.lua b/3rdparty/genie/src/actions/fastbuild/fastbuild_solution.lua
new file mode 100644
index 00000000000..05524dbe289
--- /dev/null
+++ b/3rdparty/genie/src/actions/fastbuild/fastbuild_solution.lua
@@ -0,0 +1,142 @@
+ function premake.fastbuild.solution(sln)
+ -- Presuppose we are building a fastbuild config for vs2015 only.
+ io.indent = ' '
+ _p('// FastBuild solution configuration file. Generated by GENie.')
+ _p('//------------------------------------------------------------------------------------')
+ _p('// %s', sln.name)
+ _p('//------------------------------------------------------------------------------------')
+
+ _p('#import VS140COMNTOOLS')
+
+ local is64bit = os.is64bit()
+ local target64 = (is64bit and ' amd64') or ' x86_amd64'
+ local target32 = (is64bit and ' amd64_x86') or ''
+
+ -- Find vsvarsall.bat, run it to get the standard includes and libpaths:
+ local vstoolspath = os.getenv('VS140COMNTOOLS')
+ local getvcvarspatt = 'call "%s..\\..\\VC\\vcvarsall.bat"%s & cmd /c echo %%INCLUDE%% & cmd /c echo %%LIB%%'
+ local includeslibsrawx64 = os.outputof(string.format(getvcvarspatt, vstoolspath, target64))
+ local msvcvars = {}
+ msvcvars.x64 = {}
+ local includeslibssplitter = string.gmatch(includeslibsrawx64, "[^\n]+")
+ msvcvars.x64.includesraw = includeslibssplitter()
+ msvcvars.x64.libpathsraw = includeslibssplitter()
+ local includeslibsrawx86 = os.outputof(string.format(getvcvarspatt, vstoolspath, target32))
+ msvcvars.x32 = {}
+ includeslibssplitter = string.gmatch(includeslibsrawx86, "[^\n]+")
+ msvcvars.x32.includesraw = includeslibssplitter()
+ msvcvars.x32.libpathsraw = includeslibssplitter()
+
+ if is64bit then
+ _p('.MSVCx64Config =')
+ _p('[')
+ _p(1, ".Compiler = '$VS140COMNTOOLS$..\\..\\VC\\bin\\amd64\\cl.exe'")
+ _p(1, ".Librarian = '$VS140COMNTOOLS$..\\..\\VC\\bin\\amd64\\lib.exe'")
+ _p(1, ".Linker = '$VS140COMNTOOLS$..\\..\\VC\\bin\\amd64\\link.exe'")
+ _p(1, ".MSVCIncludes = ''")
+ for i in string.gmatch(msvcvars.x64.includesraw, "[^;]+") do
+ _p(1, " + ' /I\"%s\"'", i)
+ end
+ _p(1, ".MSVCLibPaths = ''")
+ for i in string.gmatch(msvcvars.x64.libpathsraw, "[^;]+") do
+ _p(1, " + ' /LIBPATH:\"%s\"'", i)
+ end
+ _p(']')
+ _p('')
+
+ _p('.MSVCx86Config =')
+ _p('[')
+ _p(1, ".Compiler = '$VS140COMNTOOLS$..\\..\\VC\\bin\\amd64_x86\\cl.exe'")
+ _p(1, ".Librarian = '$VS140COMNTOOLS$..\\..\\VC\\bin\\amd64_x86\\lib.exe'")
+ _p(1, ".Linker = '$VS140COMNTOOLS$..\\..\\VC\\bin\\amd64_x86\\link.exe'")
+ _p(1, ".MSVCIncludes = ''")
+ for i in string.gmatch(msvcvars.x32.includesraw, "[^;]+") do
+ _p(1, " + ' /I\"%s\"'", i)
+ end
+ _p(1, ".MSVCLibPaths = ''")
+ for i in string.gmatch(msvcvars.x32.libpathsraw, "[^;]+") do
+ _p(1, " + ' /LIBPATH:\"%s\"'", i)
+ end
+ _p(']')
+ _p('')
+ else
+ _p('.MSVCx64Config =')
+ _p('[')
+ _p(1, ".Compiler = '$VS140COMNTOOLS$..\\..\\VC\\bin\\x86_amd64\\cl.exe'")
+ _p(1, ".Librarian = '$VS140COMNTOOLS$..\\..\\VC\\bin\\x86_amd64\\lib.exe'")
+ _p(1, ".Linker = '$VS140COMNTOOLS$..\\..\\VC\\bin\\x86_amd64\\link.exe'")
+ _p(1, ".MSVCIncludes = ''")
+ for i in string.gmatch(msvcvars.x64.includesraw, "[^;]+") do
+ _p(1, " + ' /I\"%s\"'", i)
+ end
+ _p(1, ".MSVCLibPaths = ''")
+ for i in string.gmatch(msvcvars.x64.libpathsraw, "[^;]+") do
+ _p(1, " + ' /LIBPATH:\"%s\"'", i)
+ end
+ _p(']')
+ _p('')
+
+ _p('.MSVCx86Config =')
+ _p('[')
+ _p(1, ".Compiler = '$VS140COMNTOOLS$..\\..\\VC\\bin\\cl.exe'")
+ _p(1, ".Librarian = '$VS140COMNTOOLS$..\\..\\VC\\bin\\lib.exe'")
+ _p(1, ".Linker = '$VS140COMNTOOLS$..\\..\\VC\\bin\\link.exe'")
+ _p(1, ".MSVCIncludes = ''")
+ for i in string.gmatch(msvcvars.x32.includesraw, "[^;]+") do
+ _p(1, " + ' /I\"%s\"'", i)
+ end
+ _p(1, ".MSVCLibPaths = ''")
+ for i in string.gmatch(msvcvars.x32.libpathsraw, "[^;]+") do
+ _p(1, " + ' /LIBPATH:\"%s\"'", i)
+ end
+ _p(']')
+ _p('')
+ end
+
+ local function projkindsort(a, b)
+ local projvaluemap = {
+ ConsoleApp = 3,
+ WindowedApp = 3,
+ SharedLib = 2,
+ StaticLib = 1,
+ }
+
+ return projvaluemap[a.kind] < projvaluemap[b.kind]
+ end
+
+ local sortedprojs = {}
+ for prj in premake.solution.eachproject(sln) do
+ table.insert(sortedprojs, prj)
+ end
+
+ table.sort(sortedprojs, projkindsort)
+
+ for _, prj in ipairs(sortedprojs) do
+ local fname = premake.project.getbasename(prj.name, '%%.bff')
+ fname = path.join(prj.location, fname)
+ fname = path.getrelative(sln.location, fname)
+ _p('#include "%s"', fname)
+ end
+ _p('')
+
+ _p('.ProjectVariants = {')
+ for _, plat in ipairs(sln.platforms) do
+ for _, cfg in ipairs(sln.configurations) do
+ _p(1, "'%s-%s',", cfg, plat)
+ end
+ end
+ _p(1, '}')
+ _p('')
+
+ _p('ForEach(.Variant in .ProjectVariants)')
+ _p('{')
+ _p(1, "Alias('all-$Variant$')")
+ _p(1, '{')
+ _p(2, '.Targets = {')
+ for prj in premake.solution.eachproject(sln) do
+ _p(3, "'%s-$Variant$',", prj.name)
+ end
+ _p(3, '}')
+ _p(1, '}')
+ _p('}')
+ end