summaryrefslogtreecommitdiff
path: root/xmake/scripts
diff options
context:
space:
mode:
authorruki <[email protected]>2015-05-27 08:44:21 +0800
committerruki <[email protected]>2015-05-27 08:44:21 +0800
commit80f92040764d0e4d6c89c5f8d82f4a8dc1b54902 (patch)
tree3e43d832af7e74fed0d79d7656058fbed694dc3c /xmake/scripts
parent0e3df610b7db95590a9ad32eccfc7b2b2319b128 (diff)
add prober to ios platform
Diffstat (limited to 'xmake/scripts')
-rw-r--r--xmake/scripts/platform/android/_android.lua7
-rw-r--r--xmake/scripts/platform/ios/_ios.lua19
-rw-r--r--xmake/scripts/platform/ios/_prober.lua121
-rw-r--r--xmake/scripts/platform/linux/_linux.lua8
-rw-r--r--xmake/scripts/platform/macosx/_macosx.lua12
-rw-r--r--xmake/scripts/platform/platform.lua8
-rw-r--r--xmake/scripts/platform/windows/_windows.lua8
7 files changed, 150 insertions, 33 deletions
diff --git a/xmake/scripts/platform/android/_android.lua b/xmake/scripts/platform/android/_android.lua
index 93920dcc6..9de364e77 100644
--- a/xmake/scripts/platform/android/_android.lua
+++ b/xmake/scripts/platform/android/_android.lua
@@ -26,6 +26,9 @@ local _android = _android or {}
-- init host
_android._HOST = xmake._HOST
+-- init architectures
+_android._ARCHS = {"armv5te", "armv6", "armv7-a"}
+
-- make configure
function _android.make(configs)
@@ -35,10 +38,6 @@ function _android.make(configs)
configs.formats.object = {"", ".o"}
configs.formats.shared = {"", ".so"}
- -- init the architecture scopes
- configs.archs = {}
- configs.archs.armv5te = {}
- configs.archs.armv6 = {}
end
-- get the option menu for action: xmake config or global
diff --git a/xmake/scripts/platform/ios/_ios.lua b/xmake/scripts/platform/ios/_ios.lua
index 1cf1a135c..eee1f6587 100644
--- a/xmake/scripts/platform/ios/_ios.lua
+++ b/xmake/scripts/platform/ios/_ios.lua
@@ -23,8 +23,17 @@
-- define module: _ios
local _ios = _ios or {}
+-- load modules
+local config = require("base/config")
+
-- init host
-_ios._HOST = "macosx"
+_ios._HOST = "macosx"
+
+-- init architectures
+_ios._ARCHS = {"armv7", "armv7s", "arm64"}
+
+-- init prober
+_ios._PROBER = require("platform/ios/_prober")
-- make configure
function _ios.make(configs)
@@ -34,12 +43,10 @@ function _ios.make(configs)
configs.formats.static = {"lib", ".a"}
configs.formats.object = {"", ".o"}
configs.formats.shared = {"", ".dylib"}
+
+ -- init xcode sdk directory
+ configs.xcode_sdkdir = config.get("xcode_dir") .. "/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS" .. config.get("xcode_sdkver") .. ".sdk"
- -- init the architecture scopes
- configs.archs = {}
- configs.archs.armv7 = {}
- configs.archs.armv7s = {}
- configs.archs.arm64 = {}
end
-- get the option menu for action: xmake config or global
diff --git a/xmake/scripts/platform/ios/_prober.lua b/xmake/scripts/platform/ios/_prober.lua
new file mode 100644
index 000000000..2209c14b9
--- /dev/null
+++ b/xmake/scripts/platform/ios/_prober.lua
@@ -0,0 +1,121 @@
+--!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 _prober.lua
+--
+
+-- load modules
+local os = require("base/os")
+local path = require("base/path")
+local utils = require("base/utils")
+local string = require("base/string")
+
+-- define module: _prober
+local _prober = _prober or {}
+
+-- probe the xcode application directory
+function _prober._probe_xcode(configs)
+
+ -- get the xcode directory
+ local xcode_dir = configs.xcode_dir
+
+ -- ok?
+ if xcode_dir and xcode_dir ~= "auto" then return true end
+
+ -- clear it first
+ xcode_dir = nil
+
+ -- attempt to get the default directory
+ if not xcode_dir then
+ if os.isdir("/Applications/Xcode.app") then
+ xcode_dir = "/Applications/Xcode.app"
+ end
+ end
+
+ -- attempt to match the other directories
+ if not xcode_dir then
+ local dirs = os.match("/Applications/Xcode*.app", true)
+ if dirs and table.getn(dirs) ~= 0 then
+ xcode_dir = dirs[1]
+ end
+ end
+
+ -- probe ok? update it
+ if xcode_dir then
+ configs.xcode_dir = xcode_dir
+ else
+ -- failed
+ utils.error("The Xcode directory is unknown now, please config it first!")
+ utils.error(" - xmake config --xcode_dir=xxx")
+ utils.error("or - xmake global --xcode_dir=xxx")
+ return false
+ end
+
+ -- ok
+ return true
+end
+
+-- probe the xcode sdk version
+function _prober._probe_xcode_sdkver(configs)
+
+ -- get the xcode sdk version
+ local xcode_sdkver = configs.xcode_sdkver
+
+ -- ok?
+ if xcode_sdkver and xcode_sdkver ~= "auto" then return true end
+
+ -- clear it first
+ xcode_sdkver = nil
+
+ -- attempt to match the directory
+ if not xcode_sdkver then
+ local dirs = os.match(configs.xcode_dir .. "/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS*.sdk", true)
+ if dirs and table.getn(dirs) ~= 0 then
+ xcode_sdkver = string.match(dirs[1], "%d+%.%d+")
+ end
+ end
+
+ -- probe ok? update it
+ if xcode_sdkver then
+ configs.xcode_sdkver = xcode_sdkver
+ else
+ -- failed
+ utils.error("The Xcode SDK version is unknown now, please config it first!")
+ utils.error(" - xmake config --xcode_sdkver=xxx")
+ utils.error("or - xmake global --xcode_sdkver=xxx")
+ return false
+ end
+
+ -- ok
+ return true
+end
+
+-- probe the configure and update the values with "auto"
+function _prober.done(configs)
+
+ -- probe the xcode application directory
+ if not _prober._probe_xcode(configs) then return end
+
+ -- probe the xcode sdk version
+ if not _prober._probe_xcode_sdkver(configs) then return end
+
+end
+
+-- return module: _prober
+return _prober
diff --git a/xmake/scripts/platform/linux/_linux.lua b/xmake/scripts/platform/linux/_linux.lua
index e33a81d8f..4b70986c4 100644
--- a/xmake/scripts/platform/linux/_linux.lua
+++ b/xmake/scripts/platform/linux/_linux.lua
@@ -26,6 +26,9 @@ local _linux = _linux or {}
-- init host
_linux._HOST = "linux"
+-- init architectures
+_linux._ARCHS = {"x86", "x64"}
+
-- make configure
function _linux.make(configs)
@@ -34,11 +37,6 @@ function _linux.make(configs)
configs.formats.static = {"lib", ".a"}
configs.formats.object = {"", ".o"}
configs.formats.shared = {"", ".so"}
-
- -- init the architecture scopes
- configs.archs = {}
- configs.archs.x86 = {}
- configs.archs.x64 = {}
end
-- get the option menu for action: xmake config or global
diff --git a/xmake/scripts/platform/macosx/_macosx.lua b/xmake/scripts/platform/macosx/_macosx.lua
index 2dcdf4b06..e19e5d5ea 100644
--- a/xmake/scripts/platform/macosx/_macosx.lua
+++ b/xmake/scripts/platform/macosx/_macosx.lua
@@ -24,15 +24,14 @@
local _macosx = _macosx or {}
-- load modules
-local os = require("base/os")
-local path = require("base/path")
-local utils = require("base/utils")
local config = require("base/config")
-local string = require("base/string")
-- init host
_macosx._HOST = "macosx"
+-- init architectures
+_macosx._ARCHS = {"x86", "x64"}
+
-- init prober
_macosx._PROBER = require("platform/macosx/_prober")
@@ -45,11 +44,6 @@ function _macosx.make(configs)
configs.formats.object = {"", ".o"}
configs.formats.shared = {"", ".dylib"}
- -- init the architectures
- configs.archs = {}
- configs.archs.x86 = {}
- configs.archs.x64 = {}
-
-- init xcode sdk directory
configs.xcode_sdkdir = config.get("xcode_dir") .. "/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX" .. config.get("xcode_sdkver") .. ".sdk"
end
diff --git a/xmake/scripts/platform/platform.lua b/xmake/scripts/platform/platform.lua
index 4cc5df0da..b47623216 100644
--- a/xmake/scripts/platform/platform.lua
+++ b/xmake/scripts/platform/platform.lua
@@ -139,10 +139,10 @@ function platform.archs(plat)
-- load all platform configs
local archs = {}
- local configs = platform._configs(plat)
- if configs and configs.archs then
- for arch, _ in pairs(configs.archs) do
- archs[table.getn(archs) + 1] = arch
+ local p = platform._load(plat)
+ if p and p._ARCHS then
+ for _, arch in ipairs(p._ARCHS) do
+ archs[table.getn(archs) + 1] = arch
end
end
diff --git a/xmake/scripts/platform/windows/_windows.lua b/xmake/scripts/platform/windows/_windows.lua
index 293958dae..bda11aa07 100644
--- a/xmake/scripts/platform/windows/_windows.lua
+++ b/xmake/scripts/platform/windows/_windows.lua
@@ -26,6 +26,9 @@ local _windows = _windows or {}
-- init host
_windows._HOST = "windows"
+-- init architectures
+_windows._ARCHS = {"x86", "x64"}
+
-- make configure
function _windows.make(configs)
@@ -35,11 +38,6 @@ function _windows.make(configs)
configs.formats.object = {"", ".obj"}
configs.formats.shared = {"", ".dll"}
configs.formats.console = {"", ".exe"}
-
- -- init the architecture scopes
- configs.archs = {}
- configs.archs.x86 = {}
- configs.archs.x64 = {}
end
-- get the option menu for action: xmake config or global