diff options
| author | ruki <[email protected]> | 2016-05-05 10:31:03 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2016-05-05 10:31:03 +0800 |
| commit | c5818eef6be6d364bacfc32f7ec71154f71b6f96 (patch) | |
| tree | 83e55f2b694a23686a2082fab47254134371a219 | |
| parent | c0adb9ffb3e004a5d488c77ef1529fd97ad0e2dc (diff) | |
remove makefile from config action
| -rwxr-xr-x | xmake/actions/build/builder.lua | 44 | ||||
| -rwxr-xr-x | xmake/actions/build/main.lua | 11 | ||||
| -rwxr-xr-x | xmake/actions/config/main.lua | 3 | ||||
| -rwxr-xr-x | xmake/actions/config/makefile.lua | 241 |
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 |
