#!/bin/sh # This is an example of how to do a cross-build of OpenOCD using pkg-config. # Cross-building with pkg-config is deceptively hard and most guides and # tutorials are incomplete or give bad advice. Some of the traps that are easy # to fall in but handled by this script are: # # * Polluting search paths and flags with values from the build system. # * Faulty pkg-config wrappers shipped with distribution packaged cross- # toolchains. # * Build failing because pkg-config discards some paths even though they are # correctly listed in the .pc file. # * Getting successfully built binaries that cannot find runtime data because # paths refer to the build file system. # # This script is probably more useful as a reference than as a complete build # tool but for some configurations it may be usable as-is. It only cross- # builds libusb-1.0 from source, but the script can be extended to build other # prerequisities in a similar manner. # # Usage: # export LIBUSB1_SRC=/path/to/libusb-1.0 # export OPENOCD_CONFIG="--enable-..." # cd /work/dir # /path/to/openocd/contrib/cross-build.sh # # For static linking, a workaround is to # export LIBUSB1_CONFIG="--enable-static --disable-shared" # # All the paths must not contain any spaces. set -e -x WORK_DIR=$PWD ## Source code paths, customize as necessary : ${OPENOCD_SRC:="`dirname "$0"`/.."} : ${LIBUSB1_SRC:=/path/to/libusb} OPENOCD_SRC=`readlink -m $OPENOCD_SRC` LIBUSB1_SRC=`readlink -m $LIBUSB1_SRC` HOST_TRIPLET=$1 BUILD_DIR=$WORK_DIR/$HOST_TRIPLET-build LIBUSB1_BUILD_DIR=$BUILD_DIR/libusb1 OPENOCD_BUILD_DIR=$BUILD_DIR/openocd ## Root of host file tree SYSROOT=$WORK_DIR/$HOST_TRIPLET-root ## Install location within host file tree : ${PREFIX=/usr} ## OpenOCD-only install dir for packaging PACKAGE_DIR=$WORK_DIR/openocd_`git --git-dir=$OPENOCD_SRC/.git describe`_$HOST_TRIPLET ####### # Create pkg-config wrapper and make sure it's used export PKG_CONFIG=$WORK_DIR/$HOST_TRIPLET-pkg-config cat > $PKG_CONFIG <