Skip to content

[toolchains(armclang)] fix target and cpu flags for MDK#6286

Merged
waruqi merged 1 commit intoxmake-io:devfrom
jnshuiji:armclang
Apr 6, 2025
Merged

[toolchains(armclang)] fix target and cpu flags for MDK#6286
waruqi merged 1 commit intoxmake-io:devfrom
jnshuiji:armclang

Conversation

@jnshuiji
Copy link
Contributor

@jnshuiji jnshuiji commented Apr 5, 2025

  • Always set --target=arm-arm-none-eabi for compiler and assembler to match MDK's armclang requirements
  • Add -masm=auto to asflags when using armclang assembler for better compatibility
  • Unify ldflags cpu format: change from space separator to --cpu=<arch> format (note: the --cpu parameter is case insensitive)
  • Fix incorrect architecture target handling reported in Regarding issues with Armclang for keil/MDK #6283

- Always set `--target=arm-arm-none-eabi` for compiler and assembler to match MDK's armclang requirements
- Add `-masm=auto` to asflags when using armclang assembler for better compatibility
- Unify ldflags cpu format to use `--cpu=<arch>` instead of space separator
- Fix incorrect architecture target handling reported in xmake-io#6283
@jnshuiji jnshuiji marked this pull request as draft April 5, 2025 16:38
@waruqi waruqi added this to the v2.9.9 milestone Apr 6, 2025
@jnshuiji
Copy link
Contributor Author

jnshuiji commented Apr 6, 2025

修改说明

  1. 固定 --target=arm-arm-none-eabi

    原因
    MDK的armclang仅支持此target

    C:\Users\Pochita\AppData\Local\Programs\Keil_v5\ARM\ARMCLANG\bin>armclang --target=aarch64-arm-none-eabi -mcpu=list
    The following arguments to option 'mcpu' can be selected:
    
    C:\Users\Pochita\AppData\Local\Programs\Keil_v5\ARM\ARMCLANG\bin>armclang --target=arm-arm-none-eabi -mcpu=list
    The following arguments to option 'mcpu' can be selected:
      -mcpu=cortex-m0
      -mcpu=cortex-m0plus
      -mcpu=cortex-m1
      -mcpu=cortex-m3
      -mcpu=cortex-m4
      -mcpu=cortex-m7
      -mcpu=cortex-m23
      -mcpu=cortex-m33
      -mcpu=cortex-m35p
      -mcpu=cortex-m52
      -mcpu=cortex-m55
      -mcpu=cortex-m85
      -mcpu=cortex-r4
      -mcpu=cortex-r4f
      -mcpu=sc000
      -mcpu=sc300
      -mcpu=star-mc1
    

    其他CPU使用aarch64-arm-none-eabi会提示许可证问题导致编译失败。

    C:\Users\Pochita\AppData\Local\Programs\Keil_v5\ARM\ARMCLANG\bin>armclang -v
    Product: MDK Plus 5.42
    Component: Arm Compiler for Embedded 6.23
    Tool: armclang [5f103000]
    
    Target: unspecified-arm-none-none
    armclang: fatal error: no target architecture given; use --target=arm-arm-none-eabi or --target=aarch64-arm-none-eabi
    
    C:\Users\Pochita\AppData\Local\Programs\Keil_v5\ARM\ARMCLANG\bin>armclang --target=aarch64-arm-none-eabi C:/Users/Pochita/Desktop/test.c -o C:/Users/Pochita/Desktop/test.o
    armclang: error: ARMv8a is not available with the current toolkit edition and license. Check that your licensing and toolkit configuration is set up correctly, using the information available at https://developer.arm.com/tools-and-software/software-development-tools/license-management/resources/product-and-toolkit-configuration
    Check that your license details are correct in the License Management dialog of MDK. Additional information is available at:
     http://www.keil.com/support/man/docs/license/license_management.htm
     If you need further help, provide this complete error message to your supplier or to Arm via https://services.arm.com/support/s/contactsupport
    
     - ARMLMD_LICENSE_FILE: unset
     - LM_LICENSE_FILE: unset
     - ARM_PRODUCT_DEF: unset
     - ARM_PRODUCT_PATH: unset
     - ARM_TOOL_VARIANT: unset
     - Product location: C:\Users\Pochita\AppData\Local\Programs\Keil_v5\ARM\sw\mappings
     - Toolchain location: C:\Users\Pochita\AppData\Local\Programs\Keil_v5\ARM\ARMCLANG\bin
     - Selected tool variant: mdk_std
       Product: MDK Plus 5.42
       Component: Arm Compiler for Embedded 6.23
       Tool: armclang [5f103000]
    
    armclang: error: unsupported argument 'aarch64-arm-none-eabi' to option '--target='
    
  2. 添加 -masm=auto 汇编参数

    原因

    当编译器版本是6.13及以上时,启动代码可能还在使用armasm语法,此时要使用-masm=armasm指定汇编器,否则启动代码报错。armclang提供了-masm=auto来检测汇编代码的语法并自动选择汇编器。(官方说明

  3. 链接器参数格式调整

    原因

    • 实际验证表明armlink不区分大小写(如--cpu=cortex-m7--cpu=Cortex-M7等效)
    • 统一使用等号格式--cpu=<name>)以提高可读性,与ARM官方示例保持一致(官方说明

此说明直接对应代码变更,且通过:

  • MDK v5.42a + ARMCompiler6.23 + Cortex-M7 硬件实测

@jnshuiji jnshuiji marked this pull request as ready for review April 6, 2025 05:44
@waruqi waruqi merged commit 4aae3d6 into xmake-io:dev Apr 6, 2025
22 checks passed
@waruqi
Copy link
Member

waruqi commented Apr 6, 2025

thanks

@jnshuiji jnshuiji deleted the armclang branch April 6, 2025 07:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants