Picking up this problem after a long hiatus...
On Sun, 22 May 2011, Warner Losh wrote:
The usual reason that vnode_if.h doesn't build for me when I'm doing
in-tree hacking is because make depend hasn't run to generate it yet.
Or more precisely, the arc in the dependency graph from osi_crypto.c to
vnode_if.h. I didn't see that as part of the log, so you might try this
first (and make setup dependent on depend somehow, as long as it is
idempotent.
Ah, thanks for that pointer, having setup depend on 'depend' does help get
SRCS=vnode_if.h to actually work. However, that does not solve all of my
problems; the "too many arguments to gcc with -o and -c" problem remains.
It stems from the way upstream's Makefile is structured to build the
object files:
afs_analyze.o: $(TOP_SRC_AFS)/afs_analyze.c
$(CRULE_OPT)
CRULE_OPT= $(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(KERN_OPTMZ) $(CFLAGS)
$(CFLAGS-$@) -o $@ -c $?
$? picks up ${_ILINKS} and apparently ${SRCS} as having been out-of-date
when the run was started, which produes the error. Since I don't think I
can convince make to not do that, I'm mostly resigned to redefining
CRULE_OPT to use ${?:M*.c}, which lets things proceed fairly nicely, and
build a bunch of objs. However, the build eventually dies with:
make: don't know how to make .o. Stop
The following 'make -d A' output proves enlightening:
Global:SRCS = vnode_if.h
[...]
Global:OBJS = ${AFSAOBJS} ${AFSNONFSOBJS} ${SRCS:N*.h:R:S/$/.o/g}
Global:PROG = ${KMOD}.ko
Global:FULLPROG = ${PROG}
lhs = "no", rhs = "yes", op = ==
Global:EXPORT_SYMS = NO
lhs = "NO", rhs = "YES", op = !=
Global:CLEANFILES = export_syms
lhs = "no", rhs = "yes", op = ==
Applying :N to "vnode_if.h"
Result is ""
Applying :R to ""
Result is ""
Applying :S to ""
Result is ".o"
[...]
make: don't know how to make .o. Stop
It looks like I may be able to work around by putting something else in
SRCS instead of OBJS, but it is still rather interesting behavior,
and might be considered a bug under some sets of assumptions.
Any insight into whether it is/is not possible to have $? be just the C
source, or about the issue where the empty string becomes ".o" would be
appreciated. Or do I always want to redefine CRULE_OPT to something set
by the system makefiles? (There is also a CRULE_NOOPT which is similar.)
But many of the things that are being setup with the setup target
shouldn't be necessary. depend does that based on the setting of
SYSDIR. and the @ symlink should be enough to make the ufs and other
symlinks unnecessary.
At least some of them will require code changes, but I suppose that I can
do that with a flag day.
Thanks,
Ben
On May 21, 2011, at 12:14 AM, Benjamin Kaduk wrote:
After getting a few pointers from jhb at BSDCan on what a
bsd.kmod.mk-using Makefile should look like, I have been trying my hand
at porting the OpenAFS kernel module build system to use it. (The main
thing this gets us is not having to manually track version- and
architecture-dependent CFLAGS and the like.) However, the path is not
exactly smooth.
A lot of the difficulty is in getting an autogenerated vnode_if.h while using a
list of files to include in the module(from the common OpenAFS code) that's
given as a list of object files. If there's already a vnode_if.h sitting
around, I can just use OBJS and things progress quite nicely; however, if I
have to get back to SRCS for the use of sys/conf/kmod.mk's vnode_if.h logic, I
get this sort of build failure (full log attached) with the attached Makefile:
gcc -I. -I.. -I../nfs [more includes and defines]
-I/usr/devel/openafs/git/openafs/include/afs -I@/sys -Imachine -I. -I@
-I@/contrib/altq -finline-limit=8000 --param inline-unit-growth=100 --param
large-function-growth=1000 -fno-common -fno-omit-frame-pointer -mcmodel=kernel
-mno-red-zone -mfpmath=387 -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3
-msoft-float -fno-asynchronous-unwind-tables -ffreestanding -fstack-protector
-std=iso9899:1999 -fstack-protector -Wno-redundant-decls -Wsystem-headers
-Werror -Wno-pointer-sign -o osi_crypto.o -c
/usr/devel/openafs/git/openafs/src/afs/FBSD/osi_crypto.c
/usr/devel/openafs/git/openafs/src/libafs/MODLOAD/../../afs/FBSD/osi_crypto.c
vnode_if.h
gcc: cannot specify -o with -c or -S with multiple files
That last bit, "-o osi_crypto.o -c /path/to/osi_crypto.c /path/to/osi_crypto.c
vnode_if.h" is quite troublesome. Any thoughts on what is causing those extra files
to be listed would be greatly appreciated. (Comments on other issues in the Makefile are
welcome, too -- it's still in pretty rough shape.)
I should note that though Makefile.common does define a osi_crypto.o target, "make
-d A" reports:
using existing source
/usr/devel/openafs/git/openafs/src/afs/FBSD/osi_crypto.c
applying .c -> .o to "osi_crypto.o"
Thanks,
Ben
Kaduk<Makefile.txt><build.log>_______________________________________________
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"