xref: /freebsd/contrib/arm-optimized-routines/config.mk.dist (revision f3087bef11543b42e0d69b708f367097a4118d24)
131914882SAlex Richardson# Example config.mk
231914882SAlex Richardson#
3*f3087befSAndrew Turner# Copyright (c) 2018-2024, Arm Limited.
4072a4ba8SAndrew Turner# SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
531914882SAlex Richardson
631914882SAlex Richardson# Subprojects to build
731914882SAlex RichardsonSUBS = math string networking
831914882SAlex Richardson
931914882SAlex Richardson# Target architecture: aarch64, arm or x86_64
1031914882SAlex RichardsonARCH = aarch64
1131914882SAlex Richardson
1231914882SAlex Richardson# Use for cross compilation with gcc.
1331914882SAlex Richardson#CROSS_COMPILE = aarch64-none-linux-gnu-
1431914882SAlex Richardson
1531914882SAlex Richardson# Compiler for the target
1631914882SAlex RichardsonCC = $(CROSS_COMPILE)gcc
1731914882SAlex RichardsonCFLAGS = -std=c99 -pipe -O3
1831914882SAlex RichardsonCFLAGS += -Wall -Wno-missing-braces
1931914882SAlex RichardsonCFLAGS += -Werror=implicit-function-declaration
2031914882SAlex Richardson
2131914882SAlex Richardson# Used for test case generator that is executed on the host
2231914882SAlex RichardsonHOST_CC = gcc
2331914882SAlex RichardsonHOST_CFLAGS = -std=c99 -O2
2431914882SAlex RichardsonHOST_CFLAGS += -Wall -Wno-unused-function
2531914882SAlex Richardson
2631914882SAlex Richardson# Enable debug info.
2731914882SAlex RichardsonHOST_CFLAGS += -g
2831914882SAlex RichardsonCFLAGS += -g
2931914882SAlex Richardson
30*f3087befSAndrew Turnerifeq ($(OS),Msys)
31*f3087befSAndrew Turner  # llvm is the only available/valid native compiler
32*f3087befSAndrew Turner  CC = clang
33*f3087befSAndrew Turner  AR = llvm-ar
34*f3087befSAndrew Turner  RANLIB = llvm-ranlib
35*f3087befSAndrew Turner  HOST_CC = clang
36*f3087befSAndrew Turner  SYSROOT = /c/wenv/msys2/msys64/clangarm64
37*f3087befSAndrew Turner  # Common windows flags
38*f3087befSAndrew Turner  COMMON_WIN_CFLAGS = -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
39*f3087befSAndrew Turner  COMMON_WIN_CFLAGS += -Wno-deprecated-declarations -Wno-unused-variable
40*f3087befSAndrew Turner  # For mathtest
41*f3087befSAndrew Turner  HOST_CFLAGS += -I$(SYSROOT)/include
42*f3087befSAndrew Turner  HOST_CFLAGS += $(COMMON_WIN_CFLAGS) -Wno-ignored-attributes
43*f3087befSAndrew Turner  # Clear the default flag -fPIC, as not supported on Windows
44*f3087befSAndrew Turner  CFLAGS_SHARED =
45*f3087befSAndrew Turner  # For ulp.h with MPFR
46*f3087befSAndrew Turner  CFLAGS += -I$(SYSROOT)/include
47*f3087befSAndrew Turner  # For clang on Windows
48*f3087befSAndrew Turner  CFLAGS += $(COMMON_WIN_CFLAGS)
49*f3087befSAndrew Turnerendif
50*f3087befSAndrew Turner
5131914882SAlex Richardson# Optimize the shared libraries on aarch64 assuming they fit in 1M.
5231914882SAlex Richardson#CFLAGS_SHARED = -fPIC -mcmodel=tiny
5331914882SAlex Richardson
5431914882SAlex Richardson# Enable MTE support.
5531914882SAlex Richardson#CFLAGS += -march=armv8.5-a+memtag -DWANT_MTE_TEST=1
5631914882SAlex Richardson
5731914882SAlex Richardson# Use with cross testing.
5831914882SAlex Richardson#EMULATOR = qemu-aarch64-static
5931914882SAlex Richardson#EMULATOR = sh -c 'scp $$1 user@host:/dir && ssh user@host /dir/"$$@"' --
6031914882SAlex Richardson
6131914882SAlex Richardson# Additional flags for subprojects.
6231914882SAlex Richardsonmath-cflags =
6331914882SAlex Richardsonmath-ldlibs =
6431914882SAlex Richardsonmath-ulpflags =
6531914882SAlex Richardsonmath-testflags =
66*f3087befSAndrew Turnerstring-cflags = -falign-functions=64
6731914882SAlex Richardsonnetworking-cflags =
6831914882SAlex Richardson
69*f3087befSAndrew Turnerifeq ($(OS),Msys)
70*f3087befSAndrew Turner  # Libraries can be installed with pacman
71*f3087befSAndrew Turner  libm-libs = -lmsvcrt -lvcruntime -lucrt
72*f3087befSAndrew Turner  libc-libs =
73*f3087befSAndrew Turner  # Linker will look for .lib but some systems only have .dll.a,
74*f3087befSAndrew Turner  # therefore we have to give absolute path to libraries.
75*f3087befSAndrew Turner  # This is system dependent and might need adjusting.
76*f3087befSAndrew Turner  mpfr-libs = $(SYSROOT)/lib/libmpfr.dll.a
77*f3087befSAndrew Turner  gmp-libs = $(SYSROOT)/lib/libgmp.dll.a
78*f3087befSAndrew Turner  mpc-libs = $(SYSROOT)/lib/libmpc.dll.a
79*f3087befSAndrew Turnerendif
80*f3087befSAndrew Turner
81*f3087befSAndrew Turner# Use if mpfr is available on the target for ulp error checking. If
82*f3087befSAndrew Turner# enabling this, it is advised to disable fenv checks by uncommenting
83*f3087befSAndrew Turner# the two lines at the bottom of this block.
84*f3087befSAndrew TurnerUSE_MPFR=0
85*f3087befSAndrew Turnermath-cflags += -DUSE_MPFR=$(USE_MPFR)
86*f3087befSAndrew Turnerifeq ($(USE_MPFR), 1)
87*f3087befSAndrew Turner  math-ldlibs += $(mpfr-libs) $(gmp-libs)
88*f3087befSAndrew Turner  math-ulpflags += -m
89*f3087befSAndrew Turnerendif
90*f3087befSAndrew Turner# Disable fenv checks
91*f3087befSAndrew Turner#math-ulpflags = -q -f
92*f3087befSAndrew Turner#math-testflags = -nostatus
9331914882SAlex Richardson
9431914882SAlex Richardson# Use with gcc.
9531914882SAlex Richardsonmath-cflags += -frounding-math -fexcess-precision=standard -fno-stack-protector
9631914882SAlex Richardsonmath-cflags += -ffp-contract=fast -fno-math-errno
9731914882SAlex Richardson
9831914882SAlex Richardson# Use with clang.
9931914882SAlex Richardson#math-cflags += -ffp-contract=fast
10031914882SAlex Richardson
101072a4ba8SAndrew Turner# If defined to 1, set errno in math functions according to ISO C.  Many math
102072a4ba8SAndrew Turner# libraries do not set errno, so this is 0 by default.  It may need to be
103072a4ba8SAndrew Turner# set to 1 if math.h has (math_errhandling & MATH_ERRNO) != 0.
104072a4ba8SAndrew TurnerWANT_ERRNO = 0
105072a4ba8SAndrew Turnermath-cflags += -DWANT_ERRNO=$(WANT_ERRNO)
106072a4ba8SAndrew Turner
107*f3087befSAndrew Turner# Disable/enable SVE vector math tests/tools.
108*f3087befSAndrew Turnerifeq ($(ARCH),aarch64)
109*f3087befSAndrew Turner  WANT_SVE_TESTS = 1
110*f3087befSAndrew Turnerelse
111*f3087befSAndrew Turner  WANT_SVE_TESTS = 0
112*f3087befSAndrew Turnerendif
113*f3087befSAndrew Turnermath-cflags += -DWANT_SVE_TESTS=$(WANT_SVE_TESTS)
114*f3087befSAndrew Turner
115072a4ba8SAndrew Turner# If set to 1, set fenv in vector math routines.
116072a4ba8SAndrew TurnerWANT_SIMD_EXCEPT = 0
117072a4ba8SAndrew Turnermath-cflags += -DWANT_SIMD_EXCEPT=$(WANT_SIMD_EXCEPT)
118072a4ba8SAndrew Turner
119*f3087befSAndrew Turner# If set to 1, enable tests for exp10.
120*f3087befSAndrew TurnerWANT_EXP10_TESTS = 1
121*f3087befSAndrew Turnermath-cflags += -DWANT_EXP10_TESTS=$(WANT_EXP10_TESTS)
122*f3087befSAndrew Turner
123*f3087befSAndrew Turner# If set to 1, enable tests for sinpi and cospi. These functions are
124*f3087befSAndrew Turner# only supported on aarch64
125*f3087befSAndrew Turnerifeq ($(ARCH),aarch64)
126*f3087befSAndrew Turner  WANT_TRIGPI_TESTS = 1
127*f3087befSAndrew Turnerelse
128*f3087befSAndrew Turner  WANT_TRIGPI_TESTS = 0
129*f3087befSAndrew Turnerendif
130*f3087befSAndrew Turnermath-cflags += -DWANT_TRIGPI_TESTS=$(WANT_TRIGPI_TESTS)
13131914882SAlex Richardson
13231914882SAlex Richardson# Remove GNU Property Notes from asm files.
13331914882SAlex Richardson#string-cflags += -DWANT_GNU_PROPERTY=0
13431914882SAlex Richardson
13531914882SAlex Richardson# Enable assertion checks.
13631914882SAlex Richardson#networking-cflags += -DWANT_ASSERT
13731914882SAlex Richardson
13831914882SAlex Richardson# Avoid auto-vectorization of scalar code and unroll loops
13931914882SAlex Richardsonnetworking-cflags += -O2 -fno-tree-vectorize -funroll-loops
140*f3087befSAndrew Turner
141*f3087befSAndrew Turner# Provide *_finite symbols and some of the glibc hidden symbols
142*f3087befSAndrew Turner# so libmathlib can be used with binaries compiled against glibc
143*f3087befSAndrew Turner# to interpose math functions with both static and dynamic linking
144*f3087befSAndrew TurnerUSE_GLIBC_ABI = 1
145*f3087befSAndrew Turnermath-cflags += -DUSE_GLIBC_ABI=$(USE_GLIBC_ABI)
146*f3087befSAndrew Turner
147*f3087befSAndrew Turner# Enable experimental math routines - non-C23 vector math and low-accuracy scalar
148*f3087befSAndrew TurnerWANT_EXPERIMENTAL_MATH = 0
149*f3087befSAndrew Turnermath-cflags += -DWANT_EXPERIMENTAL_MATH=$(WANT_EXPERIMENTAL_MATH)
150