Add CFGuard options to build scripts (disabled by default)
This commit is contained in:
1 parent
0af177bf4f
commit
e9401c8bfe
10 files changed
+122
-34
No files matched your search
+8
-6
@@ -44,6 +44,8 @@ ARG TOOLCHAIN_ARCHS="i686 x86_64 armv7 aarch64"
|
||||
|
||||
ARG DEFAULT_CRT=ucrt
|
||||
|
||||
ARG CFGUARD_ARGS=--disable-cfguard
|
||||
|
||||
# Build everything that uses the llvm monorepo. We need to build the mingw runtime before the compiler-rt/libunwind/libcxxabi/libcxx runtimes.
|
||||
COPY build-llvm.sh build-lldb-mi.sh strip-llvm.sh install-wrappers.sh build-mingw-w64.sh build-mingw-w64-tools.sh build-compiler-rt.sh build-libcxx.sh build-mingw-w64-libraries.sh build-openmp.sh ./
|
||||
COPY wrappers/*.sh wrappers/*.c wrappers/*.h ./wrappers/
|
||||
@@ -51,18 +53,18 @@ RUN ./build-llvm.sh $TOOLCHAIN_PREFIX && \
|
||||
./build-lldb-mi.sh $TOOLCHAIN_PREFIX && \
|
||||
./strip-llvm.sh $TOOLCHAIN_PREFIX && \
|
||||
./install-wrappers.sh $TOOLCHAIN_PREFIX && \
|
||||
./build-mingw-w64.sh $TOOLCHAIN_PREFIX --with-default-msvcrt=$DEFAULT_CRT && \
|
||||
./build-mingw-w64.sh $TOOLCHAIN_PREFIX --with-default-msvcrt=$DEFAULT_CRT $CFGUARD_ARGS && \
|
||||
./build-mingw-w64-tools.sh $TOOLCHAIN_PREFIX && \
|
||||
./build-compiler-rt.sh $TOOLCHAIN_PREFIX && \
|
||||
./build-libcxx.sh $TOOLCHAIN_PREFIX && \
|
||||
./build-mingw-w64-libraries.sh $TOOLCHAIN_PREFIX && \
|
||||
./build-compiler-rt.sh $TOOLCHAIN_PREFIX $CFGUARD_ARGS && \
|
||||
./build-libcxx.sh $TOOLCHAIN_PREFIX $CFGUARD_ARGS && \
|
||||
./build-mingw-w64-libraries.sh $TOOLCHAIN_PREFIX $CFGUARD_ARGS && \
|
||||
./build-compiler-rt.sh $TOOLCHAIN_PREFIX --build-sanitizers && \
|
||||
./build-openmp.sh $TOOLCHAIN_PREFIX && \
|
||||
./build-openmp.sh $TOOLCHAIN_PREFIX $CFGUARD_ARGS && \
|
||||
rm -rf /build/*
|
||||
|
||||
# Build libssp
|
||||
COPY build-libssp.sh libssp-Makefile ./
|
||||
RUN ./build-libssp.sh $TOOLCHAIN_PREFIX && \
|
||||
RUN ./build-libssp.sh $TOOLCHAIN_PREFIX $CFGUARD_ARGS && \
|
||||
rm -rf /build/*
|
||||
|
||||
ENV PATH=$TOOLCHAIN_PREFIX/bin:$PATH
|
||||
+8
-6
@@ -67,24 +67,26 @@ RUN ./install-wrappers.sh $TOOLCHAIN_PREFIX
|
||||
|
||||
ARG DEFAULT_CRT=ucrt
|
||||
|
||||
ARG CFGUARD_ARGS=--disable-cfguard
|
||||
|
||||
# Build MinGW-w64
|
||||
COPY build-mingw-w64.sh ./
|
||||
RUN ./build-mingw-w64.sh $TOOLCHAIN_PREFIX --with-default-msvcrt=$DEFAULT_CRT
|
||||
RUN ./build-mingw-w64.sh $TOOLCHAIN_PREFIX --with-default-msvcrt=$DEFAULT_CRT $CFGUARD_ARGS
|
||||
|
||||
COPY build-mingw-w64-tools.sh ./
|
||||
RUN ./build-mingw-w64-tools.sh $TOOLCHAIN_PREFIX
|
||||
|
||||
# Build compiler-rt
|
||||
COPY build-compiler-rt.sh ./
|
||||
RUN ./build-compiler-rt.sh $TOOLCHAIN_PREFIX
|
||||
RUN ./build-compiler-rt.sh $TOOLCHAIN_PREFIX $CFGUARD_ARGS
|
||||
|
||||
# Build libunwind/libcxxabi/libcxx
|
||||
COPY build-libcxx.sh ./
|
||||
RUN ./build-libcxx.sh $TOOLCHAIN_PREFIX
|
||||
RUN ./build-libcxx.sh $TOOLCHAIN_PREFIX $CFGUARD_ARGS
|
||||
|
||||
# Build mingw-w64's extra libraries
|
||||
COPY build-mingw-w64-libraries.sh ./
|
||||
RUN ./build-mingw-w64-libraries.sh $TOOLCHAIN_PREFIX
|
||||
RUN ./build-mingw-w64-libraries.sh $TOOLCHAIN_PREFIX $CFGUARD_ARGS
|
||||
|
||||
# Build C test applications
|
||||
ENV PATH=$TOOLCHAIN_PREFIX/bin:$PATH
|
||||
@@ -152,7 +154,7 @@ RUN cd test && \
|
||||
|
||||
# Build libssp
|
||||
COPY build-libssp.sh libssp-Makefile ./
|
||||
RUN ./build-libssp.sh $TOOLCHAIN_PREFIX
|
||||
RUN ./build-libssp.sh $TOOLCHAIN_PREFIX $CFGUARD_ARGS
|
||||
|
||||
RUN cd test && \
|
||||
for arch in $TOOLCHAIN_ARCHS; do \
|
||||
@@ -167,7 +169,7 @@ RUN cd test && \
|
||||
|
||||
# Build OpenMP
|
||||
COPY build-openmp.sh ./
|
||||
RUN ./build-openmp.sh $TOOLCHAIN_PREFIX
|
||||
RUN ./build-openmp.sh $TOOLCHAIN_PREFIX $CFGUARD_ARGS
|
||||
|
||||
# OpenMP on windows only supports x86.
|
||||
RUN cd test && \
|
||||
|
||||
+14
-7
@@ -18,6 +18,7 @@ set -e
|
||||
|
||||
LLVM_ARGS=""
|
||||
MINGW_ARGS=""
|
||||
CFGUARD_ARGS="--disable-cfguard"
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
@@ -47,6 +48,12 @@ while [ $# -gt 0 ]; do
|
||||
--with-default-win32-winnt=*)
|
||||
MINGW_ARGS="$MINGW_ARGS $1"
|
||||
;;
|
||||
--enable-cfguard)
|
||||
CFGUARD_ARGS="--enable-cfguard"
|
||||
;;
|
||||
--disable-cfguard)
|
||||
CFGUARD_ARGS="--disable-cfguard"
|
||||
;;
|
||||
*)
|
||||
if [ -n "$PREFIX" ]; then
|
||||
echo Unrecognized parameter $1
|
||||
@@ -58,7 +65,7 @@ while [ $# -gt 0 ]; do
|
||||
shift
|
||||
done
|
||||
if [ -z "$PREFIX" ]; then
|
||||
echo $0 [--enable-asserts] [--disable-dylib] [--full-llvm] [--with-python] [--symlink-projects] [--disable-lldb] [--disable-lldb-mi] [--disable-clang-tools-extra] [--host=triple] [--with-default-win32-winnt=0x601] [--with-default-msvcrt=ucrt] dest
|
||||
echo "$0 [--enable-asserts] [--disable-dylib] [--full-llvm] [--with-python] [--symlink-projects] [--disable-lldb] [--disable-lldb-mi] [--disable-clang-tools-extra] [--host=triple] [--with-default-win32-winnt=0x601] [--with-default-msvcrt=ucrt] [--enable-cfguard|--disable-cfguard] dest"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -77,11 +84,11 @@ if [ -z "$FULL_LLVM" ]; then
|
||||
./strip-llvm.sh $PREFIX
|
||||
fi
|
||||
./install-wrappers.sh $PREFIX
|
||||
./build-mingw-w64.sh $PREFIX $MINGW_ARGS
|
||||
./build-mingw-w64.sh $PREFIX $MINGW_ARGS $CFGUARD_ARGS
|
||||
./build-mingw-w64-tools.sh $PREFIX
|
||||
./build-compiler-rt.sh $PREFIX
|
||||
./build-libcxx.sh $PREFIX
|
||||
./build-mingw-w64-libraries.sh $PREFIX
|
||||
./build-compiler-rt.sh $PREFIX $CFGUARD_ARGS
|
||||
./build-libcxx.sh $PREFIX $CFGUARD_ARGS
|
||||
./build-mingw-w64-libraries.sh $PREFIX $CFGUARD_ARGS
|
||||
./build-compiler-rt.sh $PREFIX --build-sanitizers
|
||||
./build-libssp.sh $PREFIX
|
||||
./build-openmp.sh $PREFIX
|
||||
./build-libssp.sh $PREFIX $CFGUARD_ARGS
|
||||
./build-openmp.sh $PREFIX $CFGUARD_ARGS
|
||||
+14
-1
@@ -19,6 +19,8 @@ set -e
|
||||
SRC_DIR=../lib/builtins
|
||||
BUILD_SUFFIX=
|
||||
BUILD_BUILTINS=TRUE
|
||||
ENABLE_CFGUARD=
|
||||
CFGUARD_CFLAGS=
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
if [ "$1" = "--build-sanitizers" ]; then
|
||||
@@ -26,15 +28,24 @@ while [ $# -gt 0 ]; do
|
||||
BUILD_SUFFIX=-sanitizers
|
||||
SANITIZERS=1
|
||||
BUILD_BUILTINS=FALSE
|
||||
elif [ "$1" = "--enable-cfguard" ]; then
|
||||
CFGUARD_CFLAGS="-mguard=cf"
|
||||
ENABLE_CFGUARD=1
|
||||
elif [ "$1" = "--disable-cfguard" ]; then
|
||||
CFGUARD_CFLAGS=
|
||||
ENABLE_CFGUARD=
|
||||
else
|
||||
PREFIX="$1"
|
||||
fi
|
||||
shift
|
||||
done
|
||||
if [ -z "$PREFIX" ]; then
|
||||
echo $0 [--build-sanitizers] dest
|
||||
echo "$0 [--build-sanitizers] [--enable-cfguard|--disable-cfguard] dest"
|
||||
exit 1
|
||||
fi
|
||||
if [ -n "$SANITIZERS" ] && [ -n "$ENABLE_CFGUARD" ]; then
|
||||
echo "warning: Sanitizers may not work correctly with Control Flow Guard enabled." 1>&2
|
||||
fi
|
||||
|
||||
mkdir -p "$PREFIX"
|
||||
PREFIX="$(cd "$PREFIX" && pwd)"
|
||||
@@ -100,6 +111,8 @@ for arch in $ARCHS; do
|
||||
-DCOMPILER_RT_BUILD_BUILTINS=$BUILD_BUILTINS \
|
||||
-DLLVM_CONFIG_PATH="" \
|
||||
-DSANITIZER_CXX_ABI=libc++ \
|
||||
-DCMAKE_C_FLAGS_INIT="$CFGUARD_CFLAGS" \
|
||||
-DCMAKE_CXX_FLAGS_INIT="$CFGUARD_CFLAGS" \
|
||||
$SRC_DIR
|
||||
$BUILDCMD ${CORES+-j$CORES}
|
||||
$BUILDCMD install
|
||||
|
||||
+8
-1
@@ -18,6 +18,7 @@ set -e
|
||||
|
||||
BUILD_STATIC=ON
|
||||
BUILD_SHARED=ON
|
||||
CFGUARD_CFLAGS=
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
if [ "$1" = "--disable-shared" ]; then
|
||||
@@ -28,13 +29,17 @@ while [ $# -gt 0 ]; do
|
||||
BUILD_STATIC=OFF
|
||||
elif [ "$1" = "--enable-static" ]; then
|
||||
BUILD_STATIC=ON
|
||||
elif [ "$1" = "--enable-cfguard" ]; then
|
||||
CFGUARD_CFLAGS="-mguard=cf"
|
||||
elif [ "$1" = "--disable-cfguard" ]; then
|
||||
CFGUARD_CFLAGS=
|
||||
else
|
||||
PREFIX="$1"
|
||||
fi
|
||||
shift
|
||||
done
|
||||
if [ -z "$PREFIX" ]; then
|
||||
echo $0 [--disable-shared] [--disable-static] dest
|
||||
echo "$0 [--disable-shared] [--disable-static] [--enable-cfguard|--disable-cfguard] dest"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -107,6 +112,8 @@ for arch in $ARCHS; do
|
||||
-DLIBCXXABI_USE_LLVM_UNWINDER=ON \
|
||||
-DLIBCXXABI_ENABLE_SHARED=OFF \
|
||||
-DLIBCXXABI_LIBDIR_SUFFIX="" \
|
||||
-DCMAKE_C_FLAGS_INIT="$CFGUARD_CFLAGS" \
|
||||
-DCMAKE_CXX_FLAGS_INIT="$CFGUARD_CFLAGS" \
|
||||
..
|
||||
|
||||
$BUILDCMD ${CORES+-j$CORES}
|
||||
|
||||
+19
-4
@@ -16,8 +16,24 @@
|
||||
|
||||
set -e
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
echo $0 dest
|
||||
CFGUARD_CFLAGS=
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--enable-cfguard)
|
||||
CFGUARD_CFLAGS="-mguard=cf"
|
||||
;;
|
||||
--disable-cfguard)
|
||||
CFGUARD_CFLAGS=
|
||||
;;
|
||||
*)
|
||||
PREFIX="$1"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
if [ -z "$PREFIX" ]; then
|
||||
echo "$0 [--enable-cfguard|--disable-cfguard] dest"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -26,7 +42,6 @@ if command -v gmake >/dev/null; then
|
||||
MAKE=gmake
|
||||
fi
|
||||
|
||||
PREFIX="$1"
|
||||
mkdir -p "$PREFIX"
|
||||
PREFIX="$(cd "$PREFIX" && pwd)"
|
||||
export PATH="$PREFIX/bin:$PATH"
|
||||
@@ -80,7 +95,7 @@ for arch in $ARCHS; do
|
||||
[ -z "$CLEAN" ] || rm -rf build-$arch
|
||||
mkdir -p build-$arch
|
||||
cd build-$arch
|
||||
$MAKE -f ../Makefile -j$CORES CROSS=$arch-w64-mingw32-
|
||||
$MAKE -f ../Makefile -j$CORES CROSS=$arch-w64-mingw32- CFGUARD_CFLAGS="$CFGUARD_CFLAGS"
|
||||
mkdir -p "$PREFIX/$arch-w64-mingw32/bin"
|
||||
cp libssp.a "$PREFIX/$arch-w64-mingw32/lib"
|
||||
cp libssp_nonshared.a "$PREFIX/$arch-w64-mingw32/lib"
|
||||
|
||||
@@ -16,11 +16,26 @@
|
||||
|
||||
set -e
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
echo $0 dest
|
||||
USE_CFLAGS="-g -O2"
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--enable-cfguard)
|
||||
USE_CFLAGS="-g -O2 -mguard=cf"
|
||||
;;
|
||||
--disable-cfguard)
|
||||
USE_CFLAGS="-g -O2"
|
||||
;;
|
||||
*)
|
||||
PREFIX="$1"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
if [ -z "$PREFIX" ]; then
|
||||
echo "$0 [--enable-cfguard|--disable-cfguard] dest"
|
||||
exit 1
|
||||
fi
|
||||
PREFIX="$1"
|
||||
mkdir -p "$PREFIX"
|
||||
PREFIX="$(cd "$PREFIX" && pwd)"
|
||||
export PATH="$PREFIX/bin:$PATH"
|
||||
@@ -43,7 +58,9 @@ for lib in winpthreads winstorecompat; do
|
||||
mkdir -p build-$arch
|
||||
cd build-$arch
|
||||
arch_prefix="$PREFIX/$arch-w64-mingw32"
|
||||
../configure --host=$arch-w64-mingw32 --prefix="$arch_prefix" --libdir="$arch_prefix/lib"
|
||||
../configure --host=$arch-w64-mingw32 --prefix="$arch_prefix" --libdir="$arch_prefix/lib" \
|
||||
CFLAGS="$USE_CFLAGS" \
|
||||
CXXFLAGS="$USE_CFLAGS"
|
||||
make -j$CORES
|
||||
make install
|
||||
cd ..
|
||||
|
||||
+10
-2
@@ -20,6 +20,8 @@ set -e
|
||||
: ${DEFAULT_MSVCRT:=ucrt}
|
||||
: ${MINGW_W64_VERSION:=d4a0c84d908243a45255a06dc293d3d7c06db98c}
|
||||
|
||||
CFGUARD_FLAGS=
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--skip-include-triplet-prefix)
|
||||
@@ -31,6 +33,12 @@ while [ $# -gt 0 ]; do
|
||||
--with-default-msvcrt=*)
|
||||
DEFAULT_MSVCRT="${1#*=}"
|
||||
;;
|
||||
--enable-cfguard)
|
||||
CFGUARD_FLAGS="--enable-cfguard"
|
||||
;;
|
||||
--disable-cfguard)
|
||||
CFGUARD_FLAGS=
|
||||
;;
|
||||
*)
|
||||
PREFIX="$1"
|
||||
;;
|
||||
@@ -39,7 +47,7 @@ while [ $# -gt 0 ]; do
|
||||
done
|
||||
if [ -z "$CHECKOUT_ONLY" ]; then
|
||||
if [ -z "$PREFIX" ]; then
|
||||
echo $0 [--skip-include-triplet-prefix] [--with-default-win32-winnt=0x601] [--with-default-msvcrt=ucrt] dest
|
||||
echo "$0 [--skip-include-triplet-prefix] [--with-default-win32-winnt=0x601] [--with-default-msvcrt=ucrt] [--enable-cfguard|--disable-cfguard] dest"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -118,7 +126,7 @@ for arch in $ARCHS; do
|
||||
;;
|
||||
esac
|
||||
FLAGS="$FLAGS --with-default-msvcrt=$DEFAULT_MSVCRT"
|
||||
../configure --host=$arch-w64-mingw32 --prefix="$PREFIX/$arch-w64-mingw32" $FLAGS
|
||||
../configure --host=$arch-w64-mingw32 --prefix="$PREFIX/$arch-w64-mingw32" $FLAGS $CFGUARD_FLAGS
|
||||
$MAKE -j$CORES
|
||||
$MAKE install
|
||||
cd ..
|
||||
|
||||
+19
-2
@@ -16,9 +16,24 @@
|
||||
|
||||
set -e
|
||||
|
||||
PREFIX="$1"
|
||||
CFGUARD_CFLAGS=
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--enable-cfguard)
|
||||
CFGUARD_CFLAGS="-mguard=cf"
|
||||
;;
|
||||
--disable-cfguard)
|
||||
CFGUARD_CFLAGS=
|
||||
;;
|
||||
*)
|
||||
PREFIX="$1"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
if [ -z "$PREFIX" ]; then
|
||||
echo $0 dest
|
||||
echo "$0 [--enable-cfguard|--disable-cfguard] dest"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -84,6 +99,8 @@ for arch in $ARCHS; do
|
||||
-DCMAKE_AR="$PREFIX/bin/llvm-ar" \
|
||||
-DCMAKE_RANLIB="$PREFIX/bin/llvm-ranlib" \
|
||||
-DLIBOMP_ENABLE_SHARED=TRUE \
|
||||
-DCMAKE_C_FLAGS_INIT="$CFGUARD_CFLAGS" \
|
||||
-DCMAKE_CXX_FLAGS_INIT="$CFGUARD_CFLAGS" \
|
||||
$CMAKEFLAGS \
|
||||
..
|
||||
$BUILDCMD ${CORES+-j$CORES}
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ vpath %.c $(SRC_PATH)
|
||||
CC = $(CROSS)gcc
|
||||
AR = $(CROSS)ar
|
||||
|
||||
CFLAGS = -O2 -Wall -Wundef -I$(SRC_PATH) -D_FORTIFY_SOURCE=0 -D__SSP_FORTIFY_LEVEL=0
|
||||
CFLAGS = $(CFGUARD_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)
|
||||
|
||||
Reference in new issue
Block a user