added template files
This commit is contained in:
parent
abaf74850e
commit
2fa0eb2b05
10 changed files with 320 additions and 8 deletions
119
.ecc/ecc.lua
Normal file
119
.ecc/ecc.lua
Normal file
|
@ -0,0 +1,119 @@
|
|||
|
||||
-- Include module if it is not embedded
|
||||
if premake.modules.ecc == nil then
|
||||
include ( "_preload.lua" )
|
||||
end
|
||||
|
||||
local p = premake
|
||||
local project = p.project
|
||||
|
||||
p.modules.ecc = {}
|
||||
local m = p.modules.ecc
|
||||
|
||||
m._VERSION = "1.0.1-alpha"
|
||||
|
||||
function m.generateFile()
|
||||
p.push("[")
|
||||
for wks in p.global.eachWorkspace() do
|
||||
for prj in p.workspace.eachproject(wks) do
|
||||
m.onProject(prj)
|
||||
end
|
||||
end
|
||||
p.pop("]")
|
||||
end
|
||||
|
||||
function m.onProject(prj)
|
||||
if project.isc(prj) or project.iscpp(prj) then
|
||||
local cfg = m.getConfig(prj)
|
||||
local args = m.getArguments(prj, cfg)
|
||||
local files = table.shallowcopy(prj._.files)
|
||||
for i,node in ipairs(files) do
|
||||
local output = cfg.objdir .. "/" .. node.objname .. ".o"
|
||||
local obj = path.getrelative(prj.location, output)
|
||||
p.push("{")
|
||||
p.push("\"arguments\": [")
|
||||
m.writeArgs(args, obj, node.relpath)
|
||||
p.pop("],")
|
||||
p.w("\"directory\": \"%s\",", prj.location)
|
||||
p.w("\"file\": \"%s\",", node.abspath)
|
||||
p.w("\"output\": \"%s\"", output)
|
||||
p.pop("},")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function m.writeArgs(args, obj, src)
|
||||
for _,arg in ipairs(args) do
|
||||
p.w("\"%s\",", arg)
|
||||
end
|
||||
p.w("\"-c\",")
|
||||
p.w("\"-o\",")
|
||||
p.w("\"%s\",", obj)
|
||||
p.w("\"%s\"", src)
|
||||
end
|
||||
|
||||
function m.getConfig(prj)
|
||||
local ocfg = _OPTIONS.config
|
||||
local cfg = {}
|
||||
if ocfg and prj.configs[ocfg] then
|
||||
cfg = prj.configs[ocfg]
|
||||
else
|
||||
cfg = m.defaultconfig(prj)
|
||||
end
|
||||
return cfg
|
||||
end
|
||||
|
||||
function m.getArguments(prj, cfg)
|
||||
local toolset = m.getToolSet(cfg)
|
||||
local args = {}
|
||||
local tool = iif(project.iscpp(prj), "cxx", "cc")
|
||||
local toolname = iif(cfg.prefix, toolset.gettoolname(cfg, tool), toolset.tools[tool])
|
||||
args = table.join(args, toolname)
|
||||
args = table.join(args, toolset.getcppflags(cfg)) -- Preprocessor
|
||||
args = table.join(args, toolset.getdefines(cfg.defines))
|
||||
args = table.join(args, toolset.getundefines(cfg.undefines))
|
||||
args = table.join(args, toolset.getincludedirs(cfg, cfg.includedirs, cfg.sysincludedirs))
|
||||
if project.iscpp(prj) then
|
||||
args = table.join(args, toolset.getcxxflags(cfg))
|
||||
else
|
||||
args = table.join(args, toolset.getcflags(cfg))
|
||||
end
|
||||
args = table.join(args, cfg.buildoptions)
|
||||
return args
|
||||
end
|
||||
|
||||
-- Copied from gmake2 module
|
||||
-- Return default toolset of given config or system default toolset
|
||||
function m.getToolSet(cfg)
|
||||
local default = iif(cfg.system == p.MACOSX, "clang", "gcc")
|
||||
local toolset = p.tools[_OPTIONS.cc or cfg.toolset or default]
|
||||
if not toolset then
|
||||
error("Invalid toolset '" .. cfg.toolset .. "'")
|
||||
end
|
||||
return toolset
|
||||
end
|
||||
|
||||
-- Copied from gmake2 module
|
||||
function m.defaultconfig(target)
|
||||
-- find the right configuration iterator function for this object
|
||||
local eachconfig = iif(target.project, project.eachconfig, p.workspace.eachconfig)
|
||||
local defaultconfig = nil
|
||||
|
||||
-- find the right default configuration platform, grab first configuration that matches
|
||||
if target.defaultplatform then
|
||||
for cfg in eachconfig(target) do
|
||||
if cfg.platform == target.defaultplatform then
|
||||
defaultconfig = cfg
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- grab the first configuration and write the block
|
||||
if not defaultconfig then
|
||||
local iter = eachconfig(target)
|
||||
defaultconfig = iter()
|
||||
end
|
||||
|
||||
return defaultconfig
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue