|
|
@@ -0,0 +1,217 @@
|
|
|
+# Copyright (c) 2011 The Native Client Authors. All rights reserved.
|
|
|
+# Use of this source code is governed by a BSD-style license that be
|
|
|
+# found in the LICENSE file.
|
|
|
+#
|
|
|
+
|
|
|
+set -o nounset
|
|
|
+set -o errexit
|
|
|
+
|
|
|
+# scripts that source this file must be run from within packages tree
|
|
|
+readonly SAVE_PWD=$(pwd)
|
|
|
+
|
|
|
+# Pick platform directory for compiler.
|
|
|
+readonly OS_NAME=$(uname -s)
|
|
|
+if [ $OS_NAME = "Darwin" ]; then
|
|
|
+ readonly OS_SUBDIR="mac"
|
|
|
+ readonly OS_SUBDIR_SHORT="mac"
|
|
|
+elif [ $OS_NAME = "Linux" ]; then
|
|
|
+ readonly OS_SUBDIR="linux"
|
|
|
+ readonly OS_SUBDIR_SHORT="linux"
|
|
|
+else
|
|
|
+ readonly OS_SUBDIR="windows"
|
|
|
+ readonly OS_SUBDIR_SHORT="win"
|
|
|
+fi
|
|
|
+
|
|
|
+readonly MACHINE=$(uname -m)
|
|
|
+if [ $MACHINE = "x86_64" ]; then
|
|
|
+ readonly TARGET_BITSIZE=${TARGET_BITSIZE:-"64"}
|
|
|
+ readonly HOST_BITSIZE=${HOST_BITSIZE:-"64"}
|
|
|
+else
|
|
|
+ # uname -m reports i686 on Linux and i386 on Mac
|
|
|
+ readonly TARGET_BITSIZE=${TARGET_BITSIZE:-"32"}
|
|
|
+ readonly HOST_BITSIZE=${HOST_BITSIZE:-"32"}
|
|
|
+fi
|
|
|
+
|
|
|
+if [ $TARGET_BITSIZE == "64" ]; then
|
|
|
+ readonly TARGET_BIT_PREFIX="64"
|
|
|
+ readonly CROSS_ID=x86_64
|
|
|
+else
|
|
|
+ readonly TARGET_BIT_PREFIX=""
|
|
|
+ readonly CROSS_ID=i686
|
|
|
+fi
|
|
|
+# we might want to override the detected host platform (e.g. on OSX 10.6)
|
|
|
+if [ $HOST_BITSIZE == "64" ]; then
|
|
|
+ readonly HOST_BIT_PREFIX="64"
|
|
|
+else
|
|
|
+ readonly HOST_BIT_PREFIX=""
|
|
|
+fi
|
|
|
+
|
|
|
+export NACL_CROSS_PREFIX=${CROSS_ID}-nacl
|
|
|
+export NACL_CROSS_PREFIX_DASH=${NACL_CROSS_PREFIX}-
|
|
|
+
|
|
|
+readonly NACL_NEWLIB=${NACL_NEWLIB:-"0"}
|
|
|
+
|
|
|
+if [ $NACL_NEWLIB = "1" ]; then
|
|
|
+ readonly NACL_SDK_BASE=${NACL_SDK_ROOT}/toolchain/${OS_SUBDIR_SHORT}_x86_newlib
|
|
|
+else
|
|
|
+case "${NACL_SDK_ROOT}" in
|
|
|
+*pepper_15* | *pepper_16* | *pepper_17*)
|
|
|
+ readonly NACL_SDK_BASE=${NACL_SDK_ROOT}/toolchain/${OS_SUBDIR_SHORT}_x86
|
|
|
+ ;;
|
|
|
+*)
|
|
|
+ readonly NACL_SDK_BASE=${NACL_SDK_ROOT}/toolchain/${OS_SUBDIR_SHORT}_x86_glibc
|
|
|
+ ;;
|
|
|
+esac
|
|
|
+fi
|
|
|
+
|
|
|
+readonly NACL_BIN_PATH=${NACL_SDK_BASE}/bin
|
|
|
+export NACLCC=${NACL_BIN_PATH}/${NACL_CROSS_PREFIX_DASH}gcc
|
|
|
+export NACLCXX=${NACL_BIN_PATH}/${NACL_CROSS_PREFIX_DASH}g++
|
|
|
+export NACLAR=${NACL_BIN_PATH}/${NACL_CROSS_PREFIX_DASH}ar
|
|
|
+export NACLRANLIB=${NACL_BIN_PATH}/${NACL_CROSS_PREFIX_DASH}ranlib
|
|
|
+export NACLLD=${NACL_BIN_PATH}/${NACL_CROSS_PREFIX_DASH}ld
|
|
|
+export NACLAS=${NACL_BIN_PATH}/${NACL_CROSS_PREFIX_DASH}as
|
|
|
+
|
|
|
+# NACL_SDK_GCC_SPECS_PATH is where nacl-gcc 'specs' file will be installed
|
|
|
+readonly NACL_SDK_GCC_SPECS_PATH=${NACL_SDK_BASE}/lib/gcc/x86_64-nacl/4.4.3
|
|
|
+
|
|
|
+# NACL_SDK_USR is where the headers, libraries, etc. will be installed
|
|
|
+readonly NACL_SDK_USR=${NACL_SDK_BASE}/${NACL_CROSS_PREFIX}/usr
|
|
|
+readonly NACL_SDK_USR_INCLUDE=${NACL_SDK_USR}/include
|
|
|
+readonly NACL_SDK_USR_LIB=${NACL_SDK_USR}/lib
|
|
|
+
|
|
|
+
|
|
|
+######################################################################
|
|
|
+# Helper functions
|
|
|
+######################################################################
|
|
|
+
|
|
|
+Banner() {
|
|
|
+ echo "######################################################################"
|
|
|
+ echo $*
|
|
|
+ echo "######################################################################"
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+VerifyPath() {
|
|
|
+ # make sure path isn't all slashes (possibly from an unset variable)
|
|
|
+ local PATH=$1
|
|
|
+ local TRIM=${PATH##/}
|
|
|
+ if [ ${#TRIM} -ne 0 ]; then
|
|
|
+ return 0
|
|
|
+ else
|
|
|
+ return 1
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+ChangeDir() {
|
|
|
+ local NAME=$1
|
|
|
+ if VerifyPath ${NAME}; then
|
|
|
+ cd ${NAME}
|
|
|
+ else
|
|
|
+ echo "ChangeDir called with bad path."
|
|
|
+ exit -1
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+Remove() {
|
|
|
+ local NAME=$1
|
|
|
+ if VerifyPath ${NAME}; then
|
|
|
+ rm -rf ${NAME}
|
|
|
+ else
|
|
|
+ echo "Remove called with bad path."
|
|
|
+ exit -1
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+MakeDir() {
|
|
|
+ local NAME=$1
|
|
|
+ if VerifyPath ${NAME}; then
|
|
|
+ mkdir -p ${NAME}
|
|
|
+ else
|
|
|
+ echo "MakeDir called with bad path."
|
|
|
+ exit -1
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+PatchSpecFile() {
|
|
|
+ # fix up spaces so gcc sees entire path
|
|
|
+ local SED_SAFE_SPACES_USR_INCLUDE=${NACL_SDK_USR_INCLUDE/ /\ /}
|
|
|
+ local SED_SAFE_SPACES_USR_LIB=${NACL_SDK_USR_LIB/ /\ /}
|
|
|
+ # have nacl-gcc dump specs file & add include & lib search paths
|
|
|
+ ${NACL_SDK_BASE}/bin/x86_64-nacl-gcc -dumpspecs |\
|
|
|
+ sed "/*cpp:/{
|
|
|
+ N
|
|
|
+ s|$| -I${SED_SAFE_SPACES_USR_INCLUDE}|
|
|
|
+ }" |\
|
|
|
+ sed "/*link_libgcc:/{
|
|
|
+ N
|
|
|
+ s|$| -L${SED_SAFE_SPACES_USR_LIB}|
|
|
|
+ }" >${NACL_SDK_GCC_SPECS_PATH}/specs
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+DefaultConfigureStep() {
|
|
|
+ Banner "Configuring ${PACKAGE_NAME}"
|
|
|
+ # export the nacl tools
|
|
|
+ export CC=${NACLCC}
|
|
|
+ export CXX=${NACLCXX}
|
|
|
+ export AR=${NACLAR}
|
|
|
+ export RANLIB=${NACLRANLIB}
|
|
|
+ export PKG_CONFIG_PATH=${NACL_SDK_USR_LIB}/pkgconfig
|
|
|
+ export PKG_CONFIG_LIBDIR=${NACL_SDK_USR_LIB}
|
|
|
+ export PATH=${NACL_BIN_PATH}:${PATH};
|
|
|
+ ChangeDir ${NACL_PACKAGES_REPOSITORY}/${PACKAGE_NAME}
|
|
|
+ Remove ${PACKAGE_NAME}-build
|
|
|
+ MakeDir ${PACKAGE_NAME}-build
|
|
|
+ cd ${PACKAGE_NAME}-build
|
|
|
+ ../configure \
|
|
|
+ --host=nacl \
|
|
|
+ --disable-shared \
|
|
|
+ --prefix=${NACL_SDK_USR} \
|
|
|
+ --exec-prefix=${NACL_SDK_USR} \
|
|
|
+ --libdir=${NACL_SDK_USR_LIB} \
|
|
|
+ --oldincludedir=${NACL_SDK_USR_INCLUDE} \
|
|
|
+ --with-http=off \
|
|
|
+ --with-html=off \
|
|
|
+ --with-ftp=off \
|
|
|
+ --with-x=no
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+DefaultBuildStep() {
|
|
|
+ # assumes pwd has makefile
|
|
|
+ make clean
|
|
|
+if [ $TARGET_BITSIZE == "64" ]; then
|
|
|
+ make -j8
|
|
|
+else
|
|
|
+ make
|
|
|
+fi
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+DefaultInstallStep() {
|
|
|
+ # assumes pwd has makefile
|
|
|
+ make install
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+DefaultCleanUpStep() {
|
|
|
+ PatchSpecFile
|
|
|
+ ChangeDir ${SAVE_PWD}
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+DefaultPackageInstall() {
|
|
|
+ DefaultPreInstallStep
|
|
|
+ DefaultDownloadStep
|
|
|
+ DefaultExtractStep
|
|
|
+ DefaultPatchStep
|
|
|
+ DefaultConfigureStep
|
|
|
+ DefaultBuildStep
|
|
|
+ DefaultInstallStep
|
|
|
+ DefaultCleanUpStep
|
|
|
+}
|