189 lines
6.2 KiB
Bash
Executable File
189 lines
6.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
DRY_RUN=""
|
|
if [ $# -gt 0 ]; then
|
|
if [ "$1" == "--dry-run" ]; then
|
|
DRY_RUN="echo "
|
|
fi
|
|
fi
|
|
|
|
REQUIRED="git cargo"
|
|
|
|
for name in $(echo ${REQUIRED});
|
|
do
|
|
type -P "$name" &>/dev/null || { echo "Install '$name'" >&2; exit 1;}
|
|
done
|
|
|
|
FIRST_DIR="$(pwd)"
|
|
|
|
# Vars
|
|
URL_GN="http://commondatastorage.googleapis.com/chromeos-localmirror/distfiles/gn-3e43fac03281e2f5e5ae5f27c8e9a6bb45966ea9.bin"
|
|
URL_PLATFORM2_GIT="https://chromium.googlesource.com/chromiumos/platform2"
|
|
URL_RUST_CRATES_GIT="https://chromium.googlesource.com/chromiumos/third_party/rust_crates"
|
|
URL_PROTO_LOGGING_GIT="https://android.googlesource.com/platform/frameworks/proto_logging"
|
|
CHROMIUM_BRANCH="release-R92-13982.B"
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
PARENT_DIR="$(readlink -f ${SCRIPT_DIR}/../)"
|
|
TMP_DIR=$(mktemp -d)
|
|
|
|
trap ctrl_c INT
|
|
|
|
function ctrl_c() {
|
|
rm -rf "${TMP_DIR}"
|
|
exit 1
|
|
}
|
|
|
|
echo Generating source package in "${TMP_DIR}"
|
|
OUT_DIR="${TMP_DIR}/out"
|
|
BIN_DIR="${TMP_DIR}/bin"
|
|
|
|
${DRY_RUN} mkdir -p "${OUT_DIR}"
|
|
${DRY_RUN} mkdir -p "${BIN_DIR}"
|
|
|
|
pushd "${BIN_DIR}"
|
|
wget -O gn "${URL_GN}"
|
|
popd
|
|
export PATH="${PATH}:${BIN_DIR}"
|
|
|
|
# Check dependencies
|
|
# libchrome requires modp_b64
|
|
APT_REQUIRED="modp-b64 libchrome flatbuffers-compiler flex g++-multilib gcc-multilib generate-ninja gnupg gperf libc++-dev libdbus-1-dev libevent-dev libevent-dev libflatbuffers-dev libflatbuffers1 libgl1-mesa-dev libglib2.0-dev liblz4-tool libncurses5 libnss3-dev libprotobuf-dev libre2-9 libssl-dev libtinyxml2-dev libx11-dev libxml2-utils ninja-build openssl protobuf-compiler unzip x11proto-core-dev xsltproc zip zlib1g-dev"
|
|
|
|
# SPEED UP TEST, REMOVE ME
|
|
APT_REQUIRED="modp-b64 libchrome flatbuffers-compiler"
|
|
|
|
APT_MISSING=()
|
|
for name in $(echo ${APT_REQUIRED});
|
|
do
|
|
R="$(apt -qq list "${name}" 2>/dev/null | grep "installed")"
|
|
if [ "${R}" == "" ]; then
|
|
echo "Need to install '${name}'" >&2;
|
|
if [ "${name}" == "modp-b64" ]; then
|
|
echo "${name} source is available to build in this repository"
|
|
echo Run the following to build and install:
|
|
echo " pushd ${PARENT_DIR}/${name}/"
|
|
echo " ./gen-src-pkg.sh ${OUT_DIR}"
|
|
echo " sudo dpkg -i ${OUT_DIR}"/${name}*.deb || ctrl_c
|
|
echo " popd"
|
|
${DRY_RUN} rm -rf ${TMP_DIR}
|
|
exit 1
|
|
elif [ "${name}" == "libchrome" ]; then
|
|
echo "${name} source is available to build in this repository"
|
|
echo Run the following to build and install:
|
|
echo pushd "${PARENT_DIR}/${name}/"
|
|
echo ./gen-src-pkg.sh "${OUT_DIR}"
|
|
echo sudo dpkg -i "${OUT_DIR}"/${name}*.deb || ctrl_c
|
|
echo popd
|
|
${DRY_RUN} rm -rf ${TMP_DIR}
|
|
exit 1
|
|
else
|
|
APT_MISSING+=("${name}")
|
|
fi
|
|
fi
|
|
done
|
|
|
|
APT_MISSING_LEN="${#APT_MISSING[@]}"
|
|
|
|
if [ $APT_MISSING_LEN -gt 0 ]; then
|
|
echo "Missing Packages:"
|
|
echo " ${APT_MISSING[*]}"
|
|
echo
|
|
echo Run the following to build and install:
|
|
echo " sudo apt install" "${APT_MISSING[*]}" || ctrl_c
|
|
${DRY_RUN} rm -rf ${TMP_DIR}
|
|
exit 1
|
|
fi
|
|
|
|
# Check cargo for cxxbridge-cmd
|
|
HAS_CXX="$(cargo install --list | grep cxxbridge-cmd)"
|
|
if [ "$HAS_CXX" == "" ]; then
|
|
echo "Missing cxxbridge-cmd cargo package"
|
|
echo Run the following to build and install:
|
|
echo cargo install cxxbridge-cmd || ctrl_c
|
|
${DRY_RUN} rm -rf ${TMP_DIR}
|
|
exit 1
|
|
fi
|
|
|
|
HAS_CXX="$(cargo install --list | grep cargo-proc-macro)"
|
|
if [ "$HAS_CXX" == "" ]; then
|
|
echo "Missing cargo-proc-macro cargo package"
|
|
echo Run the following to build and install:
|
|
echo cargo install cargo-proc-macro || ctrl_c
|
|
${DRY_RUN} rm -rf ${TMP_DIR}
|
|
exit 1
|
|
fi
|
|
|
|
# Git
|
|
GIT_DIR="${OUT_DIR}/repos"
|
|
GIT_DIR_PLATFORM2="${GIT_DIR}/platform2"
|
|
GIT_DIR_PLATFORM2_COMMON_MK="${GIT_DIR_PLATFORM2}/common-mk"
|
|
GIT_DIR_PLATFORM2_GN="${GIT_DIR_PLATFORM2}/.gn"
|
|
GIT_DIR_RUST_CRATES="${GIT_DIR}/rust_crates"
|
|
GIT_DIR_PROTO_LOGGING="${GIT_DIR}/proto_logging"
|
|
GIT_DIR_BT="$(readlink -f $PARENT_DIR/../../../)"
|
|
|
|
# Staging
|
|
STAGING_DIR="${OUT_DIR}/staging"
|
|
STAGING_DIR_PLATFORM2="${STAGING_DIR}/platform2"
|
|
STAGING_DIR_COMMON_MK="${STAGING_DIR}/common-mk"
|
|
STAGING_DIR_GN="${STAGING_DIR}/.gn"
|
|
STAGING_DIR_BT="${STAGING_DIR}/bt"
|
|
# No it isn't a typo, use 'rust'
|
|
STAGING_DIR_RUST_CRATES="${STAGING_DIR}/rust"
|
|
STAGING_DIR_PROTO_LOGGING="${STAGING_DIR}/proto_logging"
|
|
|
|
OUTPUT_DIR="${OUT_DIR}/output"
|
|
EXTERNAL_DIR="${STAGING_DIR}/external"
|
|
EXTERNAL_DIR_RUST="${EXTERNAL_DIR}/rust"
|
|
EXTERNAL_DIR_PROTO_LOGGING="${EXTERNAL_DIR}/proto_logging"
|
|
|
|
${DRY_RUN} mkdir -p "${GIT_DIR}"
|
|
${DRY_RUN} mkdir -p "${STAGING_DIR}"
|
|
${DRY_RUN} mkdir -p "${OUTPUT_DIR}"
|
|
${DRY_RUN} mkdir -p "${EXTERNAL_DIR}"
|
|
|
|
${DRY_RUN} git clone -b "${CHROMIUM_BRANCH}" "${URL_PLATFORM2_GIT}" "${GIT_DIR_PLATFORM2}"
|
|
|
|
${DRY_RUN} git clone "${URL_RUST_CRATES_GIT}" "${GIT_DIR_RUST_CRATES}"
|
|
${DRY_RUN} git clone "${URL_PROTO_LOGGING_GIT}" "${GIT_DIR_PROTO_LOGGING}"
|
|
|
|
${DRY_RUN} ln -s "${GIT_DIR_PLATFORM2_COMMON_MK}" "${STAGING_DIR_COMMON_MK}" || ctrl_c
|
|
${DRY_RUN} ln -s "${GIT_DIR_PLATFORM2_GN}" "${STAGING_DIR_GN}" || ctrl_c
|
|
${DRY_RUN} ln -s "${GIT_DIR_BT}" "${STAGING_DIR_BT}" || ctrl_c
|
|
${DRY_RUN} ln -s "${GIT_DIR_RUST_CRATES}" "${EXTERNAL_DIR_RUST}" || ctrl_c
|
|
${DRY_RUN} ln -s "${GIT_DIR_PROTO_LOGGING}" "${EXTERNAL_DIR_PROTO_LOGGING}" || ctrl_c
|
|
|
|
${DRY_RUN} "${GIT_DIR_BT}"/build.py --bootstrap-dir "$(readlink -f "${OUT_DIR}")" --libdir /usr/lib || ctrl_c
|
|
|
|
PKG_DIR="${SCRIPT_DIR}/package"
|
|
PKG_USR_DIR="${PKG_DIR}/usr"
|
|
|
|
OUT_PKG_DIR="${OUT_DIR}/package"
|
|
OUT_PKG_USR_DIR="${OUT_PKG_DIR}/usr"
|
|
|
|
BIN_OUTPUT="${OUTPUT_DIR}/debug"
|
|
|
|
BTCLIENT_BIN="${BIN_OUTPUT}/btclient"
|
|
BTMANAGERD_BIN="${BIN_OUTPUT}/btmanagerd"
|
|
BTADAPTERD_BIN="${BIN_OUTPUT}/btadapterd"
|
|
|
|
${DRY_RUN} cp -r "${PKG_DIR}" "${OUT_DIR}/"
|
|
|
|
${DRY_RUN} mkdir -p "${OUT_PKG_USR_DIR}/bin"
|
|
${DRY_RUN} cp "${BTCLIENT_BIN}" "${OUT_PKG_USR_DIR}/bin/"
|
|
|
|
${DRY_RUN} mkdir -p "${OUT_PKG_USR_DIR}/libexec/bluetooth"
|
|
${DRY_RUN} cp "${BTMANAGERD_BIN}" "${OUT_PKG_USR_DIR}/libexec/bluetooth/"
|
|
${DRY_RUN} cp "${BTADAPTERD_BIN}" "${OUT_PKG_USR_DIR}/libexec/bluetooth/"
|
|
|
|
# Directory with control file needs the right permissions
|
|
${DRY_RUN} chmod -R 0755 "${TMP_DIR}"
|
|
${DRY_RUN} dpkg-deb --build "${OUT_PKG_DIR}" "${FIRST_DIR}/floss.deb"
|
|
|
|
${DRY_RUN} rm -rf ${TMP_DIR}
|
|
|
|
echo
|
|
echo "Now run:"
|
|
echo " sudo dpkg -i "${FIRST_DIR}"/floss.deb"
|