| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- #!/bin/bash
- set -x -e
- ################################################################################
- # Usage example:
- # ./build_all.sh PKG_LVERSION=4.0.0-123
- ################################################################################
- OPENOCD_REPO="${CI_PROJECT_URL:-https://github.com/cypresssemiconductorco/openocd.git}"
- OPENOCD_BRANCH="${CI_COMMIT_BRANCH:-cypress}"
- for cmd in "${@}"; do
- eval "${cmd}"
- done
- ################################################################################
- STATIC="${STATIC:-0}"
- OPENOCD_BRANCH="${OPENOCD_BRANCH:-develop}"
- PKG_LVERSION="${PKG_LVERSION:-${OPENOCD_BRANCH}-latest}"
- LIBUSB_BRANCH=master
- LIBUSB_COMMIT=HEAD
- HIDAPI_BRANCH=master
- HIDAPI_COMMIT=HEAD
- CAPSTONE_BRANCH=master
- CAPSTONE_COMMIT=tags/4.0.2
- ################################################################################
- HIDAPI_REPO="https://github.com/libusb/hidapi.git"
- LIBUSB_REPO="https://github.com/libusb/libusb.git"
- CAPSTONE_REPO="https://github.com/aquynh/capstone.git"
- SOURCE_PREFIX="$(pwd)/build/_src"
- BUILD_PREFIX="$(pwd)/build/_libs"
- INSTALL_PREFIX="$(pwd)/install"
- BIN_PREFIX="${INSTALL_PREFIX}/openocd/bin"
- CONTRIB_PREFIX="${INSTALL_PREFIX}/openocd/contrib"
- #-------------------------------------------------------------------------------
- export MAKEFLAGS=${MAKEFLAGS:=-j8}
- XTRA_CFLAGS+=" -O2 -URELSTR -DRELSTR=\\\"-${PKG_LVERSION}\\\""
- case "$OSTYPE" in
- darwin*)
- if [ ${STATIC} -eq 1 ]; then
- echo "Static build is not supported on Mac OS"
- STATIC=0
- fi
- export XTRA_CFLAGS+=" -Qunused-arguments"
- ;;
- linux*)
- XTRA_CFLAGS+=" -Wl,-rpath,XORIGIN"
- ;;
- msys*)
- if [ ${STATIC} -eq 1 ]; then
- XTRA_CFLAGS+=" -Wl,-static"
- fi
- ;;
- *) echo "Unknown operating system: $OSTYPE"
- exit 1
- ;;
- esac
- if [ ${STATIC} -eq 1 ]; then
- XTRA_CFLAGS+=" -static -static-libgcc"
- XTRA_LDFLAGS+=" -static"
- LIBUSB_BUILD_TYPE="--enable-shared=no"
- else
- LIBUSB_BUILD_TYPE="--enable-static=no"
- fi
- if [ "$CONFIG" == "Coverage" ]; then
- XTRA_CFLAGS+=" --coverage -finstrument-functions-exclude-file-list=msys64,jimtcl,src/jtag,src/helper,src/pld,src/rtos,src/server,src/svf,src/target,src/transport,src/xsvf,src/flash/hand"
- fi
- function maybe_fetch_package {
- if [ ! -d "${SOURCE_PREFIX}/${1}" ]; then
- git clone --branch "${3}" "${2}" "${SOURCE_PREFIX}/${1}"
- fi
- (cd "${SOURCE_PREFIX}/${1}" && {
- git reset --hard "origin/${3}"
- git clean -fd
- [ -z "$4" ] || git checkout --quiet "$4"
- git show --oneline -s
- })
- }
- function maybe_build_library {
- (cd "${SOURCE_PREFIX}/${1}" && {
- if [ ! -f Makefile ]; then
- ./bootstrap || ./autogen.sh
- ./configure --prefix="${BUILD_PREFIX}" --enable-silent-rules "${@:2}"
- fi
- make
- make install
- })
- }
- ############################
- # change dynamic shared library install names
- #
- function patch_macos_lib_path {
- local victim=$1
- local lib_name=$2
- local rel_lib_path="${3:-@executable_path}"
-
- local path_regex="^(.*[\/]?)($lib_name.*\.dylib)"
- otool -L "$victim" | grep "$lib_name" | while read -r line ; do
- if [[ ${line} =~ ${path_regex} ]]; then
- lib_dir=${BASH_REMATCH[1]}
- lib=${BASH_REMATCH[2]}
- install_name_tool -change "${lib_dir}${lib}" "$rel_lib_path/${lib}" "$victim"
- fi
- done
- }
- # fetch and build hidapi
- maybe_fetch_package "hidapi" "${HIDAPI_REPO}" "${HIDAPI_BRANCH}" "${HIDAPI_COMMIT}"
- maybe_build_library "hidapi" "--enable-shared=no" \
- LD_LIBRARY_PATH=":${BUILD_PREFIX}/lib" \
- PKG_CONFIG_PATH="${BUILD_PREFIX}/lib/pkgconfig"
- # fetch and build libusb
- libusb_exists=$(find "${BUILD_PREFIX}/lib/" -maxdepth 1 -type f -name "libusb-*" -print -quit)
- if [ -z "$libusb_exists" ]; then
- maybe_fetch_package "libusb" "${LIBUSB_REPO}" "${LIBUSB_BRANCH}" "${LIBUSB_COMMIT}"
- maybe_build_library "libusb" "${LIBUSB_BUILD_TYPE}"
- fi
- maybe_fetch_package "capstone" "${CAPSTONE_REPO}" "${CAPSTONE_BRANCH}" "${CAPSTONE_COMMIT}"
- cd "${SOURCE_PREFIX}/capstone"
- make CAPSTONE_ARCHS="arm" CAPSTONE_BUILD_CORE_ONLY=yes CAPSTONE_SHARED=no PREFIX=${BUILD_PREFIX} install
- # fetch openocd
- maybe_fetch_package "openocd" "${OPENOCD_REPO}" "${OPENOCD_BRANCH}"
- rm -rf "${INSTALL_PREFIX}"
- (cd "${SOURCE_PREFIX}/openocd" && {
- if [ -f Makefile ]; then
- make distclean
- fi
- ./bootstrap
- ./configure --enable-internal-libjaylink --enable-jtag_vpi --enable-silent-rules --disable-werror --enable-remote-bitbang \
- --disable-ulink --disable-usbprog --disable-rlink --disable-armjtagew --disable-angie \
- CFLAGS="${CFLAGS} ${XTRA_CFLAGS}" LDFLAGS="${LDFLAGS} ${XTRA_LDFLAGS}" \
- LD_LIBRARY_PATH=":${BUILD_PREFIX}/lib:${BUILD_PREFIX}/bin:${LD_LIBRARY_PATH}" \
- PKG_CONFIG_PATH="${BUILD_PREFIX}/lib/pkgconfig" \
- CC="gcc" \
- --prefix="${BUILD_PREFIX}" \
- --mandir="${BUILD_PREFIX}/share/man" \
- --infodir="${BUILD_PREFIX}/share/info" \
- --bindir="${BIN_PREFIX}" \
- --datarootdir="${INSTALL_PREFIX}"
- make
- make install-strip
- })
- mkdir -p "${INSTALL_PREFIX}/openocd/source"
- cp -av "${SOURCE_PREFIX}/openocd/build"/*.sh "${INSTALL_PREFIX}/openocd/source/"
- mkdir -p "${INSTALL_PREFIX}/openocd/docs"
- cp -av "${SOURCE_PREFIX}/openocd/doc/third_party_licenses" "${INSTALL_PREFIX}/openocd/docs/"
- cp -av "${SOURCE_PREFIX}/openocd/doc"/*.pdf "${INSTALL_PREFIX}/openocd/docs/" || true
- rm -rf "${CONTRIB_PREFIX}"
- case "$OSTYPE" in
- darwin*)
- if [ ${STATIC} -eq 0 ]; then
- cp "${BUILD_PREFIX}/lib/libusb-1.0.0.dylib" "${BIN_PREFIX}/"
- patch_macos_lib_path "${BIN_PREFIX}/openocd" "libusb-"
- fi
- ;;
- msys*)
- if [ ${STATIC} -eq 0 ]; then
- # cp /mingw64/bin/libwinpthread-1.dll ${BIN_PREFIX}/
- # cp -a "/c/msys64/mingw32/bin/libgcc_s_dw2-1.dll" "${BIN_PREFIX}/"
- # cp -a "/c/msys64/mingw32/bin/libwinpthread-1.dll" "${BIN_PREFIX}/"
- cp -a "${BUILD_PREFIX}/bin/libusb-1.0.dll" "${BIN_PREFIX}/"
- strip "${BIN_PREFIX}"/*.dll
- fi
- ;;
- linux*)
- cp -av "${SOURCE_PREFIX}/openocd/udev_rules" "${INSTALL_PREFIX}/openocd/"
- if [ ${STATIC} -eq 0 ]; then
- find "${BUILD_PREFIX}/lib/" -maxdepth 1 -type f -name "libusb*.so.*" \
- -exec cp -av {} "${BIN_PREFIX}/libusb-1.0.so.0" \;
- strip "${BIN_PREFIX}/libusb-1.0.so.0"
- chrpath -r '$ORIGIN' "${BIN_PREFIX}/openocd"
- fi
- ;;
- esac
|