summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarret Shook <jashoo@microsoft.com>2019-02-21 13:16:33 -0800
committerGitHub <noreply@github.com>2019-02-21 13:16:33 -0800
commita006c44d06d56829a230bbbce17b74b21a0b8842 (patch)
tree6add588c73a3812ed4fb013c03ab0d22a0698910
parentd559d44e02471854748763a6c7eb52cbdc56168f (diff)
downloadcoreclr-a006c44d06d56829a230bbbce17b74b21a0b8842.tar.gz
coreclr-a006c44d06d56829a230bbbce17b74b21a0b8842.tar.bz2
coreclr-a006c44d06d56829a230bbbce17b74b21a0b8842.zip
[Unix|*] Rework and share the logic for determining __DistroRid (#22628)
* [Unix|*] Rework and share the logic for determining __DistroRid This will consolidate all of our different functions which determine the __DistroRid into one file. In addition, it will remove the unused __HostDistroRid file. Lastly, it corrects the rid choice when crossbuilding musl-arm64 as the cross-rootfs non-portable build will correctly be picked up. * Fix typo and use __BuildArch in place of __Arch * Correct non-portable build decision * Add error for missing redhat-release * Fix redhat comparison * Correct previous rhel or * Fix cross scenerio * Fix missed $ * Set __RuntimeId for runtest.proj * Correct naming convention of file * Address feedback and support -portablebuild=0 With this change: 1. build.sh and build-test.sh should build portable by default. 2. init-distro-rid.sh checks __PortableBuild=1. If so, then it must force rhel 6 and freebsd to __PortableBuild=0 and use the non-portable build - For __PortableBuild=0 init-distro-rid.sh sets the non-portable rid correctly to "${ID}.${VERSION_ID}-${buildArch}" * Correct arguments * Fix if to include then * A few more changes to correct linux-musl-arm64 * Add error for non-cross build and correctly pass ROOTFS_DIR * Correctly exit instead of echo * Correct isCrossBuild and use rootfsDir only * Add documentation * Address feedback * Rework rhel if
-rwxr-xr-xbuild-packages.sh57
-rwxr-xr-xbuild-test.sh90
-rwxr-xr-xbuild.sh89
-rw-r--r--init-distro-rid.sh176
4 files changed, 213 insertions, 199 deletions
diff --git a/build-packages.sh b/build-packages.sh
index 1c36dfb4f3..50ca4d8750 100755
--- a/build-packages.sh
+++ b/build-packages.sh
@@ -10,38 +10,18 @@ usage()
exit 1
}
-initHostDistroRid()
+initDistroRid()
{
- __HostDistroRid=""
- if [ "$__HostOS" == "Linux" ]; then
- if [ -e /etc/os-release ]; then
- source /etc/os-release
- if [[ $ID == "rhel" ]]; then
- # remove the last version digit
- VERSION_ID=${VERSION_ID%.*}
- fi
- __HostDistroRid="$ID.$VERSION_ID-$__Arch"
- if [[ $ID == "alpine" ]]; then
- __HostDistroRid="linux-musl-$__Arch"
- fi
- elif [ -e /etc/redhat-release ]; then
- local redhatRelease=$(</etc/redhat-release)
- if [[ $redhatRelease == "CentOS release 6."* || $redhatRelease == "Red Hat Enterprise Linux Server release 6."* ]]; then
- __HostDistroRid="rhel.6-$__Arch"
- fi
- if [[ $redhatRelease == "CentOS Linux release 7."* ]]; then
- __HostDistroRid="rhel.7-$__Arch"
- fi
- fi
- fi
- if [ "$__HostOS" == "FreeBSD" ]; then
- __freebsd_version=`sysctl -n kern.osrelease | cut -f1 -d'.'`
- __HostDistroRid="freebsd.$__freebsd_version-$__Arch"
- fi
+ source init-distro-rid.sh
+
+ local passedRootfsDir=""
- if [ "$__HostDistroRid" == "" ]; then
- echo "WARNING: Cannot determine runtime id for current distro."
+ # Only pass ROOTFS_DIR if __DoCrossArchBuild is specified.
+ if [ -z "${__CrossBuild}" ]; then
+ passedRootfsDir=${ROOTFS_DIR}
fi
+
+ initDistroRidGlobal ${__BuildOS} ${__BuildArch} ${__IsPortableBuild} ${passedRootfsDir}
}
__ProjectRoot="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@@ -103,8 +83,8 @@ while :; do
exit 1
;;
-BuildArch=*)
- __Arch=$(echo $1| cut -d'=' -f 2)
- buildArgs="$buildArgs /p:__BuildArch=$__Arch"
+ __BuildArch=$(echo $1| cut -d'=' -f 2)
+ buildArgs="$buildArgs /p:__BuildArch=$__BuildArch"
;;
-BuildType=*)
__Type=$(echo $1| cut -d'=' -f 2)
@@ -130,20 +110,7 @@ while :; do
shift
done
-# Portable builds target the base RID
-if [ $__IsPortableBuild == 1 ]; then
- if [ "$__BuildOS" == "Linux" ]; then
- export __DistroRid="linux-$__Arch"
- elif [ "$__BuildOS" == "OSX" ]; then
- export __DistroRid="osx-$__Arch"
- elif [ "$__BuildOS" == "FreeBSD" ]; then
- export __DistroRid="freebsd-$__Arch"
- fi
-else
- # init the host distro name
- initHostDistroRid
- export __DistroRid="$__HostDistroRid"
-fi
+initDistroRid
$__ProjectRoot/dotnet.sh msbuild /nologo /verbosity:minimal /clp:Summary \
/p:__BuildOS=$__BuildOS /flp:v=detailed\;Append\;LogFile=build-packages.log \
diff --git a/build-test.sh b/build-test.sh
index 75c8570f9a..8e38bae3bb 100755
--- a/build-test.sh
+++ b/build-test.sh
@@ -1,85 +1,17 @@
#!/usr/bin/env bash
-initHostDistroRid()
-{
- __HostDistroRid=""
-
- # Some OS groups should default to use the portable packages
- if [ "$__BuildOS" == "OSX" ]; then
- __PortableBuild=1
- fi
-
- if [ "$__HostOS" == "Linux" ]; then
- if [ -e /etc/redhat-release ]; then
- __PortableBuild=1
- elif [ -e /etc/os-release ]; then
- source /etc/os-release
- if [[ $ID == "alpine" ]]; then
- __HostDistroRid="linux-musl-$__HostArch"
- else
- __PortableBuild=1
- __HostDistroRid="$ID.$VERSION_ID-$__HostArch"
- fi
- fi
- elif [ "$__HostOS" == "FreeBSD" ]; then
- __freebsd_version=`sysctl -n kern.osrelease | cut -f1 -d'.'`
- __HostDistroRid="freebsd.$__freebsd_version-$__HostArch"
- fi
-
- # Portable builds target the base RID
- if [ "$__PortableBuild" == 1 ]; then
- if [ "$__BuildOS" == "OSX" ]; then
- export __HostDistroRid="osx-$__BuildArch"
- elif [ "$__BuildOS" == "Linux" ]; then
- export __HostDistroRid="linux-$__BuildArch"
- fi
- fi
-
- if [ "$__HostDistroRid" == "" ]; then
- echo "WARNING: Cannot determine runtime id for current distro."
- fi
-
- echo "Setting __HostDistroRid to $__HostDistroRid"
-}
+__PortableBuild=1
initTargetDistroRid()
{
- if [ $__CrossBuild == 1 ]; then
- if [ "$__BuildOS" == "Linux" ]; then
- if [ ! -e $ROOTFS_DIR/etc/os-release ]; then
- if [ -e $ROOTFS_DIR/android_platform ]; then
- source $ROOTFS_DIR/android_platform
- export __DistroRid="$RID"
- else
- echo "WARNING: Cannot determine runtime id for current distro."
- export __DistroRid=""
- fi
- else
- source $ROOTFS_DIR/etc/os-release
- export __DistroRid="$ID.$VERSION_ID-$__BuildArch"
- fi
- fi
- else
- export __DistroRid="$__HostDistroRid"
- export __RuntimeId="$__HostDistroRid"
- fi
-
- if [ "$ID.$VERSION_ID" == "ubuntu.16.04" ]; then
- export __DistroRid="ubuntu.14.04-$__BuildArch"
- fi
+ source init-distro-rid.sh
- # Portable builds target the base RID
- if [ "$__PortableBuild" == 1 ]; then
- if [ "$__BuildOS" == "Linux" ]; then
- export __DistroRid="linux-$__BuildArch"
- export __RuntimeId="linux-$__BuildArch"
- elif [ "$__BuildOS" == "OSX" ]; then
- export __DistroRid="osx-$__BuildArch"
- export __RuntimeId="osx-$__BuildArch"
- fi
+ # Only pass ROOTFS_DIR if cross is specified.
+ if (( ${__CrossBuild} == 1 )); then
+ passedRootfsDir=${ROOTFS_DIR}
fi
- echo "__DistroRid: " $__DistroRid
+ initDistroRidGlobal ${__BuildOS} ${__BuildArch} ${__PortableBuild} ${passedRootfsDir}
}
isMSBuildOnNETCoreSupported()
@@ -96,7 +28,7 @@ isMSBuildOnNETCoreSupported()
UNSUPPORTED_RIDS=("debian.9-x64" "ubuntu.17.04-x64")
for UNSUPPORTED_RID in "${UNSUPPORTED_RIDS[@]}"
do
- if [ "$__HostDistroRid" == "$UNSUPPORTED_RID" ]; then
+ if [ "${__DistroRid}" == "$UNSUPPORTED_RID" ]; then
__isMSBuildOnNETCoreSupported=0
break
fi
@@ -678,7 +610,6 @@ __CrossBuild=0
__ClangMajorVersion=0
__ClangMinorVersion=0
__NuGetPath="$__PackagesDir/NuGet.exe"
-__HostDistroRid=""
__SkipRestorePackages=0
__DistroRid=""
__cmakeargs=""
@@ -747,8 +678,8 @@ while :; do
__CrossBuild=1
;;
- portableBuild)
- __PortableBuild=1
+ portablebuild=false)
+ __PortableBuild=0
;;
portablelinux)
@@ -914,9 +845,6 @@ fi
__LogsDir="$__RootBinDir/Logs"
__MsbuildDebugLogsDir="$__LogsDir/MsbuildDebugLogs"
-# init the host distro name
-initHostDistroRid
-
# Set the remaining variables based upon the determined build configuration
__BinDir="$__RootBinDir/Product/$__BuildOS.$__BuildArch.$__BuildType"
__PackagesBinDir="$__BinDir/.nuget"
diff --git a/build.sh b/build.sh
index 3f8adb510d..fb5b121717 100755
--- a/build.sh
+++ b/build.sh
@@ -60,78 +60,25 @@ usage()
echo "-bindir - output directory (defaults to $__ProjectRoot/bin)"
echo "-msbuildonunsupportedplatform - build managed binaries even if distro is not officially supported."
echo "-numproc - set the number of build processes."
+ echo "-portablebuild - pass -portablebuild=false to force a non-portable build."
exit 1
}
-initHostDistroRid()
-{
- __HostDistroRid=""
- if [ "$__HostOS" == "Linux" ]; then
- if [ -e /etc/os-release ]; then
- source /etc/os-release
- if [[ $ID == "rhel" ]]; then
- # remove the last version digit
- VERSION_ID=${VERSION_ID%.*}
- fi
- __HostDistroRid="$ID.$VERSION_ID-$__HostArch"
- if [[ $ID == "alpine" ]]; then
- __HostDistroRid="linux-musl-$__HostArch"
- fi
- elif [ -e /etc/redhat-release ]; then
- local redhatRelease=$(</etc/redhat-release)
- if [[ $redhatRelease == "CentOS release 6."* || $redhatRelease == "Red Hat Enterprise Linux Server release 6."* ]]; then
- __HostDistroRid="rhel.6-$__HostArch"
- fi
- if [[ $redhatRelease == "CentOS Linux release 7."* ]]; then
- __HostDistroRid="rhel.7-$__Arch"
- fi
- fi
- fi
- if [ "$__HostOS" == "FreeBSD" ]; then
- __freebsd_version=`sysctl -n kern.osrelease | cut -f1 -d'.'`
- __HostDistroRid="freebsd.$__freebsd_version-$__HostArch"
- fi
-
- if [ "$__HostDistroRid" == "" ]; then
- echo "WARNING: Can not determine runtime id for current distro."
- fi
-}
-
initTargetDistroRid()
{
- if [ $__CrossBuild == 1 ]; then
- if [ "$__BuildOS" == "Linux" ]; then
- if [ ! -e $ROOTFS_DIR/etc/os-release ]; then
- if [ -e $ROOTFS_DIR/android_platform ]; then
- source $ROOTFS_DIR/android_platform
- export __DistroRid="$RID"
- else
- echo "WARNING: Can not determine runtime id for current distro."
- export __DistroRid=""
- fi
- else
- source $ROOTFS_DIR/etc/os-release
- export __DistroRid="$ID.$VERSION_ID-$__BuildArch"
- fi
- fi
- else
- export __DistroRid="$__HostDistroRid"
- fi
+ source init-distro-rid.sh
- if [ "$__BuildOS" == "OSX" ]; then
- __PortableBuild=1
- fi
+ local passedRootfsDir=""
- # Portable builds target the base RID
- if [ $__PortableBuild == 1 ]; then
- if [ "$__BuildOS" == "Linux" ]; then
- export __DistroRid="linux-$__BuildArch"
- elif [ "$__BuildOS" == "OSX" ]; then
- export __DistroRid="osx-$__BuildArch"
- elif [ "$__BuildOS" == "FreeBSD" ]; then
- export __DistroRid="freebsd-$__BuildArch"
- fi
+ # Only pass ROOTFS_DIR if cross is specified.
+ if (( ${__CrossBuild} == 1 )); then
+ passedRootfsDir=${ROOTFS_DIR}
+ elif [ "${__BuildArch}" != "${__HostArch}" ]; then
+ echo "Error, you are building a cross scenario without passing -cross."
+ exit 1
fi
+
+ initDistroRidGlobal ${__BuildOS} ${__BuildArch} ${__PortableBuild} ${passedRootfsDir}
}
setup_dirs()
@@ -410,10 +357,10 @@ isMSBuildOnNETCoreSupported()
if [ "$__HostOS" == "Linux" ]; then
__isMSBuildOnNETCoreSupported=1
# note: the RIDs below can use globbing patterns
- UNSUPPORTED_RIDS=("debian.9-x64" "ubuntu.17.04-x64")
+ UNSUPPORTED_RIDS=("ubuntu.17.04-x64")
for UNSUPPORTED_RID in "${UNSUPPORTED_RIDS[@]}"
do
- if [[ $__HostDistroRid == $UNSUPPORTED_RID ]]; then
+ if [[ ${__DistroRid} == $UNSUPPORTED_RID ]]; then
__isMSBuildOnNETCoreSupported=0
break
fi
@@ -691,7 +638,6 @@ __GccBuild=0
__GccMajorVersion=0
__GccMinorVersion=0
__NuGetPath="$__PackagesDir/NuGet.exe"
-__HostDistroRid=""
__DistroRid=""
__cmakeargs=""
__SkipGenerateVersion=0
@@ -1035,9 +981,6 @@ fi
__LogsDir="$__RootBinDir/Logs"
__MsbuildDebugLogsDir="$__LogsDir/MsbuildDebugLogs"
-# init the host distro name
-initHostDistroRid
-
# Set the remaining variables based upon the determined build configuration
__BinDir="$__RootBinDir/Product/$__BuildOS.$__BuildArch.$__BuildType"
__PackagesBinDir="$__BinDir/.nuget"
@@ -1054,6 +997,9 @@ if [ $__CrossBuild == 1 ]; then
fi
__CrossGenCoreLibLog="$__LogsDir/CrossgenCoreLib_$__BuildOS.$__BuildArch.$__BuildType.log"
+# init the target distro name
+initTargetDistroRid
+
# Init if MSBuild for .NET Core is supported for this platform
isMSBuildOnNETCoreSupported
@@ -1079,9 +1025,6 @@ if [ $__CrossBuild == 1 ]; then
fi
fi
-# init the target distro name
-initTargetDistroRid
-
# Make the directories necessary for build if they don't exist
setup_dirs
diff --git a/init-distro-rid.sh b/init-distro-rid.sh
new file mode 100644
index 0000000000..ebf77fc42e
--- /dev/null
+++ b/init-distro-rid.sh
@@ -0,0 +1,176 @@
+#!/usr/bin/env bash
+
+# initNonPortableDistroRid
+#
+# Input:
+# buildOs: (str)
+# buildArch: (str)
+# isPortable: (int)
+# rootfsDir: (str)
+#
+# Return:
+# None
+#
+# Notes:
+#
+# initNonPortableDistroRid will attempt to initialize a non portable rid. These
+# rids are specific to distros need to build the product/package and consume
+# them on the same platform.
+#
+# If -portablebuild=false is passed a non-portable rid will be created for any
+# distro.
+#
+# Below is the list of current non-portable platforms.
+#
+# Builds from the following *must* be non-portable:
+#
+# | OS | Expected RID |
+# -------------------------------------------------
+# | rhel6 | rhel.6-x64 |
+# | alpine* | linux-musl-(arch) |
+# | freeBSD | freebsd.(version)-x64 |
+#
+# It is important to note that the function does not return anything, but it
+# will set __DistroRid if there is a non-portable distro rid to be used.
+#
+initNonPortableDistroRid()
+{
+ # Make sure out parameter is cleared.
+ __DistroRid=
+
+ local buildOs=$1
+ local buildArch=$2
+ local isPortable=$3
+ local rootfsDir=$4
+
+ if [ "$buildOs" = "Linux" ]; then
+ # RHEL 6 is the only distro we will check redHat release for.
+ if [ -e "${rootfsDir}/etc/os-release" ]; then
+ source "${rootfsDir}/etc/os-release"
+
+ # We have forced __PortableBuild=0. This is because -portablebuld
+ # has been passed as false.
+ if (( ${isPortable} == 0 )); then
+ if [ "${ID}" == "rhel" ]; then
+ # remove the last version digit
+ VERSION_ID=${VERSION_ID%.*}
+ fi
+
+ nonPortableBuildID="${ID}.${VERSION_ID}-${buildArch}"
+ fi
+
+ elif [ -e "${rootfsDir}/etc/redhat-release" ]; then
+ local redhatRelease=$(<${rootfsDir}/etc/redhat-release)
+
+ if [[ "${redhatRelease}" == "CentOS release 6."* || "$redhatRelease" == "Red Hat Enterprise Linux Server release 6."* ]]; then
+ nonPortableBuildID="rhel.6-${buildArch}"
+ fi
+ elif [ -e "${rootfsDir}/android_platform" ]; then
+ source $rootfsDir/android_platform
+ nonPortableBuildID="$RID"
+ fi
+ fi
+
+ if [ "$buildOs" = "FreeBSD" ]; then
+ __freebsd_version=`sysctl -n kern.osrelease | cut -f1 -d'.'`
+ nonPortableBuildID="freebsd.$__freebsd_version-${buildArch}"
+ fi
+
+ if [ "${nonPortableBuildID}" != "" ]; then
+ export __DistroRid=${nonPortableBuildID}
+
+ # We are using a non-portable build rid. Force __PortableBuild to false.
+ export __PortableBuild=0
+ fi
+}
+
+
+# initDistroRidGlobal
+#
+# Input:
+# os: (str)
+# arch: (str)
+# isPortable: (int)
+# rootfsDir?: (nullable:string)
+#
+# Return:
+# None
+#
+# Notes:
+#
+# The following out parameters are returned
+#
+# __DistroRid
+# __PortableBuild
+#
+initDistroRidGlobal()
+{
+ # __DistroRid must be set at the end of the function.
+ # Previously we would create a variable __HostDistroRid and/or __DistroRid.
+ #
+ # __HostDistroRid was used in the case of a non-portable build, it has been
+ # deprecated. Now only __DistroRid is supported. It will be used for both
+ # portable and non-portable rids and will be used in build-packages.sh
+
+ local buildOs=$1
+ local buildArch=$2
+ local isPortable=$3
+ local rootfsDir=$4
+
+ # Setup whether this is a crossbuild. We can find this out if rootfsDir
+ # is set.
+ local isCrossBuild=0
+
+ if [ -z "${rootfsDir}" ]; then
+ isCrossBuild=0
+ else
+ # We may have a cross build. Check for the existance of the rootfsDir
+ if [ -e ${rootfsDir} ]; then
+ isCrossBuild=1
+ else
+ echo "Error rootfsDir has been passed, but the location is not valid."
+ exit 1
+ fi
+ fi
+
+ initNonPortableDistroRid ${buildOs} ${buildArch} ${isPortable} ${rootfsDir}
+
+ if [ -z "${__DistroRid}" ]; then
+ # The non-portable build rid was not set. Set the portable rid.
+
+ export __PortableBuild=1
+ local distroRid=""
+
+ # Check for alpine. It is the only portable build that will will have
+ # its name in the portable build rid.
+ if [ -e "${rootfsDir}/etc/os-release" ]; then
+ source "${rootfsDir}/etc/os-release"
+ if [ "${ID}" = "alpine" ]; then
+ distroRid="linux-musl-${buildArch}"
+ fi
+ fi
+
+ if [ "${distroRid}" == "" ]; then
+ if [ "$buildOs" = "Linux" ]; then
+ distroRid="linux-$buildArch"
+ elif [ "$buildOs" = "OSX" ]; then
+ distroRid="osx-$buildArch"
+ elif [ "$buildOs" = "FreeBSD" ]; then
+ distroRid="freebsd-$buildArch"
+ fi
+ fi
+
+ export __DistroRid=${distroRid}
+ fi
+
+ if [ -z "$__DistroRid" ]; then
+ echo "DistroRid is not set. This is almost certainly an error"
+
+ exit 1
+ else
+ echo "__DistroRid: ${__DistroRid}"
+ echo "__RuntimeId: ${__DistroRid}"
+
+ export __RuntimeId=${__DistroRid}
+ fi
+} \ No newline at end of file