aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGleb Popov <arrowd@FreeBSD.org>2022-08-08 15:16:00 +0000
committerGleb Popov <arrowd@FreeBSD.org>2022-09-13 18:55:45 +0000
commit998c08856a4e261dbd92771561d65a0201ec03d4 (patch)
tree383aac522f14780ee44d3125ee75eb4ad4a56110
parent075a04d7d77b528e4b31e7b1205ad434f5c01623 (diff)
src.conf: Introduce WITHOUT_MACHDEP_OPTIMIZATIONS knob.
Summary: This knob can be used to make buildsystem prefer generic C implentations of various functions, instead of machine-specific assembler ones. Test Plan: `make buildworld` on amd64 Reviewed by: imp, emaste Differential Revision: https://reviews.freebsd.org/D36076 (cherry picked from commit 20adba8bc1beb125d5e5ed8f12e747ae79ca6a10)
-rw-r--r--lib/libc/Makefile2
-rw-r--r--lib/libmd/Makefile2
-rw-r--r--lib/msun/Makefile2
-rw-r--r--share/man/man5/src.conf.54
-rw-r--r--share/mk/src.opts.mk1
-rw-r--r--tools/build/options/WITHOUT_MACHDEP_OPTIMIZATIONS1
6 files changed, 8 insertions, 4 deletions
diff --git a/lib/libc/Makefile b/lib/libc/Makefile
index 2f2e07c03438..6363cef8d48b 100644
--- a/lib/libc/Makefile
+++ b/lib/libc/Makefile
@@ -165,7 +165,7 @@ CFLAGS+= -DSYMBOL_VERSIONING
# If there are no machine dependent sources, append all the
# machine-independent sources:
-.if empty(MDSRCS)
+.if empty(MDSRCS) || ${MK_MACHDEP_OPTIMIZATIONS} == no
SRCS+= ${MISRCS}
.else
# Append machine-dependent sources, then append machine-independent sources
diff --git a/lib/libmd/Makefile b/lib/libmd/Makefile
index c98c33bae3f5..8d3a05279004 100644
--- a/lib/libmd/Makefile
+++ b/lib/libmd/Makefile
@@ -103,7 +103,7 @@ CFLAGS.skein_block.c+= -DSKEIN_LOOP=995
.PATH: ${SRCTOP}/sys/crypto/skein ${SRCTOP}/sys/crypto/skein/${MACHINE_ARCH}
USE_ASM_SOURCES?=1
-.if defined(BOOTSTRAPPING)
+.if defined(BOOTSTRAPPING) || ${MK_MACHDEP_OPTIMIZATIONS} == no
# Don't build ASM sources when bootstrapping to avoid toolchain dependencies
USE_ASM_SOURCES:=0
.endif
diff --git a/lib/msun/Makefile b/lib/msun/Makefile
index 6274c27c12c5..0be2813bb933 100644
--- a/lib/msun/Makefile
+++ b/lib/msun/Makefile
@@ -152,7 +152,7 @@ COMMON_SRCS+= catrig.c catrigf.c \
#COMMON_SRCS+= s_fabs.c s_frexp.c s_isnan.c s_ldexp.c s_modf.c
# Exclude the generic versions of what we provide in the MD area.
-.if defined(ARCH_SRCS)
+.if defined(ARCH_SRCS) && "${MK_MACHDEP_OPTIMIZATIONS}" != no
.for i in ${ARCH_SRCS}
COMMON_SRCS:= ${COMMON_SRCS:N${i:R}.c}
.endfor
diff --git a/share/man/man5/src.conf.5 b/share/man/man5/src.conf.5
index 272ad1cb9e71..99ffdb38d8e1 100644
--- a/share/man/man5/src.conf.5
+++ b/share/man/man5/src.conf.5
@@ -1,6 +1,6 @@
.\" DO NOT EDIT-- this file is @generated by tools/build/options/makeman.
.\" $FreeBSD$
-.Dd July 18, 2022
+.Dd September 9, 2022
.Dt SRC.CONF 5
.Os
.Sh NAME
@@ -1060,6 +1060,8 @@ and related programs.
Build
.Xr ls 1
without support for colors to distinguish file types.
+.It Va WITHOUT_MACHDEP_OPTIMIZATIONS
+Prefer machine-independent non-assembler code in libc and libm.
.It Va WITHOUT_MAIL
Do not build any mail support (MUA or MTA).
When set, it enforces these options:
diff --git a/share/mk/src.opts.mk b/share/mk/src.opts.mk
index 3fb104ad1c50..90405ce4b80c 100644
--- a/share/mk/src.opts.mk
+++ b/share/mk/src.opts.mk
@@ -140,6 +140,7 @@ __DEFAULT_YES_OPTIONS = \
LOCATE \
LPR \
LS_COLORS \
+ MACHDEP_OPTIMIZATIONS \
MAIL \
MAILWRAPPER \
MAKE \
diff --git a/tools/build/options/WITHOUT_MACHDEP_OPTIMIZATIONS b/tools/build/options/WITHOUT_MACHDEP_OPTIMIZATIONS
new file mode 100644
index 000000000000..1c596c998504
--- /dev/null
+++ b/tools/build/options/WITHOUT_MACHDEP_OPTIMIZATIONS
@@ -0,0 +1 @@
+Prefer machine-independent non-assembler code in libc and libm.