diff options
Diffstat (limited to '3rdparty/genie/src/actions/fastbuild/fastbuild_solution.lua')
-rw-r--r-- | 3rdparty/genie/src/actions/fastbuild/fastbuild_solution.lua | 142 |
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 |