summaryrefslogtreecommitdiff
path: root/build.sh
diff options
context:
space:
mode:
authorMartin Thomson <martin.thomson@gmail.com>2018-10-12 16:22:34 +1100
committerMartin Thomson <martin.thomson@gmail.com>2018-10-12 16:22:34 +1100
commit395db9dd0d6eb8d7982db4d8f1845f80c4af8c17 (patch)
tree5c50ee7e4a35803835ac4c1fbe384569fafdb842 /build.sh
parent90e6c8c4fdde4bc1524d9e821856542aeebcabd0 (diff)
downloadnss-hg-395db9dd0d6eb8d7982db4d8f1845f80c4af8c17.tar.gz
Bug 1434943 - Support for MSVC in build.sh, r=jcj
Summary: This adds basic support for MSVC to build.sh. It uses the registry and vswhere (which is part of the standard mozilla-build setup now) to work out paths and set them properly. It's probably a little fragile, but it's better than the shoestring and tape we have in builds right now. I took the liberty of sanitizing the command-line options a little here. Mostly that is sorting them, but I also deprecated the -m32 option in favour of specifying target architecture with -t. That turned out to be a lot cleaner. Reviewers: jcj Reviewed By: jcj Bug #: 1434943 Differential Revision: https://phabricator.services.mozilla.com/D5125
Diffstat (limited to 'build.sh')
-rwxr-xr-xbuild.sh101
1 files changed, 54 insertions, 47 deletions
diff --git a/build.sh b/build.sh
index 558e91fcc..4c6d513cd 100755
--- a/build.sh
+++ b/build.sh
@@ -50,76 +50,86 @@ fuzz=0
fuzz_tls=0
fuzz_oss=0
no_local_nspr=0
-armhf=0
gyp_params=(--depth="$cwd" --generator-output=".")
-nspr_params=()
ninja_params=()
-# try to guess sensible defaults
-arch=$(python "$cwd"/coreconf/detect_host_arch.py)
-if [ "$arch" = "x64" -o "$arch" = "aarch64" ]; then
- build_64=1
-elif [ "$arch" = "arm" ]; then
- armhf=1
+# Assume that the target architecture is the same as the host by default.
+host_arch=$(python "$cwd"/coreconf/detect_host_arch.py)
+target_arch=$host_arch
+
+# Assume that MSVC is wanted if this is running on windows.
+platform=$(uname -s)
+if [ "${platform%-*}" = "MINGW32_NT" -o "${platform%-*}" = "MINGW64_NT" ]; then
+ msvc=1
fi
-# parse command line arguments
+# Parse command line arguments.
while [ $# -gt 0 ]; do
- case $1 in
+ case "$1" in
-c) clean=1 ;;
-cc) clean_only=1 ;;
- --gyp|-g) rebuild_gyp=1 ;;
- --nspr) nspr_clean; rebuild_nspr=1 ;;
- -j) ninja_params+=(-j "$2"); shift ;;
-v) ninja_params+=(-v); verbose=1 ;;
- --test) gyp_params+=(-Dtest_build=1) ;;
- --clang) export CC=clang; export CCC=clang++; export CXX=clang++ ;;
- --gcc) export CC=gcc; export CCC=g++; export CXX=g++ ;;
- --fuzz) fuzz=1 ;;
- --fuzz=oss) fuzz=1; fuzz_oss=1 ;;
- --fuzz=tls) fuzz=1; fuzz_tls=1 ;;
+ -j) ninja_params+=(-j "$2"); shift ;;
+ --gyp|-g) rebuild_gyp=1 ;;
+ --opt|-o) opt_build=1 ;;
+ -m32|--m32) target_arch=ia32; echo 'Warning: use -t instead of -m32' 1>&2 ;;
+ -t|--target) target_arch="$2"; shift ;;
+ --target=*) target_arch="${1#*=}" ;;
+ --clang) export CC=clang; export CCC=clang++; export CXX=clang++; msvc=0 ;;
+ --gcc) export CC=gcc; export CCC=g++; export CXX=g++; msvc=0 ;;
+ --msvc) msvc=1 ;;
--scan-build) enable_scanbuild ;;
--scan-build=?*) enable_scanbuild "${1#*=}" ;;
- --opt|-o) opt_build=1 ;;
- -m32|--m32) build_64=0 ;;
+ --disable-tests) gyp_params+=(-Ddisable_tests=1) ;;
+ --pprof) gyp_params+=(-Duse_pprof=1) ;;
--asan) enable_sanitizer asan ;;
--msan) enable_sanitizer msan ;;
--ubsan) enable_ubsan ;;
--ubsan=?*) enable_ubsan "${1#*=}" ;;
+ --fuzz) fuzz=1 ;;
+ --fuzz=oss) fuzz=1; fuzz_oss=1 ;;
+ --fuzz=tls) fuzz=1; fuzz_tls=1 ;;
--sancov) enable_sancov ;;
--sancov=?*) enable_sancov "${1#*=}" ;;
- --pprof) gyp_params+=(-Duse_pprof=1) ;;
- --ct-verif) gyp_params+=(-Dct_verif=1) ;;
--emit-llvm) gyp_params+=(-Demit_llvm=1 -Dsign_libs=0) ;;
- --disable-tests) gyp_params+=(-Ddisable_tests=1) ;;
--no-zdefs) gyp_params+=(-Dno_zdefs=1) ;;
- --system-sqlite) gyp_params+=(-Duse_system_sqlite=1) ;;
+ --test) gyp_params+=(-Dtest_build=1) ;;
+ --ct-verif) gyp_params+=(-Dct_verif=1) ;;
+ --nspr) nspr_clean; rebuild_nspr=1 ;;
--with-nspr=?*) set_nspr_path "${1#*=}"; no_local_nspr=1 ;;
--system-nspr) set_nspr_path "/usr/include/nspr/:"; no_local_nspr=1 ;;
- --enable-libpkix) gyp_params+=(-Ddisable_libpkix=0) ;;
+ --system-sqlite) gyp_params+=(-Duse_system_sqlite=1) ;;
--enable-fips) gyp_params+=(-Ddisable_fips=0) ;;
+ --enable-libpkix) gyp_params+=(-Ddisable_libpkix=0) ;;
--mozpkix-only) gyp_params+=(-Dmozpkix_only=1 -Ddisable_tests=1 -Dsign_libs=0) ;;
*) show_help; exit 2 ;;
esac
shift
done
+# Set the target architecture and build type.
+gyp_params+=(-Dtarget_arch="$target_arch")
if [ "$opt_build" = 1 ]; then
target=Release
else
target=Debug
fi
-if [ "$build_64" = 1 ]; then
- nspr_params+=(--enable-64bit)
-elif [ ! "$armhf" = 1 ]; then
- gyp_params+=(-Dtarget_arch=ia32)
-fi
+
+# Do special setup.
if [ "$fuzz" = 1 ]; then
source "$cwd"/coreconf/fuzz.sh
fi
+nspr_set_flags $sanitizer_flags
+if [ ! -z "$sanitizer_flags" ]; then
+ gyp_params+=(-Dsanitizer_flags="$sanitizer_flags")
+fi
-# set paths
+if [ "$msvc" = 1 ]; then
+ source "$cwd"/coreconf/msvc.sh
+fi
+
+# Setup build paths.
target_dir="$cwd"/out/$target
mkdir -p "$target_dir"
dist_dir="$cwd"/../dist
@@ -150,6 +160,7 @@ check_config()
echo CC="$CC" >"$newconf"
echo CCC="$CCC" >>"$newconf"
echo CXX="$CXX" >>"$newconf"
+ echo target_arch="$target_arch" >>"$newconf"
for i in "$@"; do echo $i; done | sort >>"$newconf"
# Note: The following diff fails if $oldconf isn't there as well, which
@@ -160,6 +171,7 @@ check_config()
gyp_config="$cwd"/out/gyp_config
nspr_config="$cwd"/out/$target/nspr_config
+# Now check what needs to be rebuilt.
# If we don't have a build directory make sure that we rebuild.
if [ ! -d "$target_dir" ]; then
rebuild_nspr=1
@@ -168,33 +180,28 @@ elif [ ! -d "$dist_dir"/$target ]; then
rebuild_nspr=1
fi
-# Update NSPR ${C,CXX,LD}FLAGS.
-nspr_set_flags $sanitizer_flags
-
-if check_config "$nspr_config" "${nspr_params[@]}" \
+if check_config "$nspr_config" \
nspr_cflags="$nspr_cflags" \
nspr_cxxflags="$nspr_cxxflags" \
nspr_ldflags="$nspr_ldflags"; then
rebuild_nspr=1
fi
-# Forward sanitizer flags.
-if [ ! -z "$sanitizer_flags" ]; then
- gyp_params+=(-Dsanitizer_flags="$sanitizer_flags")
-fi
-
if check_config "$gyp_config" "${gyp_params[@]}"; then
rebuild_gyp=1
fi
-# save the chosen target
+# Save the chosen target.
mkdir -p "$dist_dir"
echo $target > "$dist_dir"/latest
+# Build.
+# NSPR.
if [[ "$rebuild_nspr" = 1 && "$no_local_nspr" = 0 ]]; then
- nspr_build "${nspr_params[@]}"
+ nspr_build
mv -f "$nspr_config".new "$nspr_config"
fi
+# gyp.
if [ "$rebuild_gyp" = 1 ]; then
if ! hash ${GYP} 2> /dev/null; then
echo "Please install gyp" 1>&2
@@ -212,11 +219,11 @@ if [ "$rebuild_gyp" = 1 ]; then
mv -f "$gyp_config".new "$gyp_config"
fi
-# Run ninja.
-if hash ninja 2>/dev/null; then
- ninja=ninja
-elif hash ninja-build 2>/dev/null; then
+# ninja.
+if hash ninja-build 2>/dev/null; then
ninja=ninja-build
+elif hash ninja 2>/dev/null; then
+ ninja=ninja
else
echo "Please install ninja" 1>&2
exit 1