[+] Update TLS model (gcc)
[*] Fix circular references
This commit is contained in:
parent
100644b0de
commit
112a98c3e1
@ -322,15 +322,11 @@ function JsonProcessor(info)
|
|||||||
|
|
||||||
local iface = proj.processor
|
local iface = proj.processor
|
||||||
|
|
||||||
if (isWeakCircularReference(dep)) then
|
|
||||||
print("handling circular reference", dep)
|
|
||||||
iface:handleReference(true)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if (isProjectLoaded(dep)) then
|
if (isProjectLoaded(dep)) then
|
||||||
defines(("_auhas_" .. dep):upper() .. "=1")
|
defines(("_auhas_" .. dep):upper() .. "=1")
|
||||||
iface:handleReference()
|
|
||||||
|
iface:handleReference(isWeakCircularReference(dep))
|
||||||
|
|
||||||
if (not this.info.isStatic) then
|
if (not this.info.isStatic) then
|
||||||
iface:handleLink()
|
iface:handleLink()
|
||||||
end
|
end
|
||||||
|
@ -76,6 +76,16 @@ local boilerplateProject = function(name, projectType, src, inc, dest, root)
|
|||||||
if ((projectType == "SharedLib") or
|
if ((projectType == "SharedLib") or
|
||||||
(projectType == "StaticLib")) then
|
(projectType == "StaticLib")) then
|
||||||
pic "On"
|
pic "On"
|
||||||
|
|
||||||
|
if (usingGXX) then
|
||||||
|
-- TODO: we dont actually support gxx
|
||||||
|
-- We expect clang or msvc
|
||||||
|
-- msvcs thread local is fine, windows has always had decent thread in/out callbacks
|
||||||
|
-- clang has a cross platform, per variable solution
|
||||||
|
-- -> `__thread <type> <name> __attribute__((tls_model("initial-exec")));`
|
||||||
|
-- initial-exec is recommended when pic is on. does not work for dynamically loaded modules
|
||||||
|
buildoptions{"-ftls-model=initial-exec"}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
31
aurora.lua
31
aurora.lua
@ -90,7 +90,8 @@ function addVisit(ina)
|
|||||||
|
|
||||||
local project = {
|
local project = {
|
||||||
info = info,
|
info = info,
|
||||||
processor = nil
|
processor = nil,
|
||||||
|
deps = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
local cwd = getroot()
|
local cwd = getroot()
|
||||||
@ -143,7 +144,8 @@ function addScript(ina)
|
|||||||
|
|
||||||
local project = {
|
local project = {
|
||||||
info = info,
|
info = info,
|
||||||
processor = nil
|
processor = nil,
|
||||||
|
deps = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
local procesor = userRequire(args.script)
|
local procesor = userRequire(args.script)
|
||||||
@ -185,12 +187,15 @@ _G["_resolved_dep"] = {}
|
|||||||
function processDepSearch(proj, resolveProject)
|
function processDepSearch(proj, resolveProject)
|
||||||
local name = proj.info.name
|
local name = proj.info.name
|
||||||
|
|
||||||
|
|
||||||
_G["_resolved_dep"][name] = name
|
_G["_resolved_dep"][name] = name
|
||||||
|
|
||||||
if (not proj.resolvedDeps) then
|
if (not proj.resolvedDeps) then
|
||||||
if (proj.processor.resolveDependencies) then
|
if (proj.processor.resolveDependencies) then
|
||||||
proj.processor:resolveDependencies(function(name, soft)
|
proj.processor:resolveDependencies(function(name, soft)
|
||||||
|
|
||||||
|
table.insert(proj.deps, name)
|
||||||
|
|
||||||
if (_G["_resolved_dep"][name]) then
|
if (_G["_resolved_dep"][name]) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -316,8 +321,26 @@ function processProject(name, required, noNs)
|
|||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
function isWeakCircularReference(name)
|
function isWeakCircularReference(depName)
|
||||||
return projectsblocked[name] and not projectsemitted[name]
|
local curName = getCurrentProjectName()
|
||||||
|
|
||||||
|
local cur = projectsprocessor[curName]
|
||||||
|
if (not cur) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local dep = projectsprocessor[depName]
|
||||||
|
if (not dep) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
for index, value in ipairs(dep.deps) do
|
||||||
|
if value == curName then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function isProjectLoaded(name)
|
function isProjectLoaded(name)
|
||||||
|
Loading…
Reference in New Issue
Block a user