/
windows.sh
123 lines (96 loc) · 4.13 KB
/
windows.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/bin/sh
set -eux -o pipefail
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
. "$DIR"/lib.sh
GNU_MAKE="$(which make)"
################################################################################
# Setup required tools
################################################################################
# WORKAROUND: install a newer grep version
# REASON: the preinstalled version is buggy (see also: https://github.com/dlang/dmd/pull/9398#issuecomment-468773638)
install_grep
if [ "$HOST_DMD_VERSION" == "LATEST" ]; then
download "http://downloads.dlang.org/releases/LATEST" LATEST
HOST_DMD_VERSION="$(cat LATEST)"
fi
echo "D_VERSION: $HOST_DMD_VERSION"
echo "VSINSTALLDIR: $VSINSTALLDIR"
echo "GNU_MAKE: $("${GNU_MAKE}" --version)"
echo "GREP_VERSION: $(grep --version)"
################################################################################
# Prepare C compiler
################################################################################
if [ "$MODEL" == "32" ] ; then
install_host_dmc
export CC="$PWD/dm/bin/dmc.exe"
export AR="$PWD/dm/bin/lib.exe"
else
export CC="$(where cl.exe)"
export AR="$(where lib.exe)" # must be done before installing dmd
export MSVC_AR="$AR" # for msvc-lib
fi
################################################################################
# Install the host compiler
################################################################################
if [ "$D_COMPILER" == "dmd" ]; then
install_host_dmd
else
echo 'Invalid $D_COMPILER provided'.
exit 1
fi
################################################################################
# Checkout other repositories
################################################################################
clone_repos
################################################################################
# Prepare build flags
################################################################################
if [ "$MODEL" == "64" ] ; then
export MODEL_FLAG="-m64"
MAKE_FILE="win64.mak"
LIBNAME=phobos64.lib
elif [ "$MODEL" == "32mscoff" ] ; then
export MODEL_FLAG="-m32mscoff"
MAKE_FILE="win64.mak"
LIBNAME=phobos32mscoff.lib
else
export MODEL_FLAG="-m32"
MAKE_FILE="win32.mak"
LIBNAME=phobos.lib
fi
################################################################################
# Build DMD
################################################################################
DMD_BIN_PATH="$DMD_DIR/generated/windows/release/${MODEL}/dmd"
cd "${DMD_DIR}/src"
"${DM_MAKE}" -f "${MAKE_FILE}" reldmd DMD="$DMD_BIN_PATH"
################################################################################
# WORKAROUND: Build zlib separately with DigitalMars make
# REASON: whitespace path variables in DigitalMars make from indirect invocation from Phobos
################################################################################
if [ "$MODEL" != "32" ] ; then
cd "${DMD_DIR}/../phobos/etc/c/zlib"
${DM_MAKE} -f win64.mak MODEL=${MODEL} "zlib${MODEL}.lib" "CC=$CC" "LIB=$AR" VCDIR=.
fi
################################################################################
# Build Druntime and Phobos
################################################################################
for proj in druntime phobos; do
cd "${DMD_DIR}/../${proj}"
"${DM_MAKE}" -f "${MAKE_FILE}" MODEL=$MODEL DMD="$DMD_BIN_PATH" "CC=$CC" "AR=$AR" VCDIR=.
done
################################################################################
# Run DMD testsuite
################################################################################
cd "${DMD_DIR}/test"
# WORKAROUND: Copy the built Phobos library in the path
# REASON: LIB argument doesn't seem to work
cp "${DMD_DIR}/../phobos/$LIBNAME" .
DMD_TESTSUITE_MAKE_ARGS="-j$N" "${GNU_MAKE}" -j1 start_all_tests ARGS="-O -inline -g" MODEL="$MODEL" MODEL_FLAG="$MODEL_FLAG"
################################################################################
# Prepare artifacts
################################################################################
mkdir -p "${DMD_DIR}/artifacts"
cd "${DMD_DIR}/artifacts"
cp "${DMD_DIR}/../phobos/$LIBNAME" .
cp "${DMD_BIN_PATH}" .