| # REQUIRES: shell |
| # UNSUPPORTED: system-windows |
| |
| # RUN: %clang --multi-lib-config=%s -no-canonical-prefixes -x c++ %s -### -o %t.out 2>&1 \ |
| # RUN: --target=thumbv8m.main-none-eabihf --sysroot= \ |
| # RUN: | FileCheck %s |
| # CHECK: "-cc1" "-triple" "thumbv8m.main-unknown-none-eabihf" |
| # CHECK-SAME: "-internal-isystem" "[[SYSROOT:[^"]*]]/bin/../lib/clang-runtimes/arm-none-eabi/thumb/v8-m.main/fp/include/c++/v1" |
| # CHECK-SAME: "-internal-isystem" "[[SYSROOT]]/bin/../lib/clang-runtimes/arm-none-eabi/thumb/v8-m.main/fp/include" |
| # CHECK-SAME: "-x" "c++" "{{.*}}baremetal-multilib.yaml" |
| # CHECK-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" |
| # CHECK-SAME: "-L[[SYSROOT]]/bin/../lib/clang-runtimes/arm-none-eabi/thumb/v8-m.main/fp/lib" |
| # CHECK-SAME: "{{[^"]*}}libclang_rt.builtins.a" |
| # CHECK-SAME: "-lc" |
| # CHECK-SAME: "-o" "{{.*}}.tmp.out" |
| |
| # RUN: %clang --multi-lib-config=%s -no-canonical-prefixes -x c++ %s -### -o %t.out 2>&1 \ |
| # RUN: --target=thumbv7em-none-eabi -mfpu=fpv4-sp-d16 --sysroot= \ |
| # RUN: | FileCheck --check-prefix=CHECK-NO-MATCH %s |
| # CHECK-NO-MATCH: warning: no multilib found matching flags: |
| # CHECK-NO-MATCH-SAME: --target=thumbv7em-unknown-none-eabi |
| # CHECK-NO-MATCH: note: available multilibs are: |
| # CHECK-NO-MATCH: --target=thumbv6m-unknown-none-eabi -mfpu=none |
| # CHECK-NO-MATCH: --target=thumbv7m-unknown-none-eabi -mfpu=none |
| # CHECK-NO-MATCH: --target=thumbv7em-unknown-none-eabi -mfpu=none |
| |
| # RUN: %clang --multi-lib-config=%s -no-canonical-prefixes -print-multi-directory 2>&1 \ |
| # RUN: --target=thumbv8m.main-none-eabihf --sysroot= \ |
| # RUN: | FileCheck --check-prefix=CHECK-PRINT-MULTI-DIRECTORY %s |
| # CHECK-PRINT-MULTI-DIRECTORY: arm-none-eabi/thumb/v8-m.main/fp |
| |
| # RUN: %clang --multi-lib-config=%s -no-canonical-prefixes -print-multi-lib 2>&1 \ |
| # RUN: --target=arm-none-eabi --sysroot= \ |
| # RUN: | FileCheck --check-prefix=CHECK-PRINT-MULTI-LIB %s |
| # CHECK-PRINT-MULTI-LIB: arm-none-eabi/thumb/v6-m/nofp;@-target=thumbv6m-unknown-none-eabi@mfpu=none |
| # CHECK-PRINT-MULTI-LIB: arm-none-eabi/thumb/v7-m/nofp;@-target=thumbv7m-unknown-none-eabi@mfpu=none |
| # CHECK-PRINT-MULTI-LIB: arm-none-eabi/thumb/v7e-m/nofp;@-target=thumbv7em-unknown-none-eabi@mfpu=none |
| # CHECK-PRINT-MULTI-LIB: arm-none-eabi/thumb/v8-m.main/nofp;@-target=thumbv8m.main-unknown-none-eabi@mfpu=none |
| # CHECK-PRINT-MULTI-LIB: arm-none-eabi/thumb/v8.1-m.main/nofp/nomve;@-target=thumbv8.1m.main-unknown-none-eabi@mfpu=none |
| # CHECK-PRINT-MULTI-LIB: arm-none-eabi/thumb/v7e-m/fpv4_sp_d16;@-target=thumbv7em-unknown-none-eabihf@mfpu=fpv4-sp-d16 |
| # CHECK-PRINT-MULTI-LIB: arm-none-eabi/thumb/v7e-m/fpv5_d16;@-target=thumbv7em-unknown-none-eabihf@mfpu=fpv5-d16 |
| # CHECK-PRINT-MULTI-LIB: arm-none-eabi/thumb/v8-m.main/fp;@-target=thumbv8m.main-unknown-none-eabihf@mfpu=fpv5-d16 |
| # CHECK-PRINT-MULTI-LIB: arm-none-eabi/thumb/v8.1-m.main/fp;@-target=thumbv8.1m.main-unknown-none-eabihf@mfpu=fp-armv8-fullfp16-sp-d16 |
| # CHECK-PRINT-MULTI-LIB: arm-none-eabi/thumb/v8.1-m.main/nofp/mve;@-target=thumbv8.1m.main-unknown-none-eabihf@march=thumbv8.1m.main+mve@mfpu=none |
| |
| # RUN: %clang --multi-lib-config=%s -no-canonical-prefixes -x assembler -mexecute-only \ |
| # RUN: --target=arm-none-eabi --sysroot= %s -c -### 2>&1 \ |
| # RUN: | FileCheck %s --check-prefix=CHECK-NO-EXECUTE-ONLY-ASM |
| # CHECK-NO-EXECUTE-ONLY-ASM: warning: argument unused during compilation: '-mexecute-only' |
| |
| --- |
| # This file is in two parts: |
| # 1. A list of library variants. |
| # 2. A mapping from flags generated from command line arguments to further |
| # flags. |
| |
| # How does clang use this file? |
| # 1. If the ToolChain class for the architecture supports this form of |
| # multilib it then it loads the file if present in sysroot. |
| # 2. Generate flags from the user provided arguments. |
| # (Use `clang -print-multi-flags-experimental` to see which flags are |
| # generated). |
| # 3. Compare the arguments against each regular expression and store |
| # associated flags if there's a match. |
| # 4. Find the last library variant whose flags are a subset of the |
| # flags derived from the user provided arguments. |
| # 5. Use the directory for the library variant as the sysroot. |
| |
| # Clang will emit an error if this number is greater than its current multilib |
| # version or if its major version differs, but will accept lesser minor |
| # versions. |
| MultilibVersion: 1.0 |
| |
| # The first section of the file is the list of library variants. |
| # A library is considered compatible if the are a subset of the flags derived |
| # from the arguments provided by the user. |
| # If multiple libraries are deemed compatible then the one that appears |
| # last in the list wins. A ToolChain may instead opt to use more than one |
| # multilib, layered on top of each other. |
| |
| Variants: |
| - Dir: arm-none-eabi/arm/v4t |
| Flags: [--target=armv4t-unknown-none-eabi] |
| |
| - Dir: arm-none-eabi/thumb/v6-m/nofp |
| Flags: [--target=thumbv6m-unknown-none-eabi, -mfpu=none] |
| |
| - Dir: arm-none-eabi/thumb/v7-m/nofp |
| Flags: [--target=thumbv7m-unknown-none-eabi, -mfpu=none] |
| |
| - Dir: arm-none-eabi/thumb/v7e-m/nofp |
| Flags: [--target=thumbv7em-unknown-none-eabi, -mfpu=none] |
| |
| - Dir: arm-none-eabi/thumb/v8-m.main/nofp |
| Flags: [--target=thumbv8m.main-unknown-none-eabi, -mfpu=none] |
| |
| - Dir: arm-none-eabi/thumb/v8.1-m.main/nofp/nomve |
| Flags: [--target=thumbv8.1m.main-unknown-none-eabi, -mfpu=none] |
| |
| - Dir: arm-none-eabi/thumb/v7e-m/fpv4_sp_d16 |
| Flags: [--target=thumbv7em-unknown-none-eabihf, -mfpu=fpv4-sp-d16] |
| |
| - Dir: arm-none-eabi/thumb/v7e-m/fpv5_d16 |
| Flags: [--target=thumbv7em-unknown-none-eabihf, -mfpu=fpv5-d16] |
| |
| - Dir: arm-none-eabi/thumb/v8-m.main/fp |
| Flags: [--target=thumbv8m.main-unknown-none-eabihf, -mfpu=fpv5-d16] |
| |
| - Dir: arm-none-eabi/thumb/v8.1-m.main/fp |
| Flags: [--target=thumbv8.1m.main-unknown-none-eabihf, -mfpu=fp-armv8-fullfp16-sp-d16] |
| |
| - Dir: arm-none-eabi/thumb/v8.1-m.main/nofp/mve |
| Flags: [--target=thumbv8.1m.main-unknown-none-eabihf, -march=thumbv8.1m.main+mve, -mfpu=none] |
| |
| |
| # The second section of the file is a map from auto-detected flags |
| # to custom flags. The auto-detected flags can be printed out |
| # by running clang with `-print-multi-flags-experimental`. |
| # The regex must match a whole flag string. |
| # All flags in the "Flags" list will be added if an argument matches. |
| Mappings: |
| # For v8m.base (and potential later v8m baseline versions) use v6m |
| - Match: --target=thumbv8(\.[0-9]+)?m\.base-unknown-none-eabi |
| Flags: [--target=thumbv6m-unknown-none-eabi] |
| # Match versions after v8.1m.main. We assume that v8.2m (if/when it exists) will |
| # be backwards compatible with v8.1m. |
| # The alternative is to not recognise later versions, and require that |
| # this multilib spec is updated before it can be used with newer |
| # architecture versions. |
| - Match: --target=thumbv8\.[1-9]m\.main-unknown-none-eabi |
| Flags: [--target=thumbv8.1m.main-unknown-none-eabi] |
| - Match: --target=thumbv8\.[1-9]m\.main-unknown-none-eabihf |
| Flags: [--target=thumbv8.1m.main-unknown-none-eabihf] |
| |
| - Match: -march=thumbv8\.[1-9]m\.main.*\+mve($|\+).* |
| Flags: [-march=thumbv8.1m.main+mve] |
| |
| # Hierarchy among FPUs: fpvN-d16 is a superset of fpvN-sp-d16, and |
| # fpvN-d16 is a superset of fpv[N-1]-d16, for all N. |
| - Match: -mfpu=fpv5-d16 |
| Flags: |
| - -mfpu=fpv4-d16 |
| - -mfpu=fpv5-sp-d16 |
| - -mfpu=fpv4-sp-d16 |
| - Match: -mfpu=fpv5-sp-d16 |
| Flags: |
| - -mfpu=fpv4-sp-d16 |
| - Match: -mfpu=fpv4-d16 |
| Flags: |
| - -mfpu=fpv4-sp-d16 |
| |
| ... |