[tbb-commits] [builders/tor-browser-build] 03/08: Bug 29318: Use Clang for everything on Windows

gitolite role git at cupani.torproject.org
Wed Aug 31 13:13:26 UTC 2022


This is an automated email from the git hooks/post-receive script.

pierov pushed a commit to branch main
in repository builders/tor-browser-build.

commit 0fa09e9c671690c9c8454aaceb401744e47456e9
Author: Pier Angelo Vendrame <pierov at torproject.org>
AuthorDate: Wed Aug 10 18:40:14 2022 +0200

    Bug 29318: Use Clang for everything on Windows
---
 projects/firefox/build                   |  3 ---
 projects/firefox/config                  |  1 -
 projects/fxc2/config                     |  3 ---
 projects/go/build                        |  2 +-
 projects/libevent/build                  |  3 +++
 projects/libevent/config                 |  3 +++
 projects/mingw-w64-clang/build           | 38 ++++++++++++++++++++++++++++++++
 projects/mingw-w64-clang/config          |  1 +
 projects/mingw-w64-clang/libssp-Makefile | 25 +++++++++++++++++++++
 projects/nsis/config                     |  6 +++++
 projects/zlib/build                      |  4 ++--
 rbm.conf                                 |  8 +++----
 12 files changed, 82 insertions(+), 15 deletions(-)

diff --git a/projects/firefox/build b/projects/firefox/build
index a6d42b3..5eea651 100644
--- a/projects/firefox/build
+++ b/projects/firefox/build
@@ -9,9 +9,6 @@ mkdir -p [% dest_dir _ '/' _ c('filename') %]
   # Setting up fxc2
   tar -C /var/tmp/dist -xf [% c('input_files_by_name/fxc2') %]
   export PATH="/var/tmp/dist/fxc2/bin:$PATH"
-  # Setting up stack protector support
-  tar -C /var/tmp/dist -xf [% c('input_files_by_name/mingw-w64') %]
-  cp /var/tmp/dist/mingw-w64/gcclibs/{libssp.a,libssp_nonshared.a} /var/tmp/dist/mingw-w64-clang/[% c("arch") %]-w64-mingw32/lib/
 [% END -%]
 
 tar -C /var/tmp/dist -xf [% c('input_files_by_name/rust') %]
diff --git a/projects/firefox/config b/projects/firefox/config
index f62523a..a1135c9 100644
--- a/projects/firefox/config
+++ b/projects/firefox/config
@@ -122,7 +122,6 @@ targets:
         - python3
         - python3-distutils
         - wine
-      compiler: mingw-w64-clang
 
   windows-i686:
     var:
diff --git a/projects/fxc2/config b/projects/fxc2/config
index 735497b..d73911f 100644
--- a/projects/fxc2/config
+++ b/projects/fxc2/config
@@ -6,9 +6,6 @@ filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
 container:
   use_container: 1
 
-var:
-  compiler: mingw-w64-clang
-
 input_files:
   - project: container-image
   - name: '[% c("var/compiler") %]'
diff --git a/projects/go/build b/projects/go/build
index 9da7cf2..5371f50 100644
--- a/projects/go/build
+++ b/projects/go/build
@@ -58,7 +58,7 @@ cd /var/tmp/dist/go/src
   # https://github.com/golang/go/issues/15457
   CC_FOR_TARGET="$(pwd)/cc-for-target"
   echo "#!/bin/sh" > "$CC_FOR_TARGET"
-  echo "exec [% c("arch") %]-w64-mingw32-gcc [% c("var/CFLAGS") %] [% c("var/LDFLAGS") %] \"\$@\"" >> "$CC_FOR_TARGET"
+  echo "exec [% c("arch") %]-w64-mingw32-cc [% c("var/CFLAGS") %] [% c("var/LDFLAGS") %] \"\$@\"" >> "$CC_FOR_TARGET"
   chmod +x "$CC_FOR_TARGET"
   CGO_ENABLED=1 CC_FOR_TARGET="$CC_FOR_TARGET" CC= CFLAGS= LDFLAGS= ./make.bash
 [% ELSIF c("var/android") -%]
diff --git a/projects/libevent/build b/projects/libevent/build
index 4708f9d..ea8cd38 100644
--- a/projects/libevent/build
+++ b/projects/libevent/build
@@ -5,6 +5,9 @@ distdir=/var/tmp/dist/[% project %]
 mkdir -p /var/tmp/build
 tar -C /var/tmp/build -xf [% project %]-[% c('version') %].tar.gz
 cd /var/tmp/build/[% project %]-[% c('version') %]
+[% IF c("var/windows") -%]
+  export CC=[% c("arch") %]-w64-mingw32-cc
+[% END -%]
 ./autogen.sh
 ./configure [% c("var/configure_opt") %] --disable-libevent-regress --disable-samples --disable-openssl --prefix=$distdir
 [% IF c("var/osx") -%]
diff --git a/projects/libevent/config b/projects/libevent/config
index 9afb920..1dcdc79 100644
--- a/projects/libevent/config
+++ b/projects/libevent/config
@@ -16,6 +16,9 @@ targets:
     var:
       arch_deps:
         - faketime
+  windows:
+    var:
+      configure_opt_project: --disable-shared
   android:
     var:
       configure_opt_project: --disable-shared
diff --git a/projects/mingw-w64-clang/build b/projects/mingw-w64-clang/build
index 4d6e783..92a47cf 100644
--- a/projects/mingw-w64-clang/build
+++ b/projects/mingw-w64-clang/build
@@ -31,8 +31,12 @@ DIR="\$(cd "\$(dirname "\$0")" && pwd)"
 EOF
 chmod +x [% c("arch") %]-w64-mingw32-clang++
 
+ln -s [% c("arch") %]-w64-mingw32-clang [% c("arch") %]-w64-mingw32-cc
+ln -s [% c("arch") %]-w64-mingw32-clang++ [% c("arch") %]-w64-mingw32-cxx
+ln -s llvm-ar [% c("arch") %]-w64-mingw32-ar
 ln -s llvm-nm [% c("arch") %]-w64-mingw32-nm
 ln -s llvm-strip [% c("arch") %]-w64-mingw32-strip
+ln -s llvm-ranlib [% c("arch") %]-w64-mingw32-ranlib
 ln -s llvm-readobj [% c("arch") %]-w64-mingw32-readobj
 ln -s llvm-objcopy [% c("arch") %]-w64-mingw32-objcopy
 ln -s llvm-windres [% c("arch") %]-w64-mingw32-windres
@@ -177,6 +181,40 @@ EOF
 
 merge_libs $distdir/[% c("arch") %]-w64-mingw32/lib/libc++.a $distdir/[% c("arch") %]-w64-mingw32/lib/libunwind.a
 
+# libssp
+# See build-libssp.sh in llvm-mingw
+cd $rootdir
+tar -xf [% c('input_files_by_name/gcc') %]
+cd gcc-*/libssp
+cp $rootdir/libssp-Makefile Makefile
+
+# gcc/libssp's configure script runs checks for flags that clang doesn't
+# implement. We actually just need to set a few HAVE defines and compile
+# the .c sources.
+cp config.h.in config.h
+for i in HAVE_FCNTL_H HAVE_INTTYPES_H HAVE_LIMITS_H HAVE_MALLOC_H \
+    HAVE_MEMMOVE HAVE_MEMORY_H HAVE_MEMPCPY HAVE_STDINT_H HAVE_STDIO_H \
+    HAVE_STDLIB_H HAVE_STRINGS_H HAVE_STRING_H HAVE_STRNCAT HAVE_STRNCPY \
+    HAVE_SYS_STAT_H HAVE_SYS_TYPES_H HAVE_UNISTD_H HAVE_USABLE_VSNPRINTF \
+    HAVE_HIDDEN_VISIBILITY; do
+    cat config.h | sed 's/^#undef '$i'$/#define '$i' 1/' > tmp
+    mv tmp config.h
+done
+cat ssp/ssp.h.in | sed 's/@ssp_have_usable_vsnprintf@/define/' > ssp/ssp.h
+
+arch='[% c("arch") %]'
+mkdir -p build-$arch
+cd build-$arch
+make -f ../Makefile -j[% c("num_procs") %] CROSS=$arch-w64-mingw32-
+mkdir -p "$distdir/$arch-w64-mingw32/bin"
+cp libssp.a "$distdir/$arch-w64-mingw32/lib"
+cp libssp_nonshared.a "$distdir/$arch-w64-mingw32/lib"
+# We are interested only in static libraries, but if needed the dynamic ones
+# can be used, too, just by uncommenting the following two lines.
+# cp libssp.dll.a "$distdir/$arch-w64-mingw32/lib"
+# cp libssp-0.dll "$distdir/$arch-w64-mingw32/bin"
+cd ..
+
 # Packaging up everything
 cd $distdir
 cd ..
diff --git a/projects/mingw-w64-clang/config b/projects/mingw-w64-clang/config
index be8dcf3..9c052eb 100644
--- a/projects/mingw-w64-clang/config
+++ b/projects/mingw-w64-clang/config
@@ -27,3 +27,4 @@ input_files:
   - filename: mingw-unknown.patch
   - filename: mingw-uiautomationcoreapi.patch
   - filename: mingw-windows_foundation.patch
+  - filename: libssp-Makefile
diff --git a/projects/mingw-w64-clang/libssp-Makefile b/projects/mingw-w64-clang/libssp-Makefile
new file mode 100644
index 0000000..867ce0d
--- /dev/null
+++ b/projects/mingw-w64-clang/libssp-Makefile
@@ -0,0 +1,25 @@
+# Taken from llvm-mingw
+SRC_PATH=$(word 1, $(dir $(MAKEFILE_LIST)))
+vpath %.c $(SRC_PATH)
+
+CC = $(CROSS)clang
+AR = llvm-ar
+
+CFLAGS = -O2 -Wall -Wundef -I$(SRC_PATH) -D_FORTIFY_SOURCE=0 -D__SSP_FORTIFY_LEVEL=0
+
+SOURCES = $(filter-out ssp-local.c, $(patsubst $(SRC_PATH)%,%,$(wildcard $(SRC_PATH)*.c)))
+OBJS = $(SOURCES:%.c=%.o)
+
+all: libssp.a libssp_nonshared.a libssp-0.dll
+
+libssp.a: $(OBJS)
+	$(AR) rcs $@ $+
+
+libssp-0.dll: $(OBJS)
+	$(CC) -shared -o $@ $+ -Wl,--out-implib,libssp.dll.a
+
+libssp_nonshared.a: ssp-local.o
+	$(AR) rcs $@ $+
+
+clean:
+	rm -f *.a *.o *.dll
diff --git a/projects/nsis/config b/projects/nsis/config
index a7d9d13..d6640c0 100644
--- a/projects/nsis/config
+++ b/projects/nsis/config
@@ -11,6 +11,12 @@ var:
     - zlib1g-dev
     - libcppunit-dev
     - xsltproc
+  # NSIS has an assembly part that cannot be compiled with Clang.
+  # Mozilla uses -fno-integrated-as (see
+  # taskcluster/scripts/misc/build-mingw32-nsis.sh) but for some reason this
+  # does not seem to work for us, so just keep GCC for the moment, since we are
+  # already using it for Rust anyway.
+  compiler: mingw-w64
 
 input_files:
   - project: container-image
diff --git a/projects/zlib/build b/projects/zlib/build
index 55381dd..2a122a5 100644
--- a/projects/zlib/build
+++ b/projects/zlib/build
@@ -10,8 +10,8 @@ cd /var/tmp/build/[% project %]-[% c('version') %]
 patch -p1 < $rootdir/0001-Fix-configure-issue-that-discarded-provided-CC-defin.patch
 
 [% IF c("var/windows") -%]
-  make BINARY_PATH=$distdir/lib INCLUDE_PATH=$distdir/include LIBRARY_PATH=$distdir/lib -f win32/Makefile.gcc PREFIX=[% c("arch") %]-w64-mingw32- -j[% c("num_procs") %] SHARED_MODE=1 LOC="[% c("var/CFLAGS") %] [% c("var/LDFLAGS") %]"
-  make BINARY_PATH=$distdir/lib INCLUDE_PATH=$distdir/include LIBRARY_PATH=$distdir/lib -f win32/Makefile.gcc PREFIX=[% c("arch") %]-w64-mingw32- -j[% c("num_procs") %] SHARED_MODE=1 LOC="[% c("var/CFLAGS") %] [% c("var/LDFLAGS") %]" install
+  make BINARY_PATH=$distdir/lib INCLUDE_PATH=$distdir/include LIBRARY_PATH=$distdir/lib -f win32/Makefile.gcc PREFIX=[% c("arch") %]-w64-mingw32- CC=[% c("arch") %]-w64-mingw32-cc -j[% c("num_procs") %] SHARED_MODE=1 LOC="[% c("var/CFLAGS") %] [% c("var/LDFLAGS") %]"
+  make BINARY_PATH=$distdir/lib INCLUDE_PATH=$distdir/include LIBRARY_PATH=$distdir/lib -f win32/Makefile.gcc PREFIX=[% c("arch") %]-w64-mingw32- CC=[% c("arch") %]-w64-mingw32-cc -j[% c("num_procs") %] SHARED_MODE=1 LOC="[% c("var/CFLAGS") %] [% c("var/LDFLAGS") %]" install
 [% END -%]
 
 [% IF c("var/android") -%]
diff --git a/rbm.conf b/rbm.conf
index dc155fa..f4224f6 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -483,8 +483,6 @@ targets:
       windows-x86_64: 1
       windows-i686: 0
       osname: windows-x86_64
-      # HEASLR is 64 bit only (see bug 12968)
-      flag_HEASLR: '-Wl,--high-entropy-va'
   windows-i686:
     arch: i686
     var:
@@ -501,9 +499,9 @@ targets:
         arch: amd64
       configure_opt: '--host=[% c("arch") %]-w64-mingw32 CFLAGS="[% c("var/CFLAGS") %]" LDFLAGS="[% c("var/LDFLAGS") %]" [% c("var/configure_opt_project") %]'
       CFLAGS: '-fstack-protector-strong -fno-strict-overflow -Wno-missing-field-initializers -Wformat -Wformat-security [% c("var/flag_mwindows") %]'
-      LDFLAGS: '-Wl,--dynamicbase -Wl,--nxcompat -Wl,--enable-reloc-section -Wl,--no-insert-timestamp -lssp -L$gcclibs [% c("var/flag_HEASLR") %] [% c("var/flag_noSEH") %] [% c("var/flag_mwindows") %]'
-      flag_mwindows: '-mwindows'
-      compiler: mingw-w64
+      LDFLAGS: '-Wl,--no-insert-timestamp [% c("var/flag_noSEH") %] [% c("var/flag_mwindows") %]'
+      flag_mwindows: '-Wl,--subsystem,windows'
+      compiler: mingw-w64-clang
       deps:
         - build-essential
         - python3

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the tbb-commits mailing list