summaryrefslogtreecommitdiff
path: root/xmake/plugins/makefile
diff options
context:
space:
mode:
authorruki <[email protected]>2016-05-31 20:45:24 +0800
committerruki <[email protected]>2016-05-31 20:45:24 +0800
commit5b2e0333389158094a2a8bb796e13f99fac422e7 (patch)
treec5d931b4b6886be3e1c77d2c4b8f5113768629ae /xmake/plugins/makefile
parent3dc94888255e69d1fea8fc7079daac3054f9b76a (diff)
add project plugin
Diffstat (limited to 'xmake/plugins/makefile')
-rwxr-xr-xxmake/plugins/makefile/main.lua54
-rwxr-xr-xxmake/plugins/makefile/makefile.lua216
-rwxr-xr-xxmake/plugins/makefile/xmake.lua48
3 files changed, 0 insertions, 318 deletions
diff --git a/xmake/plugins/makefile/main.lua b/xmake/plugins/makefile/main.lua
deleted file mode 100755
index 7f0d330f8..000000000
--- a/xmake/plugins/makefile/main.lua
+++ /dev/null
@@ -1,54 +0,0 @@
---!The Automatic Cross-platform Build Tool
---
--- XMake is free software; you can redistribute it and/or modify
--- it under the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
---
--- XMake is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU Lesser General Public License for more details.
---
--- You should have received a copy of the GNU Lesser General Public License
--- along with XMake;
--- If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
---
--- Copyright (C) 2015 - 2016, ruki All rights reserved.
---
--- @author ruki
--- @file main.lua
---
-
--- imports
-import("core.base.option")
-import("core.project.config")
-import("core.project.global")
-import("core.project.project")
-import("core.platform.platform")
-import("makefile")
-
--- main
-function main()
-
- -- check xmake.lua
- if not os.isfile(project.file()) then
- raise("xmake.lua not found!")
- end
-
- -- load project configure
- config.load()
-
- -- load platform
- platform.load(config.plat())
-
- -- load project
- project.load()
-
- -- make makefile
- makefile.make(option.get("output"))
-
- -- trace
- print("create ok!")
-
-end
diff --git a/xmake/plugins/makefile/makefile.lua b/xmake/plugins/makefile/makefile.lua
deleted file mode 100755
index 2fe7ffd93..000000000
--- a/xmake/plugins/makefile/makefile.lua
+++ /dev/null
@@ -1,216 +0,0 @@
---!The Automatic Cross-platform Build Tool
---
--- XMake is free software; you can redistribute it and/or modify
--- it under the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
---
--- XMake is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU Lesser General Public License for more details.
---
--- You should have received a copy of the GNU Lesser General Public License
--- along with XMake;
--- If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
---
--- Copyright (C) 2015 - 2016, ruki All rights reserved.
---
--- @author ruki
--- @file makefile.lua
---
-
--- imports
-import("core.tool.tool")
-import("core.tool.linker")
-import("core.tool.compiler")
-import("core.project.project")
-
--- get log makefile
-function _logfile()
-
- -- get it
- return vformat("$(buildir)/.build.log")
-end
-
--- make the object for the *.[o|obj] source file
-function _make_object_for_object(makefile, target, srcfile, objfile)
-
- -- make command
- local cmd = format("xmake l cp %s %s", srcfile, objfile)
-
- -- make head
- makefile:printf("%s:", objfile)
-
- -- make dependence
- makefile:print(" %s", srcfile)
-
- -- make body
- makefile:print("\t@echo inserting.$(mode) %s", srcfile)
- makefile:print("\t@xmake l %$(VERBOSE) verbose \"%s\"", cmd:encode())
- makefile:print("\t@%s", cmd)
-
- -- make tail
- makefile:print("")
-
-end
-
--- make the object for the *.[a|lib] source file
-function _make_object_for_static(makefile, target, srcfile, objfile)
-
- -- not supported
- raise("source file: %s not supported!", srcfile)
-end
-
--- make the object
-function _make_object(makefile, target, srcfile, objfile)
-
- -- get the source file type
- local filetype = path.extension(srcfile):lower()
-
- -- make the object for the *.o/obj source makefile
- if filetype == ".o" or filetype == ".obj" then
- return _make_object_for_object(makefile, target, srcfile, objfile)
- -- make the object for the *.[a|lib] source file
- elseif filetype == ".a" or filetype == ".lib" then
- return _make_object_for_static(makefile, target, srcfile, objfile)
- end
-
- -- make command
- local ccache = tool.shellname("ccache")
- local command = compiler.command(target, srcfile, objfile)
- if ccache then
- command = ccache:append(command, " ")
- end
-
- -- make head
- makefile:printf("%s:", objfile)
-
- -- make dependence
- makefile:print(" %s", srcfile)
-
- -- make body
- makefile:print("\t@echo %scompiling.$(mode) %s", ifelse(ccache, "ccache ", ""), srcfile)
- makefile:print("\t@xmake l %$(VERBOSE) verbose \"%s\"", command:encode())
- makefile:print("\t@xmake l mkdir %s", path.directory(objfile))
- makefile:print("\t@%s > %s 2>&1", command, _logfile())
-
- -- make tail
- makefile:print("")
-end
-
--- make all objects of the given target
-function _make_objects(makefile, target, srcfiles, objfiles)
-
- -- make all objects
- local i = 1
- for _, objfile in ipairs(objfiles) do
-
- -- make object
- _make_object(makefile, target, srcfiles[i], objfile)
-
- -- next
- i = i + 1
- end
-
-end
-
--- make target
-function _make_target(makefile, target)
-
- -- make head
- local targetfile = target:targetfile()
- makefile:print("%s: %s", target:name(), targetfile)
- makefile:printf("%s:", targetfile)
-
- -- make dependence for the dependent targets
- for _, dep in ipairs(target:get("deps")) do
-
- -- add dependence
- makefile:write(" " .. project.target(dep):targetfile())
- end
-
- -- make dependence for objects
- local objfiles = target:objectfiles()
- for _, objfile in ipairs(objfiles) do
- makefile:write(" " .. objfile)
- end
-
- -- make dependence end
- makefile:print("")
-
- -- make the command
- local command = linker.command(target)
-
- -- make body
- makefile:print("\t@echo linking.$(mode) %s", path.filename(targetfile))
- makefile:print("\t@xmake l %$(VERBOSE) verbose \"%s\"", command:encode())
- makefile:print("\t@xmake l mkdir %s", path.directory(targetfile))
- makefile:print("\t@%s > %s 2>&1", command, _logfile())
-
- -- make headers
- local srcheaders, dstheaders = target:headerfiles()
- if srcheaders and dstheaders then
- local i = 1
- for _, srcheader in ipairs(srcheaders) do
- local dstheader = dstheaders[i]
- if dstheader then
- makefile:print("\t@xmake l cp %s %s", srcheader, dstheader)
- end
- i = i + 1
- end
- end
-
- -- make tail
- makefile:print("")
-
- -- make objects for this target
- _make_objects(makefile, target, target:sourcefiles(), objfiles)
-end
-
--- make all
-function _make_all(makefile)
-
- -- make all first
- local all = ""
- for targetname, _ in pairs(project.targets()) do
- -- append the target name to all
- all = all .. " " .. targetname
- end
- makefile:printf("all: %s\n\n", all)
- makefile:printf(".PHONY: all %s\n\n", all)
-
- -- make it for all targets
- for _, target in pairs(project.targets()) do
-
- -- make target
- _make_target(makefile, target)
-
- -- append the target name to all
- all = all .. " " .. target:name()
- end
-
-end
-
--- make
-function make(outputfile)
-
- -- enter project directory
- os.cd(project.directory())
-
- -- remove the log makefile first
- os.rm(_logfile())
-
- -- open the makefile
- local makefile = io.open(outputfile, "w")
-
- -- make all
- _make_all(makefile)
-
- -- close the makefile
- makefile:close()
-
- -- leave project directory
- os.cd("-")
-
-end
diff --git a/xmake/plugins/makefile/xmake.lua b/xmake/plugins/makefile/xmake.lua
deleted file mode 100755
index a447057e6..000000000
--- a/xmake/plugins/makefile/xmake.lua
+++ /dev/null
@@ -1,48 +0,0 @@
---!The Automatic Cross-platform Build Tool
---
--- XMake is free software; you can redistribute it and/or modify
--- it under the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
---
--- XMake is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU Lesser General Public License for more details.
---
--- You should have received a copy of the GNU Lesser General Public License
--- along with XMake;
--- If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
---
--- Copyright (C) 2015 - 2016, ruki All rights reserved.
---
--- @author ruki
--- @file xmake.lua
---
-
--- define task
-task("makefile")
-
- -- set category
- set_category("plugin")
-
- -- on run
- on_run("main")
-
- -- set menu
- set_menu({
- -- usage
- usage = "xmake makefile [options] [target]"
-
- -- description
- , description = "Create the project makefile."
-
- -- options
- , options =
- {
- {'o', "output", "kv", "makefile", "Set the output file." }
- }
- })
-
-
-