blob: 801120028b1e93b60c5c6839531e3d9783181ef5 [file] [log] [blame]
#!/bin/bash
set -o errtrace
trap 'echo Fatal error: script $0 aborting at line $LINENO, command \"$BASH_COMMAND\" returned $?; exit 1' ERR
# Build agnostic variables
readonly LOCAL_PATH=external/nss
if [ ! -d "${LOCAL_PATH}" ]; then
echo "Must be run from Eureka root"
exit 1
fi
export CURDIR=${PWD}
export NSS_SRC_TAR_GZ=${LOCAL_PATH}/nss-3.41-with-nspr-4.20.tar.gz
export NSS_TOP_DIR=nss-3.41
readonly GENERIC_CFLAGS="\
-Wa,--noexecstack \
-Werror=format-security \
-fno-short-enums \
-D_FORTIFY_SOURCE=2 \
-fPIC \
-Wno-psabi \
-Wall \
-Wno-unused \
-Winit-self \
-Wpointer-arith \
-Werror=return-type \
-Werror=non-virtual-dtor \
-Werror=address \
-Werror=sequence-point \
-fgcse-after-reload \
-frerun-cse-after-loop \
-frename-registers \
-fomit-frame-pointer \
-fstrict-aliasing"
export TARGET_LDFLAGS="\
-static-libstdc++ \
-static-libgcc \
-Wl,-z,noexecstack \
-Wl,-z,relro,-z,now \
-Wl,--hash-style=both \
-ldl \
-lc \
-lrt \
-lpthread"
# Set build specific variables and execute build script
build_nss() {
DEVICE_TYPE=$1
export TARGET_ARCH=$2
SYSROOT_SOURCE=$3
export TARGET_CC=$4
export TARGET_AR=$5
local PREBUILT_DIR=${LOCAL_PATH}/prebuilt/${TARGET_ARCH}
export TARGET_CFLAGS="${GENERIC_CFLAGS} $6"
export TARGET_OUT=${LOCAL_PATH}/out/${DEVICE_TYPE}
export HOST_OUT=${LOCAL_PATH}/out/host
TARGET_SYSROOT=${TARGET_OUT}/build_sysroot
export INSTALL_SYSROOT=${PREBUILT_DIR}/${DEVICE_TYPE}/files
mkdir -p ${HOST_OUT} ${TARGET_SYSROOT}
# Install the sysroot
rsync -a ${SYSROOT_SOURCE}/ ${TARGET_SYSROOT} --delete-excluded
# Update the sysroot
rsync -a ${PREBUILT_DIR}/${DEVICE_TYPE}/sysroot/ ${TARGET_SYSROOT}
${LOCAL_PATH}/build.sh
}
readonly armv7a_sysroot=prebuilt/toolchain/armv7a/usr/armv7a-cros-linux-gnueabi
readonly armv7a_CC=prebuilt/toolchain/armv7a/bin/armv7a-cros-linux-gnueabi-gcc
readonly armv7a_AR=prebuilt/toolchain/armv7a/bin/armv7a-cros-linux-gnueabi-ar
readonly armv7a_ARCH=arm
readonly armv7a_CFLAGS=${GENERIC_CFLAGS}
readonly aarch64_sysroot=prebuilt/toolchain/aarch64/usr/aarch64-cros-linux-gnu
readonly aarch64_CC=prebuilt/toolchain/aarch64/bin/aarch64-cros-linux-gnu-gcc
readonly aarch64_AR=prebuilt/toolchain/aarch64/bin/aarch64-cros-linux-gnu-ar
readonly aarch64_ARCH=arm64
readonly aarch64_CFLAGS="${GENERIC_CFLAGS} -march=armv8-a -Wno-overflow -Wno-missing-braces -DNSS_USE_64 -DUSE_64 -fuse-ld=gold"
build_nss armv7-a-neon arm ${armv7a_sysroot} ${armv7a_CC} ${armv7a_AR} \
"${armv7a_CFLAGS} -mfpu=neon"
build_nss armv7-a arm ${armv7a_sysroot} ${armv7a_CC} ${armv7a_AR} \
${armv7a_CFLAGS}
build_nss armv8-a-neon arm ${armv7a_sysroot} ${armv7a_CC} ${armv7a_AR} \
"${armv7a_CFLAGS} -march=armv8-a -mfpu=crypto-neon-fp-armv8"
build_nss armv8-a-neon arm64 ${aarch64_sysroot} ${aarch64_CC} ${aarch64_AR} \
"${aarch64_CFLAGS} "
# Skip the vendor portion. As of right now. There are no vendors needing NSS
# prebuilts.
exit
# Some vendors build nss with custom toolchains. Find scripts in the vendor
# directories named update_nss_prebuilts.sh and run them to update the prebuilt
# binaries. Note that the resulting binaries may end up in a vendor project.
# Please do not forget to submit the updated binaries to git.
for vendor_script in `find vendor/ -name update_nss_prebuilts.sh`; do
echo "Running ${vendor_script}";
$vendor_script;
done;