Linux/x86: fix build (#26594)
[platform/upstream/coreclr.git] / init-tools.sh
index c13bb98..5ac2b44 100755 (executable)
@@ -2,9 +2,9 @@
 
 __scriptpath=$(cd "$(dirname "$0")"; pwd -P)
 __init_tools_log="$__scriptpath/init-tools.log"
-__PACKAGES_DIR="$__scriptpath/packages"
+__PACKAGES_DIR="$__scriptpath/.packages"
 __TOOLRUNTIME_DIR="$__scriptpath/Tools"
-__DOTNET_PATH="$__TOOLRUNTIME_DIR/dotnetcli"
+__DOTNET_PATH="$__scriptpath/.dotnet"
 __DOTNET_CMD="$__DOTNET_PATH/dotnet"
 if [ -z "${__BUILDTOOLS_SOURCE:-}" ]; then __BUILDTOOLS_SOURCE=https://dotnet.myget.org/F/dotnet-buildtools/api/v3/index.json; fi
 export __BUILDTOOLS_USE_CSPROJ=true
@@ -65,99 +65,77 @@ execute_with_retry() {
     return 0
 }
 
-if [ ! -e "$__DOTNET_PATH" ]; then
-    if [ -z "${__DOTNET_PKG:-}" ]; then
-        if [ "$(uname -m | grep "i[3456]86")" = "i686" ]; then
-            echo "Warning: build not supported on 32 bit Unix"
-        fi
-
-        if [ "$(uname -m)" = "armhf" ] || [ "$(uname -m)" = "arm64" ] || [ "$(uname -m)" = "aarch64" ];  then
-            if [ "$(uname -m)" = "armhf" ]; then
-                __PKG_ARCH=arm
-            fi
+if [ "$(uname -m | grep "i[3456]86")" = "i686" ]; then
+    echo "Warning: build not supported on 32 bit Unix"
+fi
 
-            if [ "$(uname -m)" = "arm64" ] || [ "$(uname -m)" = "aarch64" ]; then
-                __PKG_ARCH=arm64
-            fi
-        else
-            __PKG_ARCH=x64
-        fi
+if [ "$(uname -m)" = "armhf" ] || [ "$(uname -m)" = "arm64" ] || [ "$(uname -m)" = "aarch64" ];  then
+    if [ "$(uname -m)" = "armhf" ]; then
+        __PKG_ARCH=arm
+    fi
 
-        OSName=$(uname -s)
-        case $OSName in
-            Darwin)
-                OS=OSX
-                __PKG_RID=osx
-                ulimit -n 2048
-                # Format x.y.z as single integer with three digits for each part
-                VERSION=`sw_vers -productVersion| sed -e 's/\./ /g' | xargs printf "%03d%03d%03d"`
-                if [ "$VERSION" -lt 010012000 ]; then
-                    echo error: macOS version `sw_vers -productVersion` is too old. 10.12 is needed as minimum.
-                    exit 1
-                fi
-                ;;
-            FreeBSD)
-                __PKG_RID=freebsd
-                OS=FreeBSD
-                ;;
-            Linux)
-                __PKG_RID=linux
-                OS=Linux
-
-                if [ -e /etc/os-release ]; then
-                    source /etc/os-release
-                    if [[ $ID == "alpine" ]]; then
-                        __PKG_RID=linux-musl
-                    fi
-                elif [ -e /etc/redhat-release ]; then
-                    redhatRelease=$(</etc/redhat-release)
-                    if [[ $redhatRelease == "CentOS release 6."* || $redhatRelease == "Red Hat Enterprise Linux Server release 6."* ]]; then
-                        __PKG_RID=rhel.6
-                    fi
-                fi
-                OSArch=$(uname -m)
-                if [ $OSArch == 'armv7l' ];then
-                    __PKG_ARCH=arm
-                elif [ $OSArch == 'aarch64' ]; then
-                    __PKG_ARCH=arm64
-                fi
-
-                ;;
-
-            *)
-            echo "Unsupported OS '$OSName' detected. Downloading linux-$__PKG_ARCH tools."
-                OS=Linux
-                __PKG_RID=linux
-                ;;
-        esac
-        __PKG_RID=$__PKG_RID-$__PKG_ARCH
-        __DOTNET_PKG=dotnet-sdk-${__DOTNET_TOOLS_VERSION}-$__PKG_RID
+    if [ "$(uname -m)" = "arm64" ] || [ "$(uname -m)" = "aarch64" ]; then
+        __PKG_ARCH=arm64
     fi
-    mkdir -p "$__DOTNET_PATH"
-
-    echo "Installing dotnet cli..."
-    __DOTNET_LOCATION="https://dotnetcli.azureedge.net/dotnet/Sdk/${__DOTNET_TOOLS_VERSION}/${__DOTNET_PKG}.tar.gz"
-
-    install_dotnet_cli() {
-        if [[ -z "${DotNetBootstrapCliTarPath-}" ]]; then
-            echo "Installing '${__DOTNET_LOCATION}' to '$__DOTNET_PATH/dotnet.tar'"
-            rm -rf -- "$__DOTNET_PATH/*"
-            # curl has HTTPS CA trust-issues less often than wget, so lets try that first.
-            if command -v curl > /dev/null; then
-                curl --retry 10 -sSL --create-dirs -o $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION}
-            else
-                wget -q -O $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION}
+else
+    __PKG_ARCH=x64
+fi
+
+OSName=$(uname -s)
+case $OSName in
+    Darwin)
+        OS=OSX
+        __PKG_RID=osx
+        ulimit -n 2048
+        # Format x.y.z as single integer with three digits for each part
+        VERSION=`sw_vers -productVersion| sed -e 's/\./ /g' | xargs printf "%03d%03d%03d"`
+        if [ "$VERSION" -lt 010012000 ]; then
+            echo error: macOS version `sw_vers -productVersion` is too old. 10.12 is needed as minimum.
+            exit 1
+        fi
+        ;;
+    FreeBSD)
+        __PKG_RID=freebsd
+        OS=FreeBSD
+        ;;
+    Linux)
+        __PKG_RID=linux
+        OS=Linux
+
+        if [ -e /etc/os-release ]; then
+            source /etc/os-release
+            if [[ $ID == "alpine" ]]; then
+                __PKG_RID=linux-musl
             fi
-        else
-            echo "Copying '$DotNetBootstrapCliTarPath' to '$__DOTNET_PATH/dotnet.tar'"
-            cp $DotNetBootstrapCliTarPath $__DOTNET_PATH/dotnet.tar
+        elif [ -e /etc/redhat-release ]; then
+            redhatRelease=$(</etc/redhat-release)
+            if [[ $redhatRelease == "CentOS release 6."* || $redhatRelease == "Red Hat Enterprise Linux Server release 6."* ]]; then
+                __PKG_RID=rhel.6
+            fi
+        fi
+        OSArch=$(uname -m)
+        if [ $OSArch == 'armv7l' ];then
+            __PKG_ARCH=arm
+        elif [ $OSArch == 'aarch64' ]; then
+            __PKG_ARCH=arm64
         fi
-        cd "$__DOTNET_PATH"
-        tar -xf "$__DOTNET_PATH/dotnet.tar"
-    }
-    execute_with_retry install_dotnet_cli >> "$__init_tools_log" 2>&1
 
-    cd "$__scriptpath"
+        ;;
+
+    *)
+    echo "Unsupported OS '$OSName' detected. Downloading linux-$__PKG_ARCH tools."
+        OS=Linux
+        __PKG_RID=linux
+        ;;
+esac
+__PKG_RID=$__PKG_RID-$__PKG_ARCH
+
+if [ ! -e "$__DOTNET_CMD" ]; then
+    source $__scriptpath/init-dotnet.sh
+    if [ ! -e "$__DOTNET_CMD" ]; then
+        echo "ERROR: Ensure arcade dotnet install did not install dotnet at $__DOTNET_CMD"
+        exit 1
+    fi
 fi
 
 if [ ! -e "$__BUILD_TOOLS_PATH" ]; then
@@ -175,15 +153,8 @@ if [ -z "${__ILASM_RID-}" ]; then
 fi
 
 echo "Using RID $__ILASM_RID for BuildTools native tools"
-
-export ILASMCOMPILER_VERSION=$__ILASM_VERSION
 export NATIVE_TOOLS_RID=$__ILASM_RID
 
-if [ -n "${DotNetBootstrapCliTarPath-}" ]; then
-    # Assume ilasm is not in nuget yet when bootstrapping...
-    unset ILASMCOMPILER_VERSION
-fi
-
 # Build tools only supported on x64
 if [ "${__PKG_ARCH}" != "x64" ] &&  [ "${__PKG_ARCH}" != "arm" ]; then
     echo "Skipped installing build tools."
@@ -200,6 +171,14 @@ else
         exit 1
     fi
 
+
+    if [ ! -n "${DotNetBootstrapCliTarPath-}" ]; then
+        # Assume ilasm is not in nuget yet when bootstrapping...
+        # ILasm/ILDasm used to be restored by buildtools. The reference there was a netocreapp2.0, which was prior to our support of linux-musl. We initialize it locally as a 3.0 with the new SDK.
+        echo "Running: eval $__DOTNET_CMD build ${__scriptpath}/tests/ilasm-restore/ilasm.depproj --no-cache --packages $__PACKAGES_DIR -r $NATIVE_TOOLS_RID -p:ILAsmPackageVersion=$__ILASM_VERSION  -p:ExpectedILAsmPath=$__TOOLRUNTIME_DIR/ilasm" >> "$__init_tools_log"
+        eval "$__DOTNET_CMD" build "${__scriptpath}/tests/ilasm-restore/ilasm.depproj" --no-cache --packages "$__PACKAGES_DIR" -r "$NATIVE_TOOLS_RID" -p:ILAsmPackageVersion="$__ILASM_VERSION" -p:ExpectedILAsmPath="$__TOOLRUNTIME_DIR/ilasm"
+    fi
+
     echo "Making all .sh files executable under Tools."
     # Executables restored with .NET Core 2.0 do not have executable permission flags. https://github.com/NuGet/Home/issues/4424
     ls "$__scriptpath/Tools/"*.sh | xargs chmod +x