From: Hyeongseok Oh Date: Thu, 5 Jan 2017 12:32:44 +0000 (+0900) Subject: Use x86 crossbuild for cross-architecture component on x64-linux (#8722) X-Git-Tag: accepted/tizen/base/20180629.140029~2675 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f66ba4a14a5e729778d66ea6cc1409f0e8b4a5b0;p=platform%2Fupstream%2Fcoreclr.git Use x86 crossbuild for cross-architecture component on x64-linux (#8722) * Use x86 crossbuild for cross-architecture component on x64-linux Fix build.sh and build system generator to use x86 cross-build system on x64-linux - x86-host/ARM32-target cross-architecture component build on x64 linux - use x86 root file system and cross buildtool * Modify build.sh - define new function: build_cross_arch_component - fix typo * Additional fix: build.sh add usage description - environment variable: CAC_ROOTFS_DIR - argument: crosscomponent --- diff --git a/build.sh b/build.sh index d7dd732..c4d13b1 100755 --- a/build.sh +++ b/build.sh @@ -35,6 +35,8 @@ usage() 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." @@ -266,6 +268,46 @@ build_native() 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. @@ -791,19 +833,8 @@ __ExtraCmakeArgs="-DCLR_CMAKE_TARGET_OS=$__BuildOS -DCLR_CMAKE_PACKAGES_DIR=$__P 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. diff --git a/src/pal/tools/gen-buildsys-clang.sh b/src/pal/tools/gen-buildsys-clang.sh index a25e5a0..3386c5d 100755 --- a/src/pal/tools/gen-buildsys-clang.sh +++ b/src/pal/tools/gen-buildsys-clang.sh @@ -128,18 +128,17 @@ if [[ -n "$LLDB_INCLUDE_DIR" ]]; then 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"