diff options
-rw-r--r-- | 3rdparty/genie/src/actions/cmake/_cmake.lua | 31 | ||||
-rw-r--r-- | 3rdparty/genie/src/actions/cmake/cmake_project.lua | 60 | ||||
-rw-r--r-- | 3rdparty/genie/src/actions/cmake/cmake_workspace.lua | 14 |
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 |