xref: /freebsd/contrib/arm-optimized-routines/README (revision dd21556857e8d40f66bf5ad54754d9d52669ebf7)
1Arm Optimized Routines
2----------------------
3
4This repository contains implementations of library functions
5provided by Arm. The outbound license is available under a dual
6license, at the user’s election, as reflected in the LICENSE file.
7Contributions to this project are accepted, but Contributors have
8to sign an Assignment Agreement, please follow the instructions in
9contributor-agreement.pdf. This is needed so upstreaming code
10to projects that require copyright assignment is possible. Further
11contribution requirements are documented in README.contributors of
12the appropriate subdirectory.
13
14Regular quarterly releases are tagged as vYY.MM, the latest
15release is v25.01.
16
17Source code layout:
18
19build/          - build directory (created by make).
20math/           - math subproject sources for generic scalar
21                  subroutines and sources shared with
22                  subdirectories of math/.
23                  All math routines should meet the quality
24                  requirements stated in math/README.contributors,
25                  routines that fail to do so are located in an
26                  experimental/ directory.
27math/aarch64/   - math subproject AArch64-specific sources
28                  and sources shared with subdirectories.
29math/aarch64/advsimd      - AdvSIMD-specific math sources.
30math/aarch64/experimental - Experimental math sources do not
31                            meet quality requirements stated in
32                            math/README.contributors.
33math/aarch64/sve          - SVE-specific math sources.
34math/include/   - math library public headers.
35math/test/      - math test and benchmark related sources.
36math/tools/     - tools used for designing the algorithms.
37networking/     - networking subproject sources.
38networking/include/ - networking library public headers.
39networking/test/ - networking test and benchmark related sources.
40string/         - string routines subproject sources.
41                  All string routines should meet the quality
42                  requirements stated in string/README.contributors,
43                  routines that fail to do so are located in an
44                  experimental/ directory.
45string/<arch>   - <arch>-specific string routines sources for
46                  <arch>=aarch64, and arm.
47string/aarch64/experimental - Experimental string routines which
48                              may not be fully optimized yet.
49string/include/ - string library public headers.
50string/test/    - string test and benchmark related sources.
51
52The steps to build the target libraries and run the tests:
53
54cp config.mk.dist config.mk
55# edit config.mk if necessary ...
56make
57make check
58
59Or building outside of the source directory:
60
61ln -s path/to/src/Makefile Makefile
62cp path/to/src/config.mk.dist config.mk
63echo 'srcdir = path/to/src' >> config.mk
64# further edits to config.mk
65make
66make check
67
68Or building and testing the math subproject only:
69
70make all-math
71make check-math
72
73Note on compiler compability/requirement:
74
75SVE routines are always built by default - this means that on AArch64
76GCC >= 10 or LLVM >= 5 are always required for SVE ACLE compatibility.
77There is no explicit check for compatible compiler, therefore the SVE
78routines will fail to build if CC is too old.
79
80The test system requires libmpfr and libmpc.
81For example on debian linux they can be installed as:
82
83sudo apt-get install libmpfr-dev libmpc-dev
84
85For cross build, CROSS_COMPILE should be set in config.mk and EMULATOR
86should be set for cross testing (e.g. using qemu-user or remote access
87to a target machine), see the examples in config.mk.dist.
88