Build/Core/BuildHooks/BuildHooks.lua

345 lines
23 KiB
Lua

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 = "";
local hack2 = os.host() == "windows" and _ACTION == "gmake2"
if (iswin and not hack2) 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)
local hack = "{COPY}"
if (hack2) then
hack = "cp -rf"
end
local nameAndExt = name .. ex
return string.format("%s \"%s\" \"%s%s", hack, uglyBuildPath, outputPath, pathSuffix), outputPath, uglyBuildPath, name
end
local function gnuCoreUtilsMkdirRecursive(dir)
return string.format("mkdir -p \"%s\"", dir);
end
local function archiveShipPdb(pdbPath)
-- TODO (reece):
end
local function isUtils(projectType)
return projectType:lower() == "blank" or projectType:lower() == "utility" or projectType:lower() == "none"
end
local function isNoLinkType(projectType)
return projectType == "StaticLib" or isUtils(projectType)
end
local function addUserDestCopy(name, type, config, platformName, arch, dir, projectType)
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, fileName = formatCpy(Aurora.Settings.sLibPrefix .. name, type, dir, ext, isWin, config, platformName, arch, name)
if (platform.devChainCoreUtils) then
-- TODO: why was this never executed until now?
os.execute(gnuCoreUtilsMkdirRecursive(dir))
end
if (platform.devChainRequiresElfStrip and
platform.devChainSupportsElfStrip) then
-- never straight copy, just in case
-- id rather objcopy fail and leave us with no copy than have missed a symbol strip step
postbuildcommands("objcopy --strip-debug --strip-unneeded \"" .. file .. "\" \"" .. outputPath .. "\"")
if (config ~= Aurora.Settings.sNameOfShip) then
local debugSymbolPath = normalizeCpyPath(Aurora.Settings.sAbsSymbols) .. "/" .. name .. ".dwarf"
postbuildcommands("objcopy --add-gnu-debuglink=\"" .. debugSymbolPath .. "\" \"" .. outputPath .. "\"")
end
if (not Aurora.Settings.bUseAuBuildHooks) then
return
end
if (platform.forcePortableLibc and not os.getenv("AURORA_LINK_NOT_PORTABLE")) then
local platformSuffix = "System." .. platform.outputName .. "." .. arch
local isExec = type == "WindowedApp" or type == "ConsoleApp"
if (arch == "x86_64" or arch == "ARM64" or arch == "aarch64" or arch == "mips64") then
if (isExec) then
postbuildcommands("patchelf --set-interpreter \"ld-Aurora.System.Linux.x86_64.so\" \"" .. outputPath .. "\"")
io.writefile(outputPath .. ".exe", "#!/bin/bash\nchmod +x \"$(dirname \"$0\")/ld-Aurora.System.Linux.x86_64.so\"\nchmod +x \"$(dirname \"$0\")/".. fileName .. "\"\n\"$(dirname \"$0\")/ld-Aurora.System.Linux.x86_64.so\" \"$(dirname \"$0\")/".. fileName .. "\" $@")
end
local kUpdateLib64String = "#!/bin/bash\n\ntest -e /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 && cp -f /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 ld-Aurora.System.Linux.x86_64.so || echo skipped\ntest -e /lib/x86_64-linux-gnu/libc.so.6 && cp -f /lib/x86_64-linux-gnu/libc.so.6 libc.System.Linux.x86_64.so || echo skipped\ntest -e /lib/x86_64-linux-gnu/libm.so.6 && cp -f /lib/x86_64-linux-gnu/libm.so.6 libm.System.Linux.x86_64.so || echo skipped\ntest -e /lib64/ld-linux-x86-64.so.2 && cp -f /lib64/ld-linux-x86-64.so.2 ld-Aurora.System.Linux.x86_64.so || echo skipped\ntest -e /lib64/libc.so.6 && cp -f /lib64/libc.so.6 libc.System.Linux.x86_64.so || echo skipped\ntest -e /lib64/libm.so.6 && cp -f /lib64/libm.so.6 libm.System.Linux.x86_64.so || echo skipped\n\nif which patchelf >/dev/null; then\n\n patchelf --replace-needed libc.so.6 libc.System.Linux.x86_64.so libm.System.Linux.x86_64.so\n patchelf --replace-needed libgcc_s.so.1 libgcc.System.Linux.x86_64.so libm.System.Linux.x86_64.so\n \n patchelf --replace-needed libm.so.6 libm.System.Linux.x86_64.so libc.System.Linux.x86_64.so\n patchelf --replace-needed libgcc_s.so.1 libgcc.System.Linux.x86_64.so libc.System.Linux.x86_64.so\n \n patchelf --replace-needed libc.so.6 libc.System.Linux.x86_64.so libgcc.System.Linux.x86_64.so\n patchelf --replace-needed libm.so.6 libm.System.Linux.x86_64.so libgcc.System.Linux.x86_64.so\n\nfi"
io.writefile(dir .. "/update_libc64.sh", kUpdateLib64String)
if (os.isdir("/lib/x86_64-linux-gnu")) then
postbuildcommands("test -e /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 && cp -f /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 \"" .. dir .. "/ld-Aurora.System.Linux.x86_64.so\" || echo SKIP")
postbuildcommands("test -e /lib/x86_64-linux-gnu/libc.so.6 && cp -f /lib/x86_64-linux-gnu/libc.so.6 \"" .. dir .. "/libc." .. platformSuffix .. ".so\" || echo SKIP")
postbuildcommands("test -e /lib/x86_64-linux-gnu/libm.so.6 && cp -f /lib/x86_64-linux-gnu/libm.so.6 \"" .. dir .. "/libm." .. platformSuffix .. ".so\" || echo SKIP")
postbuildcommands("test -e /lib/x86_64-linux-gnu/libgcc_s.so.1 && cp -f /lib/x86_64-linux-gnu/libgcc_s.so.1 \"" .. dir .. "/libgcc." .. platformSuffix .. ".so\" || echo SKIP")
else
postbuildcommands("test -e /lib64/ld-linux-x86-64.so.2 && cp -f /lib64/ld-linux-x86-64.so.2 \"" .. dir .. "/ld-Aurora.System.Linux.x86_64.so\" || echo SKIP")
postbuildcommands("test -e /lib64/libc.so.6 && cp -f /lib64/libc.so.6 \"" .. dir .. "/libc." .. platformSuffix .. ".so\" || echo SKIP")
postbuildcommands("test -e /lib64/libm.so.6 && cp -f /lib64/libm.so.6 \"" .. dir .. "/libm." .. platformSuffix .. ".so\" || echo SKIP")
postbuildcommands("test -e /lib64/libgcc_s.so.1 && cp -f /lib64/libgcc_s.so.1 \"" .. dir .. "/libgcc." .. platformSuffix .. ".so\" || echo SKIP")
end
else
if (isExec) then
postbuildcommands("patchelf --set-interpreter \"ld-Aurora.System.Linux.x86_32.so\" \"" .. outputPath .. "\"")
io.writefile(outputPath .. ".exe", "#!/bin/bash\nchmod +x \"$(dirname \"$0\")/ld-Aurora.System.Linux.x86_32.so\"\nchmod +x \"$(dirname \"$0\")/".. fileName .. "\"\n\"$(dirname \"$0\")/ld-Aurora.System.Linux.x86_32.so\" \"$(dirname \"$0\")/".. fileName .. "\" $@")
end
local kUpdateLib32String = "#!/bin/bash\n\ntest -e /lib/i386-linux-gnu/ld-linux.so.2 && cp -f /lib/i386-linux-gnu/ld-linux.so.2 ld-Aurora.System.Linux.x86_32.so || echo skipped\ntest -e /lib/i386-linux-gnu/libc.so.6 && cp -f /lib/i386-linux-gnu/libc.so.6 libc.System.Linux.x86_32.so || echo skipped\ntest -e /lib/i386-linux-gnu/libm.so.6 && cp -f /lib/i386-linux-gnu/libm.so.6 libm.System.Linux.x86_32.so || echo skipped\ntest -e /lib/ld-linux.so.2 && cp -f /lib/ld-linux.so.2 ld-Aurora.System.Linux.x86_32.so || echo skipped\ntest -e /lib/libc.so.6 && cp -f /lib/libc.so.6 libc.System.Linux.x86_32.so || echo skipped\ntest -e /lib/libm.so.6 && cp -f /lib/libm.so.6 libm.System.Linux.x86_32.so || echo skipped\n\nif which patchelf >/dev/null; then\n\n patchelf --replace-needed libc.so.6 libc.System.Linux.x86_32.so libm.System.Linux.x86_32.so\n patchelf --replace-needed libgcc_s.so.1 libgcc.System.Linux.x86_32.so libm.System.Linux.x86_32.so\n \n patchelf --replace-needed libm.so.6 libm.System.Linux.x86_32.so libc.System.Linux.x86_32.so\n patchelf --replace-needed libgcc_s.so.1 libgcc.System.Linux.x86_32.so libc.System.Linux.x86_32.so\n \n patchelf --replace-needed libc.so.6 libc.System.Linux.x86_32.so libgcc.System.Linux.x86_32.so\n patchelf --replace-needed libm.so.6 libm.System.Linux.x86_32.so libgcc.System.Linux.x86_32.so\n \nfi"
io.writefile(dir .. "/update_libc32.sh", kUpdateLib32String)
if (os.isdir("/lib/i386-linux-gnu")) then
postbuildcommands("test -e /lib/i386-linux-gnu/ld-linux.so.2 && cp -f /lib/i386-linux-gnu/ld-linux.so.2 \"" .. dir .. "/ld-Aurora.System.Linux.x86_32.so\" || echo SKIP")
postbuildcommands("test -e /lib/i386-linux-gnu/libc.so.6 && cp -f /lib/i386-linux-gnu/libc.so.6 \"" .. dir .. "/libc." .. platformSuffix .. ".so\" || echo SKIP")
postbuildcommands("test -e /lib/i386-linux-gnu/libm.so.6 && cp -f /lib/i386-linux-gnu/libm.so.6 \"" .. dir .. "/libm." .. platformSuffix .. ".so\" || echo SKIP")
postbuildcommands("test -e /lib/i386-linux-gnu/libgcc_s.so.1 && cp -f /lib/i386-linux-gnu/libgcc_s.so.1 \"" .. dir .. "/libgcc." .. platformSuffix .. ".so\" || echo SKIP")
else
postbuildcommands("test -e /lib/ld-linux.so.2 && cp -f /lib/ld-linux.so.2 \"" .. dir .. "/ld-Aurora.System.Linux.x86_32.so\" || echo SKIP")
postbuildcommands("test -e /lib/libc.so.6 && cp -f /lib/libc.so.6 \"" .. dir .. "/libc." .. platformSuffix .. ".so\" || echo SKIP")
postbuildcommands("test -e /lib/libm.so.6 && cp -f /lib/libm.so.6 \"" .. dir .. "/libm." .. platformSuffix .. ".so\" || echo SKIP")
postbuildcommands("test -e /lib/libgcc_s.so.1 && cp -f /lib/libgcc_s.so.1 \"" .. dir .. "/libgcc." .. platformSuffix .. ".so\" || echo SKIP")
end
end
postbuildcommands("patchelf --replace-needed libc.so.6 libc." .. platformSuffix .. ".so \"" .. dir .. "/libm." .. platformSuffix .. ".so\"")
postbuildcommands("patchelf --replace-needed libgcc_s.so.1 libgcc." .. platformSuffix .. ".so \"" .. dir .. "/libm." .. platformSuffix .. ".so\"")
postbuildcommands("patchelf --replace-needed libm.so.6 libm." .. platformSuffix .. ".so \"" .. dir .. "/libc." .. platformSuffix .. ".so\"")
postbuildcommands("patchelf --replace-needed libgcc_s.so.1 libgcc." .. platformSuffix .. ".so \"" .. dir .. "/libc." .. platformSuffix .. ".so\"")
postbuildcommands("patchelf --replace-needed libc.so.6 libc." .. platformSuffix .. ".so \"" .. dir .. "/libgcc." .. platformSuffix .. ".so\"")
postbuildcommands("patchelf --replace-needed libm.so.6 libm." .. platformSuffix .. ".so \"" .. dir .. "/libgcc." .. platformSuffix .. ".so\"")
if (os.isfile(dir .. "/libunwind-x86_64.so.8")) then
postbuildcommands("patchelf --replace-needed libc.so.6 libc." .. "System.Linux.x86_64" .. ".so \"" .. dir .. "/libunwind-x86_64.so.8\"")
postbuildcommands("patchelf --replace-needed libm.so.6 libm." .. "System.Linux.x86_64" .. ".so \"" .. dir .. "/libunwind-x86_64.so.8\"")
postbuildcommands("patchelf --replace-needed libgcc_s.so.1 libgcc." .. "System.Linux.x86_64" .. ".so \"" .. dir .. "/libunwind-x86_64.so.8\"")
end
if (os.isfile(dir .. "/libunwind.so.8")) then
postbuildcommands("patchelf --replace-needed libc.so.6 libc." .. platformSuffix .. ".so \"" .. dir .. "/libunwind.so.8\"")
postbuildcommands("patchelf --replace-needed libm.so.6 libm." .. platformSuffix .. ".so \"" .. dir .. "/libunwind.so.8\"")
postbuildcommands("patchelf --replace-needed libgcc_s.so.1 libgcc." .. platformSuffix .. ".so \"" .. dir .. "/libunwind.so.8\"")
end
if (os.isfile(dir .. "/liblzma.so.5")) then
postbuildcommands("patchelf --replace-needed libc.so.6 libc." .. platformSuffix .. ".so \"" .. dir .. "/liblzma.so.5\"")
postbuildcommands("patchelf --replace-needed libm.so.6 libm." .. platformSuffix .. ".so \"" .. dir .. "/liblzma.so.5\"")
postbuildcommands("patchelf --replace-needed libgcc_s.so.1 libgcc." .. platformSuffix .. ".so \"" .. dir .. "/liblzma.so.5\"")
end
if (os.isfile(dir .. "/liblzma.so.6")) then
postbuildcommands("patchelf --replace-needed libc.so.6 libc." .. platformSuffix .. ".so \"" .. dir .. "/liblzma.so.6\"")
postbuildcommands("patchelf --replace-needed libm.so.6 libm." .. platformSuffix .. ".so \"" .. dir .. "/liblzma.so.6\"")
postbuildcommands("patchelf --replace-needed libgcc_s.so.1 libgcc." .. platformSuffix .. ".so \"" .. dir .. "/liblzma.so.6\"")
end
end
else
postbuildcommands(copy)
end
end
local function patchPortableElf(name, type, config, platform, platformName, arch, dir)
local ext = (platform.exts or {})[type] or ""
if (not Aurora.Settings.bUseAuBuildHooks) then
return
end
if (not platform.forcePortableLibc) then
return
end
if (os.getenv("AURORA_LINK_NOT_PORTABLE")) then
return
end
local copy, outputPath, file, fileName = formatCpy(Aurora.Settings.sLibPrefix .. name, type, "%{cfg.targetdir}", ext, isWin, config, platformName, arch, name)
local platformSuffix = "System." .. platform.outputName .. "." .. arch
postbuildcommands("patchelf --replace-needed libm.so.6 libm." .. platformSuffix .. ".so \"" .. outputPath .. "\"")
postbuildcommands("patchelf --replace-needed libc.so.6 libc." .. platformSuffix .. ".so \"" .. outputPath .. "\"")
postbuildcommands("patchelf --replace-needed libgcc_s.so.1 libgcc." .. platformSuffix .. ".so \"" .. outputPath .. "\"")
if (arch == "x86_64" or arch == "ARM64" or arch == "aarch64" or arch == "mips64") then
if (os.isdir("/lib/x86_64-linux-gnu")) then
postbuildcommands("test -e /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 && cp -f /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 \"" .. "%{cfg.targetdir}/ld-Aurora.System.Linux.x86_64.so\" || echo SKIP")
postbuildcommands("test -e /lib/x86_64-linux-gnu/libc.so.6 && cp -f /lib/x86_64-linux-gnu/libc.so.6 \"" .. "%{cfg.targetdir}/libc." .. platformSuffix .. ".so\" || echo SKIP")
postbuildcommands("test -e /lib/x86_64-linux-gnu/libm.so.6 && cp -f /lib/x86_64-linux-gnu/libm.so.6 \"" .. "%{cfg.targetdir}/libm." .. platformSuffix .. ".so\" || echo SKIP")
postbuildcommands("test -e /lib/x86_64-linux-gnu/libgcc_s.so.1 && cp -f /lib/x86_64-linux-gnu/libgcc_s.so.1 \"" .. "%{cfg.targetdir}/libgcc." .. platformSuffix .. ".so\" || echo SKIP")
else
postbuildcommands("test -e /lib64/ld-linux-x86-64.so.2 && cp -f /lib64/ld-linux-x86-64.so.2 \"" .. "%{cfg.targetdir}/ld-Aurora.System.Linux.x86_64.so\" || echo SKIP")
postbuildcommands("test -e /lib64/libc.so.6 && cp -f /lib64/libc.so.6 \"" .. "%{cfg.targetdir}/libc." .. platformSuffix .. ".so\" || echo SKIP")
postbuildcommands("test -e /lib64/libm.so.6 && cp -f /lib64/libm.so.6 \"" .. "%{cfg.targetdir}/libm." .. platformSuffix .. ".so\" || echo SKIP")
postbuildcommands("test -e /lib64/libgcc_s.so.1 && cp -f /lib64/libgcc_s.so.1 \"" .. "%{cfg.targetdir}/libgcc." .. platformSuffix .. ".so\" || echo SKIP")
end
else
if (os.isdir("/lib/i386-linux-gnu")) then
postbuildcommands("test -e /lib/i386-linux-gnu/ld-linux.so.2 && cp -f /lib/i386-linux-gnu/ld-linux.so.2 \"" .."%{cfg.targetdir}/ld-Aurora.System.Linux.x86_32.so\" || echo SKIP")
postbuildcommands("test -e /lib/i386-linux-gnu/libc.so.6 && cp -f /lib/i386-linux-gnu/libc.so.6 \"" .."%{cfg.targetdir}/libc." .. platformSuffix .. ".so\" || echo SKIP")
postbuildcommands("test -e /lib/i386-linux-gnu/libm.so.6 && cp -f /lib/i386-linux-gnu/libm.so.6 \"" .."%{cfg.targetdir}/libm." .. platformSuffix .. ".so\" || echo SKIP")
postbuildcommands("test -e /lib/i386-linux-gnu/libgcc_s.so.1 && cp -f /lib/i386-linux-gnu/libgcc_s.so.1 \"" .."%{cfg.targetdir}/libgcc." .. platformSuffix .. ".so\" || echo SKIP")
else
postbuildcommands("test -e /lib/ld-linux.so.2 && cp -f /lib/ld-linux.so.2 \"" .. "%{cfg.targetdir}/ld-Aurora.System.Linux.x86_32.so\" || echo SKIP")
postbuildcommands("test -e /lib/libc.so.6 && cp -f /lib/libc.so.6 \"" .. "%{cfg.targetdir}/libc." .. platformSuffix .. ".so\" || echo SKIP")
postbuildcommands("test -e /lib/libm.so.6 && cp -f /lib/libm.so.6 \"" .. "%{cfg.targetdir}/libm." .. platformSuffix .. ".so\" || echo SKIP")
postbuildcommands("test -e /lib/libgcc_s.so.1 && cp -f /lib/libgcc_s.so.1 \"" .. "%{cfg.targetdir}/libgcc." .. platformSuffix .. ".so\" || echo SKIP")
end
end
postbuildcommands("patchelf --replace-needed libc.so.6 libc." .. platformSuffix .. ".so \"%{cfg.targetdir}/libm." .. platformSuffix .. ".so\"")
postbuildcommands("patchelf --replace-needed libgcc_s.so.1 libgcc." .. platformSuffix .. ".so \"%{cfg.targetdir}/libm." .. platformSuffix .. ".so\"")
postbuildcommands("patchelf --replace-needed libm.so.6 libm." .. platformSuffix .. ".so \"%{cfg.targetdir}/libc." .. platformSuffix .. ".so\"")
postbuildcommands("patchelf --replace-needed libgcc_s.so.1 libgcc." .. platformSuffix .. ".so \"%{cfg.targetdir}/libc." .. platformSuffix .. ".so\"")
postbuildcommands("patchelf --replace-needed libc.so.6 libc." .. platformSuffix .. ".so \"%{cfg.targetdir}/libgcc." .. platformSuffix .. ".so\"")
postbuildcommands("patchelf --replace-needed libm.so.6 libm." .. platformSuffix .. ".so \"%{cfg.targetdir}/libgcc." .. platformSuffix .. ".so\"")
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, projectType)
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
if (config == Aurora.Settings.sNameOfDebug) then
return
end
local platform = Aurora.Platforms[platformName]
if (not platform) then
return
end
local debugSymbolPath = nil
local debugExt = ""
if (platform.devChainRequiresElfStrip and
platform.devChainSupportsElfStrip) then
debugEx = ".dwarf"
debugSymbolPath = normalizeCpyPath(Aurora.Settings.sAbsSymbols) .. "/" .. name .. ".dwarf"
postbuildcommands("objcopy --only-keep-debug \"" .. compilerDirectOutput .. "\" \"" .. debugSymbolPath .. "\"")
if (type == "SharedLib" or
type == "StaticLib") then
postbuildcommands("objcopy --strip-debug --strip-unneeded \"" .. compilerDirectOutput .. "\"")
if (config ~= Aurora.Settings.sNameOfShip) then
postbuildcommands("objcopy --add-gnu-debuglink=\"" .. debugSymbolPath .. "\" \"" .. compilerDirectOutput .. "\"")
end
end
if (type == "SharedLib" or
type == "WindowedApp" or
type == "ConsoleApp") then
patchPortableElf(name, type, config, platform, platformName, arch)
end
elseif (isWin) then
debugEx = ".pdb"
debugSymbolPath = normalizeCpyPath(Aurora.Settings.sAbsSymbols) .. "/" .. name .. ".pdb"
end
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
if (isUtils(projectType)) then
return
end
auFilterForConfigPlatforms(function(config, platform, arch)
postBuildCommands(name, projectType, config, platform, arch)
end)
end
return {
startProject = startProject,
addDest = addDest
}