Build/Core/BuildHooks/BuildHooks.lua

174 lines
6.1 KiB
Lua
Raw Normal View History

local kPathPrefix = "!"
local function normalizeCpyPath(absPath)
return absPath -- path.getrelative(os.getcwd(), Aurora.Settings.sAbsRoot) .. '/' .. 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
local platform = Aurora.Platforms[platformName]
if (platform) then
platformName = platform.outputName
end
if (Aurora.Settings.bDefinePartialABIInTargetName) then
name = string.format("%s.%s.%s.%s", name, config, platformName, 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
2021-11-16 11:03:56 +00:00
local function isUtils(projectType)
return projectType:lower() == "blank" or projectType:lower() == "utility" or projectType:lower() == "none"
2021-11-16 11:03:56 +00:00
end
local function isNoLinkType(projectType)
2021-11-16 11:03:56 +00:00
return projectType == "StaticLib" or isUtils(projectType)
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"
2023-08-11 12:40:05 +00:00
postbuildcommands("objcopy --strip-debug --strip-unneeded \"" .. 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 compilerDirectOutput = nil
if (platformName == "win32") 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.sAbsLinkLibs), ".lib", true, config, platformName, arch, name))
end
else
local ext = (Aurora.Platforms[platformName].exts[type] or "")
if (type == "SharedLib" or
type == "StaticLib") then
local ext = (Aurora.Platforms[platformName].exts[type] or "")
local cmd = nil
cmd, compilerDirectOutput = formatCpy(Aurora.Settings.sLibPrefix .. name, type, normalizeCpyPath(Aurora.Settings.sAbsLinkLibs), ext, false, config, platformName, arch, name)
postbuildcommands(cmd)
end
local idc = nil
idc, idc, compilerDirectOutput = formatCpy(Aurora.Settings.sLibPrefix .. name, type, normalizeCpyPath(Aurora.Settings.sAbsLinkLibs), ext, false, config, platformName, arch, name)
end
2021-11-16 11:03:56 +00:00
if (config == Aurora.Settings.sNameOfDebug) then
return
end
local platform = Aurora.Platforms[platformName]
if (not platform) then
return
end
2021-11-16 11:03:56 +00:00
local debugSymbolPath = nil
local debugExt = ""
2021-11-16 11:03:56 +00:00
if (platform.devChainRequiresElfStrip and
platform.devChainSupportsElfStrip) then
debugEx = ".dwarf"
debugSymbolPath = normalizeCpyPath(Aurora.Settings.sAbsSymbols) .. "/" .. name .. ".dwarf"
postbuildcommands("objcopy --only-keep-debug \"" .. compilerDirectOutput .. "\" \"" .. debugSymbolPath .. "\"")
2021-11-16 11:03:56 +00:00
elseif (isWin) then
debugEx = ".pdb"
debugSymbolPath = normalizeCpyPath(Aurora.Settings.sAbsSymbols) .. "/" .. name .. ".pdb"
end
2021-11-16 11:03:56 +00:00
if (debugSymbolPath and
config == Aurora.Settings.sNameOfShip) then
archiveShipPdb(debugSymbolPath, debugEx)
end
end
local function startProject(name, projectType)
if (not Aurora.Settings.bUseAuBuildHooks) then
return
end
2021-11-16 11:03:56 +00:00
if (isUtils(projectType)) then
return
end
auFilterForConfigPlatforms(function(config, platform, arch)
postBuildCommands(name, projectType, config, platform, arch)
end)
end
return {
startProject = startProject,
addDest = addDest
}