diff options
| author | ruki <[email protected]> | 2015-06-30 10:45:41 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2015-06-30 10:45:41 +0800 |
| commit | a9da9dee9f83abfe04ffbbd865156494c135161e (patch) | |
| tree | 69b4ef596e9a4e815635e1ea77cd8a90aa215f17 /xmake/scripts | |
| parent | ac86a19928d72a69a1ddd4802479393c717352e4 (diff) | |
make universal target for iphoneos
Diffstat (limited to 'xmake/scripts')
| -rw-r--r-- | xmake/scripts/action/_package.lua | 14 | ||||
| -rw-r--r-- | xmake/scripts/base/package.lua | 6 | ||||
| -rw-r--r-- | xmake/scripts/platform/iphoneos/iphoneos.lua | 1 | ||||
| -rw-r--r-- | xmake/scripts/platform/iphoneos/package.lua | 76 | ||||
| -rw-r--r-- | xmake/scripts/platform/iphoneos/prober.lua | 1 |
5 files changed, 92 insertions, 6 deletions
diff --git a/xmake/scripts/action/_package.lua b/xmake/scripts/action/_package.lua index 6743a140d..3fc9f6e4b 100644 --- a/xmake/scripts/action/_package.lua +++ b/xmake/scripts/action/_package.lua @@ -150,20 +150,24 @@ function _package._makeconf(target_name, target) configs_arch.targetfile = _package._backup(configs_arch.targetdir, rule.targetfile(target_name, target)) -- save the package script - configs_target.pkgscript = target.pkgscript - if type(configs_target.pkgscript) == "string" and os.isfile(configs_target.pkgscript) then - local script, errors = loadfile(configs_target.pkgscript) + local pkgscript = target.pkgscript + if type(pkgscript) == "string" and os.isfile(pkgscript) then + local script, errors = loadfile(pkgscript) if script then - configs_target.pkgscript = script() + pkgscript = script() + if type(pkgscript) == "table" and pkgscript.main then + pkgscript = pkgscript.main + end else utils.error(errors) return false end end - if target.pkgscript and type(configs_target.pkgscript) ~= "function" then + if target.pkgscript and type(pkgscript) ~= "function" then utils.error("invalid package script!") return false end + configs_target.pkgscript = pkgscript -- ok return true diff --git a/xmake/scripts/base/package.lua b/xmake/scripts/base/package.lua index 3af35b0eb..f4be5595c 100644 --- a/xmake/scripts/base/package.lua +++ b/xmake/scripts/base/package.lua @@ -229,7 +229,11 @@ function package._done_from_platform(target) -- load the package script local script, errors = loadfile(scriptfile) - if script then pkgscript = script() + if script then + pkgscript = script() + if type(pkgscript) == "table" and pkgscript.main then + pkgscript = pkgscript.main + end else utils.error(errors) end diff --git a/xmake/scripts/platform/iphoneos/iphoneos.lua b/xmake/scripts/platform/iphoneos/iphoneos.lua index 8656d20cc..dad9c8252 100644 --- a/xmake/scripts/platform/iphoneos/iphoneos.lua +++ b/xmake/scripts/platform/iphoneos/iphoneos.lua @@ -56,6 +56,7 @@ function iphoneos.make(configs) configs.tools.ld = config.get("ld") configs.tools.ar = config.get("ar") configs.tools.sh = config.get("sh") + configs.tools.lipo = config.get("lipo") -- init flags for architecture local archflags = nil diff --git a/xmake/scripts/platform/iphoneos/package.lua b/xmake/scripts/platform/iphoneos/package.lua new file mode 100644 index 000000000..1e46ddadc --- /dev/null +++ b/xmake/scripts/platform/iphoneos/package.lua @@ -0,0 +1,76 @@ +--!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 package.lua +-- + +-- define module: package +local package = package or {} + +-- load modules +local os = require("base/os") +local path = require("base/path") +local rule = require("base/rule") +local utils = require("base/utils") +local string = require("base/string") +local platform = require("platform/platform") + +-- package target +function package.main(target) + + -- check + assert(target and target.name) + + -- the count of architectures + local count = 0 + for _, _ in pairs(target.archs) do count = count + 1 end + if count < 2 then return 0 end + + -- get the lipo tool + local lipo = platform.tool("lipo") + if not lipo then return 0 end + + -- make universal info + local universal = {} + universal.targetdir = rule.backupdir(target.name, "universal") + universal.targetfile = rule.targetfile(target.name, target) + if not universal.targetdir or not universal.targetfile then return 0 end + + -- make the universal directory + os.mkdir(path.directory(string.format("%s/%s", universal.targetdir, universal.targetfile))) + + -- make the lipo command + local cmd = lipo .. " -create" + for arch, info in pairs(target.archs) do + cmd = string.format("%s -arch %s %s/%s", cmd, arch, info.targetdir, info.targetfile) + end + cmd = string.format("%s -output %s/%s", cmd, universal.targetdir, universal.targetfile) + + -- make the universal target + if 0 ~= os.execute(cmd) then return 0 end + + -- ok + target.archs.universal = universal + + -- continue + return 0 +end + +-- return module: package +return package diff --git a/xmake/scripts/platform/iphoneos/prober.lua b/xmake/scripts/platform/iphoneos/prober.lua index 3de0965de..2c2892315 100644 --- a/xmake/scripts/platform/iphoneos/prober.lua +++ b/xmake/scripts/platform/iphoneos/prober.lua @@ -239,6 +239,7 @@ function prober._probe_toolchains(configs) if not prober._probe_toolpath(configs, "ld", "xcrun -sdk iphoneos ", "clang++", "the linker") then return false end if not prober._probe_toolpath(configs, "ar", "xcrun -sdk iphoneos ", "ar", "the static library linker") then return false end if not prober._probe_toolpath(configs, "sh", "xcrun -sdk iphoneos ", "clang++", "the shared library linker") then return false end + if not prober._probe_toolpath(configs, "lipo", "xcrun -sdk iphoneos ", "lipo", "the universal files creater") then return false end return true end |
