NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
toolchain/56067: sys.mk broken for single-suffix rules
>Number: 56067
>Category: toolchain
>Synopsis: sys.mk broken for (some?) single-suffix rules (on some platforms)
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: toolchain-manager
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Mon Mar 22 00:15:01 +0000 2021
>Originator: Greg A. Woods
>Release: NetBSD 9.99.81
>Organization:
Planix, Inc.; Kelowna, BC; Canada
>Environment:
System: NetBSD xentastic 9.99.81 NetBSD 9.99.81 (XEN3_DOM0) #0: Sun Mar 14 22:06:28 PDT 2021 woods@xentastic:/build/woods/xentastic/current-amd64-amd64-obj/build/src/sys/arch/amd64/compile/XEN3_DOM0 amd64
Architecture: x86_64
Machine: amd64
>Description:
I just noticed that on my recently upgraded -current machines I
couldn't build simple programs from single source files with a
"portable" Makefile any more. (In this case it includes
<bsd.own.mk> but does not use bsd.prog.mk and does not set
PROG.)
Instead the program binaries were being put into foo.o files!
It looks like rev. 1.144 of sys.mk was a bit too over-zealous.
This only applies to i386, x86_64 and aarch64, i.e. where MKCTF
defaults to being defined as "yes".
>How-To-Repeat:
mkdir foo && cd foo
echo 'main() {printf("hello world\\n");}' > hello.c
echo '.include <bsd.own.mk>' > Makefile
make hello
Observe that only hello.o is made, but it's the final binary!
>Fix:
Here are my patches that include the fix, and also clean up the
use of various flags in LINK.* (remove CPPFLAGS and add
LDSTATIC) and introduce COMPILE_LINK.* macros to be used with
the direct source to target binary rules (single-suffix rules)
such as ".c:" (and finally also split the settings for debugger
and optimizer flags).
The key parts are to revert the change to use ${OBJECT_TARGET}
in the single-suffix rules like ".c:", and to disable CTFCONVERT
in those rules, since ctfconvert(1) won't work on (static?)
linked binaries, and because of course we still need the final
output file to be the filename _without_ any suffix!
Index: sys.mk
===================================================================
RCS file: /cvs/master/m-NetBSD/main/src/share/mk/sys.mk,v
retrieving revision 1.144
diff -u -u -r1.144 sys.mk
--- sys.mk 9 Nov 2020 16:15:05 -0000 1.144
+++ sys.mk 21 Mar 2021 23:25:00 -0000
@@ -19,30 +19,35 @@
AS?= as
AFLAGS?=
COMPILE.s?= ${CC} ${AFLAGS} ${AFLAGS.${<:T}} -c
-LINK.s?= ${CC} ${AFLAGS} ${AFLAGS.${<:T}} ${LDFLAGS}
+LINK.s?= ${CC} ${AFLAGS} ${AFLAGS.${<:T}} ${LDSTATIC} ${LDFLAGS}
_ASM_TRADITIONAL_CPP= -x assembler-with-cpp
COMPILE.S?= ${CC} ${AFLAGS} ${AFLAGS.${<:T}} ${CPPFLAGS} ${_ASM_TRADITIONAL_CPP} -c
-LINK.S?= ${CC} ${AFLAGS} ${AFLAGS.${<:T}} ${CPPFLAGS} ${LDFLAGS}
+LINK.S?= ${CC} ${AFLAGS} ${AFLAGS.${<:T}} ${LDSTATIC} ${LDFLAGS}
+COMPILE_LINK.S?=${CC} ${AFLAGS} ${AFLAGS.${<:T}} ${CPPFLAGS} ${_ASM_TRADITIONAL_CPP} ${LDSTATIC} ${LDFLAGS}
CC?= cc
.if ${MACHINE_ARCH} == "sh3el" || ${MACHINE_ARCH} == "sh3eb"
# -O2 is too -falign-* zealous for low-memory sh3 machines
-DBG?= -Os -freorder-blocks
+OPTIM?= -Os -freorder-blocks
.elif ${MACHINE_ARCH} == "m68k" || ${MACHINE_ARCH} == "m68000"
# -freorder-blocks (enabled by -O2) produces much bigger code
-DBG?= -O2 -fno-reorder-blocks
+OPTIM?= -O2 -fno-reorder-blocks
.elif ${MACHINE_ARCH} == "coldfire"
+OPTIM?= -O1
DBG?= -O1
.else
-DBG?= -O2
+OPTIM?= -O2
.endif
+DBG?= # nothing -- just defined
+
.if ${MKDTRACE:Uno} != "no"
DTRACE_OPTS?= -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-ipa-sra -fno-ipa-icf
.endif
-CFLAGS?= ${DBG}
+CFLAGS?= ${OPTIM} ${DBG}
LDFLAGS?=
COMPILE.c?= ${CC} ${CFLAGS} ${DTRACE_OPTS} ${CPPFLAGS} -c
-LINK.c?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}
+LINK.c?= ${CC} ${CFLAGS} ${LDSTATIC} ${LDFLAGS}
+COMPILE_LINK.c?=${CC} ${CFLAGS} ${DTRACE_OPTS} ${CPPFLAGS} ${LDSTATIC} ${LDFLAGS}
# C Type Format data is required for DTrace
CTFFLAGS ?= -g -L VERSION
@@ -67,12 +72,14 @@
_CXXSEED?= ${BUILDSEED:D-frandom-seed=${__BUILDSEED:hash}}
COMPILE.cc?= ${CXX} ${_CXXSEED} ${CXXFLAGS} ${DTRACE_OPTS} ${CPPFLAGS} -c
-LINK.cc?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS}
+LINK.cc?= ${CXX} ${CXXFLAGS} ${LDSTATIC} ${LDFLAGS}
+COMPILE_LINK.cc?=${CXX} ${_CXXSEED} ${CXXFLAGS} ${DTRACE_OPTS} ${CPPFLAGS} ${LDSTATIC} ${LDFLAGS}
OBJC?= ${CC}
OBJCFLAGS?= ${CFLAGS}
COMPILE.m?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c
-LINK.m?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS}
+LINK.m?= ${OBJC} ${OBJCFLAGS} ${LDSTATIC} ${LDFLAGS}
+COMPILE_LINK.m?=${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDSTATIC} ${LDFLAGS}
CPP?= cpp
CPPFLAGS?=
@@ -81,14 +88,19 @@
FFLAGS?= -O
RFLAGS?=
COMPILE.f?= ${FC} ${FFLAGS} -c
-LINK.f?= ${FC} ${FFLAGS} ${LDFLAGS}
+LINK.f?= ${FC} ${FFLAGS} ${LDSTATIC} ${LDFLAGS}
+COMPILE_LINK.f?=${FC} ${FFLAGS} ${CPPFLAGS} ${LDSTATIC} ${LDFLAGS}
COMPILE.F?= ${FC} ${FFLAGS} ${CPPFLAGS} -c
-LINK.F?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS}
+LINK.F?= ${FC} ${FFLAGS} ${LDSTATIC} ${LDFLAGS}
+COMPILE_LINK.F?=${FC} ${FFLAGS} ${CPPFLAGS} ${LDSTATIC} ${LDFLAGS}
COMPILE.r?= ${FC} ${FFLAGS} ${RFLAGS} -c
-LINK.r?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS}
+LINK.r?= ${FC} ${FFLAGS} ${LDSTATIC} ${LDFLAGS}
+COMPILE_LINK.r?=${FC} ${FFLAGS} ${CPPFLAGS} ${LDSTATIC} ${LDFLAGS}
INSTALL?= install
+MV?= mv
+
LD?= ld
LEX?= lex
@@ -107,7 +119,8 @@
PC?= pc
PFLAGS?=
COMPILE.p?= ${PC} ${PFLAGS} ${CPPFLAGS} -c
-LINK.p?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS}
+LINK.p?= ${PC} ${PFLAGS} ${LDSTATIC} ${LDFLAGS}
+COMPILE_LINK.p?=${PC} ${PFLAGS} ${CPPFLAGS} ${LDSTATIC} ${LDFLAGS}
SHELL?= sh
@@ -121,7 +134,7 @@
# C
.c:
- ${LINK.c} ${OBJECT_TARGET} ${.IMPSRC} ${LDLIBS}
+ ${COMPILE_LINK.c} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
# XXX: disable for now
# ${CTFCONVERT_RUN}
.c.o:
@@ -138,7 +151,7 @@
# C++
.cc .cpp .cxx .C:
- ${LINK.cc} ${OBJECT_TARGET} ${.IMPSRC} ${LDLIBS}
+ ${COMPILE_LINK.cc} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
# XXX: disable for now
# ${CTFCONVERT_RUN}
.cc.o .cpp.o .cxx.o .C.o:
@@ -151,8 +164,9 @@
# Fortran/Ratfor
.f:
- ${LINK.f} ${OBJECT_TARGET} ${.IMPSRC} ${LDLIBS}
- ${CTFCONVERT_RUN}
+ ${COMPILE_LINK.f} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
+# XXX: disable for now
+# ${CTFCONVERT_RUN}
.f.o:
${COMPILE.f} ${.IMPSRC} ${OBJECT_TARGET}
${CTFCONVERT_RUN}
@@ -162,8 +176,9 @@
rm -f ${.PREFIX}.o
.F:
- ${LINK.F} ${OBJECT_TARGET} ${.IMPSRC} ${LDLIBS}
- ${CTFCONVERT_RUN}
+ ${COMPILE_LINK.F} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
+# XXX: disable for now
+# ${CTFCONVERT_RUN}
.F.o:
${COMPILE.F} ${.IMPSRC} ${OBJECT_TARGET}
${CTFCONVERT_RUN}
@@ -173,8 +188,9 @@
rm -f ${.PREFIX}.o
.r:
- ${LINK.r} ${OBJECT_TARGET} ${.IMPSRC} ${LDLIBS}
- ${CTFCONVERT_RUN}
+ ${COMPILE_LINK.r} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
+# XXX: disable for now
+# ${CTFCONVERT_RUN}
.r.o:
${COMPILE.r} ${.IMPSRC} ${OBJECT_TARGET}
${CTFCONVERT_RUN}
@@ -185,8 +201,9 @@
# Pascal
.p:
- ${LINK.p} ${OBJECT_TARGET} ${.IMPSRC} ${LDLIBS}
- ${CTFCONVERT_RUN}
+ ${COMPILE_LINK.p} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
+# XXX: disable for now
+# ${CTFCONVERT_RUN}
.p.o:
${COMPILE.p} ${.IMPSRC} ${OBJECT_TARGET}
${CTFCONVERT_RUN}
@@ -197,8 +214,9 @@
# Assembly
.s:
- ${LINK.s} ${OBJECT_TARGET} ${.IMPSRC} ${LDLIBS}
- ${CTFCONVERT_RUN}
+ ${COMPILE_LINK.s} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
+# XXX: disable for now
+# ${CTFCONVERT_RUN}
.s.o:
${COMPILE.s} ${.IMPSRC} ${OBJECT_TARGET}
${CTFCONVERT_RUN}
@@ -207,8 +225,9 @@
${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
rm -f ${.PREFIX}.o
.S:
- ${LINK.S} ${OBJECT_TARGET} ${.IMPSRC} ${LDLIBS}
- ${CTFCONVERT_RUN}
+ ${COMPILE_LINK.S} -o ${.TARGET} ${.IMPSRC} ${LDLIBS}
+# XXX: disable for now
+# ${CTFCONVERT_RUN}
.S.o:
${COMPILE.S} ${.IMPSRC} ${OBJECT_TARGET}
${CTFCONVERT_RUN}
@@ -220,8 +239,9 @@
# Lex
.l:
${LEX.l} ${.IMPSRC}
- ${LINK.c} ${OBJECT_TARGET} lex.yy.c ${LDLIBS} -ll
- ${CTFCONVERT_RUN}
+ ${COMPILE_LINK.c} -o ${.TARGET} lex.yy.c ${LDLIBS} -ll
+# XXX: disable for now
+# ${CTFCONVERT_RUN}
rm -f lex.yy.c
.l.c:
${LEX.l} ${.IMPSRC}
@@ -235,8 +255,9 @@
# Yacc
.y:
${YACC.y} ${.IMPSRC}
- ${LINK.c} ${OBJECT_TARGET} y.tab.c ${LDLIBS}
- ${CTFCONVERT_RUN}
+ ${COMPILE_LINK.c} -o ${.TARGET} y.tab.c ${LDLIBS}
+# XXX: disable for now
+# ${CTFCONVERT_RUN}
rm -f y.tab.c
.y.c:
${YACC.y} ${.IMPSRC}
Home |
Main Index |
Thread Index |
Old Index