2017-04-10 11:41:01 +00:00
#!/usr/bin/env bash
scriptRoot = " $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " && pwd ) "
if [ " $BUILDVARS_DONE " != 1 ] ; then
. $scriptRoot /buildvars-setup.sh $*
fi
# Check the system to ensure the right pre-reqs are in place
check_native_prereqs( )
{
echo "Checking pre-requisites..."
# Check presence of CMake on the path
hash cmake 2>/dev/null || { echo >& 2 "Please install cmake before running this script" ; exit 1; }
# Check for clang
hash clang-$__ClangMajorVersion .$__ClangMinorVersion 2>/dev/null || hash clang$__ClangMajorVersion $__ClangMinorVersion 2>/dev/null || hash clang 2>/dev/null || { echo >& 2 "Please install clang before running this script" ; exit 1; }
2018-01-29 19:03:06 +00:00
# Check for additional prereqs for wasm build
if [ $__BuildArch = = "wasm" ] ; then
hash emcmake 2>/dev/null || { echo >& 2 "Please install Emscripten before running this script. See https://github.com/dotnet/corert/blob/master/Documentation/how-to-build-WebAssembly.md for more information." ; exit 1; }
if [ -z ${ EMSCRIPTEN +x } ] ; then echo "EMSCRIPTEN is not set. Ensure your have set up the Emscripten environment using \"source <emsdk_dir>/emsdk_env.sh\"" ; exit 1; fi
fi
2017-04-10 11:41:01 +00:00
}
prepare_native_build( )
{
# Specify path to be set for CMAKE_INSTALL_PREFIX.
# This is where all built CoreClr libraries will copied to.
export __CMakeBinDir = " $__ProductBinDir "
# Configure environment if we are doing a verbose build
if [ $__VerboseBuild = = 1 ] ; then
export VERBOSE = 1
fi
}
build_native_corert( )
{
# All set to commence the build
echo " Commencing build of corert native components for $__BuildOS . $__BuildArch . $__BuildType "
pushd " $__IntermediatesDir "
# Regenerate the CMake solution
echo " Invoking cmake with arguments: \" $__ProjectRoot \" $__BuildType "
" $__ProjectRoot /src/Native/gen-buildsys-clang.sh " " $__ProjectRoot " $__ClangMajorVersion $__ClangMinorVersion $__BuildArch $__BuildType
# Check that the makefiles were created.
if [ ! -f " $__IntermediatesDir /Makefile " ] ; then
echo "Failed to generate native component build project!"
popd
exit 1
fi
# Get the number of processors available to the scheduler
# Other techniques such as `nproc` only get the number of
# processors available to a single process.
if [ ` uname` = "FreeBSD" ] ; then
NumProc = ` sysctl hw.ncpu | awk '{ print $2+1 }' `
elif [ ` uname` = "NetBSD" ] ; then
NumProc = $(( $( getconf NPROCESSORS_ONLN) + 1 ))
else
NumProc = $(( $( getconf _NPROCESSORS_ONLN) + 1 ))
fi
# Build
echo " Executing make install -j $NumProc $__UnprocessedBuildArgs "
2018-01-29 19:03:06 +00:00
if [ $__BuildArch = = "wasm" ] ; then
emmake make install -j $NumProc $__UnprocessedBuildArgs
else
make install -j $NumProc $__UnprocessedBuildArgs
fi
2017-04-10 11:41:01 +00:00
if [ $? != 0 ] ; then
echo "Failed to build corert native components."
popd
exit $?
fi
echo "CoreRT native components successfully built."
popd
}
2017-06-07 13:16:24 +00:00
initHostDistroRid( )
{
if [ " $__HostOS " = = "Linux" ] ; then
if [ ! -e /etc/os-release ] ; then
echo "WARNING: Can not determine runtime id for current distro."
__HostDistroRid = ""
else
source /etc/os-release
__HostDistroRid = " $ID . $VERSION_ID - $__HostArch "
fi
fi
}
initTargetDistroRid( )
{
if [ $__CrossBuild = = 1 ] ; then
if [ " $__BuildOS " = = "Linux" ] ; then
if [ ! -e $ROOTFS_DIR /etc/os-release ] ; then
echo "WARNING: Can not determine runtime id for current distro."
export __DistroRid = ""
else
source $ROOTFS_DIR /etc/os-release
export __DistroRid = " $ID . $VERSION_ID - $__BuildArch "
fi
fi
else
export __DistroRid = " $__HostDistroRid "
fi
}
2017-08-21 15:34:15 +00:00
build_host_native_corert( )
{
__SavedBuildArch = $__BuildArch
__SavedIntermediatesDir = $__IntermediatesDir
export __IntermediatesDir = $__IntermediatesHostDir
export __BuildArch = $__HostArch
export __CMakeBinDir = " $__ProductHostBinDir "
export CROSSCOMPILE =
build_native_corert
2019-02-04 20:11:37 +00:00
cp ${ __ProductHostBinDir } /tools/jitinterface.so ${ __ProductBinDir }
2017-08-21 15:34:15 +00:00
export __BuildArch = $__SavedBuildArch
export __IntermediatesDir = $__SavedIntermediatesDir
export CROSSCOMPILE = 1
}
2017-04-10 11:41:01 +00:00
if $__buildnative ; then
2017-06-07 13:16:24 +00:00
# init the host distro name
initHostDistroRid
# init the target distro name
initTargetDistroRid
2017-04-10 11:41:01 +00:00
# Check prereqs.
check_native_prereqs
# Prepare the system
prepare_native_build
# Build the corert native components.
build_native_corert
2017-08-21 15:34:15 +00:00
if [ $__CrossBuild = 1 ] ; then
build_host_native_corert
fi
2017-04-10 11:41:01 +00:00
# Build complete
fi