diff options
| author | ruki <[email protected]> | 2024-06-24 23:08:52 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-06-24 23:08:52 +0800 |
| commit | de48240b9e2ef01b24425742e5b6a5ca20666384 (patch) | |
| tree | 740b0fb42091ec1f7ea75f1173555b8409539c3d | |
| parent | 5a8ae5e11f5e1238ba6967d2c977707cd70579bf (diff) | |
| parent | cf98da127fec9dcf204b72ac38ebbb0bb6b29a30 (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.lua | 3 | ||||
| -rw-r--r-- | xmake/toolchains/armclang/xmake.lua | 19 |
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) |
