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?

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} \

Reply via email to