Enable OpenMP on power64. [0]

Add an option to link ld.lld to ld and enable by default on power64. [1]

xtoolchain-llvm-devel:
Add the ability to disable linking ld.lld to ld in slave ports.

xtoolchain-llvm90:
Disable linking ld.lld to ld since llvm90 can now do it.

PR:		240516 [0]
Submitted by:	pkubaj [0]
Requested by:	kib [1]
This commit is contained in:
Brooks Davis 2019-09-12 12:49:46 +00:00
parent 378a4109c1
commit b2fed1ef86
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=511878
6 changed files with 115 additions and 3 deletions

View file

@ -2,7 +2,7 @@
PORTNAME= llvm
DISTVERSION= 9.0.0rc4
PORTREVISION= 0
PORTREVISION= 1
CATEGORIES= devel lang
.if ${DISTVERSION:M*rc*}
MASTER_SITES= http://prereleases.llvm.org/${LLVM_RELEASE}/${RCDIR}
@ -66,12 +66,14 @@ CMAKE_ARGS+= -DPYTHON_EXECUTABLE=${PYTHON_CMD} \
CFLAGS+= -DNDEBUG
CXXFLAGS+= -DNDEBUG
OPTIONS_DEFINE= BE_AMDGPU CLANG DOCS EXTRAS LIT LLD LLDB PYCLANG
OPTIONS_DEFINE= BE_AMDGPU CLANG DOCS EXTRAS LIT LLD LLD_LINK LLDB PYCLANG
OPTIONS_DEFINE_amd64= COMPILER_RT GOLD OPENMP
OPTIONS_DEFINE_i386= COMPILER_RT OPENMP
OPTIONS_DEFINE_powerpc64= OPENMP
OPTIONS_DEFAULT= BE_AMDGPU BE_STANDARD CLANG EXTRAS LIT LLD LLDB PYCLANG
OPTIONS_DEFAULT_amd64= COMPILER_RT GOLD OPENMP
OPTIONS_DEFAULT_amd64= COMPILER_RT GOLD LLD_LINK OPENMP
OPTIONS_DEFAULT_i386= COMPILER_RT OPENMP
OPTIONS_DEFAULT_powerpc64= OPENMP
OPTIONS_SINGLE= BACKENDS
OPTIONS_SINGLE_BACKENDS=BE_FREEBSD BE_NATIVE BE_STANDARD
OPTIONS_SUB= yes
@ -115,6 +117,8 @@ LIT_DESC= Install lit and FileCheck test tools
LIT_VARS= _USES_PYTHON=python:3.6+
LLD_DESC= Install lld, the LLVM linker
LLD_DISTFILES= lld-${DISTVERSION}.src${EXTRACT_SUFX}
LLD_LINK_DESC= Link ld.lld as ld to clang uses it
LLD_LINK_IMPLIES= LLD
LLDB_BUILD_DEPENDS= swig3.0:devel/swig30 \
${PY_ENUM34}
LLDB_DESC= Install lldb, the LLVM debugger
@ -124,6 +128,7 @@ LLDB_IMPLIES= CLANG
LLDB_PORTDOCS= lldb
LLDB_VARS= _USES_PYTHON=python:3.6+
OPENMP_DESC= Install libomp, the LLVM OpenMP runtime library
OPENMP_EXTRA_PATCHES= ${PATCHDIR}/openmp
OPENMP_DISTFILES= openmp-${DISTVERSION}.src${EXTRACT_SUFX}
PYCLANG_DESC= Install python bindings to libclang
PYCLANG_IMPLIES= CLANG
@ -533,6 +538,9 @@ post-install-LIT-on:
${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/FileCheck \
${STAGEDIR}${PREFIX}/bin/FileCheck${LLVM_SUFFIX}
post-install-LLD_LINK-on:
${LN} -s ld.lld ${STAGEDIR}${LOCALBASE}/llvm${LLVM_SUFFIX}/bin/ld
TEST_CMD= '(cd ${WRKSRC}/test; ${SETENV} ${MAKE_ENV} LD_LIBRARY_PATH=${WRKSRC}/Release/lib ${MAKE_CMD} check-local-lit)'
do-test:
if [ `${ID} -u` = 0 ]; then \
@ -579,6 +587,7 @@ build-plist:
{printf "%%%%COMPILER_RT%%%%"} \
if ($$0 ~ /(${EXTRAS_PATTERN})/) {printf "%%%%EXTRAS%%%%"} \
if ($$0 ~ /(lld|wasm-ld)/ && $$0 !~ /(lldb)/) {printf "%%%%LLD%%%%"} \
if ($$0 ~ /(bin\/ld$$)/) {printf "%%%%LLD_LINK%%%%"} \
if ($$0 ~ /(argdumper|lldb|six.py)/) {printf "%%%%LLDB%%%%"} \
if ($$0 ~ /(lib.*omp|omp.h|ompt.h)/) {printf "%%%%OPENMP%%%%"} \
if ($$0 ~ /(LLVMgold)/) {printf "%%%%GOLD%%%%"} \

View file

@ -0,0 +1,33 @@
--- projects/openmp/runtime/src/kmp_platform.h.orig 2019-01-19 10:56:40 UTC
+++ projects/openmp/runtime/src/kmp_platform.h
@@ -93,9 +93,9 @@
#define KMP_ARCH_X86 0
#define KMP_ARCH_X86_64 0
#define KMP_ARCH_AARCH64 0
-#define KMP_ARCH_PPC64_BE 0
-#define KMP_ARCH_PPC64_LE 0
-#define KMP_ARCH_PPC64 (KMP_ARCH_PPC64_LE || KMP_ARCH_PPC64_BE)
+#define KMP_ARCH_PPC64_ELFv1 0
+#define KMP_ARCH_PPC64_ELFv2 0
+#define KMP_ARCH_PPC64 (KMP_ARCH_PPC64_ELFv2 || KMP_ARCH_PPC64_ELFv1)
#define KMP_ARCH_MIPS 0
#define KMP_ARCH_MIPS64 0
@@ -117,12 +117,12 @@
#undef KMP_ARCH_X86
#define KMP_ARCH_X86 1
#elif defined __powerpc64__
-#if defined __LITTLE_ENDIAN__
-#undef KMP_ARCH_PPC64_LE
-#define KMP_ARCH_PPC64_LE 1
+#if defined(_CALL_ELF) && _CALL_ELF == 2
+#undef KMP_ARCH_PPC64_ELFv2
+#define KMP_ARCH_PPC64_ELFv2 1
#else
-#undef KMP_ARCH_PPC64_BE
-#define KMP_ARCH_PPC64_BE 1
+#undef KMP_ARCH_PPC64_ELFv1
+#define KMP_ARCH_PPC64_ELFv1 1
#endif
#elif defined __aarch64__
#undef KMP_ARCH_AARCH64

View file

@ -0,0 +1,62 @@
--- projects/openmp/runtime/src/z_Linux_asm.S.orig 2019-07-02 13:45:40 UTC
+++ projects/openmp/runtime/src/z_Linux_asm.S
@@ -1328,12 +1328,12 @@ KMP_LABEL(kmp_1):
// return: r3 (always 1/TRUE)
//
.text
-# if KMP_ARCH_PPC64_LE
+# if KMP_ARCH_PPC64_ELFv2
.abiversion 2
# endif
.globl __kmp_invoke_microtask
-# if KMP_ARCH_PPC64_LE
+# if KMP_ARCH_PPC64_ELFv2
.p2align 4
# else
.p2align 2
@@ -1341,7 +1341,7 @@ KMP_LABEL(kmp_1):
.type __kmp_invoke_microtask,@function
-# if KMP_ARCH_PPC64_LE
+# if KMP_ARCH_PPC64_ELFv2
__kmp_invoke_microtask:
.Lfunc_begin0:
.Lfunc_gep0:
@@ -1385,7 +1385,7 @@ __kmp_invoke_microtask:
.cfi_offset lr, 16
// Compute the size necessary for the local stack frame.
-# if KMP_ARCH_PPC64_LE
+# if KMP_ARCH_PPC64_ELFv2
li 12, 72
# else
li 12, 88
@@ -1463,7 +1463,7 @@ __kmp_invoke_microtask:
// for the microtask begins 48 + 8*8 == 112 bytes above r1 for ELFv1 and
// 32 + 8*8 == 96 bytes above r1 for ELFv2.
addi 4, 4, 40
-# if KMP_ARCH_PPC64_LE
+# if KMP_ARCH_PPC64_ELFv2
addi 12, 1, 88
# else
addi 12, 1, 104
@@ -1475,7 +1475,7 @@ __kmp_invoke_microtask:
bdnz .Lnext
.Lcall:
-# if KMP_ARCH_PPC64_LE
+# if KMP_ARCH_PPC64_ELFv2
std 2, 24(1)
mr 12, 3
#else
@@ -1491,7 +1491,7 @@ __kmp_invoke_microtask:
mtctr 12
bctrl
-# if KMP_ARCH_PPC64_LE
+# if KMP_ARCH_PPC64_ELFv2
ld 2, 24(1)
# else
ld 2, 40(1)

View file

@ -141,6 +141,7 @@ llvm%%LLVM_SUFFIX%%/bin/dsymutil
%%EXTRAS%%llvm%%LLVM_SUFFIX%%/bin/find-all-symbols
%%CLANG%%llvm%%LLVM_SUFFIX%%/bin/git-clang-format
%%CLANG%%llvm%%LLVM_SUFFIX%%/bin/hmaptool
%%LLD_LINK%%llvm%%LLVM_SUFFIX%%/bin/ld
%%LLD%%llvm%%LLVM_SUFFIX%%/bin/ld.lld
%%LLD%%llvm%%LLVM_SUFFIX%%/bin/ld64.lld
llvm%%LLVM_SUFFIX%%/bin/llc

View file

@ -1,7 +1,11 @@
# $FreeBSD$
PORTNAME= xtoolchain
.ifndef NO_LLD_LINK
PORTVERSION= 0.1
.else
PORTVERSION= 0.2
.endif
CATEGORIES= devel
MASTER_SITES= # none
DISTFILES= # none
@ -37,11 +41,13 @@ do-install:
@${INSTALL_DATA} ${WRKDIR}/xtoolchain.mk \
${STAGEDIR}${PREFIX}/share/toolchains/llvm${LLVM_SUFFIX}.mk
.ifndef NO_LLD_LINK
# XXX: would be better to add -fuse-ld=lld to LDFLAGS, but there isn't
# yet a mechansim for that. Link added here, not in devel/llvm* to avoid
# forcing lld on all users.
post-install:
@${MKDIR} ${STAGEDIR}${LOCALBASE}/llvm${LLVM_SUFFIX}/bin
@${LN} -s ld.lld ${STAGEDIR}${LOCALBASE}/llvm${LLVM_SUFFIX}/bin/ld
.endif
.include <bsd.port.mk>

View file

@ -1,6 +1,7 @@
# $FreeBSD$
LLVM_SUFFIX=90
NO_LLD_LINK=yes
MASTERDIR= ${.CURDIR}/../xtoolchain-llvm-devel