On Mon, Dec 19, 2016 at 02:10:05AM +1100, Jonathan Gray wrote:
> On Sun, Dec 18, 2016 at 03:54:40PM +0100, Patrick Wildt wrote:
> > Hi,
> >
> > I would like to introduce a list of architectures that use Clang instead
> > of gcc. This will probably be helpful for specifying when and when not
> > to compile libraries for clang and clang itself. Additionally I would
> > like to add it to make it useful for cross-compile bootstrap of arm64.
> >
> > The second part of the diff adds arm64 to the cross-compile Makefile.
> > Considering we don't have binutils for aarch64 in base, I also added
> > a check to skip binutils for aarch64.
> >
> > Comments?
>
> Shouldn't MACHINE_ARCH be arm64 not aarch64?
Unfortunately not. The arch is aarch64 (and the toolchain), while our
port of an aarch64 compatible system is called arm64.
>
> >
> > Patrick
> >
> > diff --git a/share/mk/bsd.own.mk b/share/mk/bsd.own.mk
> > index d2db1871218b..030551f708e2 100644
> > --- a/share/mk/bsd.own.mk
> > +++ b/share/mk/bsd.own.mk
> > @@ -15,6 +15,7 @@ SKEY?= yes
> > # Set `YP' to `yes' to build with support for NIS/YP.
> > YP?= yes
> >
> > +CLANG_ARCH=aarch64
> > GCC3_ARCH=m88k
> >
> > # m88k: ?
> > @@ -22,7 +23,9 @@ PIE_ARCH=alpha amd64 arm hppa i386 mips64 mips64el
> > powerpc sh sparc64
> > STATICPIE_ARCH=alpha amd64 arm hppa i386 mips64 mips64el powerpc sh sparc64
> >
> > .for _arch in ${MACHINE_ARCH}
> > -.if !empty(GCC3_ARCH:M${_arch})
> > +.if !empty(CLANG_ARCH:M${_arch})
> > +COMPILER_VERSION?=clang
> > +.elif !empty(GCC3_ARCH:M${_arch})
> > COMPILER_VERSION?=gcc3
> > .else
> > COMPILER_VERSION?=gcc4
> > diff --git a/Makefile.cross b/Makefile.cross
> > index cfb6d2f1e546..002bbcc40e30 100644
> > --- a/Makefile.cross
> > +++ b/Makefile.cross
> > @@ -6,7 +6,9 @@ cross-distrib: cross-tools cross-bin cross-share
> > cross-sys cross-etc-root-var
> >
> > # Have to compute TARGET_ARCH directly in the Makefile, for .if tests
> > involving
> > # this variable to work.
> > -.if (${TARGET} == "armv7")
> > +.if (${TARGET} == "arm64")
> > +TARGET_ARCH= aarch64
> > +.elif (${TARGET} == "armv7")
> > TARGET_ARCH= arm
> > .elif (${TARGET} == "luna88k")
> > TARGET_ARCH= m88k
> > @@ -26,7 +28,7 @@ TARGET_CPU?= ${TARGET_ARCH}
> >
> > # List of LP64 archs
> > # XXX move to bsd.*.mk?
> > -LP64_ARCH = amd64 alpha mips64 sparc64
> > +LP64_ARCH = aarch64 amd64 alpha mips64 sparc64
> >
> > TARGET_IS_LP64 =
> > MACHINE_IS_LP64 =
> > @@ -77,7 +79,9 @@ CROSSGCC= ${CROSSDIR}/.gcc_done
> > .include <bsd.own.mk>
> >
> > .for _arch in ${TARGET_ARCH}
> > -.if !empty(GCC3_ARCH:M${_arch})
> > +.if !empty(CLANG_ARCH:M${_arch})
> > +COMPILER_VERSION=clang
> > +.elif !empty(GCC3_ARCH:M${_arch})
> > COMPILER_VERSION=gcc3
> > .else
> > COMPILER_VERSION=gcc4
> > @@ -174,6 +178,7 @@ ${CROSSINCLUDES}: ${CROSSOBJ}
> > @touch ${CROSSINCLUDES}
> >
> > ${CROSSBINUTILS}: ${CROSSINCLUDES}
> > +.if ${TARGET_ARCH} != "aarch64"
> > (cd ${.CURDIR}/${BINUTILS_DIR}; \
> > MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
> > PIE_DEFAULT=${PIE_DEFAULT} \
> > @@ -208,11 +213,36 @@ ${CROSSBINUTILS}: ${CROSSINCLUDES}
> > ${CROSSDIR}/usr/bin/${TARGET_CANON}-$$cmd ;\
> > fi ;\
> > done
> > +.endif
> > @touch ${CROSSBINUTILS}
> >
> >
> > ${CROSSGCC}: ${CROSSBINUTILS}
> > -.if ${COMPILER_VERSION:L} == "gcc3"
> > +.if ${COMPILER_VERSION:L} == "clang"
> > + (cd ${.CURDIR}/gnu/usr.bin/clang; \
> > + MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
> > + MACHINE_ARCH=${TARGET_ARCH} \
> > + ${MAKE} obj)
> > + (cd ${.CURDIR}/gnu/usr.bin/clang; \
> > + MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
> > + MACHINE_ARCH=${TARGET_ARCH} \
> > + ${MAKE} depend)
> > + (cd ${.CURDIR}/gnu/usr.bin/clang; \
> > + MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
> > + MACHINE_ARCH=${TARGET_ARCH} \
> > + ${MAKE} all)
> > + (cd ${.CURDIR}/gnu/usr.bin/clang; \
> > + DESTDIR=${CROSSDIR} \
> > + MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
> > + MACHINE_ARCH=${TARGET_ARCH} \
> > + ${MAKE} install)
> > + mv ${CROSSDIR}/usr/bin/clang ${CROSSDIR}/usr/bin/${TARGET_CANON}-clang
> > + mv ${CROSSDIR}/usr/bin/clang++
> > ${CROSSDIR}/usr/bin/${TARGET_CANON}-clang++
> > + cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-clang
> > ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-cc
> > + cp -f ${CROSSDIR}/usr/bin/${TARGET_CANON}-clang++
> > ${CROSSDIR}/usr/${TARGET_CANON}/bin/${TARGET_CANON}-c++
> > + ln -sf ${TARGET_CANON}-cc ${CROSSDIR}/usr/${TARGET_CANON}/bin/cc
> > + ln -sf ${TARGET_CANON}-c++ ${CROSSDIR}/usr/${TARGET_CANON}/bin/c++
> > +.elif ${COMPILER_VERSION:L} == "gcc3"
> > (cd ${.CURDIR}/gnu/usr.bin/gcc; \
> > MAKEOBJDIR=obj.${MACHINE}.${TARGET} \
> > TARGET_ARCH=${TARGET_ARCH} TARGET_CPU=${TARGET_CPU} \
> >
>