[PATCH] Headers for the x86 subtree

John Baldwin jhb at freebsd.org
Thu Oct 28 14:21:17 UTC 2010


On Thursday, October 28, 2010 3:44:21 am Attilio Rao wrote:
> 2010/10/27 John Baldwin <jhb at freebsd.org>:
> > On Wednesday, October 27, 2010 10:56:06 am Attilio Rao wrote:
> >> This patch should convert a (simple and 100% shared between amd64 and
> >> i386 header) under the x86 sub-tree. Please note that in this patch I
> >> "svn cp" the file from sys/amd64/include/mptable.h into
> >> sys/x86/include/mptable.h:
> >> http://www.freebsd.org/~attilio/headers-x86.diff
> >>
> >> This is someway a POC, that I really want to get in. The idea is
> >> simple and someway follows the pc98 case (even if not entirely): the
> >> files under machine/include/* became just mere stubs for x86/include/*
> >> contents and redirect there.
> >> This won't particulary help reducing the number of available files,
> >> but generally removing verbatim and would also be the way to go for
> >> handling MFCs.
> >> If you find this is the right way I'll commit the fix and start moving
> >> other files as time permits.
> >
> > No, we want to do this differently because we also want this to work in
> > userland.  (e.g. I'd like to outright move mca.h to x86/include and then use
> > '#include <x86/mca.h>' in both kernel and userland for it).  We'd need some
> > special glue to setup an 'x86' symlink during a kernel build that points to
> > @/x86/include as we do now to setup an 'i386' link for pc98 kernels.
> >
> > We'd also need to install the x86 headers into /usr/include during an
> > installworld.  Warner has some more pointers on this I think.
> 
> I spoke with Warner briefly about it.
> One question I'm having now, though, is how getting co-living of pc98
> and x86 now, as we are basically overriding the same infrastructure
> (MACHINE_CPUARCH) in the i386/amd64 case?
> Do you have ideas about that?

I'm still doing testing, but this seems to be working so far.  I am
moving mca.h as my current test.

Index: include/Makefile
===================================================================
--- include/Makefile	(revision 214386)
+++ include/Makefile	(working copy)
@@ -116,8 +116,11 @@
 .endfor
 
 .if ${MACHINE} != ${MACHINE_CPUARCH}
-_MARCH=${MACHINE_CPUARCH}
+_MARCHS=	${MACHINE_CPUARCH}
 .endif
+.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
+_MARCHS+=	x86
+.endif
 
 .include <bsd.prog.mk>
 
@@ -126,7 +129,7 @@
 
 # Take care of stale directory-level symlinks.
 compat:
-.for i in ${LDIRS} ${LSUBDIRS} machine ${_MARCH} crypto
+.for i in ${LDIRS} ${LSUBDIRS} machine ${_MARCHS} crypto
 	if [ -L ${DESTDIR}${INCLUDEDIR}/$i ]; then \
 		rm -f ${DESTDIR}${INCLUDEDIR}/$i; \
 	fi
@@ -142,7 +145,7 @@
 
 copies:
 .for i in ${LDIRS} ${LSUBDIRS} ${LSUBSUBDIRS} altq crypto machine machine/pc \
-	${_MARCH}
+	${_MARCHS}
 .if exists(${DESTDIR}${INCLUDEDIR}/$i)
 	cd ${DESTDIR}${INCLUDEDIR}/$i; \
 	for h in *.h; do \
@@ -189,7 +192,8 @@
 	${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 *.h \
 	    ${DESTDIR}${INCLUDEDIR}/machine/pc
 .endif
-.if defined(_MARCH) && exists(${.CURDIR}/../sys/${_MARCH}/include)
+.for _MARCH in ${_MARCHS}
+.if exists(${.CURDIR}/../sys/${_MARCH}/include)
 	${INSTALL} -d -o ${BINOWN} -g ${BINGRP} -m 755 \
 	    ${DESTDIR}${INCLUDEDIR}/${_MARCH}; \
 	cd ${.CURDIR}/../sys/${_MARCH}/include; \
@@ -203,6 +207,7 @@
 	    ${DESTDIR}${INCLUDEDIR}/${_MARCH}/pc
 .endif
 .endif
+.endfor
 	cd ${.CURDIR}/../sys/rpc; \
 	${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 types.h \
 	    ${DESTDIR}${INCLUDEDIR}/rpc
Index: sys/conf/kern.post.mk
===================================================================
--- sys/conf/kern.post.mk	(revision 214386)
+++ sys/conf/kern.post.mk	(working copy)
@@ -169,6 +169,9 @@
 .if ${MACHINE} != ${MACHINE_CPUARCH}
 _ILINKS+= ${MACHINE_CPUARCH}
 .endif
+.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
+_ILINKS+= x86
+.endif
 
 # Ensure that the link exists without depending on it when it exists.
 .for _link in ${_ILINKS}
@@ -181,8 +184,8 @@
 	@case ${.TARGET} in \
 	machine) \
 		path=${S}/${MACHINE}/include ;; \
-	${MACHINE_CPUARCH}) \
-		path=${S}/${MACHINE_CPUARCH}/include ;; \
+	*) \
+		path=${S}/${.TARGET}/include ;; \
 	esac ; \
 	${ECHO} ${.TARGET} "->" $$path ; \
 	ln -s $$path ${.TARGET}

-- 
John Baldwin


More information about the freebsd-arch mailing list