blob: a0376ffd5e73075feff7697296d5530544f8bac2 [file] [log] [blame]
#!/usr/bin/env bash
#
# SWIFT_ENABLE_TENSORFLOW
#
# utils/build-toolchain-tensorflow - documents process for building a toolchain
#
# This source file is part of the Swift.org open source project
#
# Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
# Licensed under Apache License v2.0 with Runtime Library Exception
#
# See https://swift.org/LICENSE.txt for license information
# See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
function usage() {
echo "$0 [OPTIONS]"
echo ""
echo "OPTIONS"
echo ""
echo "-h --help"
echo "Show help information."
echo ""
echo "-n --dry-run"
echo "Do a dry run."
echo ""
echo "-t --test"
echo "Run tests."
echo ""
echo "-r <version>, --release <version>"
echo "Build a release toolchain with the specified version name."
echo ""
echo "--tensorflow-swift-apis"
echo "Build and install the tensorflow-swift-apis library in the toolchain. (Default)."
echo ""
echo "--no-tensorflow-swift-apis"
echo "Do not build and install the tensorflow-swift-apis library in the toolchain."
echo ""
if [[ "$(uname -s)" == "Darwin" ]] ; then
echo "-p --pkg"
echo "Build a installer package."
echo ""
fi
}
cd "$(dirname $0)/.." || exit
SRC_DIR=$PWD
# Set defaults.
DRY_RUN=
BUNDLE_PREFIX=
INSTALLER_PACKAGE=
SWIFT_PACKAGE_BASE=
SWIFT_PACKAGE_TENSORFLOW_SWIFT_APIS=,tensorflow_swift_apis
SWIFT_PACKAGE_NOTEST=
SWIFT_PACKAGE_INSTALLER=
S4TF_RELEASE_VERSION=
if [[ -z ${SWIFT_PACKAGE} ]]; then
case $(uname -s) in
Darwin)
SWIFT_PACKAGE_BASE=tensorflow_osx
SWIFT_PACKAGE_NOTEST=,no_test
;;
Linux)
SWIFT_PACKAGE_BASE=tensorflow_linux
SWIFT_PACKAGE_NOTEST=,no_test
;;
*)
echo "Unrecognised platform $(uname -s)"
exit 1
;;
esac
fi
# Process command line arguments.
FIRST_ARG_PROCESSED=0
while [ $# -ne 0 ]; do
case "$1" in
-n|--dry-run)
DRY_RUN="-n"
;;
-t|--test)
SWIFT_PACKAGE_NOTEST=
;;
-h|--help)
usage
exit 0
;;
-r|--release)
shift
S4TF_RELEASE_VERSION=$1
if [ -z "$S4TF_RELEASE_VERSION" ]; then
echo "Missing release version name after --release. See --help."
exit 1
fi
;;
-p|--pkg)
INSTALLER_PACKAGE=1
if [ "$(uname -s)" == "Darwin" ]; then
SWIFT_PACKAGE_INSTALLER=,installer
else
echo "--pkg is not supported on \"$(uname -s)\". See --help."
exit 1
fi
;;
-g|--gpu)
# Warn, for backwards compatibility with existing callers.
# TODO: Remove when we have fixed up all callers.
echo "Warning: --gpu deprecated."
;;
-x|--x10)
# Warn, for backwards compatibility with existing callers.
# TODO: Remove when we have fixed up all callers.
echo "Warning: --x10 deprecated."
;;
--tensorflow-swift-apis)
SWIFT_PACKAGE_TENSORFLOW_SWIFT_APIS=,tensorflow_swift_apis
;;
--no-tensorflow-swift-apis)
SWIFT_PACKAGE_TENSORFLOW_SWIFT_APIS=
;;
*)
if [ ${FIRST_ARG_PROCESSED} -ne 0 ]; then
echo "Unrecognised argument \"$1\""
exit 1
fi
;;
esac
FIRST_ARG_PROCESSED=1
shift
done
SWIFT_PACKAGE="${SWIFT_PACKAGE_BASE}${SWIFT_PACKAGE_TENSORFLOW_SWIFT_APIS}${SWIFT_PACKAGE_NOTEST}${SWIFT_PACKAGE_INSTALLER}"
# Get host name.
HOST=
if [ "$(uname -s)" == "Darwin" ]; then
HOST=osx
elif [ "$(uname -s)" == "Linux" ]; then
linux_platform="$(lsb_release -i | cut -f2 | tr '[:upper:]' '[:lower:]')"
linux_version="$(lsb_release -r | cut -f2)"
HOST="${linux_platform}${linux_version}"
fi
# Report the commands being run.
set -x
YEAR=$(date +"%Y")
MONTH=$(date +"%m")
DAY=$(date +"%d")
TOOLCHAIN_VERSION_DATE="5.0.${YEAR}${MONTH}${DAY}"
# Set toolchain name based on whether this is a normal or release toolchain.
if [[ -z ${S4TF_RELEASE_VERSION} ]]; then
TOOLCHAIN_NAME="swift-tensorflow-DEVELOPMENT-${YEAR}-${MONTH}-${DAY}-a"
DISPLAY_NAME_SHORT="Swift for TensorFlow Development Snapshot"
DISPLAY_NAME="${DISPLAY_NAME_SHORT} ${YEAR}-${MONTH}-${DAY}"
else
TOOLCHAIN_NAME="swift-tensorflow-RELEASE-${S4TF_RELEASE_VERSION}"
DISPLAY_NAME_SHORT="Swift for TensorFlow ${S4TF_RELEASE_VERSION} Release"
DISPLAY_NAME="${DISPLAY_NAME_SHORT}"
fi
ARCHIVE="${TOOLCHAIN_NAME}-${HOST}.tar.gz"
SYM_ARCHIVE="${TOOLCHAIN_NAME}-osx-symbols.tar.gz"
BUNDLE_PREFIX=com.google.swift
BUNDLE_IDENTIFIER="${BUNDLE_PREFIX}.${YEAR}${MONTH}${DAY}"
SWIFT_INSTALLABLE_PACKAGE="${SRC_DIR}/${ARCHIVE}"
SWIFT_INSTALL_DIR="${SRC_DIR}/swift-nightly-install"
SWIFT_INSTALL_SYMROOT="${SRC_DIR}/swift-nightly-symroot"
SWIFT_TOOLCHAIN_DIR="/Library/Developer/Toolchains/${TOOLCHAIN_NAME}.xctoolchain"
SYMBOLS_PACKAGE="${SRC_DIR}/${SYM_ARCHIVE}"
DRY_RUN="${DRY_RUN}"
# Instructs swift-driver, et al to use local clones.
export SWIFTCI_USE_LOCAL_DEPS=1
if [ ${INSTALLER_PACKAGE} ]; then
INSTALLER_PACKAGE="darwin_toolchain_installer_package=${TOOLCHAIN_NAME}-osx.pkg"
fi
./utils/build-script ${DRY_RUN} --preset="${SWIFT_PACKAGE}" \
--cmake-c-launcher=`which sccache` \
--cmake-cxx-launcher=`which sccache` \
install_destdir="${SWIFT_INSTALL_DIR}" \
installable_package="${SWIFT_INSTALLABLE_PACKAGE}" \
install_toolchain_dir="${SWIFT_TOOLCHAIN_DIR}" \
install_symroot="${SWIFT_INSTALL_SYMROOT}" \
symbols_package="${SYMBOLS_PACKAGE}" \
darwin_toolchain_bundle_identifier="${BUNDLE_IDENTIFIER}" \
darwin_toolchain_display_name="${DISPLAY_NAME}" \
darwin_toolchain_display_name_short="${DISPLAY_NAME_SHORT}" \
darwin_toolchain_xctoolchain_name="${TOOLCHAIN_NAME}" \
darwin_toolchain_version="${TOOLCHAIN_VERSION_DATE}" \
darwin_toolchain_alias="Swift for TensorFlow" \
${INSTALLER_PACKAGE}