diff options
| author | ruki <[email protected]> | 2015-06-02 15:39:44 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2015-06-02 15:39:44 +0800 |
| commit | f639faef588a95b28ec02c781dee2a581f7a7992 (patch) | |
| tree | fb50924f053cf26b9ad53c46c440aceeb82f8e45 /xmake/scripts | |
| parent | 6ed13d09ec37896b0176e90ddaa99c90ecaccd1d (diff) | |
impl rebuild and update
Diffstat (limited to 'xmake/scripts')
| -rw-r--r-- | xmake/scripts/action/_build.lua | 19 | ||||
| -rw-r--r-- | xmake/scripts/action/_clean.lua | 105 | ||||
| -rw-r--r-- | xmake/scripts/base/clean.lua | 138 | ||||
| -rw-r--r-- | xmake/scripts/base/config.lua | 2 | ||||
| -rw-r--r-- | xmake/scripts/platform/iphoneos/_iphoneos.lua | 13 | ||||
| -rw-r--r-- | xmake/scripts/platform/iphonesimulator/_iphonesimulator.lua | 15 |
6 files changed, 185 insertions, 107 deletions
diff --git a/xmake/scripts/action/_build.lua b/xmake/scripts/action/_build.lua index cd80616f1..1a821e406 100644 --- a/xmake/scripts/action/_build.lua +++ b/xmake/scripts/action/_build.lua @@ -25,19 +25,28 @@ local _build = _build or {} -- load modules local utils = require("base/utils") +local clean = require("base/clean") local config = require("base/config") local makefile = require("base/makefile") - + -- done the given config function _build.done() - -- TODO - -- rebuild, update + -- the target name + local target_name = config.get("target") + + -- rebuild it? + if config.get("rebuild") then + clean.remove(target_name) + -- update it? + elseif config.get("update") then + clean.remove(target_name, true) + end -- build target for makefile - if not makefile.build(config.get("target")) then + if not makefile.build(target_name) then -- error - utils.error("build target: %s failed!", config.get("target")) + utils.error("build target: %s failed!", target_name) return false end diff --git a/xmake/scripts/action/_clean.lua b/xmake/scripts/action/_clean.lua index 8c00e7b88..8f026c057 100644 --- a/xmake/scripts/action/_clean.lua +++ b/xmake/scripts/action/_clean.lua @@ -24,112 +24,15 @@ local _clean = _clean or {} -- load modules -local os = require("base/os") -local rule = require("base/rule") -local utils = require("base/utils") +local clean = require("base/clean") local config = require("base/config") -local project = require("base/project") - --- remove the given files or directories -function _clean._remove(filedirs) - - -- check - assert(filedirs) - - -- wrap it first - filedirs = utils.wrap(filedirs) - for _, filedir in ipairs(filedirs) do - - -- exists? remove it - if os.exists(filedir) then - -- remove it - local ok, errors = os.rm(filedir) - if not ok then - -- error - utils.error(errors) - return false - end - end - end - - -- ok - return true -end - --- remove the given target_name -function _clean._remove_target(target_name, target, buildir) - - -- check - assert(target_name and target) - - -- remove the target file - if not _clean._remove(rule.targetfile(target_name, target, buildir)) then - return false - end - - -- remove the object files - if not _clean._remove(rule.objectfiles(target_name, target, rule.sourcefiles(target), buildir)) then - return false - end - - -- ok - return true -end - --- remove the given target and all dependent targets -function _clean._remove_target_and_deps(target_name, buildir) - - -- the targets - local targets = project.targets() - assert(targets) - - -- the target - local target = targets[target_name] - assert(target) - - -- remove the target - if not _clean._remove_target(target_name, target, buildir) then - return false - end - - -- exists the dependent targets? - if target.deps then - local deps = utils.wrap(target.deps) - for _, dep in ipairs(deps) do - if not _clean._remove_target_and_deps(dep, buildir) then return false end - end - end - - -- ok - return true -end -- done the given config function _clean.done() - -- the options - local options = xmake._OPTIONS - assert(options) - - -- the build directory - local buildir = config.get("buildir") - assert(buildir) - - -- the target name - local target_name = options.target - if target_name and target_name ~= "all" then - -- remove target - if not _clean._remove_target_and_deps(target_name, buildir) then return false end - else - - -- the targets - local targets = project.targets() - assert(targets) - - -- remove targets - for target_name, target in pairs(targets) do - if not _clean._remove_target(target_name, target, buildir) then return false end - end + -- clean the current target + if not clean.remove(config.get("target")) then + return false end -- trace diff --git a/xmake/scripts/base/clean.lua b/xmake/scripts/base/clean.lua new file mode 100644 index 000000000..3426dc41e --- /dev/null +++ b/xmake/scripts/base/clean.lua @@ -0,0 +1,138 @@ +--!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) 2009 - 2015, ruki All rights reserved. +-- +-- @author ruki +-- @file clean.lua +-- + +-- define module: clean +local clean = clean or {} + +-- load modules +local os = require("base/os") +local rule = require("base/rule") +local utils = require("base/utils") +local config = require("base/config") +local project = require("base/project") + +-- remove the given files or directories +function clean._remove(filedirs) + + -- check + assert(filedirs) + + -- wrap it first + filedirs = utils.wrap(filedirs) + for _, filedir in ipairs(filedirs) do + + -- exists? remove it + if os.exists(filedir) then + -- remove it + local ok, errors = os.rm(filedir) + if not ok then + -- error + utils.error(errors) + return false + end + end + end + + -- ok + return true +end + +-- remove the given target_name +function clean._remove_target(target_name, target, target_only, buildir) + + -- check + assert(target_name and target) + + -- remove the target file + if not clean._remove(rule.targetfile(target_name, target, buildir)) then + return false + end + + -- not only remove target file? + if not target_only then + -- remove the object files + if not clean._remove(rule.objectfiles(target_name, target, rule.sourcefiles(target), buildir)) then + return false + end + end + + -- ok + return true +end + +-- remove the given target and all dependent targets +function clean._remove_target_and_deps(target_name, target_only, buildir) + + -- the targets + local targets = project.targets() + assert(targets) + + -- the target + local target = targets[target_name] + assert(target) + + -- remove the target + if not clean._remove_target(target_name, target, target_only, buildir) then + return false + end + + -- exists the dependent targets? + if target.deps then + local deps = utils.wrap(target.deps) + for _, dep in ipairs(deps) do + if not clean._remove_target_and_deps(dep, target_only, buildir) then return false end + end + end + + -- ok + return true +end + +-- remove the target and object files for the given target +function clean.remove(target_name, target_only) + + -- the build directory + local buildir = config.get("buildir") + assert(buildir) + + -- the target name + if target_name and target_name ~= "all" then + -- remove target + if not clean._remove_target_and_deps(target_name, target_only, buildir) then return false end + else + + -- the targets + local targets = project.targets() + assert(targets) + + -- remove targets + for target_name, target in pairs(targets) do + if not clean._remove_target(target_name, target, target_only, buildir) then return false end + end + end + + -- ok + return true +end + +-- return module: clean +return clean diff --git a/xmake/scripts/base/config.lua b/xmake/scripts/base/config.lua index 6eb0b242c..877f7d026 100644 --- a/xmake/scripts/base/config.lua +++ b/xmake/scripts/base/config.lua @@ -300,11 +300,13 @@ function config.loadxconf() -- clear configs if the host has been changed local target = config._target() if target and target.host ~= xmake._HOST then + -- clear configs config._CONFIGS = {} end -- clear configs if the plat has been changed if target and target.plat and options.plat and target.plat ~= options.plat then + -- clear configs config._CONFIGS = {} end end diff --git a/xmake/scripts/platform/iphoneos/_iphoneos.lua b/xmake/scripts/platform/iphoneos/_iphoneos.lua index 9242da6da..e35d17bc9 100644 --- a/xmake/scripts/platform/iphoneos/_iphoneos.lua +++ b/xmake/scripts/platform/iphoneos/_iphoneos.lua @@ -44,6 +44,19 @@ function _iphoneos.make(configs) configs.format.object = {"", ".o"} configs.format.shared = {"lib", ".dylib"} + -- init the compiler + configs.compiler = {} + configs.compiler.cc = config.get("cc") or "xcrun -sdk iphoneos clang" + configs.compiler.cxx = config.get("cxx") or "xcrun -sdk iphoneos clang++" + configs.compiler.mm = config.get("mm") or configs.compiler.cc + configs.compiler.mxx = config.get("mxx") or configs.compiler.cxx + + -- init the linker + configs.linker = {} + configs.linker.binary = config.get("ld") or "xcrun -sdk iphoneos clang++" + configs.linker.static = config.get("ar") or "xcrun -sdk iphoneos ar" + configs.linker.shared = config.get("sh") or "xcrun -sdk iphoneos clang++" + -- init xcode sdk directory configs.xcode_sdkdir = config.get("xcode_dir") .. "/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS" .. config.get("xcode_sdkver") .. ".sdk" diff --git a/xmake/scripts/platform/iphonesimulator/_iphonesimulator.lua b/xmake/scripts/platform/iphonesimulator/_iphonesimulator.lua index f2d01244a..84805e3ea 100644 --- a/xmake/scripts/platform/iphonesimulator/_iphonesimulator.lua +++ b/xmake/scripts/platform/iphonesimulator/_iphonesimulator.lua @@ -43,7 +43,20 @@ function _iphonesimulator.make(configs) configs.format.static = {"lib", ".a"} configs.format.object = {"", ".o"} configs.format.shared = {"lib", ".dylib"} - + + -- init the compiler + configs.compiler = {} + configs.compiler.cc = config.get("cc") or "xcrun -sdk iphonesimulator clang" + configs.compiler.cxx = config.get("cxx") or "xcrun -sdk iphonesimulator clang++" + configs.compiler.mm = config.get("mm") or configs.compiler.cc + configs.compiler.mxx = config.get("mxx") or configs.compiler.cxx + + -- init the linker + configs.linker = {} + configs.linker.binary = config.get("ld") or "xcrun -sdk iphonesimulator clang++" + configs.linker.static = config.get("ar") or "xcrun -sdk iphonesimulator ar" + configs.linker.shared = config.get("sh") or "xcrun -sdk iphonesimulator clang++" + -- init xcode sdk directory configs.xcode_sdkdir = config.get("xcode_dir") .. "/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator" .. config.get("xcode_sdkver") .. ".sdk" |
