> Date: Sun, 18 Dec 2016 15:54:40 +0100
> From: Patrick Wildt <[email protected]>
> 
> 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?

ok kettenis@

> 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