#!/bin/bash # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. set -ex ###################################################################### # BIGTOP-2288 Please remove this patch when maven repository is updated # with version of leveldbjni-all library that is not x86 specific if [ $HOSTTYPE = "powerpc64le" ] || [ $HOSTTYPE = "aarch64" ] ; then if [ $HOSTTYPE = "powerpc64le" ] ; then #download the POWER version of leveldb git clone git://github.com/ibmsoe/leveldb.git git clone https://github.com/ibmsoe/leveldbjni.git else # 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 fi # setup snappy library path [ -f /usr/lib/libsnappy.so ] && export SNAPPY_HOME=/usr/lib [ -f /usr/lib64/libsnappy.so ] && export SNAPPY_HOME=/usr/lib64 [ -f /usr/lib/${HOSTTYPE}-linux-gnu/libsnappy.so ] && export SNAPPY_HOME=/usr/lib/${HOSTTYPE}-linux-gnu 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} if [ $HOSTTYPE = "aarch64" ] ; then # 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 fi git apply ../leveldbjni/leveldb.patch make libleveldb.a #Now use maven to build and update the local maven repository with non-x86 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-2288 . `dirname $0`/bigtop.bom if [ -z "$BUNDLE_SNAPPY" ] ; then [ -f /usr/lib/libsnappy.so ] && BUNDLE_SNAPPY="-Dsnappy.prefix=x -Dbundle.snappy=true -Dsnappy.lib=/usr/lib" [ -f /usr/lib64/libsnappy.so ] && BUNDLE_SNAPPY="-Dsnappy.prefix=x -Dbundle.snappy=true -Dsnappy.lib=/usr/lib64" [ -f /usr/lib/${HOSTTYPE}-linux-gnu/libsnappy.so ] && BUNDLE_SNAPPY="-Dsnappy.prefix=x -Dbundle.snappy=true -Dsnappy.lib=/usr/lib/${HOSTTYPE}-linux-gnu" fi mkdir build mkdir build/src # Build artifacts MAVEN_OPTS="-Dzookeeper.version=$ZOOKEEPER_VERSION" MAVEN_OPTS="$MAVEN_OPTS -DskipTests -DskipTest -DskipITs" mvn $ANT_OPTS $BUNDLE_SNAPPY -Pdist -Pnative -Psrc -Dtar ${MAVEN_OPTS} -Dtomcat.version=${BIGTOP_TOMCAT_VERSION} -Dtomcat.download.url="http://archive.apache.org/dist/tomcat/tomcat-6/v${BIGTOP_TOMCAT_VERSION}/bin/apache-tomcat-${BIGTOP_TOMCAT_VERSION}.tar.gz" install "$@" mvn site site:stage ${MAVEN_OPTS} $@ (cd build ; tar --strip-components=1 -xzvf ../hadoop-dist/target/hadoop-${HADOOP_VERSION}.tar.gz) (cd build/src ; tar --strip-components=1 -xzvf ../../hadoop-dist/target/hadoop-${HADOOP_VERSION}-src.tar.gz) # Copy generated docs mkdir -p build/share cp -r target/staging/hadoop-project build/share/doc # Create a manifest for hadoop client package (cd hadoop-client/target/hadoop-client-*/share/hadoop/client/lib ; ls) > build/hadoop-client.list # Copy fuse output to the build directory cp hadoop-hdfs-project/hadoop-hdfs/target/native/main/native/fuse-dfs/fuse_dfs build/bin/