diff options
| author | ruki <[email protected]> | 2020-08-30 11:19:24 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2020-08-30 11:19:24 +0800 |
| commit | 739df73425412cab7c869183a927896a403f5d66 (patch) | |
| tree | 11d38980615745ba00efece3999164831fe911be | |
| parent | 871ebb19fae313ef795e0fb60e78aa9cb1c94fa8 (diff) | |
improve android ndk
| -rw-r--r-- | xmake/core/project/target.lua | 17 | ||||
| -rw-r--r-- | xmake/toolchains/ndk/load.lua | 26 |
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 = { |
