Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/arm-optimized-routines/config.mk.dist
39475 views
# Example config.mk
#
# Copyright (c) 2018-2024, Arm Limited.
# SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception

# Subprojects to build
SUBS = math string networking

# Target architecture: aarch64, arm or x86_64
ARCH = aarch64

# Use for cross compilation with gcc.
#CROSS_COMPILE = aarch64-none-linux-gnu-

# Compiler for the target
CC = $(CROSS_COMPILE)gcc
CFLAGS = -std=c99 -pipe -O3
CFLAGS += -Wall -Wno-missing-braces
CFLAGS += -Werror=implicit-function-declaration

# Used for test case generator that is executed on the host
HOST_CC = gcc
HOST_CFLAGS = -std=c99 -O2
HOST_CFLAGS += -Wall -Wno-unused-function

# Enable debug info.
HOST_CFLAGS += -g
CFLAGS += -g

ifeq ($(OS),Msys)
  # llvm is the only available/valid native compiler
  CC = clang
  AR = llvm-ar
  RANLIB = llvm-ranlib
  HOST_CC = clang
  SYSROOT = /c/wenv/msys2/msys64/clangarm64
  # Common windows flags
  COMMON_WIN_CFLAGS = -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
  COMMON_WIN_CFLAGS += -Wno-deprecated-declarations -Wno-unused-variable
  # For mathtest
  HOST_CFLAGS += -I$(SYSROOT)/include
  HOST_CFLAGS += $(COMMON_WIN_CFLAGS) -Wno-ignored-attributes
  # Clear the default flag -fPIC, as not supported on Windows
  CFLAGS_SHARED =
  # For ulp.h with MPFR
  CFLAGS += -I$(SYSROOT)/include
  # For clang on Windows
  CFLAGS += $(COMMON_WIN_CFLAGS)
endif

# Optimize the shared libraries on aarch64 assuming they fit in 1M.
#CFLAGS_SHARED = -fPIC -mcmodel=tiny

# Enable MTE support.
#CFLAGS += -march=armv8.5-a+memtag -DWANT_MTE_TEST=1

# Use with cross testing.
#EMULATOR = qemu-aarch64-static
#EMULATOR = sh -c 'scp $$1 user@host:/dir && ssh user@host /dir/"$$@"' --

# Additional flags for subprojects.
math-cflags =
math-ldlibs =
math-ulpflags =
math-testflags =
string-cflags = -falign-functions=64
networking-cflags =

ifeq ($(OS),Msys)
  # Libraries can be installed with pacman
  libm-libs = -lmsvcrt -lvcruntime -lucrt
  libc-libs =
  # Linker will look for .lib but some systems only have .dll.a,
  # therefore we have to give absolute path to libraries.
  # This is system dependent and might need adjusting.
  mpfr-libs = $(SYSROOT)/lib/libmpfr.dll.a
  gmp-libs = $(SYSROOT)/lib/libgmp.dll.a
  mpc-libs = $(SYSROOT)/lib/libmpc.dll.a
endif

# Use if mpfr is available on the target for ulp error checking. If
# enabling this, it is advised to disable fenv checks by uncommenting
# the two lines at the bottom of this block.
USE_MPFR=0
math-cflags += -DUSE_MPFR=$(USE_MPFR)
ifeq ($(USE_MPFR), 1)
  math-ldlibs += $(mpfr-libs) $(gmp-libs)
  math-ulpflags += -m
endif
# Disable fenv checks
#math-ulpflags = -q -f
#math-testflags = -nostatus

# Use with gcc.
math-cflags += -frounding-math -fexcess-precision=standard -fno-stack-protector
math-cflags += -ffp-contract=fast -fno-math-errno

# Use with clang.
#math-cflags += -ffp-contract=fast

# If defined to 1, set errno in math functions according to ISO C.  Many math
# libraries do not set errno, so this is 0 by default.  It may need to be
# set to 1 if math.h has (math_errhandling & MATH_ERRNO) != 0.
WANT_ERRNO = 0
math-cflags += -DWANT_ERRNO=$(WANT_ERRNO)

# Disable/enable SVE vector math tests/tools.
ifeq ($(ARCH),aarch64)
  WANT_SVE_TESTS = 1
else
  WANT_SVE_TESTS = 0
endif
math-cflags += -DWANT_SVE_TESTS=$(WANT_SVE_TESTS)

# If set to 1, set fenv in vector math routines.
WANT_SIMD_EXCEPT = 0
math-cflags += -DWANT_SIMD_EXCEPT=$(WANT_SIMD_EXCEPT)

# If set to 1, enable tests for exp10.
WANT_EXP10_TESTS = 1
math-cflags += -DWANT_EXP10_TESTS=$(WANT_EXP10_TESTS)

# If set to 1, enable tests for sinpi and cospi. These functions are
# only supported on aarch64
ifeq ($(ARCH),aarch64)
  WANT_TRIGPI_TESTS = 1
else
  WANT_TRIGPI_TESTS = 0
endif
math-cflags += -DWANT_TRIGPI_TESTS=$(WANT_TRIGPI_TESTS)

# Remove GNU Property Notes from asm files.
#string-cflags += -DWANT_GNU_PROPERTY=0

# Enable assertion checks.
#networking-cflags += -DWANT_ASSERT

# Avoid auto-vectorization of scalar code and unroll loops
networking-cflags += -O2 -fno-tree-vectorize -funroll-loops

# Provide *_finite symbols and some of the glibc hidden symbols
# so libmathlib can be used with binaries compiled against glibc
# to interpose math functions with both static and dynamic linking
USE_GLIBC_ABI = 1
math-cflags += -DUSE_GLIBC_ABI=$(USE_GLIBC_ABI)

# Enable experimental math routines - non-C23 vector math and low-accuracy scalar
WANT_EXPERIMENTAL_MATH = 0
math-cflags += -DWANT_EXPERIMENTAL_MATH=$(WANT_EXPERIMENTAL_MATH)