summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2024-06-24 23:08:52 +0800
committerGitHub <[email protected]>2024-06-24 23:08:52 +0800
commitde48240b9e2ef01b24425742e5b6a5ca20666384 (patch)
tree740b0fb42091ec1f7ea75f1173555b8409539c3d
parent5a8ae5e11f5e1238ba6967d2c977707cd70579bf (diff)
parentcf98da127fec9dcf204b72ac38ebbb0bb6b29a30 (diff)
Merge pull request #5247 from CofeCofe/master
Add armclang version judgement and automatically select assembler based on the result
-rw-r--r--xmake/modules/detect/tools/find_armclang.lua3
-rw-r--r--xmake/toolchains/armclang/xmake.lua19
2 files changed, 16 insertions, 6 deletions
diff --git a/xmake/modules/detect/tools/find_armclang.lua b/xmake/modules/detect/tools/find_armclang.lua
index ed6b0bbfe..0b33ac6fc 100644
--- a/xmake/modules/detect/tools/find_armclang.lua
+++ b/xmake/modules/detect/tools/find_armclang.lua
@@ -39,7 +39,8 @@ import("detect.sdks.find_mdk")
function main(opt)
-- init options
- opt = opt or {}
+ opt = opt or {}
+ opt.parse = opt.parse or function (output) return output:match("Arm Compiler for Embedded (%d+%.?%d+%.?%d+)%s") end
-- find program
local program = find_program(opt.program or "armclang.exe", opt)
diff --git a/xmake/toolchains/armclang/xmake.lua b/xmake/toolchains/armclang/xmake.lua
index ee63cc660..bd3bd4b60 100644
--- a/xmake/toolchains/armclang/xmake.lua
+++ b/xmake/toolchains/armclang/xmake.lua
@@ -29,14 +29,21 @@ toolchain("armclang")
set_toolset("cxx", "armclang")
set_toolset("ld", "armlink")
set_toolset("ar", "armar")
- set_toolset("as", "armasm")
on_check(function (toolchain)
+ import("core.base.semver")
import("lib.detect.find_tool")
import("detect.sdks.find_mdk")
local mdk = find_mdk()
- if mdk and mdk.sdkdir_armclang and find_tool("armclang") then
+ if mdk and mdk.sdkdir_armclang then
toolchain:config_set("sdkdir", mdk.sdkdir_armclang)
+ -- different assembler choices for different versions of armclang
+ local armclang = find_tool("armclang", {version = true, force = true, paths = path.join(mdk.sdkdir_armclang, "bin")})
+ if armclang and semver.compare(armclang.version, "6.13") > 0 then
+ toolchain:config_set("toolset_as", "armclang")
+ else
+ toolchain:config_set("toolset_as", "armasm")
+ end
toolchain:configs_save()
return true
end
@@ -56,10 +63,12 @@ toolchain("armclang")
arch_cpu_ld = arch_cpu:replace("cortex-a", "Cortex-A", {plain = true})
arch_target = "aarch64-arm-none-eabi"
end
- toolchain:add("cxflags", "-target=" .. arch_target)
+ local as = toolchain:config("toolset_as")
+ toolchain:set("toolset", "as", as)
+ toolchain:add("cxflags", "--target=" .. arch_target)
toolchain:add("cxflags", "-mcpu=" .. arch_cpu)
- toolchain:add("asflags", "-target=" .. arch_target)
- toolchain:add("asflags", "--cpu=" .. arch_cpu)
+ toolchain:add("asflags", "--target=" .. arch_target)
+ toolchain:add("asflags", (as == "armclang" and "-mcpu=" or "--cpu=") .. arch_cpu)
toolchain:add("ldflags", "--cpu " .. arch_cpu_ld)
end
end)