Files
UnrealEngineUWP/Engine/Source/ThirdParty/Boost/BuildForUE/Linux/BuildForLinux.sh
matt johnson e7799e9a24 Boost: add build script and build products for Linux
The build script included here is largely a copy of the existing
build script for Mac, which was itself ported from the build script
for Windows, so its usage is similar.

The build products included here represent Boost version
1.70.0, the same version currently used on Windows and Mac.

Note that this does *not* include the update to the module rules
that would put this new set of libraries into use with engine builds.
That will be done in a subsequent change, since it will have to be
combined with a rebuild of USD, which is the main consumer of
the Boost libraries.

#rb michael.balzer
#preflight skip

[CL 19546691 by matt johnson in ue5-main branch]
2022-03-29 14:44:27 -04:00

186 lines
5.4 KiB
Bash
Executable File

#!/bin/bash
set -e
UsageAndExit()
{
echo "Build Boost for use with Unreal Engine on Linux"
echo
echo "Usage:"
echo
echo " BuildForLinux.sh <Boost Version> [<library name> [<library name> ...]]"
echo
echo "Usage examples:"
echo
echo " BuildForLinux.command 1.55.0"
echo " -- Installs Boost version 1.55.0 as header-only."
echo
echo " BuildForLinux.command 1.66.0 iostreams system thread"
echo " -- Builds and installs Boost version 1.66.0 with iostreams, system, and thread libraries."
echo
echo " BuildForLinux.command 1.72.0 all"
echo " -- Builds and installs Boost version 1.72.0 with all of its libraries."
exit 1
}
# Set the following variable to 1 if you have already downloaded and extracted
# the Boost sources and you need to play around with the build configuration.
ALREADY_HAVE_SOURCES=0
BUILD_SCRIPT_DIRECTORY=`cd $(dirname "$0"); pwd`
UE_MODULE_LOCATION=`cd $BUILD_SCRIPT_DIRECTORY/../..; pwd`
UE_THIRD_PARTY_LOCATION=`cd $UE_MODULE_LOCATION/..; pwd`
UE_ENGINE_DIR=`cd $UE_MODULE_LOCATION/../../..; pwd`
PYTHON_EXECUTABLE_LOCATION="$UE_ENGINE_DIR/Binaries/ThirdParty/Python3/Linux/bin/python3"
PYTHON_VERSION=3.9
# Get version from arguments.
BOOST_VERSION=$1
if [ -z "$BOOST_VERSION" ]
then
UsageAndExit
fi
shift
BOOST_UNDERSCORE_VERSION="`echo $BOOST_VERSION | sed s/\\\./_/g`"
ARG_LIBRARIES=()
BOOST_WITH_LIBRARIES=""
for arg in "$@"
do
ARG_LIBRARIES+=("$arg")
BOOST_WITH_LIBRARIES="$BOOST_WITH_LIBRARIES --with-$arg"
done
echo [`date +"%r"`] Building Boost for Unreal Engine
echo " Version : $BOOST_VERSION"
if [ ${#ARG_LIBRARIES[@]} -eq 0 ]
then
echo " Libraries: <headers-only>"
else
echo " Libraries: ${ARG_LIBRARIES[*]}"
fi
BUILD_LOCATION="$UE_MODULE_LOCATION/Intermediate"
ARCH_NAME=x86_64-unknown-linux-gnu
INSTALL_INCLUDEDIR=include
INSTALL_LIB_DIR="lib/Unix/$ARCH_NAME"
INSTALL_LOCATION="$UE_MODULE_LOCATION/boost-$BOOST_UNDERSCORE_VERSION"
INSTALL_INCLUDE_LOCATION="$INSTALL_LOCATION/$INSTALL_INCLUDEDIR"
INSTALL_LIB_LOCATION="$INSTALL_LOCATION/$INSTALL_LIB_DIR"
BOOST_VERSION_FILENAME="boost_$BOOST_UNDERSCORE_VERSION"
if [ $ALREADY_HAVE_SOURCES -eq 0 ]
then
rm -rf $BUILD_LOCATION
mkdir $BUILD_LOCATION
else
echo Expecting sources to already be available at $BUILD_LOCATION/$BOOST_VERSION_FILENAME
fi
pushd $BUILD_LOCATION > /dev/null
if [ $ALREADY_HAVE_SOURCES -eq 0 ]
then
# Download Boost source file.
BOOST_SOURCE_FILE="$BOOST_VERSION_FILENAME.tar.gz"
BOOST_URL="https://boostorg.jfrog.io/artifactory/main/release/$BOOST_VERSION/source/$BOOST_SOURCE_FILE"
echo [`date +"%r"`] Downloading $BOOST_URL...
curl -# -L -o $BOOST_SOURCE_FILE $BOOST_URL
# Extract Boost source file.
echo
echo [`date +"%r"`] Extracting $BOOST_SOURCE_FILE...
tar -xf $BOOST_SOURCE_FILE
fi
pushd $BOOST_VERSION_FILENAME > /dev/null
if [ ${#ARG_LIBRARIES[@]} -eq 0 ]
then
# No libraries requested. Just copy header files.
echo [`date +"%r"`] Copying header files...
BOOST_HEADERS_DIRECTORY_NAME=boost
mkdir -p $INSTALL_INCLUDE_LOCATION
cp -rp $BOOST_HEADERS_DIRECTORY_NAME $INSTALL_INCLUDE_LOCATION
else
# Build and install with libraries.
echo [`date +"%r"`] Building Boost libraries...
# Set tool set to current UE tool set.
BOOST_TOOLSET=clang
# Run Engine/Build/BatchFiles/Linux/SetupToolchain.sh first to ensure
# that the toolchain is setup and verify that the path where it installed
# the compiler matches the path specified in the user-config.jam file.
# Provide user config to specify compiler and Python configuration.
BOOST_USER_CONFIG="$BUILD_SCRIPT_DIRECTORY/user-config.jam"
CXX_FLAGS="-fPIC -I$UE_THIRD_PARTY_LOCATION/Unix/LibCxx/include/c++/v1"
CXX_LINKER="-nodefaultlibs -L$UE_THIRD_PARTY_LOCATION/Unix/LibCxx/lib/Unix/$ARCH_NAME/ -lc++ -lc++abi -lm -lc -lgcc_s -lgcc"
# Bootstrap before build.
echo [`date +"%r"`] Bootstrapping Boost $BOOST_VERSION build...
./bootstrap.sh \
--prefix=$INSTALL_LOCATION \
--includedir=$INSTALL_INCLUDE_LOCATION \
--libdir=$INSTALL_LIB_LOCATION \
--with-toolset=$BOOST_TOOLSET \
--with-python=$PYTHON_EXECUTABLE_LOCATION \
--with-python-version=$PYTHON_VERSION
cxxflags="$CXX_FLAGS" \
cflags="$CXX_FLAGS" \
linkflags="$CXX_LINKER"
echo [`date +"%r"`] Building Boost $BOOST_VERSION...
NUM_CPU=`grep -c ^processor /proc/cpuinfo`
./b2 \
--prefix=$INSTALL_LOCATION \
--includedir=$INSTALL_INCLUDE_LOCATION \
--libdir=$INSTALL_LIB_LOCATION \
-j$NUM_CPU \
address-model=64 \
threading=multi \
variant=release \
$BOOST_WITH_LIBRARIES \
--user-config=$BOOST_USER_CONFIG \
--hash \
--build-type=complete \
--layout=tagged \
--debug-configuration \
toolset=$BOOST_TOOLSET \
cflags="$CXX_FLAGS" \
cxxflags="$CXX_FLAGS" \
linkflags="$CXX_LINKER" \
install
echo [`date +"%r"`] Converting installed Boost library symlinks to files...
pushd $INSTALL_LIB_LOCATION > /dev/null
for SYMLINKED_LIB in `find . -type l`
do
cp --remove-destination `readlink $SYMLINKED_LIB` $SYMLINKED_LIB
done
popd > /dev/null
fi
popd > /dev/null
popd > /dev/null
echo [`date +"%r"`] Boost $BOOST_VERSION installed to $INSTALL_LOCATION
echo [`date +"%r"`] Done.