echo "clangx.y - optional argument to build using clang version x.y."
echo "cross - optional argument to signify cross compilation,"
echo " - will use ROOTFS_DIR environment variable if set."
+ echo "crosscomponent - optional argument to build cross-architecture component,"
+ echo " - will use CAC_ROOTFS_DIR environment variable if set."
echo "pgoinstrument - generate instrumented code for profile guided optimization enabled binaries."
echo "configureonly - do not perform any builds; just configure the build."
echo "skipconfigure - skip build configuration."
popd
}
+build_cross_arch_component()
+{
+ __SkipCrossArchBuild=1
+ TARGET_ROOTFS=""
+ # check supported cross-architecture components host(__HostArch)/target(__BuildArch) pair
+ if [[ "$__BuildArch" == "arm" && "$__CrossArch" == "x86" ]]; then
+ export CROSSCOMPILE=0
+ __SkipCrossArchBuild=0
+
+ # building x64-host/arm-target cross-architecture component need to use cross toolchain of x86
+ if [ "$__HostArch" == "x64" ]; then
+ export CROSSCOMPILE=1
+ fi
+ else
+ # not supported
+ return
+ fi
+
+ export __CMakeBinDir="$__CrossComponentBinDir"
+ export CROSSCOMPONENT=1
+ if [ $CROSSCOMPILE == 1 ]; then
+ TARGET_ROOTFS="$ROOTFS_DIR"
+ if [ -n "$CAC_ROOTFS_DIR" ]; then
+ export ROOTFS_DIR="$CAC_ROOTFS_DIR"
+ else
+ export ROOTFS_DIR="$__ProjectRoot/cross/rootfs/$__CrossArch"
+ fi
+ fi
+
+ __ExtraCmakeArgs="-DCLR_CMAKE_TARGET_ARCH=$__BuildArch -DCLR_CMAKE_TARGET_OS=$__BuildOS -DCLR_CMAKE_PACKAGES_DIR=$__PackagesDir -DCLR_CMAKE_PGO_INSTRUMENT=$__PgoInstrument"
+ build_native $__SkipCrossArchBuild "$__CrossArch" "$__CrossCompIntermediatesDir" "$__ExtraCmakeArgs" "cross-architecture component"
+
+ # restore ROOTFS_DIR, CROSSCOMPONENT, and CROSSCOMPILE
+ if [ -n "$TARGET_ROOTFS" ]; then
+ export ROOTFS_DIR="$TARGET_ROOTFS"
+ fi
+ export CROSSCOMPONENT=
+ export CROSSCOMPILE=1
+}
+
isMSBuildOnNETCoreSupported()
{
# This needs to be updated alongwith corresponding changes to netci.groovy.
build_native $__SkipCoreCLR "$__BuildArch" "$__IntermediatesDir" "$__ExtraCmakeArgs" "CoreCLR component"
# Build cross-architecture components
-if [ $__CrossBuild == 1 ]; then
- __SkipCrossArchBuild=1
- if [ $__DoCrossArchBuild == 1 ]; then
- # build cross-architecture components for x86-host/arm-target
- if [[ "$__BuildArch" == "arm" && "$__CrossArch" == "x86" ]]; then
- __SkipCrossArchBuild=0
- fi
- fi
-
- export __CMakeBinDir="$__CrossComponentBinDir"
- export CROSSCOMPONENT=1
- __ExtraCmakeArgs="-DCLR_CMAKE_TARGET_ARCH=$__BuildArch -DCLR_CMAKE_TARGET_OS=$__BuildOS -DCLR_CMAKE_PACKAGES_DIR=$__PackagesDir -DCLR_CMAKE_PGO_INSTRUMENT=$__PgoInstrument"
- build_native $__SkipCrossArchBuild "$__CrossArch" "$__CrossCompIntermediatesDir" "$__ExtraCmakeArgs" "cross-architecture component"
+if [[ $__CrossBuild == 1 && $__DoCrossArchBuild == 1 ]]; then
+ build_cross_arch_component
fi
# Build System.Private.CoreLib.
fi
if [[ -n "$CROSSCOMPONENT" ]]; then
cmake_extra_defines="$cmake_extra_defines -DCLR_CROSS_COMPONENTS_BUILD=1"
-else
- if [[ -n "$CROSSCOMPILE" ]]; then
- if ! [[ -n "$ROOTFS_DIR" ]]; then
- echo "ROOTFS_DIR not set for crosscompile"
- exit 1
- fi
- if [[ -z $CONFIG_DIR ]]; then
- CONFIG_DIR="$1/cross/$build_arch"
- fi
- cmake_extra_defines="$cmake_extra_defines -C $CONFIG_DIR/tryrun.cmake"
- cmake_extra_defines="$cmake_extra_defines -DCMAKE_TOOLCHAIN_FILE=$CONFIG_DIR/toolchain.cmake"
+fi
+if [[ -n "$CROSSCOMPILE" ]]; then
+ if ! [[ -n "$ROOTFS_DIR" ]]; then
+ echo "ROOTFS_DIR not set for crosscompile"
+ exit 1
+ fi
+ if [[ -z $CONFIG_DIR ]]; then
+ CONFIG_DIR="$1/cross/$build_arch"
fi
+ cmake_extra_defines="$cmake_extra_defines -C $CONFIG_DIR/tryrun.cmake"
+ cmake_extra_defines="$cmake_extra_defines -DCMAKE_TOOLCHAIN_FILE=$CONFIG_DIR/toolchain.cmake"
fi
if [ "$build_arch" == "armel" ]; then
cmake_extra_defines="$cmake_extra_defines -DARM_SOFTFP=1"