added cmake support to genie (nw)

This commit is contained in:
Miodrag Milanovic 2015-11-08 14:50:45 +01:00
parent 033227778e
commit 49fbdf3497
3 changed files with 105 additions and 0 deletions

View file

@ -0,0 +1,31 @@
--
-- _cmake.lua
-- Define the CMake action(s).
-- Copyright (c) 2015 Miodrag Milanovic
--
premake.cmake = { }
newaction {
trigger = "cmake",
shortname = "CMake",
description = "Generate CMake project files",
valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib" },
valid_languages = { "C", "C++" },
valid_tools = {
cc = { "gcc" },
},
onsolution = function(sln)
premake.generate(sln, "CMakeLists.txt", premake.cmake.workspace)
end,
onproject = function(prj)
premake.generate(prj, "%%/CMakeLists.txt", premake.cmake.project)
end,
oncleansolution = function(sln)
premake.clean.file(sln, "CMakeLists.txt")
end,
oncleanproject = function(prj)
premake.clean.file(prj, "%%/CMakeLists.txt")
end
}

View file

@ -0,0 +1,60 @@
--
-- _cmake.lua
-- Define the CMake action(s).
-- Copyright (c) 2015 Miodrag Milanovic
--
local cmake = premake.cmake
local tree = premake.tree
function cmake.files(prj)
local tr = premake.project.buildsourcetree(prj)
tree.traverse(tr, {
onbranchenter = function(node, depth)
end,
onbranchexit = function(node, depth)
end,
onleaf = function(node, depth)
_p(1, '../%s', node.cfg.name)
end,
}, true, 1)
end
function premake.cmake.project(prj)
io.indent = " "
_p('cmake_minimum_required(VERSION 2.8.4)')
_p('')
_p('project(%s)', premake.esc(prj.name))
_p('set(')
_p('source_list')
cmake.files(prj)
_p(')')
local platforms = premake.filterplatforms(prj.solution, premake[_OPTIONS.cc].platforms, "Native")
for i = #platforms, 1, -1 do
if premake.platforms[platforms[i]].iscrosscompiler then
table.remove(platforms, i)
end
end
for _, platform in ipairs(platforms) do
for cfg in premake.eachconfig(prj, platform) do
for _,v in ipairs(cfg.includedirs) do
_p('include_directories(../%s)', premake.esc(v))
end
end
end
if (prj.kind=='StaticLib') then
_p('add_library(%s STATIC ${source_list})',premake.esc(prj.name))
end
if (prj.kind=='SharedLib') then
_p('add_library(%s SHARED ${source_list})',premake.esc(prj.name))
end
if (prj.kind=='ConsoleApp') then
_p('add_executable(%s ${source_list})',premake.esc(prj.name))
end
if (prj.kind=='WindowedApp') then
_p('add_executable(%s ${source_list})',premake.esc(prj.name))
end
end

View file

@ -0,0 +1,14 @@
--
-- _cmake.lua
-- Define the CMake action(s).
-- Copyright (c) 2015 Miodrag Milanovic
--
function premake.cmake.workspace(sln)
_p('cmake_minimum_required(VERSION 2.8.4)')
_p('')
for i,prj in ipairs(sln.projects) do
local name = premake.esc(prj.name)
_p('add_subdirectory(%s)', name)
end
end