summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2020-08-30 11:19:24 +0800
committerruki <[email protected]>2020-08-30 11:19:24 +0800
commit739df73425412cab7c869183a927896a403f5d66 (patch)
tree11d38980615745ba00efece3999164831fe911be
parent871ebb19fae313ef795e0fb60e78aa9cb1c94fa8 (diff)
improve android ndk
-rw-r--r--xmake/core/project/target.lua17
-rw-r--r--xmake/toolchains/ndk/load.lua26
2 files changed, 38 insertions, 5 deletions
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua
index 03bd46857..8bb538ddb 100644
--- a/xmake/core/project/target.lua
+++ b/xmake/core/project/target.lua
@@ -1793,11 +1793,28 @@ function _instance:toolconfig(name)
-- get them from all toolchains
for _, toolchain_inst in ipairs(self:toolchains()) do
+
+ -- get xxflags
local values = toolchain_inst:get(name)
if values then
toolconfig = toolconfig or {}
table.join2(toolconfig, values)
end
+
+ -- get flags from target.on_xxflags()
+ local script = toolchain_inst:get("target.on_" .. name)
+ if type(script) == "function" then
+ local ok, result_or_errors = utils.trycall(script, nil, self)
+ if ok then
+ values = result_or_errors
+ if values then
+ toolconfig = toolconfig or {}
+ table.join2(toolconfig, values)
+ end
+ else
+ os.raise(result_or_errors)
+ end
+ end
end
-- cache it
diff --git a/xmake/toolchains/ndk/load.lua b/xmake/toolchains/ndk/load.lua
index cbc2ab4a2..80a7f1bb5 100644
--- a/xmake/toolchains/ndk/load.lua
+++ b/xmake/toolchains/ndk/load.lua
@@ -21,7 +21,12 @@
-- imports
import("core.project.config")
--- main entry
+-- load ndk toolchain
+--
+-- some extra configuration for target
+-- e.g.
+-- set_values("ndk.arm_mode", "arm") -- or thumb
+--
function main(toolchain)
-- get cross
@@ -53,10 +58,6 @@ function main(toolchain)
toolchain:add("shflags", "-llog")
if arch and (arch == "armeabi" or arch == "armeabi-v7a" or arch == "armv5te" or arch == "armv7-a") then -- armv5te/armv7-a are deprecated
arm32 = true
- toolchain:add("cxflags", "-mthumb")
- toolchain:add("asflags", "-mthumb")
- toolchain:add("ldflags", "-mthumb")
- toolchain:add("shflags", "-mthumb")
end
-- use llvm directory? e.g. android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin
@@ -313,6 +314,21 @@ function main(toolchain)
end
end
+ -- init flags for target
+ local target_on_xxflags = function (target)
+ if arm32 then
+ if target:values("ndk.arm_mode") == "arm" then
+ return "-marm"
+ else
+ return "-mthumb"
+ end
+ end
+ end
+ toolchain:add("target.on_cxflags", target_on_xxflags)
+ toolchain:add("target.on_asflags", target_on_xxflags)
+ toolchain:add("target.on_ldflags", target_on_xxflags)
+ toolchain:add("target.on_shflags", target_on_xxflags)
+
-- init targets for rust
local targets_rust =
{