Build/Core/Actions/buildActionBootstrap.lua

224 lines
4.9 KiB
Lua

local aurora = {}
_G["Aurora"] = aurora
function auFetchGlobal(name)
local ret = aurora[name] or {}
aurora[name] = ret
return ret
end
local function escapeBinaryPath(bin)
bin = path.translate(bin, path.getDefaultSeparator())
bin = os.realpath(bin)
if (os.host() == "windows") then
return "\"" .. bin .. "\""
end
return bin:gsub(" ", "\\ ")
end
require("./../../Utilities/Utilities")
local triggers =
{
"binscript",
"luascript",
"cwd",
"cmd",
"settings",
"project_name",
"project_arch",
"project_platform",
"project_root",
"additional",
"project_type",
"luaabsscript",
"projectname_",
"projectbins_",
"projectnameex_",
"project_config",
"project_name"
}
auForEach(triggers, function(trigger)
newoption
{
trigger = trigger,
description = ""
}
end)
local settings = _OPTIONS["settings"]
if (settings) then
Aurora.Settings = json.decode(base64.decode(settings))
require("./../../Public/paths")
end
require("./../Target/platform")
local preconfig = path.join(Aurora.Settings.sAbsRoot, "preconfig.lua")
if (os.isfile(preconfig)) then
auRequireAbs(preconfig)
end
local projRoot = path.join(Aurora.Settings.sAbsRoot, _OPTIONS["project_root"] or "./")
local projectBins = _OPTIONS["projectbins_"]
if (projectBins) then
projectBins = os.realpath(path.join(projRoot, projectBins))
end
local cwd = _OPTIONS["cwd"]
local passThroughCWD = nil
if (cwd) then
os.chdir(projRoot)
passThroughCWD = projRoot
else
os.chdir(Aurora.Settings.sAbsRoot)
passThroughCWD = Aurora.Settings.sAbsRoot
end
local root = Aurora.Settings.sAbsRoot
local args = _OPTIONS["additional"]
if (args) then
local path = _G.path.join(Aurora.Settings.sAbsCompilerWd, args .. ".args")
local argFileContents = io.readfile(path)
args = json.decode(argFileContents)
end
local binScript = _OPTIONS["binscript"]
if (binScript) then
local binSuffx = ""
if (args) then
binSuffx = " " .. args
end
local cmd = escapeBinaryPath(path.join(Aurora.Settings.sAbsRoot, binScript)) .. binSuffx
if (os.host() == "windows") then
cmd = "call " .. cmd
end
print("Running binary: ", cmd)
os.exit(os.execute(cmd))
end
local cmd = _OPTIONS["cmd"]
if (cmd) then
local cmd = base64.decode(cmd)
if (args) then
cmd = cmd .. " " .. args
end
if (os.host() == "windows") then
cmd = "call " .. cmd
end
print("Running command: ", cmd)
os.exit(os.execute(cmd))
end
local projName = _OPTIONS["project_name"]
local projType = _OPTIONS["project_type"]
local projPlatform = _OPTIONS["project_platform"]
local projCfg = _OPTIONS["project_config"]
local projArch = _OPTIONS["project_arch"]
local target = auRequire("Core/Target")
for k, v in pairs(Aurora.Architectures) do
if (projArch == v.architecture) then
projArch = k
break
end
end
if (string.ends(projPlatform, projArch)) then
projPlatform = projPlatform:sub(1, - #projArch - 1)
end
if (string.find(projCfg, "|")) then
projCfg = projCfg:match("([^,]+)|([^,]+)")
end
target.defineOutputNames(projPlatform)
local platform = Aurora.Platforms[projPlatform]
local platformStyle = projPlatform
if (platform) then
if (platform.outputName) then
platformStyle = platform.outputName
end
end
local targetName = string.format("%s.%s.%s.%s", projName, projCfg, platformStyle, projArch)
local fileName = targetName
if (platform) then
fileName = fileName .. ((platform.exts or {})[projType] or "")
end
if (projectBins) then
local projectName = _OPTIONS["projectname_"]
local projectNameEx = _OPTIONS["projectnameex_"] == "true"
local extension = (platform.exts or {})["ConsoleApp"]
local binName = projectName
if (projectNameEx) then
binName = string.format("%s.%s.%s.%s", binName, projCfg, projPlatform, projArch)
end
local binSuffx = ""
if (args) then
binSuffx = " " .. args
end
binName = binName .. extension
local cmd = escapeBinaryPath(path.join(projectBins, binName)) .. binSuffx
if (os.host() == "windows") then
cmd = "call " .. cmd
end
print("Running project: ", cmd)
os.exit(os.execute(cmd))
end
auBuild =
{
platform = projPlatform,
architecture = projArch,
projectName = projName,
projectType = projType,
projectRoot = projRoot,
projectTargetName = targetName,
projectTargetFileName = fileName,
args = args,
root = root,
cwd = passThroughCWD
}
local luaScript = _OPTIONS["luascript"]
local luaAbsScript = _OPTIONS["luaabsscript"]
local fn = nil
if (luaScript) then
fn = auRequireAbs(path.join(Aurora.Settings.sAbsRepoScripts, luaScript))
elseif (luaAbsScript) then
fn = auRequireAbs(path.join(Aurora.Settings.sAbsRoot, luaAbsScript))
end
if (type(fn) == "function") then
os.chdir(passThroughCWD)
fn()
end
os.exit()