summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/genie
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2015-11-08 14:50:45 +0100
committer Miodrag Milanovic <mmicko@gmail.com>2015-11-08 14:50:45 +0100
commit49fbdf34972aa8d949f032bce915710ce5dd4be4 (patch)
treee16881f64d934d0fd80cacb0f2ee7aaa45276782 /3rdparty/genie
parent033227778e267fc3f8b6cd511684315cea9ffc64 (diff)
added cmake support to genie (nw)
Diffstat (limited to '3rdparty/genie')
-rw-r--r--3rdparty/genie/src/actions/cmake/_cmake.lua31
-rw-r--r--3rdparty/genie/src/actions/cmake/cmake_project.lua60
-rw-r--r--3rdparty/genie/src/actions/cmake/cmake_workspace.lua14
3 files changed, 105 insertions, 0 deletions
diff --git a/3rdparty/genie/src/actions/cmake/_cmake.lua b/3rdparty/genie/src/actions/cmake/_cmake.lua
new file mode 100644
index 00000000000..cfae85ba39e
--- /dev/null
+++ b/3rdparty/genie/src/actions/cmake/_cmake.lua
@@ -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
+}
+
diff --git a/3rdparty/genie/src/actions/cmake/cmake_project.lua b/3rdparty/genie/src/actions/cmake/cmake_project.lua
new file mode 100644
index 00000000000..dc305930cd8
--- /dev/null
+++ b/3rdparty/genie/src/actions/cmake/cmake_project.lua
@@ -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
diff --git a/3rdparty/genie/src/actions/cmake/cmake_workspace.lua b/3rdparty/genie/src/actions/cmake/cmake_workspace.lua
new file mode 100644
index 00000000000..3e0c526ff4b
--- /dev/null
+++ b/3rdparty/genie/src/actions/cmake/cmake_workspace.lua
@@ -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