Build/Core/BuildHooks/BuildHooks.lua

155 lines
5.3 KiB
Lua

local kPathPrefix = "!"
local function normalizeCpyPath(absPath)
return "../../" .. path.getrelative(Aurora.Settings.sAbsRoot, absPath)
end
-- file name, type, directory, extension, is windows, configuration, real name
local function formatCpy(name, type, dir, ex, iswin, config, platformName, arch, realName)
local pathSuffix = "";
if (iswin) then
pathSuffix = "*\"";
else
pathSuffix = "\"";
end
if (Aurora.Settings.bDefinePartialABIInTargetName) then
name = string.format("%s.%s.%s.%s", name, config, platformName:gsub("^%l", string.upper), arch)
end
local outputPath = string.format("%s/%s%s", dir, name, ex)
local outputTarget = string.format("%s/%s", dir, name)
local uglyBuildPath = string.format("%%{cfg.targetdir}/%s%s", name, ex)
return string.format("{COPY} \"%s\" \"%s%s", uglyBuildPath, outputPath, pathSuffix), outputPath, uglyBuildPath
end
local function gnuCoreUtilsMkdirRecursive(dir)
return string.format("mkdir -p \"%s\"", dir);
end
local function archiveShipPdb(pdbPath)
-- TODO (reece):
end
local function isNoLinkType(projectType)
return projectType == "StaticLib" or projectType == "Blank" or projectType == "Utility"
end
local function addUserDestCopy(name, type, config, platformName, arch, dir)
local isWin = platformName == "win32"
local debugSymbolPath = nil
local platform = Aurora.Platforms[platformName]
if (not platform) then
return
end
local ext = (platform.exts or {})[type] or ""
local copy, outputPath, file = formatCpy(Aurora.Settings.sLibPrefix .. name, type, dir, ext, isWin, config, platformName, arch, name)
if (platform.devChainCoreUtils) then
gnuCoreUtilsMkdirRecursive(dir)
end
if (platform.devChainRequiresElfStrip and
platform.devChainSupportsElfStrip and
config ~= Aurora.Settings.sNameOfDebug) then
local debugSymbolPath = normalizeCpyPath(Aurora.Settings.sAbsSymbols) .. "/" .. name .. ".dwarf"
postbuildcommands("objcopy --strip-debug " .. file .. " " .. outputPath)
if (Aurora.Settings.bUseAuBuildHooks and config ~= Aurora.Settings.sNameOfShip) then
postbuildcommands("objcopy --add-gnu-debuglink=" .. debugSymbolPath .. " " .. outputPath)
end
else
postbuildcommands(copy)
end
end
local function addDest(name, projectType, dest)
local lookup = {}
local append = ""
if (isNoLinkType(projectType)) then
return
end
if (dest:starts(kPathPrefix)) then
append = dest:sub(#kPathPrefix + 1)
local fu = auFilterConfig(Aurora.Settings.sNameOfDebug)
lookup[Aurora.Settings.sNameOfDebug] = normalizeCpyPath(Aurora.Settings.sAbsDebug)
lookup[Aurora.Settings.sNameOfInternal] = normalizeCpyPath(Aurora.Settings.sAbsStage)
lookup[Aurora.Settings.sNameOfShip] = normalizeCpyPath(Aurora.Settings.sAbsShip)
else
lookup[Aurora.Settings.sNameOfDebug] = dest
lookup[Aurora.Settings.sNameOfInternal] = dest
lookup[Aurora.Settings.sNameOfShip] = dest
end
auFilterForConfigPlatforms(function(config, platform, arch)
addUserDestCopy(name, projectType, config, platform, arch, lookup[config] .. append)
end)
end
local function postBuildCommands(name, type, config, platformName, arch)
local isWin = platformName == "win32"
if (isWin) then
postbuildcommands(formatCpy(Aurora.Settings.sLibPrefix .. name, type, normalizeCpyPath(Aurora.Settings.sAbsSymbols), ".pdb", true, config, platformName, arch, name))
if (type == "SharedLib" or
type == "StaticLib") then
postbuildcommands(formatCpy(Aurora.Settings.sLibPrefix .. name, type, normalizeCpyPath(Aurora.Settings.sRelLinkLibs), ".lib", true, config, platformName, arch, name))
end
else
if (type == "SharedLib" or
type == "StaticLib") then
postbuildcommands(formatCpy(Aurora.Settings.sLibPrefix .. name, type, normalizeCpyPath(Aurora.Settings.sRelLinkLibs), ext, true, config, platformName, arch, name))
end
end
if (config ~= Aurora.Settings.sNameOfDebug) then
local platform = Aurora.Platforms[platformName]
if (not platform) then
return
end
local debugSymbolPath = nil
if (platform.devChainRequiresElfStrip and
platform.devChainSupportsElfStrip) then
debugSymbolPath = normalizeCpyPath(Aurora.Settings.sAbsSymbols) .. "/" .. name .. ".dwarf"
postbuildcommands("objcopy --only-keep-debug " .. file .. " " .. debugSymbolPath)
elseif (isWin) then
debugSymbolPath = normalizeCpyPath(Aurora.Settings.sAbsSymbols) .. "/" .. name .. ".pdb"
end
if (debugSymbolPath and
config == Aurora.Settings.sNameOfShip) then
archiveShipPdb(debugSymbolPath)
end
else
postbuildcommands(copy)
end
end
local function startProject(name, projectType)
if (not Aurora.Settings.bUseAuBuildHooks) then
return
end
if (isNoLinkType(projectType)) then
return
end
auFilterForConfigPlatforms(function(config, platform, arch)
postBuildCommands(name, projectType, config, platform, arch)
end)
end
return {
startProject = startProject,
addDest = addDest
}