0510252385
Former-commit-id: ff953ca879339fe1e1211f7220f563e1342e66cb
165 lines
4.7 KiB
Bash
Executable File
165 lines
4.7 KiB
Bash
Executable File
#!/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; }
|
|
|
|
# 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
|
|
}
|
|
|
|
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"
|
|
|
|
if [ $__BuildArch == "wasm" ]; then
|
|
emmake make install -j $NumProc $__UnprocessedBuildArgs
|
|
else
|
|
make install -j $NumProc $__UnprocessedBuildArgs
|
|
fi
|
|
if [ $? != 0 ]; then
|
|
echo "Failed to build corert native components."
|
|
popd
|
|
exit $?
|
|
fi
|
|
|
|
echo "CoreRT native components successfully built."
|
|
popd
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
build_host_native_corert()
|
|
{
|
|
__SavedBuildArch=$__BuildArch
|
|
__SavedIntermediatesDir=$__IntermediatesDir
|
|
|
|
export __IntermediatesDir=$__IntermediatesHostDir
|
|
export __BuildArch=$__HostArch
|
|
export __CMakeBinDir="$__ProductHostBinDir"
|
|
export CROSSCOMPILE=
|
|
|
|
build_native_corert
|
|
|
|
cp ${__ProductHostBinDir}/tools/jitinterface.so ${__ProductBinDir}
|
|
|
|
export __BuildArch=$__SavedBuildArch
|
|
export __IntermediatesDir=$__SavedIntermediatesDir
|
|
export CROSSCOMPILE=1
|
|
}
|
|
|
|
if $__buildnative; then
|
|
|
|
# init the host distro name
|
|
initHostDistroRid
|
|
|
|
# init the target distro name
|
|
initTargetDistroRid
|
|
|
|
# Check prereqs.
|
|
|
|
check_native_prereqs
|
|
|
|
# Prepare the system
|
|
|
|
prepare_native_build
|
|
|
|
# Build the corert native components.
|
|
|
|
build_native_corert
|
|
|
|
if [ $__CrossBuild = 1 ]; then
|
|
build_host_native_corert
|
|
fi
|
|
|
|
# Build complete
|
|
fi
|
|
|