Enable OpenMP for powerpc64

Summary: When powerpc64 switches to LLVM, use this patch to enable
OpenMP as well. OpenMP on PPC is only for 64-bits, so don't make a
32-bit libomp. A change to openmp files is necesssary (under review on
https://reviews.llvm.org/D67190), because it determines ELF format
version based on endianness, which is incorrect.

Reviewed by:	alfredo.junior_eldorado.org.br, #manpages
Differential Revision: https://reviews.freebsd.org/D21532
This commit is contained in:
Dimitry Andric 2019-09-26 18:24:04 +00:00
parent 8b1412a144
commit 6b3555c38e
5 changed files with 23 additions and 19 deletions

View File

@ -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

@ -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

@ -194,7 +194,9 @@ _libproc= libproc
_librtld_db= librtld_db
.endif
.if ${MACHINE_ARCH} != "powerpc"
SUBDIR.${MK_OPENMP}+= libomp
.endif
SUBDIR.${MK_OPENSSL}+= libmp
SUBDIR.${MK_PMC}+= libpmc libpmcstat
SUBDIR.${MK_RADIUS_SUPPORT}+= libradius

View File

@ -1550,12 +1550,12 @@ Enable building openldap support for kerberos.
Set to not build LLVM's OpenMP runtime.
.Pp
This is a default setting on
arm/arm, arm/armv6, arm/armv7, arm64/aarch64, mips/mipsel, mips/mips, mips/mips64el, mips/mips64, mips/mipsn32, mips/mipselhf, mips/mipshf, mips/mips64elhf, mips/mips64hf, powerpc/powerpc, powerpc/powerpc64, powerpc/powerpcspe, riscv/riscv64 and sparc64/sparc64.
arm/arm, arm/armv6, arm/armv7, arm64/aarch64, mips/mipsel, mips/mips, mips/mips64el, mips/mips64, mips/mipsn32, mips/mipselhf, mips/mipshf, mips/mips64elhf, mips/mips64hf, powerpc/powerpc, powerpc/powerpcspe, riscv/riscv64 and sparc64/sparc64.
.It Va WITH_OPENMP
Set to build LLVM's OpenMP runtime.
.Pp
This is a default setting on
amd64/amd64 and i386/i386.
amd64/amd64, i386/i386 and powerpc/powerpc64.
.It Va WITHOUT_OPENSSH
Set to not build OpenSSH.
.It Va WITHOUT_OPENSSL

View File

@ -397,7 +397,8 @@ BROKEN_OPTIONS+=HYPERV
.endif
# NVME is only aarch64, x86 and powerpc64
.if ${__T} != "aarch64" && ${__T} != "amd64" && ${__T} != "i386" && ${__T} != "powerpc64"
.if ${__T} != "aarch64" && ${__T} != "amd64" && ${__T} != "i386" && \
${__T} != "powerpc64"
BROKEN_OPTIONS+=NVME
.endif
@ -406,7 +407,8 @@ BROKEN_OPTIONS+=NVME
BROKEN_OPTIONS+=BSD_CRTBEGIN
.endif
.if ${COMPILER_FEATURES:Mc++11} && (${__T} == "amd64" || ${__T} == "i386")
.if ${COMPILER_FEATURES:Mc++11} && \
(${__T} == "amd64" || ${__T} == "i386" || ${__T} == "powerpc64")
__DEFAULT_YES_OPTIONS+=OPENMP
.else
__DEFAULT_NO_OPTIONS+=OPENMP