summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2016-05-05 10:31:03 +0800
committerruki <[email protected]>2016-05-05 10:31:03 +0800
commitc5818eef6be6d364bacfc32f7ec71154f71b6f96 (patch)
tree83e55f2b694a23686a2082fab47254134371a219
parentc0adb9ffb3e004a5d488c77ef1529fd97ad0e2dc (diff)
remove makefile from config action
-rwxr-xr-xxmake/actions/build/builder.lua44
-rwxr-xr-xxmake/actions/build/main.lua11
-rwxr-xr-xxmake/actions/config/main.lua3
-rwxr-xr-xxmake/actions/config/makefile.lua241
4 files changed, 51 insertions, 248 deletions
diff --git a/xmake/actions/build/builder.lua b/xmake/actions/build/builder.lua
new file mode 100755
index 000000000..fc64e8e1b
--- /dev/null
+++ b/xmake/actions/build/builder.lua
@@ -0,0 +1,44 @@
+--!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 build.lua
+--
+
+-- imports
+import("core.base.option")
+import("core.project.task")
+import("core.project.config")
+import("core.project.project")
+import("core.project.cache")
+import("core.tool.tool")
+
+-- make target
+function make(targetname)
+
+end
+
+-- make target from makefile
+function make_from_makefile(targetname)
+
+ -- make makefile
+ task.run("makefile", {output = path.join(config.get("buildir"), "makefile")})
+
+ -- run make
+ tool.run("make", path.join(config.get("buildir"), "makefile"), targetname, option.get("jobs"))
+end
diff --git a/xmake/actions/build/main.lua b/xmake/actions/build/main.lua
index 62ced2b93..a08794005 100755
--- a/xmake/actions/build/main.lua
+++ b/xmake/actions/build/main.lua
@@ -24,11 +24,11 @@
import("core.base.option")
import("core.project.task")
import("core.project.config")
-import("core.project.global")
import("core.project.project")
import("core.project.cache")
import("core.platform.platform")
import("core.tool.tool")
+import("builder")
-- project files(xmake.lua) have been changed?
function _project_changed(targetname)
@@ -115,9 +115,12 @@ function main()
try
{
function ()
-
- -- run make
- tool.run("make", path.join(config.get("buildir"), "makefile"), targetname, option.get("jobs"))
+
+ -- make target
+-- builder.make(targetname)
+
+ -- make target from makefile
+ builder.make_from_makefile(targetname)
end,
diff --git a/xmake/actions/config/main.lua b/xmake/actions/config/main.lua
index 6f427b08e..8e335f887 100755
--- a/xmake/actions/config/main.lua
+++ b/xmake/actions/config/main.lua
@@ -120,9 +120,6 @@ function main()
-- make the config.h
config_h.make()
- -- make makefile
- makefile.make()
-
-- dump it
config.dump()
diff --git a/xmake/actions/config/makefile.lua b/xmake/actions/config/makefile.lua
deleted file mode 100755
index fa7525a79..000000000
--- a/xmake/actions/config/makefile.lua
+++ /dev/null
@@ -1,241 +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.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)
-
- -- make command
- local cmd = format("xmake l -P %s -f %s dispatcher ex extract %s %s > %s 2>&1", xmake._PROJECT_DIR, xmake._PROJECT_FILE, srcmakefile:encode(), objmakefile:encode(), makefile._LOGFILE)
-
- -- 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@xmake l rmdir %s\n", path.directory(objfile))
- makefile:print("\t@%s", cmd)
-
- -- make tail
- makefile:print("")
-
-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 compiler = target:compiler(srcfile)
- local cmd = compiler:command(target, srcfile, objfile, _logfile())
- if ccache then
- cmd = ccache:append(cmd, " ")
- 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\"", cmd:encode())
- makefile:print("\t@xmake l mkdir %s", path.directory(objfile))
- makefile:print("\t@%s", cmd)
-
- -- 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 linker = target:linker()
- local cmd = linker:command(target, objfiles, targetfile, _logfile())
-
- -- make the verbose info
- local verbose = cmd:encode()
- if verbose and #verbose > 256 then
- verbose = linker:command(target, target.filename("*", "object"), targetfile)
- verbose = verbose:encode()
- end
-
- -- make body
- makefile:print("\t@echo linking.$(mode) %s", path.filename(targetfile))
- makefile:print("\t@xmake l %$(VERBOSE) verbose \"%s\"", verbose)
- makefile:print("\t@xmake l mkdir %s", path.directory(targetfile))
- makefile:print("\t@%s", cmd)
-
- -- 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()
-
- -- enter project directory
- os.cd(project.directory())
-
- -- remove the log makefile first
- os.rm(_logfile())
-
- -- open the makefile
- local makefile = io.open("$(buildir)/makefile", "w")
-
- -- make all
- _make_all(makefile)
-
- -- close the makefile
- makefile:close()
-
- -- leave project directory
- os.cd("-")
-
-end