summaryrefslogtreecommitdiff
path: root/xmake/plugins/project/makefile.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2016-08-06 13:02:28 +0800
committerruki <[email protected]>2016-08-06 13:02:28 +0800
commitce3b9ada065d09d2d771061b20f07fc1d661c648 (patch)
tree9add68684c5e7383f69db71d1903ee9352dd7537 /xmake/plugins/project/makefile.lua
parente4cb396b6c4b33932d5f953b9cf20fbf22231ce4 (diff)
add vs2005 and vs2008 empty plugin
Diffstat (limited to 'xmake/plugins/project/makefile.lua')
-rwxr-xr-xxmake/plugins/project/makefile.lua239
1 files changed, 0 insertions, 239 deletions
diff --git a/xmake/plugins/project/makefile.lua b/xmake/plugins/project/makefile.lua
deleted file mode 100755
index 1068d49a9..000000000
--- a/xmake/plugins/project/makefile.lua
+++ /dev/null
@@ -1,239 +0,0 @@
---!The Make-like Build Utility based on Lua
---
--- 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.archiver")
-import("core.tool.compiler")
-import("core.project.config")
-import("core.project.project")
-
--- get log makefile
-function _logfile()
-
- -- get it
- return vformat("$(buildir)/.build.log")
-end
-
--- mkdir directory
-function _mkdir(makefile, dir)
-
- if config.get("plat") == "windows" then
- makefile:print("\t-@mkdir %s > /null 2>&1", dir)
- else
- makefile:print("\t@mkdir -p %s", dir)
- end
-end
-
--- copy file
-function _cp(makefile, srcfile, dstfile)
-
- -- ensure the destinate directory
- _mkdir(makefile, path.directory(dstfile))
-
- -- copy file
- if config.get("plat") == "windows" then
- makefile:print("\t@copy /Y %s %s > /null 2>&1", srcfile, dstfile)
- else
- makefile:print("\t@cp %s %s", srcfile, dstfile)
- end
-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@%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 command = compiler.compcmd(srcfile, objfile, target)
-
- -- make head
- makefile:printf("%s:", objfile)
-
- -- make dependence
- makefile:print(" %s", srcfile)
-
- -- make body
- makefile:print("\t@echo %scompiling.$(mode) %s", ifelse(config.get("ccache"), "ccache ", ""), srcfile)
- _mkdir(makefile, 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 = nil
- if target:get("kind") == "static" then
- command = archiver.archivecmd(target:objectfiles(), targetfile, target)
- else
- command = linker.linkcmd(target:objectfiles(), targetfile, target)
- end
-
- -- make body
- makefile:print("\t@echo linking.$(mode) %s", path.filename(targetfile))
- _mkdir(makefile, 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
- _cp(makefile, 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
- local olddir = 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(olddir)
-end