diff --git a/0002-cmake-Support-ppc64.patch b/0002-cmake-Support-ppc64.patch new file mode 100644 index 0000000..6b09549 --- /dev/null +++ b/0002-cmake-Support-ppc64.patch @@ -0,0 +1,127 @@ +From 2f0a7153460acc3f21462236f470ec3471fa2ee1 Mon Sep 17 00:00:00 2001 +From: Boris Ranto +Date: Mon, 31 Jul 2017 19:50:23 +0200 +Subject: [PATCH] cmake: Support ppc64 + +The ppc64 support requires a couple of changes: +- adding the ppc64 support to cmake +- changing optimized crc32 code to compile on ppc64le only +- moving ifdef condition before crc32_align to avoid defined but not +used warning + +Signed-off-by: Boris Ranto +--- + cmake/modules/SIMDExt.cmake | 15 ++++++++++++++- + src/CMakeLists.txt | 4 +++- + src/arch/ppc.c | 8 ++++---- + src/common/crc32c_ppc.c | 6 +++--- + 4 files changed, 24 insertions(+), 9 deletions(-) + +diff --git a/cmake/modules/SIMDExt.cmake b/cmake/modules/SIMDExt.cmake +index 5330835..c47667d 100644 +--- a/cmake/modules/SIMDExt.cmake ++++ b/cmake/modules/SIMDExt.cmake +@@ -109,7 +109,20 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686|amd64|x86_64|AMD64") + endif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686|amd64|x86_64|AMD64") + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(powerpc|ppc)64le") + set(HAVE_PPC64LE 1) +- message(STATUS " we are ppc64le") ++ message(STATUS " we are ppc64") ++ CHECK_C_COMPILER_FLAG("-maltivec" HAS_ALTIVEC) ++ if(HAS_ALTIVEC) ++ message(STATUS " HAS_ALTIVEC yes") ++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maltivec") ++ set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -maltivec") ++ endif() ++ CHECK_C_COMPILER_FLAG("-mcpu=power8" HAVE_POWER8) ++ if(HAVE_POWER8) ++ message(STATUS " HAVE_POWER8 yes") ++ endif() ++elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(power|ppc)64") ++ set(HAVE_PPC64 1) ++ message(STATUS " we are ppc64") + CHECK_C_COMPILER_FLAG("-maltivec" HAS_ALTIVEC) + if(HAS_ALTIVEC) + message(STATUS " HAS_ALTIVEC yes") +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 66f0c14..38d1913 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -568,7 +568,9 @@ if(HAVE_INTEL) + endif(HAVE_GOOD_YASM_ELF64) + elseif(HAVE_POWER8) + list(APPEND libcommon_files +- common/crc32c_ppc.c ++ common/crc32c_ppc.c) ++elseif(HAVE_PPC64LE) ++ list(APPEND libcommon_files + common/crc32c_ppc_asm.S + common/crc32c_ppc_fast_zero_asm.S) + endif(HAVE_INTEL) +diff --git a/src/arch/ppc.c b/src/arch/ppc.c +index f21e2fe..11d3a49 100644 +--- a/src/arch/ppc.c ++++ b/src/arch/ppc.c +@@ -14,10 +14,10 @@ int ceph_arch_ppc_crc32 = 0; + + #include + +-#if __linux__ && __powerpc64__ ++#ifdef HAVE_PPC64LE + #include + #include +-#endif /* __linux__ && __powerpc64__ */ ++#endif /* HAVE_PPC64LE */ + + #ifndef PPC_FEATURE2_VEC_CRYPTO + #define PPC_FEATURE2_VEC_CRYPTO 0x02000000 +@@ -31,9 +31,9 @@ int ceph_arch_ppc_probe(void) + { + ceph_arch_ppc_crc32 = 0; + +-#if __linux__ && __powerpc64__ ++#ifdef HAVE_PPC64LE + if (getauxval(AT_HWCAP2) & PPC_FEATURE2_VEC_CRYPTO) ceph_arch_ppc_crc32 = 1; +-#endif /* __linux__ && __powerpc64__ */ ++#endif /* HAVE_PPC64LE */ + + return 0; + } +diff --git a/src/common/crc32c_ppc.c b/src/common/crc32c_ppc.c +index 43756e2..52fd1c4 100644 +--- a/src/common/crc32c_ppc.c ++++ b/src/common/crc32c_ppc.c +@@ -20,6 +20,7 @@ + #define VMX_ALIGN 16 + #define VMX_ALIGN_MASK (VMX_ALIGN-1) + ++#ifdef HAVE_PPC64LE + #ifdef REFLECT + static unsigned int crc32_align(unsigned int crc, unsigned char const *p, + unsigned long len) +@@ -38,7 +39,6 @@ static unsigned int crc32_align(unsigned int crc, unsigned char const *p, + } + #endif + +-#ifdef HAVE_POWER8 + static inline unsigned long polynomial_multiply(unsigned int a, unsigned int b) { + vector unsigned int va = {a, 0, 0, 0}; + vector unsigned int vb = {b, 0, 0, 0}; +@@ -134,7 +134,7 @@ uint32_t ceph_crc32c_ppc(uint32_t crc, unsigned char const *data, unsigned len) + return crc; + } + +-#else /* HAVE_POWER8 */ ++#else /* HAVE_PPC64LE */ + + /* This symbol has to exist on non-ppc architectures (and on legacy + * ppc systems using power7 or below) in order to compile properly +@@ -145,4 +145,4 @@ uint32_t ceph_crc32c_ppc(uint32_t crc, unsigned char const *data, unsigned len) + return 0; + } + +-#endif /* HAVE_POWER8 */ ++#endif /* HAVE_PPC64LE */ +-- +2.9.4 + diff --git a/ceph.spec b/ceph.spec index 688f0f6..21b27f9 100644 --- a/ceph.spec +++ b/ceph.spec @@ -71,7 +71,7 @@ ################################################################################# Name: ceph Version: 12.1.1 -Release: 7%{?dist} +Release: 8%{?dist} %if 0%{?fedora} || 0%{?rhel} Epoch: 1 %endif @@ -88,15 +88,14 @@ URL: http://ceph.com/ Source0: http://download.ceph.com/tarballs/ceph-12.1.1.tar.gz # https://bugzilla.redhat.com/show_bug.cgi?id=1474773 Patch001: 0001-src-rocksdb-util-murmurhash.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1474774 +Patch002: 0002-cmake-Support-ppc64.patch %if 0%{?suse_version} %if 0%{?is_opensuse} ExclusiveArch: x86_64 aarch64 ppc64 ppc64le %else ExclusiveArch: x86_64 aarch64 ppc64le s390x %endif -%else -# ppc64 https://bugzilla.redhat.com/show_bug.cgi?id=1474774 -ExcludeArch: ppc64 %endif ################################################################################# # dependencies that apply across all distro families @@ -1773,6 +1772,9 @@ exit 0 %changelog +* Tue Aug 1 2017 Boris Ranto - 1:12.1.1-8 +- Fix ppc64 build + * Tue Aug 1 2017 Kaleb S. KEITHLEY - 1:12.1.1-7 - python34 and other nits - still no fix for ppc64