blob: 5714ea776008bae552742f7ffd80095012dce5d0 [file] [log] [blame]
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +01001#!/bin/bash
2
3# Copyright 2014 Google Inc. All rights reserved.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17set -o errexit
18
19cd "$(dirname "$0")"
20
21mkdir -p output/classes
22mkdir -p output/test_classes
23mkdir -p output/src
24mkdir -p output/objs
25mkdir -p output/native
26
27# May be passed in from outside.
Kyle Moffett3fb75812015-04-23 17:24:02 +000028CXXFLAGS="$CXXFLAGS"
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +010029LDFLAGS="$LDFLAGS"
30ZIPOPTS="$ZIPOPTS"
31
32# TODO: CC target architecture needs to match JAVA_HOME.
33CC=${CC:-gcc}
Kyle Moffett3fb75812015-04-23 17:24:02 +000034CXX=${CXX:-g++}
35CXXSTD="c++0x"
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +010036
Damien Martin-Guillerezf925f072015-03-25 15:00:40 +000037unset JAVA_TOOL_OPTIONS
38
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +010039JAVA_VERSION=${JAVA_VERSION:-"1.8"}
40PLATFORM="$(uname -s | tr 'A-Z' 'a-z')"
41ARCHIVE_CFLAGS=${ARCHIVE_CFLAGS:-""}
42LDFLAGS=${LDFLAGS:-""}
43
44# Extension for executables (.exe on Windows).
45EXE_EXT=""
46
47PROTO_FILES=$(ls src/main/protobuf/*.proto)
48LIBRARY_JARS=$(find third_party -name *.jar | tr "\n" " ")
49DIRS=$(echo src/{main/java,tools/xcode-common/java/com/google/devtools/build/xcode/{common,util}} output/src)
50SINGLEJAR_DIRS="src/java_tools/singlejar/java src/main/java/com/google/devtools/build/lib/shell"
51SINGLEJAR_LIBRARIES="third_party/guava/guava-18.0.jar third_party/jsr305/jsr-305.jar"
Damien Martin-Guillerez07d744b2015-03-04 14:35:39 +000052BUILDJAR_DIRS="src/java_tools/buildjar/java/com/google/devtools/build/buildjar output/src/com/google/devtools/build/lib/view/proto"
Liam Miller-Cushon29e46b22015-05-18 19:50:00 +000053BUILDJAR_LIBRARIES="third_party/error_prone/error_prone_core-2.0.2.jar third_party/guava/guava-18.0.jar third_party/protobuf/protobuf-2.5.0.jar third_party/jsr305/jsr-305.jar"
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +010054
55MSYS_DLLS=""
56PATHSEP=":"
57
58function fail() {
59 echo "$1" >&2
60 exit 1
61}
62
63function log() {
64 if [[ -z "${QUIETMODE}" ]]; then
Kristina Chodorow45a24692015-05-18 15:30:30 +000065 echo -e "$1" >&2
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +010066 fi
67}
68
Kristina Chodorowac271142015-03-06 16:00:46 +000069function write_fromhost_build() {
70 case "${PLATFORM}" in
71 linux)
72 cat << EOF > fromhost/BUILD
73package(default_visibility = ["//visibility:public"])
74cc_library(
75 name = "libarchive",
76 srcs = [],
77 hdrs = [],
78)
79EOF
80
81 ;;
82 darwin)
Kristina Chodorowac271142015-03-06 16:00:46 +000083 if [[ -e $homebrew_header ]]; then
84 rm -f fromhost/*.[ah]
85 touch fromhost/empty.c
86 # For use with Homebrew.
87 archive_dir=$(dirname $(dirname $homebrew_header))
Kristina Chodorowac271142015-03-06 16:00:46 +000088 cp ${archive_dir}/lib/*.a ${archive_dir}/include/*.h fromhost/
89 cat << EOF > fromhost/BUILD
90package(default_visibility = ["//visibility:public"])
91cc_library(
92 name = "libarchive",
93 srcs = glob(["*.a"]) + ["empty.c"],
94 hdrs = glob(["*.h"]),
95 includes = ["."],
96 linkopts = ["-lxml2", "-liconv", "-lbz2", "-lz", ],
97)
98EOF
99
Kristina Chodorowbdc24962015-03-18 15:17:12 +0000100 elif [[ -e $macports_header ]]; then
Kristina Chodorowac271142015-03-06 16:00:46 +0000101 # For use with Macports.
Allen Portere9363832015-04-21 18:04:28 +0000102 archive_dir=$(dirname $(dirname $macports_header))
103 rm -f fromhost/*.[ah]
Kristina Chodorowac271142015-03-06 16:00:46 +0000104 touch fromhost/empty.c
Volker Braun1f422dc2015-04-01 12:17:13 +0000105 cp "${archive_dir}"/include/{archive.h,archive_entry.h} fromhost/
106 cp "${archive_dir}"/lib/{libarchive,liblzo2,liblzma,libcharset,libbz2,libxml2,libz,libiconv}.a \
Kristina Chodorowac271142015-03-06 16:00:46 +0000107 fromhost/
Kristina Chodorowac271142015-03-06 16:00:46 +0000108 cat << EOF > fromhost/BUILD
109package(default_visibility = ["//visibility:public"])
110cc_library(
111 name = "libarchive",
112 srcs = glob(["*.a"]) + ["empty.c"],
113 hdrs = glob(["*.h"]),
114 includes = ["."],
115)
116EOF
Kristina Chodorowac271142015-03-06 16:00:46 +0000117 fi
118 esac
119}
120
Kristina Chodorow8c6b3bb2015-04-09 19:05:34 +0000121# Create symlinks so we can use tools and examples from the base_workspace.
122base_workspace=$(pwd)/base_workspace
Kristina Chodorow633ecbd2015-04-28 18:36:43 +0000123mkdir -p "$base_workspace"
124rm -f "${base_workspace}/tools" && ln -s "$(pwd)/tools" "${base_workspace}/tools"
125rm -f "${base_workspace}/third_party" && ln -s "$(pwd)/third_party" "${base_workspace}/third_party"
126rm -f "${base_workspace}/examples" && ln -s "$(pwd)/examples" "${base_workspace}/examples"
Kristina Chodorow8c6b3bb2015-04-09 19:05:34 +0000127
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100128case "${PLATFORM}" in
129linux)
130 # Sorry, no static linking on linux for now.
131 LDFLAGS="$(pkg-config libarchive --libs) -lrt $LDFLAGS"
132 JNILIB="libunix.so"
133 MD5SUM="md5sum"
134 # JAVA_HOME must point to a Java 8 installation.
Damien Martin-Guillereze86ac8b2015-04-16 13:56:00 +0000135 JAVA_HOME="${JAVA_HOME:-$(readlink -f $(which javac) | sed 's_/bin/javac__')}"
Han-Wen Nienhuysb5bac8b2015-04-09 17:50:19 +0000136 PROTOC=${PROTOC:-third_party/protobuf/protoc.linux-i686}
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100137 ;;
Kristina Chodorowac271142015-03-06 16:00:46 +0000138
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100139darwin)
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100140 JNILIB="libunix.dylib"
141 MD5SUM="md5"
142 if [[ -z "$JAVA_HOME" ]]; then
Damien Martin-Guillereze86ac8b2015-04-16 13:56:00 +0000143 JAVA_HOME="$(/usr/libexec/java_home -v 1.8+ 2> /dev/null)" \
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100144 || fail "Could not find JAVA_HOME, please ensure a JDK (version 1.8+) is installed."
145 fi
146 PROTOC=${PROTOC:-third_party/protobuf/protoc.darwin}
Kristina Chodorowbdc24962015-03-18 15:17:12 +0000147
Damien Martin-Guillerez9a0dc1b2015-03-25 12:02:22 +0000148 homebrew_header=$(ls -1 $(brew --prefix libarchive 2>/dev/null)/include/archive.h 2>/dev/null | head -n1)
Volker Braun1f422dc2015-04-01 12:17:13 +0000149 macports_header=$(port contents libarchive 2>/dev/null | grep /archive.h$ | xargs)
Kristina Chodorowbdc24962015-03-18 15:17:12 +0000150 if [[ -e $homebrew_header ]]; then
151 # For use with Homebrew.
152 archive_dir=$(dirname $(dirname $homebrew_header))
153 ARCHIVE_CFLAGS="-I${archive_dir}/include"
154 LDFLAGS="-L${archive_dir}/lib -larchive $LDFLAGS"
155
156 elif [[ -e $macports_header ]]; then
157 # For use with Macports.
158 ARCHIVE_CFLAGS="-Ifromhost"
159 # Link libarchive statically
160 LDFLAGS="fromhost/libarchive.a fromhost/liblzo2.a \
161 fromhost/liblzma.a fromhost/libcharset.a \
162 fromhost/libbz2.a fromhost/libxml2.a \
163 fromhost/libz.a fromhost/libiconv.a \
164 $LDFLAGS"
165 else
166 log "WARNING: Could not find libarchive installation, proceeding bravely."
167 fi
168
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100169 ;;
170
171msys*|mingw*)
172 # Use a simplified platform string.
173 PLATFORM="mingw"
174 # Workaround for msys issue which causes omission of std::to_string.
Kyle Moffett3fb75812015-04-23 17:24:02 +0000175 CXXFLAGS="$CXXFLAGS -D_GLIBCXX_USE_C99 -D_GLIBCXX_USE_C99_DYNAMIC"
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100176 LDFLAGS="-larchive ${LDFLAGS}"
177 MD5SUM="md5sum"
178 EXE_EXT=".exe"
179 PATHSEP=";"
180 # Find the latest available version of the SDK.
181 JAVA_HOME="${JAVA_HOME:-$(ls -d /c/Program\ Files/Java/jdk* | sort | tail -n 1)}"
182 # We do not use the JNI library on Windows.
183 JNILIB=""
184 PROTOC=${PROTOC:-protoc}
185
186 # The newer version of GCC on msys is stricter and removes some important function
187 # declarations from the environment if using c++0x / c++11.
Kyle Moffett3fb75812015-04-23 17:24:02 +0000188 CXXSTD="gnu++11"
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100189
190 # Ensure that we are using the cygwin gcc, not the mingw64 gcc.
191 ${CC} -v 2>&1 | grep "Target: .*mingw.*" > /dev/null &&
192 fail "mingw gcc detected. Please set CC to point to the msys/Cygwin gcc."
Kyle Moffett3fb75812015-04-23 17:24:02 +0000193 ${CXX} -v 2>&1 | grep "Target: .*mingw.*" > /dev/null &&
194 fail "mingw g++ detected. Please set CXX to point to the msys/Cygwin g++."
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100195
196 MSYS_DLLS="msys-2.0.dll msys-gcc_s-seh-1.dll msys-stdc++-6.dll"
197 for dll in $MSYS_DLLS ; do
198 cp "/usr/bin/$dll" "output/$dll"
199 done
200esac
201
Damien Martin-Guillerez24eaf9d2015-04-16 14:30:49 +0000202[[ -x "${PROTOC-}" ]] \
203 || fail "Protobuf compiler not found in ${PROTOC-}"
204
Kristina Chodorowbdc24962015-03-18 15:17:12 +0000205mkdir -p fromhost
206if [ ! -f fromhost/BUILD ]; then
207 write_fromhost_build
208fi
209
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100210test -z "$JAVA_HOME" && fail "JDK not found, please set \$JAVA_HOME."
211rm -f tools/jdk/jdk && ln -s "${JAVA_HOME}" tools/jdk/jdk
212
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100213JAVAC="${JAVA_HOME}/bin/javac"
214
Damien Martin-Guillereze86ac8b2015-04-16 13:56:00 +0000215[[ -x "${JAVAC}" ]] \
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100216 || fail "JAVA_HOME ($JAVA_HOME) is not a path to a working JDK."
217
Damien Martin-Guillereze86ac8b2015-04-16 13:56:00 +0000218JAVAC_VERSION=$("${JAVAC}" -version 2>&1)
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100219[[ "$JAVAC_VERSION" =~ ^"javac 1"\.([89]|[1-9][0-9]).*$ ]] \
220 || fail "JDK version is lower than 1.8, please set \$JAVA_HOME."
221
222JAR="${JAVA_HOME}/bin/jar"
223
224BLAZE_CC_FILES=(
225src/main/cpp/blaze_startup_options.cc
226src/main/cpp/blaze_startup_options_common.cc
227src/main/cpp/blaze_util.cc
228src/main/cpp/blaze_util_${PLATFORM}.cc
229src/main/cpp/blaze.cc
230src/main/cpp/option_processor.cc
Thiago Farina241f46c2015-04-13 14:33:30 +0000231src/main/cpp/util/errors.cc
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100232src/main/cpp/util/file.cc
233src/main/cpp/util/md5.cc
234src/main/cpp/util/numbers.cc
Thiago Farina241f46c2015-04-13 14:33:30 +0000235src/main/cpp/util/port.cc
236src/main/cpp/util/strings.cc
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100237)
238
239NATIVE_CC_FILES=(
240src/main/cpp/util/md5.cc
241src/main/native/localsocket.cc
242src/main/native/process.cc
243src/main/native/unix_jni.cc
244src/main/native/unix_jni_${PLATFORM}.cc
245)
246
247IJAR_CC_FILES=(
248third_party/ijar/ijar.cc
249third_party/ijar/zip.cc
250third_party/ijar/classfile.cc
251)
252
253# Compiles java classes.
254function java_compilation() {
255 name=$1
256 directories=$2
257 library_jars=$3
258 output=$4
259
260 classpath=${library_jars// /$PATHSEP}:$5
261 sourcepath=${directories// /$PATHSEP}
262
263 tmp="$(mktemp -d ${TMPDIR:-/tmp}/bazel.XXXXXXXX)"
264 paramfile="${tmp}/param"
265 errfile="${tmp}/err"
266
267 mkdir -p "${output}/classes"
268
269 trap "cat \"$errfile\"; rm -f \"$paramfile\" \"$errfile\"; rmdir \"$tmp\"" EXIT
270
271 # Compile .java files (incl. generated ones) using javac
272 log "Compiling $name code..."
273 find ${directories} -name "*.java" > "$paramfile"
274
275 if [ ! -z "$BAZEL_DEBUG_JAVA_COMPILATION" ]; then
276 echo "directories=${directories}" >&2
277 echo "classpath=${classpath}" >&2
278 echo "sourcepath=${sourcepath}" >&2
279 echo "libraries=${library_jars}" >&2
280 echo "output=${output}/classes" >&2
281 echo "List of compiled files:" >&2
282 cat "$paramfile" >&2
283 fi
284
285 "${JAVAC}" -classpath "${classpath}" -sourcepath "${sourcepath}" \
286 -d "${output}/classes" -source "$JAVA_VERSION" -target "$JAVA_VERSION" \
287 "@${paramfile}" &> "$errfile" ||
288 exit $?
289 trap - EXIT
290 rm "$paramfile" "$errfile"
291 rmdir "$tmp"
292
293 log "Extracting helper classes for $name..."
294 for f in ${library_jars} ; do
295 unzip -qn ${f} -d "${output}/classes"
296 done
297}
298
299# Create the deploy JAR
300function create_deploy_jar() {
301 name=$1
302 mainClass=$2
303 output=$3
304 shift 3
305 packages=""
306 for i in $output/classes/*; do
307 package=$(basename $i)
308 if [[ "$package" != "META-INF" ]]; then
309 packages="$packages -C $output/classes $package"
310 fi
311 done
312
313 log "Creating $name.jar..."
314 echo "Main-Class: $mainClass" > $output/MANIFEST.MF
315 "$JAR" cmf $output/MANIFEST.MF $output/$name.jar $packages "$@"
316}
317
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100318function cc_compile() {
319 local OBJDIR=$1
320 shift
321 mkdir -p "output/${OBJDIR}"
322 for FILE in "$@"; do
323 if [[ ! "${FILE}" =~ ^-.*$ ]]; then
324 local OBJ=$(basename "${FILE}").o
Kyle Moffett3fb75812015-04-23 17:24:02 +0000325 "${CXX}" \
Han-Wen Nienhuys36fbe632015-04-21 13:58:08 +0000326 -I. \
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100327 ${ARCHIVE_CFLAGS} \
328 ${CFLAGS} \
Kyle Moffett3fb75812015-04-23 17:24:02 +0000329 -std=$CXXSTD \
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100330 -c \
331 -DBLAZE_JAVA_CPU=\"k8\" \
332 -DBLAZE_OPENSOURCE=1 \
333 -o "output/${OBJDIR}/${OBJ}" \
334 "${FILE}"
335 fi
336 done
337}
338
339function cc_link() {
340 local OBJDIR=$1
341 local OUTPUT=$2
342 shift 2
343 local FILES=()
344 for FILE in "$@"; do
345 local OBJ=$(basename "${FILE}").o
346 FILES+=("output/${OBJDIR}/${OBJ}")
347 done
Kyle Moffett3fb75812015-04-23 17:24:02 +0000348 "${CXX}" -o ${OUTPUT} "${FILES[@]}" -lstdc++ ${LDFLAGS}
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100349}
350
351function cc_build() {
352 local NAME=$1
353 local OBJDIR=$2
354 local OUTPUT=$3
355 shift 3
356 log "Compiling ${NAME} .cc files..."
357 cc_compile "${OBJDIR}" "$@"
358 log "Linking ${NAME}..."
359 cc_link "${OBJDIR}" "${OUTPUT}" "$@"
360}
361
Daniel Wagner-Hall13ba3312015-03-20 05:45:45 +0000362if [ -z "${BAZEL_SKIP_JAVA_COMPILATION}" ]; then
363 log "Compiling Java stubs for protocol buffers..."
364 for f in $PROTO_FILES ; do
365 "${PROTOC}" -Isrc/main/protobuf/ --java_out=output/src "$f"
366 done
367
368 java_compilation "Bazel Java" "$DIRS" "$LIBRARY_JARS" "output"
369
Damien Martin-Guillereza0a79682015-04-20 09:44:08 +0000370 # help files: all non java and BUILD files in src/main/java.
371 for i in $(find src/main/java -type f -a \! -name '*.java' -a \! -name 'BUILD' | sed 's|src/main/java/||'); do
Daniel Wagner-Hall13ba3312015-03-20 05:45:45 +0000372 mkdir -p $(dirname output/classes/$i)
373 cp src/main/java/$i output/classes/$i
374 done
375
Damien Martin-Guillerez7d429ac2015-05-20 14:55:57 +0000376 # build-data.properties
377 git_version="non-git"
378 if [ -x "$(which git || true)" ] && [ -d .git ]; then
379 git_version=$(git log -1 --oneline | cut -d " " -f 1 2>/dev/null || \
380 echo "non-git")
381 fi
382 cat >output/classes/build-data.properties <<EOF
383build.time=$(date)
384build.label=bazel-compile.sh-${git_version}
385EOF
Daniel Wagner-Hall13ba3312015-03-20 05:45:45 +0000386 create_deploy_jar "libblaze" "com.google.devtools.build.lib.bazel.BazelMain" \
387 output third_party/javascript
388fi
389
390if [ -z "${BAZEL_SKIP_SINGLEJAR_COMPILATION}" ]; then
391 # Compile singlejar, a jar suitable for deployment.
392 java_compilation "SingleJar tool" "$SINGLEJAR_DIRS" "$SINGLEJAR_LIBRARIES" \
393 "output/singlejar"
394
395 create_deploy_jar "SingleJar_deploy" \
396 "com.google.devtools.build.singlejar.SingleJar" "output/singlejar"
397 mkdir -p tools/jdk
398 cp -f output/singlejar/SingleJar_deploy.jar tools/jdk
399fi
400
401if [ -z "${BAZEL_SKIP_BUILDJAR_COMPILATION}" ]; then
402 # Compile buildjar, a wrapper around javac.
403 java_compilation "JavaBuilder tool" "$BUILDJAR_DIRS" "$BUILDJAR_LIBRARIES" \
404 "output/buildjar" $JAVA_HOME/lib/tools.jar
405
406 create_deploy_jar "JavaBuilder_deploy" \
407 "com.google.devtools.build.buildjar.BazelJavaBuilder" "output/buildjar"
408 mkdir -p tools/jdk
409 cp -f output/buildjar/JavaBuilder_deploy.jar tools/jdk
410fi
411
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100412cc_build "client" "objs" "output/client" ${BLAZE_CC_FILES[@]}
413
Damien Martin-Guillerezbfcb7f32015-02-19 13:18:11 +0000414LDFLAGS="$LDFLAGS -lz" cc_build "ijar" "ijar" "tools/jdk/ijar" ${IJAR_CC_FILES[@]}
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100415
416if [ ! -z "$JNILIB" ] ; then
417 log "Compiling JNI libraries..."
418 for FILE in "${NATIVE_CC_FILES[@]}"; do
419 OUT=$(basename "${FILE}").o
Kyle Moffett3fb75812015-04-23 17:24:02 +0000420 "${CXX}" \
Han-Wen Nienhuys36fbe632015-04-21 13:58:08 +0000421 -I . \
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100422 -I "${JAVA_HOME}/include/" \
423 -I "${JAVA_HOME}/include/${PLATFORM}" \
Kyle Moffett3fb75812015-04-23 17:24:02 +0000424 -std=$CXXSTD \
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100425 -fPIC \
426 -c \
427 -D_JNI_IMPLEMENTATION_ \
428 -DBLAZE_JAVA_CPU=\"k8\" \
429 -DBLAZE_OPENSOURCE=1 \
430 -o "output/native/${OUT}" \
431 "${FILE}"
432 done
433
434 log "Linking ${JNILIB}..."
Kyle Moffett3fb75812015-04-23 17:24:02 +0000435 "${CXX}" -o output/${JNILIB} $JNI_LD_ARGS -shared output/native/*.o -l stdc++
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100436fi
437
438log "Compiling build-runfiles..."
439# Clang on Linux requires libstdc++
Kyle Moffett3fb75812015-04-23 17:24:02 +0000440"${CXX}" -o output/build-runfiles -std=c++0x -l stdc++ src/main/tools/build-runfiles.cc
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100441
442log "Compiling process-wrapper..."
443"${CC}" -o output/process-wrapper -std=c99 src/main/tools/process-wrapper.c
444if [[ $PLATFORM == "linux" ]]; then
445 log "Compiling sandbox..."
446 "${CC}" -o output/namespace-sandbox -std=c99 src/main/tools/namespace-sandbox.c
447fi
448
449cp src/main/tools/build_interface_so output/build_interface_so
Kristina Chodorowb5ecdab2015-03-16 17:55:04 +0000450cp src/main/tools/jdk.* output
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100451
452touch output/client_info
453chmod 755 output/client_info
454
455log "Creating Bazel self-extracting archive..."
Kristina Chodorowb5ecdab2015-03-16 17:55:04 +0000456TO_ZIP="libblaze.jar ${JNILIB} build-runfiles${EXE_EXT} process-wrapper${EXE_EXT} client_info build_interface_so ${MSYS_DLLS} jdk.WORKSPACE jdk.BUILD"
Han-Wen Nienhuysd08b27f2015-02-25 16:45:20 +0100457if [[ $PLATFORM == "linux" ]]; then
458 TO_ZIP="$TO_ZIP namespace-sandbox${EXE_EXT}"
459fi
460
461(cd output/ ; cat client ${TO_ZIP} | ${MD5SUM} | awk '{ print $1; }' > install_base_key)
462(cd output/ ; echo "${JAVA_VERSION}" > java.version)
463(cd output/ ; find . -type f | xargs -P 10 touch -t 198001010000)
464(cd output/ ; zip $ZIPOPTS -q package.zip ${TO_ZIP} install_base_key java.version)
465cat output/client output/package.zip > output/bazel
466zip -qA output/bazel \
467 || echo "(Non-critical error, ignore.)"
468
469chmod 755 output/bazel
Daniel Wagner-Hallb92fbb02015-03-20 19:50:42 +0000470
Thiago Farinadd02a922015-05-14 20:17:45 +0000471if [[ $PLATFORM == "darwin" ]]; then
472 log "Creating objc helper tools..."
Daniel Wagner-Hallb92fbb02015-03-20 19:50:42 +0000473
Thiago Farinadd02a922015-05-14 20:17:45 +0000474 zip_common="src/tools/xcode-common/java/com/google/devtools/build/xcode/zip src/tools/xcode-common/java/com/google/devtools/build/xcode/util src/java_tools/singlejar/java/com/google/devtools/build/zip src/java_tools/singlejar/java/com/google/devtools/build/singlejar/ZipCombiner.java src/java_tools/singlejar/java/com/google/devtools/build/singlejar/ZipEntryFilter.java src/java_tools/singlejar/java/com/google/devtools/build/singlejar/CopyEntryFilter.java"
Daniel Wagner-Hallb92fbb02015-03-20 19:50:42 +0000475
Thiago Farinadd02a922015-05-14 20:17:45 +0000476 java_compilation "actoolzip" "src/tools/xcode-common/java/com/google/devtools/build/xcode/actoolzip src/tools/xcode-common/java/com/google/devtools/build/xcode/zippingoutput ${zip_common}" "third_party/guava/guava-18.0.jar third_party/jsr305/jsr-305.jar" "output/actoolzip"
477 create_deploy_jar "precomp_actoolzip_deploy" "com.google.devtools.build.xcode.actoolzip.ActoolZip" "output/actoolzip"
Daniel Wagner-Hallb92fbb02015-03-20 19:50:42 +0000478
Thiago Farinadd02a922015-05-14 20:17:45 +0000479 java_compilation "ibtoolzip" "src/tools/xcode-common/java/com/google/devtools/build/xcode/ibtoolzip src/tools/xcode-common/java/com/google/devtools/build/xcode/zippingoutput ${zip_common}" "third_party/guava/guava-18.0.jar third_party/jsr305/jsr-305.jar" "output/ibtoolzip"
480 create_deploy_jar "precomp_ibtoolzip_deploy" "com.google.devtools.build.xcode.ibtoolzip.IbtoolZip" "output/ibtoolzip"
Daniel Wagner-Hallb92fbb02015-03-20 19:50:42 +0000481
Thiago Farinadd02a922015-05-14 20:17:45 +0000482 java_compilation "momczip" "src/objc_tools/momczip/java/com/google/devtools/build/xcode/momczip src/tools/xcode-common/java/com/google/devtools/build/xcode/zippingoutput ${zip_common}" "third_party/guava/guava-18.0.jar third_party/jsr305/jsr-305.jar" "output/momczip"
483 create_deploy_jar "precomp_momczip_deploy" "com.google.devtools.build.xcode.momczip.MomcZip" "output/momczip"
Daniel Wagner-Hallb92fbb02015-03-20 19:50:42 +0000484
Thiago Farinadd02a922015-05-14 20:17:45 +0000485 java_compilation "bundlemerge" "src/objc_tools/bundlemerge/java/com/google/devtools/build/xcode/bundlemerge src/objc_tools/plmerge/java/com/google/devtools/build/xcode/plmerge src/tools/xcode-common/java/com/google/devtools/build/xcode/common output/src/com/google/devtools/build/xcode/bundlemerge/proto/BundleMergeProtos.java ${zip_common} third_party/java/dd_plist src/main/java/com/google/devtools/common/options" "third_party/guava/guava-18.0.jar third_party/jsr305/jsr-305.jar third_party/protobuf/protobuf-2.5.0.jar" "output/bundlemerge"
486 create_deploy_jar "precomp_bundlemerge_deploy" "com.google.devtools.build.xcode.bundlemerge.BundleMerge" "output/bundlemerge"
Daniel Wagner-Hallb92fbb02015-03-20 19:50:42 +0000487
Thiago Farinadd02a922015-05-14 20:17:45 +0000488 java_compilation "plmerge" "src/objc_tools/plmerge/java/com/google/devtools/build/xcode/plmerge src/tools/xcode-common/java/com/google/devtools/build/xcode/common third_party/java/dd_plist src/main/java/com/google/devtools/common/options ${zip_common}" "third_party/guava/guava-18.0.jar third_party/jsr305/jsr-305.jar" "output/plmerge"
489 create_deploy_jar "precomp_plmerge_deploy" "com.google.devtools.build.xcode.plmerge.PlMerge" "output/plmerge"
Daniel Wagner-Hallb92fbb02015-03-20 19:50:42 +0000490
Thiago Farinadd02a922015-05-14 20:17:45 +0000491 java_compilation "xcodegen" "src/objc_tools/xcodegen/java/com/google/devtools/build/xcode/xcodegen src/main/java/com/google/devtools/common/options output/src/com/google/devtools/build/xcode/xcodegen/proto/XcodeGenProtos.java third_party/java/buck-ios-support/java src/objc_tools/plmerge/java/com/google/devtools/build/xcode/plmerge src/tools/xcode-common/java/com/google/devtools/build/xcode/common src/tools/xcode-common/java/com/google/devtools/build/xcode/util third_party/java/dd_plist" "third_party/guava/guava-18.0.jar third_party/jsr305/jsr-305.jar third_party/protobuf/protobuf-2.5.0.jar" "output/xcodegen"
492 create_deploy_jar "precomp_xcodegen_deploy" "com.google.devtools.build.xcode.xcodegen.XcodeGen" "output/xcodegen"
Daniel Wagner-Hallb92fbb02015-03-20 19:50:42 +0000493
Thiago Farinadd02a922015-05-14 20:17:45 +0000494 cp -f output/actoolzip/precomp_actoolzip_deploy.jar output/ibtoolzip/precomp_ibtoolzip_deploy.jar output/momczip/precomp_momczip_deploy.jar output/bundlemerge/precomp_bundlemerge_deploy.jar output/plmerge/precomp_plmerge_deploy.jar output/xcodegen/precomp_xcodegen_deploy.jar tools/objc/
495fi
Daniel Wagner-Hallb92fbb02015-03-20 19:50:42 +0000496
Kristina Chodorow8c6b3bb2015-04-09 19:05:34 +0000497# Create a bazelrc file with the base_workspace directory in the package path.
Kristina Chodorow45a24692015-05-18 15:30:30 +0000498bazelrc='build --package_path %workspace%:'${base_workspace}
499bazelrc="${bazelrc}"$'\nfetch --package_path %workspace%:'${base_workspace}
500bazelrc="${bazelrc}"$'\nquery --package_path %workspace%:'${base_workspace}
Damien Martin-Guillerezfeb09392015-05-12 14:48:12 +0000501if [ -z "${HOME-}" ]; then
502 warning="No \$HOME variable set, cannot write .bazelrc file."
503 warning="$warning Consider adding $base_workspace to your package path"
504 log $warning
505elif [ ! -f $HOME/.bazelrc ]; then
Kristina Chodorow8c6b3bb2015-04-09 19:05:34 +0000506 log "Creating a .bazelrc pointing to $base_workspace"
Kristina Chodorow45a24692015-05-18 15:30:30 +0000507 echo "$bazelrc" > $HOME/.bazelrc
Kristina Chodorow06f446a2015-04-06 15:54:03 +0000508else
Kristina Chodorow45a24692015-05-18 15:30:30 +0000509 while read rcline; do
510 if ! grep -q "$rcline" $HOME/.bazelrc; then
511 warning="You already have a .bazelrc. Make sure it contains the "
512 warning="$warning following package paths:\n$bazelrc"
513 log "$warning"
514 break
515 fi
516 done <<< "$bazelrc"
Kristina Chodorow06f446a2015-04-06 15:54:03 +0000517fi
518
Kristina Chodorow4fa24ee2015-05-13 17:08:29 +0000519# Run "bazel fetch" to bring in the JDK (so users don't have to).
520${PWD}/output/bazel fetch //...
521
Laurent Le Brun627a63d2015-03-25 13:35:51 +0000522log "Build successful! Binary is here: ${PWD}/output/bazel"