annotate docs/HowToCrossCompileBuiltinsOnArm.rst @ 134:3a76565eade5 LLVM5.0.1

update 5.0.1
author mir3636
date Sat, 17 Feb 2018 09:57:20 +0900
parents
children c2174574ed3a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
134
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
1 ===================================================================
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
2 How to Cross Compile Compiler-rt Builtins For Arm
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
3 ===================================================================
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
4
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
5 Introduction
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
6 ============
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
7
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
8 This document contains information about building and testing the builtins part
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
9 of compiler-rt for an Arm target, from an x86_64 Linux machine.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
10
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
11 While this document concentrates on Arm and Linux the general principles should
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
12 apply to other targets supported by compiler-rt. Further contributions for other
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
13 targets are welcome.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
14
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
15 The instructions in this document depend on libraries and programs external to
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
16 LLVM, there are many ways to install and configure these dependencies so you
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
17 may need to adapt the instructions here to fit your own local situation.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
18
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
19 Prerequisites
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
20 =============
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
21
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
22 In this use case we'll be using CMake on a Debian-based Linux system,
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
23 cross-compiling from an x86_64 host to a hard-float Armv7-A target. We'll be
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
24 using as many of the LLVM tools as we can, but it is possible to use GNU
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
25 equivalents.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
26
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
27 * ``A build of LLVM/clang for the llvm-tools and llvm-config``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
28 * ``The qemu-arm user mode emulator``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
29 * ``An arm-linux-gnueabihf sysroot``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
30
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
31 See https://compiler-rt.llvm.org/ for more information about the dependencies
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
32 on clang and LLVM.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
33
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
34 ``qemu-arm`` should be available as a package for your Linux distribution.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
35
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
36 The most complicated of the prequisites to satisfy is the arm-linux-gnueabihf
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
37 sysroot. The :doc:`HowToCrossCompileLLVM` has information about how to use the
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
38 Linux distributions multiarch support to fulfill the dependencies for building
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
39 LLVM. Alternatively, as building and testing just the compiler-rt builtins
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
40 requires fewer dependencies than LLVM, it is possible to use the Linaro
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
41 arm-linux-gnueabihf gcc installation as our sysroot.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
42
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
43 Building compiler-rt builtins for Arm
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
44 =====================================
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
45 We will be doing a standalone build of compiler-rt using the following cmake
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
46 options.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
47
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
48 * ``path/to/llvm/projects/compiler-rt``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
49 * ``-DCOMPILER_RT_BUILD_BUILTINS=ON``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
50 * ``-DCOMPILER_RT_BUILD_SANITIZERS=OFF``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
51 * ``-DCOMPILER_RT_BUILD_XRAY=OFF``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
52 * ``-DCOMPILER_RT_BUILD_LIBFUZZER=OFF``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
53 * ``-DCOMPILER_RT_BUILD_PROFILE=OFF``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
54 * ``-DCMAKE_C_COMPILER=/path/to/clang``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
55 * ``-DCMAKE_AR=/path/to/llvm-ar``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
56 * ``-DCMAKE_NM=/path/to/llvm-nm``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
57 * ``-DCMAKE_RANLIB=/path/to/llvm-ranlib``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
58 * ``-DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld"``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
59 * ``-DCMAKE_C_COMPILER_TARGET="arm-linux-gnueabihf"``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
60 * ``-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
61 * ``-DLLVM_CONFIG_PATH=/path/to/llvm-config``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
62 * ``-DCMAKE_C_FLAGS="build-c-flags"``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
63
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
64 The build-c-flags need to be sufficient to pass the C-make compiler check and
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
65 to compile compiler-rt. When using a GCC 7 Linaro arm-linux-gnueabihf
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
66 installation the following flags are needed:
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
67
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
68 * ``--target=arm-linux-gnueabihf``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
69 * ``--march=armv7a``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
70 * ``--gcc-toolchain=/path/to/dir/toolchain``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
71 * ``--sysroot=/path/to/toolchain/arm-linux-gnueabihf/libc``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
72
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
73 Depending on how your sysroot is laid out, you may not need ``--gcc-toolchain``.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
74 For example if you have added armhf as an architecture using your Linux
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
75 distributions multiarch support then you should be able to use ``--sysroot=/``.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
76
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
77 Once cmake has completed the builtins can be built with ``ninja builtins``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
78
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
79 Testing compiler-rt builtins using qemu-arm
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
80 ===========================================
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
81 To test the builtins library we need to add a few more cmake flags to enable
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
82 testing and set up the compiler and flags for test case. We must also tell
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
83 cmake that we wish to run the tests on ``qemu-arm``.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
84
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
85 * ``-DCOMPILER_RT_EMULATOR="qemu-arm -L /path/to/armhf/sysroot``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
86 * ``-DCOMPILER_RT_INCLUDE_TESTS=ON``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
87 * ``-DCOMPILER_RT_TEST_COMPILER="/path/to/clang"``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
88 * ``-DCOMPILER_RT_TEST_COMPILER_CFLAGS="test-c-flags"``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
89
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
90 The ``/path/to/armhf/sysroot`` should be the same as the one passed to
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
91 ``--sysroot`` in the "build-c-flags".
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
92
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
93 The "test-c-flags" can be the same as the "build-c-flags", with the addition
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
94 of ``"-fuse-ld=lld`` if you wish to use lld to link the tests.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
95
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
96 Once cmake has completed the tests can be built and run using
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
97 ``ninja check-builtins``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
98
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
99 Modifications for other Targets
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
100 ===============================
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
101
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
102 Arm Soft-Float Target
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
103 ---------------------
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
104 The instructions for the Arm hard-float target can be used for the soft-float
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
105 target by substituting soft-float equivalents for the sysroot and target. The
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
106 target to use is:
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
107
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
108 * ``-DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabi``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
109
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
110 Depending on whether you want to use floating point instructions or not you
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
111 may need extra c-flags such as ``-mfloat-abi=softfp`` for use of floating-point
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
112 instructions, and ``-mfloat-abi=soft -mfpu=none`` for software floating-point
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
113 emulation.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
114
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
115 AArch64 Target
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
116 --------------
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
117 The instructions for Arm can be used for AArch64 by substituting AArch64
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
118 equivalents for the sysroot, emulator and target.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
119
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
120 * ``-DCMAKE_C_COMPILER_TARGET=aarch64-linux-gnu``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
121 * ``-DCOMPILER_RT_EMULATOR="qemu-aarch64 -L /path/to/aarch64/sysroot``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
122
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
123 The CMAKE_C_FLAGS and COMPILER_RT_TEST_COMPILER_CFLAGS may also need:
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
124 ``"--sysroot=/path/to/aarch64/sysroot --gcc-toolchain=/path/to/gcc-toolchain"``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
125
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
126 Armv6-m, Armv7-m and Armv7E-M targets
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
127 -------------------------------------
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
128 If you wish to build, but not test compiler-rt for Armv6-M, Armv7-M or Armv7E-M
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
129 then the easiest way is to use the BaremetalARM.cmake recipe in
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
130 clang/cmake/caches.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
131
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
132 You will need a bare metal sysroot such as that provided by the GNU ARM
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
133 Embedded toolchain.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
134
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
135 The libraries can be built with the cmake options:
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
136
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
137 * ``-DBAREMETAL_ARMV6M_SYSROOT=/path/to/bare/metal/sysroot``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
138 * ``-DBAREMETAL_ARMV7M_SYSROOT=/path/to/bare/metal/sysroot``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
139 * ``-DBAREMETAL_ARMV7EM_SYSROOT=/path/to/bare/metal/sysroot``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
140 * ``-C /path/to/llvm/source/tools/clang/cmake/caches/BaremetalARM.cmake``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
141
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
142 **Note** that for the recipe to work the compiler-rt source must be checked out
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
143 into the directory llvm/runtimes and not llvm/projects.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
144
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
145 To build and test the libraries using a similar method to Armv7-A is possible
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
146 but more difficult. The main problems are:
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
147
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
148 * There isn't a ``qemu-arm`` user-mode emulator for bare-metal systems. The ``qemu-system-arm`` can be used but this is significantly more difficult to setup.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
149 * The target to compile compiler-rt have the suffix -none-eabi. This uses the BareMetal driver in clang and by default won't find the libraries needed to pass the cmake compiler check.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
150
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
151 As the Armv6-M, Armv7-M and Armv7E-M builds of compiler-rt only use instructions
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
152 that are supported on Armv7-A we can still get most of the value of running the
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
153 tests using the same ``qemu-arm`` that we used for Armv7-A by building and
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
154 running the test cases for Armv7-A but using the builtins compiled for
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
155 Armv6-M, Armv7-M or Armv7E-M. This will not catch instructions that are
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
156 supported on Armv7-A but not Armv6-M, Armv7-M and Armv7E-M.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
157
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
158 To get the cmake compile test to pass the libraries needed to successfully link
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
159 the test application will need to be manually added to ``CMAKE_CFLAGS``.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
160 Alternatively if you are using version 3.6 or above of cmake you can use
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
161 ``CMAKE_TRY_COMPILE_TARGET=STATIC_LIBRARY`` to skip the link step.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
162
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
163 * ``-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
164 * ``-DCOMPILER_RT_OS_DIR="baremetal"``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
165 * ``-DCOMPILER_RT_BUILD_BUILTINS=ON``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
166 * ``-DCOMPILER_RT_BUILD_SANITIZERS=OFF``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
167 * ``-DCOMPILER_RT_BUILD_XRAY=OFF``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
168 * ``-DCOMPILER_RT_BUILD_LIBFUZZER=OFF``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
169 * ``-DCOMPILER_RT_BUILD_PROFILE=OFF``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
170 * ``-DCMAKE_C_COMPILER=${host_install_dir}/bin/clang``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
171 * ``-DCMAKE_C_COMPILER_TARGET="your *-none-eabi target"``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
172 * ``-DCMAKE_AR=/path/to/llvm-ar``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
173 * ``-DCMAKE_NM=/path/to/llvm-nm``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
174 * ``-DCMAKE_RANLIB=/path/to/llvm-ranlib``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
175 * ``-DCOMPILER_RT_BAREMETAL_BUILD=ON``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
176 * ``-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
177 * ``-DLLVM_CONFIG_PATH=/path/to/llvm-config``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
178 * ``-DCMAKE_C_FLAGS="build-c-flags"``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
179 * ``-DCMAKE_ASM_FLAGS="${arm_cflags}"``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
180 * ``-DCOMPILER_RT_EMULATOR="qemu-arm -L /path/to/armv7-A/sysroot"``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
181 * ``-DCOMPILER_RT_INCLUDE_TESTS=ON``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
182 * ``-DCOMPILER_RT_TEST_COMPILER="/path/to/clang"``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
183 * ``-DCOMPILER_RT_TEST_COMPILER_CFLAGS="test-c-flags"``
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
184
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
185 The Armv6-M builtins will use the soft-float ABI. When compiling the tests for
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
186 Armv7-A we must include ``"-mthumb -mfloat-abi=soft -mfpu=none"`` in the
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
187 test-c-flags. We must use an Armv7-A soft-float abi sysroot for ``qemu-arm``.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
188
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
189 Unfortunately at time of writing the Armv7-M and Armv7E-M builds of
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
190 compiler-rt will always include assembler files including floating point
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
191 instructions. This means that building for a cpu without a floating point unit
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
192 requires something like removing the arm_Thumb1_VFPv2_SOURCES from the
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
193 arm_Thumb1_SOURCES in builtins/CMakeLists.txt. The float-abi of the compiler-rt
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
194 library must be matched by the float abi of the Armv7-A sysroot used by
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
195 qemu-arm.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
196
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
197 Depending on the linker used for the test cases you may encounter BuildAttribute
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
198 mismatches between the M-profile objects from compiler-rt and the A-profile
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
199 objects from the test. The lld linker does not check the BuildAttributes so it
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
200 can be used to link the tests by adding -fuse-ld=lld to the
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
201 ``COMPILER_RT_TEST_COMPILER_CFLAGS``.