diff options
| author | ruki <[email protected]> | 2018-11-12 23:10:19 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2018-11-12 13:01:54 +0800 |
| commit | 0d6defd8520b2a93e02a5872a067a611d1b839cc (patch) | |
| tree | e65c3bd8a99326bd33ec5010f56d3a8fe0939f7c | |
| parent | 377840c51da27c07f9d94caf458f99eb197798e3 (diff) | |
lazy loading platform
| -rw-r--r-- | xmake/core/base/table.lua | 2 | ||||
| -rw-r--r-- | xmake/core/base/task.lua | 11 | ||||
| -rw-r--r-- | xmake/core/platform/platform.lua | 38 | ||||
| -rw-r--r-- | xmake/platforms/iphoneos/load.lua | 27 | ||||
| -rw-r--r-- | xmake/platforms/watchos/load.lua | 27 |
5 files changed, 61 insertions, 44 deletions
diff --git a/xmake/core/base/table.lua b/xmake/core/base/table.lua index de024ff2b..f6e34c628 100644 --- a/xmake/core/base/table.lua +++ b/xmake/core/base/table.lua @@ -267,8 +267,6 @@ function table.unwrap(object) if type(object) == "table" then if #object == 1 then return object[1] - elseif #object == 0 then - return end end return object diff --git a/xmake/core/base/task.lua b/xmake/core/base/task.lua index b6a5d7d15..b2b5b25a0 100644 --- a/xmake/core/base/task.lua +++ b/xmake/core/base/task.lua @@ -437,7 +437,10 @@ function task.menu(tasks) menu.main = function () -- translate main menu - local mainmenu = task._translate_menu(taskinst:get("menu")) + local mainmenu, errors = task._translate_menu(taskinst:get("menu")) + if not mainmenu then + os.raise(errors) + end -- make tasks for the main menu mainmenu.tasks = {} @@ -464,7 +467,11 @@ function task.menu(tasks) -- delay to load task menu menu[taskname] = function () - return task._translate_menu(taskinst:get("menu")) + local taskmenu, errors = task._translate_menu(taskinst:get("menu")) + if not taskmenu then + os.raise(errors) + end + return taskmenu end end end diff --git a/xmake/core/platform/platform.lua b/xmake/core/platform/platform.lua index dc16bf0d4..325935a38 100644 --- a/xmake/core/platform/platform.lua +++ b/xmake/core/platform/platform.lua @@ -51,6 +51,11 @@ function _instance.new(name, info, rootdir) return instance end +-- get platform name +function _instance:name() + return self._NAME +end + -- set the value to the platform info function _instance:set(name, ...) self._INFO[name] = table.unwrap(table.unique({...})) @@ -64,6 +69,26 @@ end -- get the platform configure function _instance:get(name) + + -- attempt to get the static configure value + local value = self._INFO[name] + if value ~= nil then + return value + end + + -- lazy loading platform + if not self._LOADED then + local on_load = self._INFO.load + if on_load then + local ok, errors = sandbox.load(on_load, self) + if not ok then + os.raise(errors) + end + end + self._LOADED = true + end + + -- get other platform info return self._INFO[name] end @@ -204,15 +229,6 @@ function platform.load(plat) return nil, errors end - -- do load - local on_load = instance:get("load") - if on_load then - local ok, errors = sandbox.load(on_load, instance) - if not ok then - return nil, errors - end - end - -- save instance to the cache platform._PLATFORMS[plat] = instance @@ -225,9 +241,11 @@ end function platform.get(name, plat) -- get the current platform configure - local instance = platform.load(plat) + local instance, errors = platform.load(plat) if instance then return instance:get(name) + else + os.raise(errors) end end diff --git a/xmake/platforms/iphoneos/load.lua b/xmake/platforms/iphoneos/load.lua index aaa295ad9..80e12eba9 100644 --- a/xmake/platforms/iphoneos/load.lua +++ b/xmake/platforms/iphoneos/load.lua @@ -26,21 +26,21 @@ import("core.project.config") -- load it -function main() +function main(platform) -- init architecture local arch = config.get("arch") or "arm64" local simulator = (arch == "i386" or arch == "x86_64") -- init platform name - local platname = ifelse(simulator, "iPhoneSimulator", "iPhoneOS") + local platname = simulator and "iPhoneSimulator" or "iPhoneOS" -- init target minimal version local target_minver = config.get("target_minver") if target_minver and tonumber(target_minver) > 10 and (arch == "armv7" or arch == "armv7s" or arch == "i386") then target_minver = "10" -- iOS 10 is the maximum deployment target for 32-bit targets end - local target_minver_flags = ifelse(simulator, "-mios-simulator-version-min=", "-miphoneos-version-min=") .. target_minver + local target_minver_flags = (simulator and "-mios-simulator-version-min=" or "-miphoneos-version-min=") .. target_minver -- init the xcode sdk directory local xcode_dir = config.get("xcode") @@ -48,22 +48,19 @@ function main() local xcode_sdkdir = format("%s/Contents/Developer/Platforms/%s.platform/Developer/SDKs/%s%s.sdk", xcode_dir, platname, platname, xcode_sdkver) -- init flags for c/c++ - _g.cxflags = { "-arch " .. arch, target_minver_flags, "-isysroot " .. xcode_sdkdir } - _g.ldflags = { "-arch " .. arch, "-ObjC", "-lstdc++", "-fobjc-link-runtime", target_minver_flags, "-isysroot " .. xcode_sdkdir } - _g.shflags = { "-arch " .. arch, "-ObjC", "-lstdc++", "-fobjc-link-runtime", target_minver_flags, "-isysroot " .. xcode_sdkdir } + platform:add("cxflags", "-arch " .. arch, target_minver_flags, "-isysroot " .. xcode_sdkdir) + platform:add("ldflags", "-arch " .. arch, "-ObjC", "-lstdc++", "-fobjc-link-runtime", target_minver_flags, "-isysroot " .. xcode_sdkdir) + platform:add("shflags", "-arch " .. arch, "-ObjC", "-lstdc++", "-fobjc-link-runtime", target_minver_flags, "-isysroot " .. xcode_sdkdir) -- init flags for objc/c++ - _g.mxflags = { "-arch " .. arch, target_minver_flags, "-isysroot " .. xcode_sdkdir } + platform:add("mxflags", "-arch " .. arch, target_minver_flags, "-isysroot " .. xcode_sdkdir) -- init flags for asm - _g.asflags = { "-arch " .. arch, target_minver_flags, "-isysroot " .. xcode_sdkdir } + platform:add("asflags", "-arch " .. arch, target_minver_flags, "-isysroot " .. xcode_sdkdir) - -- init flags for swift (with _g.ldflags and _g.shflags) - _g.scflags = { format("-target %s-apple-ios%s", arch, target_minver) , "-sdk " .. xcode_sdkdir } - _g["sc-shflags"] = { format("-target %s-apple-ios%s", arch, target_minver) , "-sdk " .. xcode_sdkdir } - _g["sc-ldflags"] = { format("-target %s-apple-ios%s", arch, target_minver) , "-sdk " .. xcode_sdkdir } - - -- ok - return _g + -- init flags for swift (with platform:add("ldflags and platform:add("shflags) + platform:add("scflags", format("-target %s-apple-ios%s", arch, target_minver) , "-sdk " .. xcode_sdkdir) + platform:add("sc-shflags", format("-target %s-apple-ios%s", arch, target_minver) , "-sdk " .. xcode_sdkdir) + platform:add("sc-ldflags", format("-target %s-apple-ios%s", arch, target_minver) , "-sdk " .. xcode_sdkdir) end diff --git a/xmake/platforms/watchos/load.lua b/xmake/platforms/watchos/load.lua index df84202c4..45931c620 100644 --- a/xmake/platforms/watchos/load.lua +++ b/xmake/platforms/watchos/load.lua @@ -26,18 +26,18 @@ import("core.project.config") -- load it -function main() +function main(platform) -- init architecture local arch = config.get("arch") local simulator = arch == "i386" -- init platform name - local platname = ifelse(simulator, "WatchSimulator", "WatchOS") + local platname = simulator and "WatchSimulator" or "WatchOS" -- init target minimal version local target_minver = config.get("target_minver") - local target_minver_flags = ifelse(simulator, "-mwatchos-simulator-version-min=", "-mwatchos-version-min=") .. target_minver + local target_minver_flags = (simulator and "-mwatchos-simulator-version-min=" or "-mwatchos-version-min=") .. target_minver -- init the xcode sdk directory local xcode_dir = config.get("xcode") @@ -45,22 +45,19 @@ function main() local xcode_sdkdir = format("%s/Contents/Developer/Platforms/%s.platform/Developer/SDKs/%s%s.sdk", xcode_dir, platname, platname, xcode_sdkver) -- init flags for c/c++ - _g.cxflags = { "-arch " .. arch, target_minver_flags, "-isysroot " .. xcode_sdkdir } - _g.ldflags = { "-arch " .. arch, "-ObjC", "-lstdc++", "-fobjc-link-runtime", target_minver_flags, "-isysroot " .. xcode_sdkdir } - _g.shflags = { "-arch " .. arch, "-ObjC", "-lstdc++", "-fobjc-link-runtime", target_minver_flags, "-isysroot " .. xcode_sdkdir } + platform:add("cxflags", "-arch " .. arch, target_minver_flags, "-isysroot " .. xcode_sdkdir) + platform:add("ldflags", "-arch " .. arch, "-ObjC", "-lstdc++", "-fobjc-link-runtime", target_minver_flags, "-isysroot " .. xcode_sdkdir) + platform:add("shflags", "-arch " .. arch, "-ObjC", "-lstdc++", "-fobjc-link-runtime", target_minver_flags, "-isysroot " .. xcode_sdkdir) -- init flags for objc/c++ - _g.mxflags = { "-arch " .. arch, target_minver_flags, "-isysroot " .. xcode_sdkdir } + platform:add("mxflags", "-arch " .. arch, target_minver_flags, "-isysroot " .. xcode_sdkdir) -- init flags for asm - _g.asflags = { "-arch " .. arch, target_minver_flags, "-isysroot " .. xcode_sdkdir } + platform:add("asflags", "-arch " .. arch, target_minver_flags, "-isysroot " .. xcode_sdkdir) - -- init flags for swift (with _g.ldflags and _g.shflags) - _g.scflags = { format("-target %s-apple-ios%s", arch, target_minver) , "-sdk " .. xcode_sdkdir } - _g["sc-shflags"] = { format("-target %s-apple-ios%s", arch, target_minver) , "-sdk " .. xcode_sdkdir } - _g["sc-ldflags"] = { format("-target %s-apple-ios%s", arch, target_minver) , "-sdk " .. xcode_sdkdir } - - -- ok - return _g + -- init flags for swift (with platform:add("ldflags and platform:add("shflags) + platform:add("scflags", format("-target %s-apple-ios%s", arch, target_minver) , "-sdk " .. xcode_sdkdir) + platform:add("sc-shflags", format("-target %s-apple-ios%s", arch, target_minver) , "-sdk " .. xcode_sdkdir) + platform:add("sc-ldflags", format("-target %s-apple-ios%s", arch, target_minver) , "-sdk " .. xcode_sdkdir) end |
