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