From 395db9dd0d6eb8d7982db4d8f1845f80c4af8c17 Mon Sep 17 00:00:00 2001 From: Martin Thomson Date: Fri, 12 Oct 2018 16:22:34 +1100 Subject: 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 --- build.sh | 101 ++++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 54 insertions(+), 47 deletions(-) (limited to 'build.sh') 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 -- cgit v1.2.1