[tor-commits] [tor-browser-build/master] Bug 28238: Adapt firefox project for Windows builds

boklm at torproject.org boklm at torproject.org
Wed Aug 28 13:25:26 UTC 2019


commit 023ce30eb3c6082af3353fe6876c202d849cfea8
Author: Georg Koppen <gk at torproject.org>
Date:   Mon Aug 26 21:30:50 2019 +0000

    Bug 28238: Adapt firefox project for Windows builds
---
 projects/firefox/build                    | 77 ++++---------------------------
 projects/firefox/config                   | 16 +++----
 projects/firefox/mozconfig-windows-i686   | 24 ++++++++--
 projects/firefox/mozconfig-windows-x86_64 | 21 +++++++--
 4 files changed, 56 insertions(+), 82 deletions(-)

diff --git a/projects/firefox/build b/projects/firefox/build
index 1fb4b58..a4b10b6 100644
--- a/projects/firefox/build
+++ b/projects/firefox/build
@@ -1,46 +1,15 @@
 #!/bin/bash
 [% c("var/setarch") -%]
 [% c("var/set_default_env") -%]
-[% IF c("var/windows") -%]
-  [% pc('gcc', 'var/setup', { compiler_tarfile => c('input_files_by_name/gcc') }) %]
-  # We need a link to our GCC, otherwise the system cc gets used which points to
-  # /usr/bin/gcc.
-  ln -s gcc /var/tmp/dist/gcc/bin/cc
-[% END -%]
 [% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
 distdir=/var/tmp/dist/[% project %]
 mkdir -p /var/tmp/build
 mkdir -p [% dest_dir _ '/' _ c('filename') %]
 
-[% IF c("var/windows") -%]
-  mingwdir=/var/tmp/dist/mingw-w64
-  mkdir -p $mingwdir/helpers
-
-  cat > $mingwdir/helpers/[% c("arch") %]-w64-mingw32-g++ << 'EOF'
-#!/bin/sh
-/var/tmp/dist/mingw-w64/bin/[% c("arch") %]-w64-mingw32-g++ [% c("var/LDFLAGS") %] [% c("var/CFLAGS") %] "$@"
-EOF
-
-  cat > $mingwdir/helpers/[% c("arch") %]-w64-mingw32-gcc << 'EOF'
-#!/bin/sh
-/var/tmp/dist/mingw-w64/bin/[% c("arch") %]-w64-mingw32-gcc [% c("var/LDFLAGS") %] [% c("var/CFLAGS") %] "$@"
-EOF
-
-  cat > $mingwdir/helpers/[% c("arch") %]-w64-mingw32-ld << 'EOF'
-#!/bin/sh
-/var/tmp/dist/mingw-w64/bin/[% c("arch") %]-w64-mingw32-ld [% c("var/LDFLAGS") %] "$@"
-EOF
-
-  chmod +x $mingwdir/helpers/*
-  export PATH="$mingwdir/helpers:$PATH"
-[% END -%]
-
 [% IF c("var/windows") %]
-  # Unpack fxc2.
-  mkdir -p /var/tmp/dist
+  # Setting up fxc2
   tar -C /var/tmp/dist -xf [% c('input_files_by_name/fxc2') %]
-  fxcdir=/var/tmp/dist/fxc2/bin
-  export PATH="$fxcdir:$PATH"
+  export PATH="/var/tmp/dist/fxc2/bin:$PATH"
   # fxc2 requires Wine.
   [% IF c("var/windows-x86_64") %]
     export WINEARCH=win64
@@ -51,7 +20,6 @@ EOF
   wine wineboot -i
 [% END -%]
 
-mkdir -p /var/tmp/dist
 tar -C /var/tmp/dist -xf [% c('input_files_by_name/rust') %]
 tar -C /var/tmp/dist -xf [% c('input_files_by_name/cbindgen') %]
 tar -C /var/tmp/dist -xf [% c('input_files_by_name/nasm') %]
@@ -113,30 +81,11 @@ then
 fi
 
 [% IF c("var/windows") %]
-  # FIXME
-  # Ideally, using LDFLAGS (and e.g. DLLFLAGS for NSS) would be enough to get
-  # all Firefox libraries linked against msvcr100. Alas, this does not hold for
-  # NSPR. Without patching it we get a "missing entry points for _strcmpi in
-  # msvcr100.dll". Now, this should be fixed in rev>=6179 as the def file there
-  # contains a proper patch according to the mingw-w64 developers.
-  # However, even with this patch the _strcmpi issue is still popping up,
-  # probably due to a bug in our current linking setup. The small patch below
-  # is therefore just a workaround which should get fixed but is at least
-  # justified as the signature of _strcmpi and _stricmp is the same, see:
-  # http://msdn.microsoft.com/en-us/library/k59z8dwe.aspx.
-  sed 's/strcmpi/stricmp/' -i nsprpub/pr/src/linking/prlink.c
-  export HOST_LDFLAGS=" "
-  export LDFLAGS="-specs=/var/tmp/dist/mingw-w64/msvcr100.spec"
-  # Our flags don't get passed to NSS. We need to do that manually using an
-  # obscure one.
-  export DLLFLAGS="-specs=/var/tmp/dist/mingw-w64/msvcr100.spec"
-
   # Make sure widl is not inserting random timestamps, see #21837.
   export WIDL_TIME_OVERRIDE="0"
-[% END %]
-
-[% IF c("var/windows") %]
   patch -p1 < $rootdir/nsis-uninstall.patch
+  # Make sure we link without inserting timestamps in general.
+  export LDFLAGS="-Wl,--no-insert-timestamp"
 [% END -%]
 
 # Backporting a sec-high bugfix to ESR 60, but making sure it is only applied to
@@ -203,14 +152,9 @@ rm -f js/src/configure
   chmod 755 $distdir/Browser/firefox
 [% END %]
 
-[% IF c("var/windows-x86_64") -%]
-  mv $rootdir/msvcr100-x86_64.dll $rootdir/msvcr100.dll
-[% END -%]
 [% IF c("var/windows") %]
   cp -a obj-*/dist/firefox/* $distdir/Browser/
-  cp -a $rootdir/msvcr100.dll $distdir/Browser
-  cp -a $gcclibs/libssp-0.dll $distdir/Browser
-  cp -a $fxcdir/d3dcompiler_47.dll $distdir/Browser
+  cp -a /var/tmp/dist/fxc2/bin/d3dcompiler_47.dll $distdir/Browser
 [% END %]
 
 # Make MAR-based update tools available for use during the bundle phase.
@@ -243,16 +187,15 @@ cp -p obj-*/dist/host/bin/mbsdiff $MARTOOLS/
   done
 [% END %]
 [% IF c("var/windows") %]
-  cp -p obj-*/modules/libmar/tool/signmar.exe $MARTOOLS/
-  cp -p obj-*/security/nss/cmd/certutil/certutil_certutil/certutil.exe $MARTOOLS/
-  cp -p obj-*/security/nss/cmd/modutil/modutil_modutil/modutil.exe $MARTOOLS/
-  cp -p obj-*/security/nss/cmd/pk12util/pk12util_pk12util/pk12util.exe $MARTOOLS/
-  cp -p obj-*/security/nss/cmd/shlibsign/shlibsign_shlibsign/shlibsign.exe $MARTOOLS/
+  cp -p obj-*/dist/bin/signmar.exe $MARTOOLS/
+  cp -p obj-*/dist/bin/certutil.exe $MARTOOLS/
+  cp -p obj-*/dist/bin/modutil.exe $MARTOOLS/
+  cp -p obj-*/dist/bin/pk12util.exe $MARTOOLS/
+  cp -p obj-*/dist/bin/shlibsign.exe $MARTOOLS/
   NSS_LIBS="freebl3.dll mozglue.dll nss3.dll nssckbi.dll nssdbm3.dll softokn3.dll"
   for LIB in $NSS_LIBS; do
       cp -p obj-*/dist/bin/$LIB $MARTOOLS/
   done
-  cp -a $rootdir/msvcr100.dll $MARTOOLS/
 [% END %]
 
 cd $distdir
diff --git a/projects/firefox/config b/projects/firefox/config
index 2622da6..799861e 100644
--- a/projects/firefox/config
+++ b/projects/firefox/config
@@ -110,6 +110,13 @@ targets:
     var:
       arch_deps:
         - wine
+      pre_pkginst: |
+        echo 'deb http://ftp.debian.org/debian stretch-backports main' >> /etc/apt/sources.list
+      post_pkginst: |
+        # We need to have at least 3.0.3 which Mozilla is using in the
+        # mingw-w64/clang build process
+        apt-get -y -t stretch-backports install wine
+      compiler: mingw-w64-clang
 
   windows-i686:
     var:
@@ -131,15 +138,6 @@ input_files:
     enable: '[% c("var/linux") %]'
   - filename: fix-info-plist.py
     enable: '[% c("var/osx") %]'
-  - URL: https://people.torproject.org/~gk/mirrors/sources/msvcr100.dll
-    sha256sum: 8793353461826fbd48f25ea8b835be204b758ce7510db2af631b28850355bd18
-    enable: '[% c("var/windows-i686") %]'
-  - URL: https://people.torproject.org/~boklm/mirrors/sources/msvcr100-x86_64.dll
-    sha256sum: ae3cb6c6afba9a4aa5c85f66023c35338ca579b30326dd02918f9d55259503d5
-    enable: '[% c("var/windows-x86_64") %]'
-  - project: gcc
-    name: gcc
-    enable: '[% c("var/windows") %]'
   - filename: nsis-uninstall.patch
     enable: '[% c("var/windows") %]'
   - project: rust
diff --git a/projects/firefox/mozconfig-windows-i686 b/projects/firefox/mozconfig-windows-i686
index 3314719..5538bc1 100644
--- a/projects/firefox/mozconfig-windows-i686
+++ b/projects/firefox/mozconfig-windows-i686
@@ -1,5 +1,18 @@
 CROSS_COMPILE=1
 
+HOST_CC="clang"
+HOST_CXX="clang++"
+CC="i686-w64-mingw32-clang"
+CXX="i686-w64-mingw32-clang++"
+CXXFLAGS="-fms-extensions"
+AR=llvm-ar
+RANLIB=llvm-ranlib
+
+clang_path=/var/tmp/dist/mingw-w64-clang
+
+# For Stylo
+BINDGEN_CFLAGS="-I$clang_path/i686-w64-mingw32/include/c++/v1 -I$clang_path/i686-w64-mingw32/include"
+
 ac_add_options --enable-application=browser
 ac_add_options --target=i686-w64-mingw32
 ac_add_options --with-toolchain-prefix=i686-w64-mingw32-
@@ -11,6 +24,9 @@ export MOZILLA_OFFICIAL=1
 mk_add_options BUILD_OFFICIAL=1
 
 ac_add_options --disable-debug
+# Until we build on a 64bit host we need to hack around linker errors due to
+# memory constraints
+ac_add_options --disable-debug-symbols
 ac_add_options --enable-optimize
 ac_add_options --enable-strip
 ac_add_options --enable-official-branding
@@ -18,12 +34,14 @@ ac_add_options --enable-official-branding
 ac_add_options --enable-tor-browser-update
 ac_add_options --enable-signmar
 ac_add_options --enable-verify-mar
+ac_add_options --disable-bits-download
 
 # Let's make sure no preference is enabling either Adobe's or Google's CDM.
 ac_add_options --disable-eme
 ac_add_options --disable-crashreporter
 ac_add_options --disable-maintenance-service
-ac_add_options --disable-webrtc
+ac_add_options --enable-proxy-bypass-protection
+ac_add_options --disable-webrtc # Bug 1393901
 ac_add_options --disable-tests
-ac_add_options --disable-stylo # Bugzilla 1390583
-ac_add_options --disable-jemalloc # Bugzilla 1466192
+ac_add_options --disable-jemalloc # Bug 154751
+ac_add_options --disable-geckodriver # Bug 1489320
diff --git a/projects/firefox/mozconfig-windows-x86_64 b/projects/firefox/mozconfig-windows-x86_64
index 62e32c5..c95525b 100644
--- a/projects/firefox/mozconfig-windows-x86_64
+++ b/projects/firefox/mozconfig-windows-x86_64
@@ -1,5 +1,18 @@
 CROSS_COMPILE=1
 
+HOST_CC="clang"
+HOST_CXX="clang++"
+CC="x86_64-w64-mingw32-clang"
+CXX="x86_64-w64-mingw32-clang++"
+CXXFLAGS="-fms-extensions"
+AR=llvm-ar
+RANLIB=llvm-ranlib
+
+clang_path=/var/tmp/dist/mingw-w64-clang
+
+# For Stylo
+BINDGEN_CFLAGS="-I$clang_path/x86_64-w64-mingw32/include/c++/v1 -I$clang_path/x86_64-w64-mingw32/include"
+
 ac_add_options --enable-application=browser
 ac_add_options --target=x86_64-w64-mingw32
 ac_add_options --with-toolchain-prefix=x86_64-w64-mingw32-
@@ -18,12 +31,14 @@ ac_add_options --enable-official-branding
 ac_add_options --enable-tor-browser-update
 ac_add_options --enable-signmar
 ac_add_options --enable-verify-mar
+ac_add_options --disable-bits-download
 
 # Let's make sure no preference is enabling either Adobe's or Google's CDM.
 ac_add_options --disable-eme
 ac_add_options --disable-crashreporter
 ac_add_options --disable-maintenance-service
-ac_add_options --disable-webrtc
+ac_add_options --enable-proxy-bypass-protection
+ac_add_options --disable-webrtc # Bug 1393901
 ac_add_options --disable-tests
-ac_add_options --disable-stylo # Bugzilla 1390583
-ac_add_options --disable-jemalloc # Bugzilla 1466192
+ac_add_options --disable-jemalloc # Bug 1547519
+ac_add_options --disable-geckodriver # Bug 1489320



More information about the tor-commits mailing list