Repository: bigtop Updated Branches: refs/heads/master 946787854 -> 5d8f9e341
BIGTOP-3027: Wrong Leveldbjni native binary for aarch64 Leveldbjni used in Hadoop is v1.8, which only includes x86-64 native binaries. It needs to build from source when creating hadoop packages on aarch64, like what ppc does. This closes #360 Change-Id: I4682e7885d9b5ac6d448d954ddffc78256fe0733 Signed-off-by: Jun He <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/bigtop/repo Commit: http://git-wip-us.apache.org/repos/asf/bigtop/commit/5d8f9e34 Tree: http://git-wip-us.apache.org/repos/asf/bigtop/tree/5d8f9e34 Diff: http://git-wip-us.apache.org/repos/asf/bigtop/diff/5d8f9e34 Branch: refs/heads/master Commit: 5d8f9e341c4341c9d2d8503787ea6ace157de6e5 Parents: 9467878 Author: Jun He <[email protected]> Authored: Wed May 9 16:01:29 2018 +0800 Committer: Jun He <[email protected]> Committed: Wed Jun 6 07:18:02 2018 +0000 ---------------------------------------------------------------------- .../src/common/hadoop/do-component-build | 63 ++++++++++++++++++++ 1 file changed, 63 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/bigtop/blob/5d8f9e34/bigtop-packages/src/common/hadoop/do-component-build ---------------------------------------------------------------------- diff --git a/bigtop-packages/src/common/hadoop/do-component-build b/bigtop-packages/src/common/hadoop/do-component-build index 46b7dc1..c7d4e28 100644 --- a/bigtop-packages/src/common/hadoop/do-component-build +++ b/bigtop-packages/src/common/hadoop/do-component-build @@ -42,6 +42,69 @@ if [ $HOSTTYPE = "powerpc64le" ] ; then fi ## BIGTOP-2288 +# BIGTOP-3027: Build native library/jars for aarch64 +if [ $HOSTTYPE = "aarch64" ] ; then + # download leveldbjni 1.8 from original repo + git clone https://github.com/chirino/leveldb.git + git clone https://github.com/fusesource/leveldbjni.git --branch leveldbjni-1.8 --single-branch + export SNAPPY_HOME=/usr/lib + export LEVELDB_HOME=`cd leveldb; pwd` + export LEVELDBJNI_HOME=`cd leveldbjni; pwd` + export LIBRARY_PATH=${SNAPPY_HOME} + cd ${LEVELDB_HOME} + export C_INCLUDE_PATH=${LIBRARY_PATH} + export CPLUS_INCLUDE_PATH=${LIBRARY_PATH} + # apply ARM64 specific patch + patch -p1 -E << 'EOF' +diff a/port/atomic_pointer.h b/port/atomic_pointer.h +--- a/port/atomic_pointer.h ++++ b/port/atomic_pointer.h +@@ -36,6 +36,8 @@ + #define ARCH_CPU_X86_FAMILY 1 + #elif defined(__ARMEL__) + #define ARCH_CPU_ARM_FAMILY 1 ++#elif defined(__aarch64__) ++#define ARCH_CPU_ARM64_FAMILY 1 + #elif defined(__ppc__) || defined(__powerpc__) || defined(__powerpc64__) + #define ARCH_CPU_PPC_FAMILY 1 + #endif +@@ -93,6 +95,13 @@ inline void MemoryBarrier() { + } + #define LEVELDB_HAVE_MEMORY_BARRIER + ++// ARM64 ++#elif defined(ARCH_CPU_ARM64_FAMILY) && defined(__linux__) ++inline void MemoryBarrier() { ++ asm volatile("dmb sy" : : : "memory"); ++} ++#define LEVELDB_HAVE_MEMORY_BARRIER ++ + // PPC + #elif defined(ARCH_CPU_PPC_FAMILY) && defined(__GNUC__) + inline void MemoryBarrier() { +@@ -216,6 +225,7 @@ class AtomicPointer { + #undef LEVELDB_HAVE_MEMORY_BARRIER + #undef ARCH_CPU_X86_FAMILY + #undef ARCH_CPU_ARM_FAMILY ++#undef ARCH_CPU_ARM64_FAMILY + #undef ARCH_CPU_PPC_FAMILY + + } // namespace port +EOF + git apply ../leveldbjni/leveldb.patch + make libleveldb.a + # Now use maven to build and update the local maven repository with + # aarch64 version of leveldbjni. + cd ${LEVELDBJNI_HOME} + mvn clean install -DskipTests -P download -Plinux64,all + cd .. + #cleanup + rm -rf ${LEVELDBJNI_HOME} + rm -rf ${LEVELDB_HOME} +fi +## BIGTOP-3027 + + . `dirname $0`/bigtop.bom if [ -z "$BUNDLE_SNAPPY" ] ; then
