Merged CodeLite support(r591:595)

This commit is contained in:
starkos 2008-11-25 23:59:31 +00:00
parent 7d81da1474
commit be26ccfb9d
8 changed files with 278 additions and 38 deletions

View File

@ -34,6 +34,8 @@
{
"actions/codeblocks/codeblocks_workspace.tmpl",
"actions/codeblocks/codeblocks_cbp.tmpl",
"actions/codelite/codelite_workspace.tmpl",
"actions/codelite/codelite_project.tmpl",
"actions/make/make_solution.tmpl",
"actions/make/make_cpp.tmpl",
"actions/vstudio/vs2002_solution.tmpl",
@ -49,6 +51,7 @@
{
"actions/clean/_clean.lua",
"actions/codeblocks/_codeblocks.lua",
"actions/codelite/_codelite.lua",
"actions/make/_make.lua",
"actions/vstudio/_vstudio.lua",
}

View File

@ -8,7 +8,7 @@
<Build>
<% for cfg in premake.eachconfig(this) do %>
<Target title="<%= premake.esc(cfg.name) %>">
<Option output="<%= premake.esc(cfg.target) %>" prefix_auto="0" extension_auto="0" />
<Option output="<%= premake.esc(premake.gettargetfile(cfg, "target", nil, true)) %>" prefix_auto="0" extension_auto="0" />
<Option object_output="<%= premake.esc(premake.getobjdir(cfg)) %>" />
<% if (cfg.kind == "WindowedApp") then %>
<Option type="0" />

View File

@ -0,0 +1,77 @@
--
-- _codelite.lua
-- Define the CodeLite action(s).
-- Copyright (c) 2008 Jason Perkins and the Premake project
--
_CODELITE = { }
--
-- Translate Premake kind values into CodeLite kind values.
--
function _CODELITE.kind(value)
if (value == "ConsoleApp" or value == "WindowedApp") then
return "Executable"
elseif (value == "StaticLib") then
return "Static Library"
elseif (value == "SharedLib") then
return "Dynamic Library"
end
end
--
-- Write out entries for the files element; called from premake.walksources().
--
function _CODELITE.files(prj, fname, state, nestlevel)
local indent = string.rep(" ", nestlevel + 1)
if (state == "GroupStart") then
io.write(indent .. '<VirtualDirectory Name="' .. path.getname(fname) .. '">\n')
elseif (state == "GroupEnd") then
io.write(indent .. '</VirtualDirectory>\n')
else
io.write(indent .. '<File Name="' .. fname .. '"/>\n')
end
end
--
-- The CodeLite action
--
newaction {
trigger = "codelite",
shortname = "CodeLite",
description = "CodeLite (experimental)",
valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib" },
valid_languages = { "C", "C++" },
valid_tools = {
cc = { "gcc" },
},
solutiontemplates = {
{ ".workspace", _TEMPLATES.codelite_workspace },
},
projecttemplates = {
{ ".project", _TEMPLATES.codelite_project },
},
onclean = function(solutions, projects, targets)
for _,name in ipairs(projects) do
os.remove(name .. ".tags")
os.remove(name .. ".mk")
os.remove(name .. "_wsp.mk")
os.remove(name .. ".list")
os.remove(name .. ".out")
end
end
}

View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<CodeLite_Project Name="<%= premake.esc(this.name) %>">
<% premake.walksources(this, this.files, _CODELITE.files) %>
<Settings Type="<%= _CODELITE.kind(this.kind) %>">
<% for cfg in premake.eachconfig(this) do %>
<% local target = premake.gettargetfile(cfg, "target", nil, true) %>
<Configuration Name="<%= premake.esc(cfg.name) %>" CompilerType="gnu <%= iif(cfg.language == "C", "gcc", "g++") %>" DebuggerType="GNU gdb debugger" Type="<%= _CODELITE.kind(cfg.kind) %>">
<General OutputFile="<%= premake.esc(target) %>" IntermediateDirectory="<%= premake.esc(premake.getobjdir(cfg)) %>" Command="./<%= path.getname(target) %>" CommandArguments="" WorkingDirectory="<%= path.getdirectory(target) %>" PauseExecWhenProcTerminates="<%= iif(cfg.kind == "WindowedApp", "no", "yes") %>"/>
<Compiler Required="yes" Options="<%= table.concat(table.join(premake.tools.gcc.getcflags(cfg), premake.tools.gcc.getcxxflags(cfg), cfg.buildoptions), ";") %>">
<% for _,v in ipairs(cfg.includedirs) do %>
<IncludePath Value="<%= premake.esc(v) %>"/>
<% end %>
<% for _,v in ipairs(cfg.defines) do %>
<Preprocessor Value="<%= premake.esc(v) %>"/>
<% end %>
</Compiler>
<Linker Required="yes" Options="<%= table.concat(table.join(premake.tools.gcc.getldflags(cfg), cfg.linkoptions), ";") %>">
<% local dirs, links = premake.tools.gcc.getlinks(cfg) %>
<% for _,v in ipairs(dirs) do %>
<LibraryPath Value="<%= premake.esc(v) %>" />
<% end %>
<% for _,v in ipairs(links) do %>
<Library Value="<%= premake.esc(v) %>" />
<% end %>
</Linker>
<% if premake.findfile(cfg, ".rc") then %>
<ResourceCompiler Required="yes" Options="<%= table.implode(table.join(cfg.defines,cfg.resdefines), "-D", ";", "") %><%= table.concat(cfg.resoptions, ";") %>">
<% for _,v in ipairs(cfg.includedirs) do %>
<IncludePath Value="<%= premake.esc(v) %>"/>
<% end %>
<% for _,v in ipairs(cfg.resincludedirs) do %>
<IncludePath Value="<%= premake.esc(v) %>"/>
<% end %>
</ResourceCompiler>
<% else %>
<ResourceCompiler Required="no" Options=""/>
<% end %>
<% if #cfg.prebuildcommands > 0 then %>
<PreBuild>
<% for _,v in ipairs(cfg.prebuildcommands) do %>
<Command Enabled="yes"><%= premake.esc(v) %></Command>
<% end %>
</PreBuild>
<% end %>
<% if #cfg.postbuildcommands > 0 then %>
<PostBuild>
<% for _,v in ipairs(cfg.postbuildcommands) do %>
<Command Enabled="yes"><%= premake.esc(v) %></Command>
<% end %>
</PostBuild>
<% end %>
<CustomBuild Enabled="no">
<CleanCommand></CleanCommand>
<BuildCommand></BuildCommand>
<SingleFileCommand></SingleFileCommand>
<MakefileGenerationCommand></MakefileGenerationCommand>
<ThirdPartyToolName>None</ThirdPartyToolName>
<WorkingDirectory></WorkingDirectory>
</CustomBuild>
<AdditionalRules>
<CustomPostBuild></CustomPostBuild>
<CustomPreBuild></CustomPreBuild>
</AdditionalRules>
</Configuration>
<%end %>
</Settings>
<% for _,cfgname in ipairs(this.configurations) do %>
<Dependencies name="<%= cfgname %>">
<% for _,dep in ipairs(premake.getdependencies(this)) do %>
<Project Name="<%= dep.name %>"/>
<% end %>
</Dependencies>
<% end %>
</CodeLite_Project>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<CodeLite_Workspace Name="<%= premake.esc(this.name) %>" Database="./<%= premake.esc(this.name) %>.tags">
<% for i,prj in ipairs(this.projects) do %>
<Project Name="<%= premake.esc(prj.name) %>" Path="<%= path.join(path.getrelative(this.location, prj.location), prj.name) %>.project" Active="<%= iif(i==1, "Yes", "No") %>" />
<% end %>
<BuildMatrix>
<% for _, cfgname in ipairs(this.configurations) do %>
<WorkspaceConfiguration Name="<%= cfgname %>" Selected="yes">
<% for _,prj in ipairs(this.projects) do %>
<Project Name="<%= prj.name %>" ConfigName="<%= cfgname %>"/>
<% end %>
</WorkspaceConfiguration>
<% end %>
</BuildMatrix>
</CodeLite_Workspace>

View File

@ -13,12 +13,11 @@
premake.tools.gcc = { }
--
-- CFLAGS
--
premake.tools.gcc.cflags =
--
-- Translation of Premake flags into GCC flags
local cflags =
{
ExtraWarnings = "-Wall",
FatalWarning = "-Werror",
@ -29,8 +28,21 @@
Symbols = "-g",
}
local cxxflags =
{
NoExceptions = "--no-exceptions",
NoRTTI = "--no-rtti",
}
--
-- CFLAGS
--
function premake.tools.gcc.make_cflags(cfg)
local flags = table.translate(cfg.flags, premake.tools.gcc.cflags)
local flags = table.translate(cfg.flags, cflags)
if (cfg.kind == "SharedLib" and not os.is("windows")) then
table.insert(flags, "-fPIC")
@ -40,6 +52,64 @@
end
--
-- Returns a list of compiler flags, based on the supplied configuration.
--
function premake.tools.gcc.getcflags(cfg)
local result = table.translate(cfg.flags, cflags)
if (cfg.kind == "SharedLib" and not os.is("windows")) then
table.insert(flags, "-fPIC")
end
return result
end
function premake.tools.gcc.getcxxflags(cfg)
local result = table.translate(cfg.flags, cxxflags)
return result
end
--
-- Returns a list of linker flags, based on the supplied configuration.
--
function premake.tools.gcc.getldflags(cfg)
local result = { }
if (cfg.kind == "SharedLib") then
if (not os.is("macosx")) then
table.insert(result, "-shared")
end
-- create import library for DLLs under Windows
if (os.is("windows") and not cfg.flags.NoImportLib) then
table.insert(result, '-Wl,--out-implib="' .. premake.gettargetfile(cfg, "implib", "linux") .. '"')
end
end
if (os.is("windows") and cfg.kind == "WindowedApp") then
table.insert(result, "-mwindows")
end
-- OS X has a bug, see http://lists.apple.com/archives/Darwin-dev/2006/Sep/msg00084.html
if (not cfg.flags.Symbols) then
if (os.is("macosx")) then
table.insert(result, "-Wl,-x")
else
table.insert(result, "-s")
end
end
if (os.is("macosx") and cfg.flags.Dylib) then
table.insert(result, "-dynamiclib -flat_namespace")
end
return result
end
--
-- Process the list of libraries for a configuration. Returns a list of linker
-- search paths, followed by a list of link names. Not all compilers need to
@ -82,14 +152,8 @@
-- CXXFLAGS
--
premake.tools.gcc.cxxflags =
{
NoExceptions = "--no-exceptions",
NoRTTI = "--no-rtti",
}
function premake.tools.gcc.make_cxxflags(cfg)
local flags = table.translate(cfg.flags, premake.tools.gcc.cxxflags)
local flags = table.translate(cfg.flags, cxxflags)
return table.concat(flags, " ")
end

View File

@ -3,23 +3,6 @@
-- Additions to Lua's built-in table functions.
-- Copyright (c) 2002-2008 Jason Perkins and the Premake project
--
--
-- Adds the values from one array to the end of another and
-- returns the result.
--
function table.join(first, second)
local result = { }
for _,v in ipairs(first) do
table.insert(result, v)
end
for _,v in ipairs(second) do
table.insert(result, v)
end
return result
end
--
@ -67,6 +50,22 @@
end
--
-- Adds the values from one array to the end of another and
-- returns the result.
--
function table.join(...)
local result = { }
for _,t in ipairs(arg) do
for _,v in ipairs(t) do
table.insert(result, v)
end
end
return result
end
--
-- Translates the values contained in array, using the specified
-- translation table, and returns the results in a new array.
@ -75,7 +74,9 @@
function table.translate(arr, translation)
local result = { }
for _, value in ipairs(arr) do
table.insert(result, translation[value])
if (translation[value]) then
table.insert(result, translation[value])
end
end
return result
end

File diff suppressed because one or more lines are too long