diff --git a/.config/tsaoptions.json b/.config/tsaoptions.json
new file mode 100644
index 0000000000000..179942118a9ea
--- /dev/null
+++ b/.config/tsaoptions.json
@@ -0,0 +1,10 @@
+{
+ "instanceUrl": "https://devdiv.visualstudio.com/",
+ "template": "TFSDEVDIV",
+ "projectName": "DEVDIV",
+ "areaPath": "DevDiv\\mono",
+ "iterationPath": "DevDiv",
+ "notificationAliases": [ "runtimerepo-infra@microsoft.com" ],
+ "repositoryName": "llvm-project",
+ "codebaseName": "llvm-project"
+}
\ No newline at end of file
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index a3d33bdb4d438..0000000000000
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# **DO NOT FILE A PULL REQUEST**
-
-This repository does not accept pull requests. Please follow http://llvm.org/docs/Contributing.html#how-to-submit-a-patch for contribution to LLVM.
-
-# **DO NOT FILE A PULL REQUEST**
diff --git a/.gitignore b/.gitignore
index 1e0bf725fa3d1..d032e90fc4679 100644
--- a/.gitignore
+++ b/.gitignore
@@ -65,3 +65,7 @@ pythonenv*
/clang/utils/analyzer/projects/*/RefScanBuildResults
# automodapi puts generated documentation files here.
/lldb/docs/python_api/
+
+/artifacts
+/.dotnet
+/.packages
diff --git a/bolt/utils/docker/Dockerfile b/bolt/utils/docker/Dockerfile
deleted file mode 100644
index 722a07e46f9e4..0000000000000
--- a/bolt/utils/docker/Dockerfile
+++ /dev/null
@@ -1,31 +0,0 @@
-FROM ubuntu:20.04 AS builder
-
-ARG DEBIAN_FRONTEND=noninteractive
-ENV TZ=UTC
-
-RUN apt-get update && \
- apt-get install -y --no-install-recommends ca-certificates git \
- build-essential cmake ninja-build python3 libjemalloc-dev \
- python3-psutil && \
- rm -rf /var/lib/apt/lists
-
-WORKDIR /home/bolt
-
-RUN git clone --depth 1 https://github.com/llvm/llvm-project
-
-RUN mkdir build && \
- cd build && \
- cmake -G Ninja ../llvm-project/llvm \
- -DLLVM_ENABLE_PROJECTS="bolt;clang;lld" \
- -DLLVM_TARGETS_TO_BUILD="X86;AArch64" \
- -DCMAKE_BUILD_TYPE=Release \
- -DLLVM_ENABLE_ASSERTIONS=ON \
- -DCMAKE_EXE_LINKER_FLAGS="-Wl,--push-state -Wl,-whole-archive -ljemalloc_pic -Wl,--pop-state -lpthread -lstdc++ -lm -ldl" \
- -DCMAKE_INSTALL_PREFIX=/home/bolt/install && \
- ninja check-bolt && \
- ninja install-llvm-bolt install-perf2bolt install-merge-fdata \
- install-llvm-boltdiff install-bolt_rt
-
-FROM ubuntu:20.04
-
-COPY --from=builder /home/bolt/install /usr/local
diff --git a/clang/tools/clang-fuzzer/Dockerfile b/clang/tools/clang-fuzzer/Dockerfile
deleted file mode 100644
index 1ddf82954e219..0000000000000
--- a/clang/tools/clang-fuzzer/Dockerfile
+++ /dev/null
@@ -1,41 +0,0 @@
-#===- llvm/tools/clang/tools/clang-fuzzer ---------------------------------===//
-#
-# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-#
-#===----------------------------------------------------------------------===//
-# Produces an image that builds clang-proto-fuzzer
-FROM ubuntu:16.04
-RUN apt-get update -y
-RUN apt-get install -y autoconf automake libtool curl make g++ unzip wget git \
- binutils liblzma-dev libz-dev python-all cmake ninja-build subversion \
- pkg-config docbook2x
-
-WORKDIR /root
-
-# Get protobuf
-RUN wget -qO- https://github.com/google/protobuf/releases/download/v3.3.0/protobuf-cpp-3.3.0.tar.gz | tar zxf -
-RUN cd protobuf-3.3.0 && ./autogen.sh && ./configure && make -j $(nproc) && make check -j $(nproc) && make install && ldconfig
-# Get LLVM
-RUN svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
-RUN cd llvm/tools && svn co http://llvm.org/svn/llvm-project/cfe/trunk clang -r $(cd ../ && svn info | grep Revision | awk '{print $2}')
-RUN cd llvm/projects && svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt -r $(cd ../ && svn info | grep Revision | awk '{print $2}')
-# Build plain LLVM (stage 0)
-RUN mkdir build0 && cd build0 && cmake -GNinja -DCMAKE_BUILD_TYPE=Release ../llvm && ninja
-# Configure instrumented LLVM (stage 1)
-RUN mkdir build1 && cd build1 && cmake -GNinja -DCMAKE_BUILD_TYPE=Release ../llvm \
- -DLLVM_ENABLE_ASSERTIONS=ON \
- -DCMAKE_C_COMPILER=`pwd`/../build0/bin/clang \
- -DCMAKE_CXX_COMPILER=`pwd`/../build0/bin/clang++ \
- -DLLVM_USE_SANITIZE_COVERAGE=YES \
- -DLLVM_USE_SANITIZER=Address -DCLANG_ENABLE_PROTO_FUZZER=ON
-# Build the fuzzers
-RUN cd build1 && ninja clang-fuzzer
-RUN cd build1 && ninja clang-objc-fuzzer
-RUN cd build1 && ninja clang-proto-fuzzer
-RUN cd build1 && ninja clang-proto-to-cxx
-RUN cd build1 && ninja clang-loop-proto-to-cxx
-RUN cd build1 && ninja clang-loop-proto-to-llvm
-RUN cd build1 && ninja clang-loop-proto-fuzzer
-RUN cd build1 && ninja clang-llvm-proto-fuzzer
diff --git a/clang/utils/analyzer/Dockerfile b/clang/utils/analyzer/Dockerfile
deleted file mode 100644
index bb1dd60eeb9b8..0000000000000
--- a/clang/utils/analyzer/Dockerfile
+++ /dev/null
@@ -1,70 +0,0 @@
-FROM ubuntu:bionic
-
-RUN apt-get update && apt-get install -y \
- apt-transport-https \
- ca-certificates \
- gnupg \
- software-properties-common \
- wget
-
-# newer CMake is required by LLVM
-RUN wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
-RUN apt-add-repository -y 'deb https://apt.kitware.com/ubuntu/ bionic main'
-
-# test system dependencies
-RUN apt-get update && apt-get install -y \
- git=1:2.17.1* \
- gettext=0.19.8.1* \
- python3=3.6.7-1~18.04 \
- python3-pip=9.0.1-2.3* \
- cmake=3.20.5* \
- ninja-build=1.8.2-1
-
-# box2d dependencies
-RUN apt-get install -y \
- libx11-dev=2:1.6.4-3* \
- libxrandr-dev=2:1.5.1-1 \
- libxinerama-dev=2:1.1.3-1 \
- libxcursor-dev=1:1.1.15-1 \
- libxi-dev=2:1.7.9-1
-
-# symengine dependencies
-RUN apt-get install -y \
- libgmp10=2:6.1.2+dfsg-2 \
- libgmp-dev=2:6.1.2+dfsg-2
-
-# simbody dependencies
-RUN apt-get install -y \
- liblapack-dev=3.7.1-4*
-
-# drogon dependencies
-RUN apt-get install -y \
- libjsonrpccpp-dev=0.7.0-1* \
- uuid-dev=2.31.1-0.4*
-
-# tmux dependencies
-RUN apt-get install -y \
- autotools-dev=20180224.1 \
- automake=1:1.15.1-3* \
- libncurses5-dev=6.1-1* \
- libevent-dev=2.1.8* \
- pkg-config=0.29.1-0* \
- flex=2.6.4-6 \
- bison=2:3.0.4.*
-
-RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 1
-
-VOLUME /analyzer
-VOLUME /projects
-VOLUME /llvm-project
-VOLUME /build
-VOLUME /scripts
-
-ENV PATH="/analyzer/bin:${PATH}"
-
-ADD entrypoint.py /entrypoint.py
-
-ADD requirements.txt /requirements.txt
-RUN pip3 install -r /requirements.txt
-
-ENTRYPOINT ["python", "/entrypoint.py"]
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index 8110e849b8cb4..a21d57e1e56c4 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -3,17 +3,17 @@
-
+
https://github.com/dotnet/arcade
- bafd55901b50d6fc3507c8ed96a7777fcca1796f
+ 38d3196e1596eb525367ec8d65fcc1f30a58261c
-
+
https://github.com/dotnet/arcade
- bafd55901b50d6fc3507c8ed96a7777fcca1796f
+ 38d3196e1596eb525367ec8d65fcc1f30a58261c
-
+
https://github.com/dotnet/arcade
- bafd55901b50d6fc3507c8ed96a7777fcca1796f
+ 38d3196e1596eb525367ec8d65fcc1f30a58261c
diff --git a/eng/Versions.props b/eng/Versions.props
index 46ff632b565ba..6d51d7ef46eae 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -6,6 +6,6 @@
1
- 7.0.0-beta.22168.2
+ 8.0.0-beta.23118.1
diff --git a/eng/azure-pipelines-codeql.yml b/eng/azure-pipelines-codeql.yml
new file mode 100644
index 0000000000000..8ad59f7c160f1
--- /dev/null
+++ b/eng/azure-pipelines-codeql.yml
@@ -0,0 +1,102 @@
+trigger:
+ none
+
+schedules:
+ - cron: 0 12 * * 1
+ displayName: Weekly Monday CodeQL/Semmle run
+ branches:
+ include:
+ - dotnet/main
+ - objwriter/12.x
+ always: true
+
+variables:
+ - template: /eng/common-variables.yml
+ - name: Codeql.Enabled
+ value: True
+ - name: Codeql.Cadence
+ value: 0
+ - name: Codeql.TSAEnabled
+ value: True
+ - name: Codeql.BuildIdentifier
+ value: $(System.JobDisplayName)
+
+stages:
+- stage: Build
+ jobs:
+ - template: /eng/common/templates/jobs/jobs.yml
+ parameters:
+ jobs:
+
+ ############ LINUX BUILD ############
+ - job: Build_Linux
+ displayName: Linux
+ timeoutInMinutes: 480
+ variables:
+ - _BuildConfig: Release
+ strategy:
+ matrix:
+ x64:
+ imagename: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-7-20220716123527-d0bc8ed
+ archflag: --arch x64
+ Devtoolset7Arg: /p:ForceDevtoolset7=true
+ pool:
+ ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ vmImage: ubuntu-20.04
+ ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ name: NetCore1ESPool-Internal
+ demands: ImageOverride -equals Build.Ubuntu.1804.Amd64
+ container:
+ image: $(imagename)
+ steps:
+ - bash: |
+ set -ex
+ git clean -ffdx
+ git reset --hard HEAD
+ displayName: 'Clean up working directory'
+
+ - task: CodeQL3000Init@0
+ displayName: Initialize CodeQL (manually-injected)
+
+ - bash: |
+ ./build.sh --ci --restore --build $(archflag) --configuration $(_BuildConfig) $(_InternalBuildArgs) $(Devtoolset7Arg)
+ displayName: 'Build'
+
+ - task: CodeQL3000Finalize@0
+ displayName: Finalize CodeQL (manually-injected)
+
+ ############ WINDOWS BUILD ############
+ - job: Build_Windows
+ displayName: Windows
+ timeoutInMinutes: 600
+ strategy:
+ matrix:
+ # Release
+ x64_release:
+ _BuildConfig: Release
+ archflag: -arch x64
+ pool:
+ ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ name: NetCore-Public
+ demands: ImageOverride -equals windows.vs2022.amd64.open
+ ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ name: NetCore1ESPool-Internal
+ demands: ImageOverride -equals windows.vs2022.amd64
+ steps:
+ - checkout: self
+ clean: true
+ fetchDepth: 2
+
+ - script: |
+ git clean -ffdx
+ git reset --hard HEAD
+ displayName: 'Clean up working directory'
+
+ - task: CodeQL3000Init@0
+ displayName: Initialize CodeQL (manually-injected)
+
+ - powershell: eng\build.ps1 -ci -restore -build $(archflag) -configuration $(_BuildConfig) $(_InternalBuildArgs)
+ displayName: 'Build'
+
+ - task: CodeQL3000Finalize@0
+ displayName: Finalize CodeQL (manually-injected)
diff --git a/azure-pipelines.yml b/eng/azure-pipelines.yml
similarity index 50%
rename from azure-pipelines.yml
rename to eng/azure-pipelines.yml
index 8db313037bfdd..e28e2678aebd4 100644
--- a/azure-pipelines.yml
+++ b/eng/azure-pipelines.yml
@@ -2,15 +2,18 @@ trigger:
batch: true
branches:
include:
- - release/14.x
+ - dotnet/main
+ - dotnet/release/*
pr:
branches:
include:
- - release/14.x
+ - dotnet/main
+ - dotnet/release/*
variables:
-- template: eng/common-variables.yml
+- template: /eng/common-variables.yml
+- template: /eng/common/templates/variables/pool-providers.yml
stages:
- stage: build
@@ -21,43 +24,56 @@ stages:
enablePublishBuildArtifacts: true
enablePublishBuildAssets: true
enablePublishUsingPipelines: true
- variables:
- - _BuildConfig: Release
jobs:
############ LINUX BUILD ############
- job: Build_Linux
displayName: Linux
- timeoutInMinutes: 180
+ timeoutInMinutes: 210
+ variables:
+ - _BuildConfig: Release
strategy:
matrix:
x64:
assetManifestOS: linux
assetManifestPlatform: x64
- imagename: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-7-20210714125435-9b5bbc2
+ imagename: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-7
rootfs:
+ ClangTargetArg:
archflag: --arch x64
LLVMTableGenArg:
+ ClangTableGenArg:
+ Devtoolset7Arg: /p:ForceDevtoolset7=true
+ ClangVersionArg: /p:ClangVersion=clang-9 /p:ClangPlusVersion=clang++-9
arm64:
assetManifestOS: linux
assetManifestPlatform: arm64
imagename: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-arm64-cfdd435-20200121150126
rootfs: /crossrootfs/arm64
+ ClangTargetArg: /p:ClangTarget=aarch64-linux-gnu
archflag: --arch arm64
LLVMTableGenArg: /p:LLVMTableGenPath=$(Build.SourcesDirectory)/artifacts/obj/BuildRoot-x64/bin/llvm-tblgen
+ ClangTableGenArg: /p:ClangTableGenPath=$(Build.SourcesDirectory)/artifacts/obj/BuildRoot-x64/bin/clang-tblgen
+ Devtoolset7Arg:
+ ClangVersionArg: /p:ClangVersion=clang-9 /p:ClangPlusVersion=clang++-9
arm:
assetManifestOS: linux
assetManifestPlatform: arm
imagename: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-09ec757-20200320131433
rootfs: /crossrootfs/arm
+ ClangTargetArg: /p:ClangTarget=arm-linux-gnueabihf
archflag: --arch arm
LLVMTableGenArg: /p:LLVMTableGenPath=$(Build.SourcesDirectory)/artifacts/obj/BuildRoot-x64/bin/llvm-tblgen
+ ClangTableGenArg: /p:ClangTableGenPath=$(Build.SourcesDirectory)/artifacts/obj/BuildRoot-x64/bin/clang-tblgen
+ Devtoolset7Arg:
+ ClangVersionArg: /p:ClangVersion=clang-9 /p:ClangPlusVersion=clang++-9
pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
- vmImage: ubuntu-20.04
+ name: $(DncEngPublicBuildPool)
+ demands: ImageOverride -equals build.ubuntu.2204.amd64.open
${{ if eq(variables['System.TeamProject'], 'internal') }}:
- name: NetCore1ESPool-Internal
- demands: ImageOverride -equals Build.Ubuntu.1804.Amd64
+ name: $(DncEngInternalBuildPool)
+ demands: ImageOverride -equals build.ubuntu.2204.amd64
container:
image: $(imagename)
steps:
@@ -68,25 +84,87 @@ stages:
displayName: 'Clean up working directory'
- bash: |
- ./build.sh --ci --restore --build --arch x64 -configuration $(_BuildConfig) $(_InternalBuildArgs) /p:BuildLLVMTableGenOnly=true
+ ./build.sh --ci --restore --build --arch x64 -configuration $(_BuildConfig) $(_InternalBuildArgs) /p:BuildLLVMTableGenOnly=true $(ClangVersionArg)
displayName: 'Build host llvm-tblgen for cross-compiling'
condition: and(succeeded(), ne(variables['assetManifestPlatform'], 'x64'))
- bash: |
- ./build.sh --ci --restore --build --pack $(archflag) --configuration $(_BuildConfig) $(_InternalBuildArgs) $(LLVMTableGenArg)
+ ./build.sh --ci --restore --build --pack $(archflag) --configuration $(_BuildConfig) $(_InternalBuildArgs) $(LLVMTableGenArg) $(ClangTableGenArg) $(Devtoolset7Arg) $(ClangVersionArg) $(ClangTargetArg)
displayName: 'Build and package'
env:
ROOTFS_DIR: $(rootfs)
- bash: |
- ./eng/common/build.sh --ci --restore --publish --configuration $(_BuildConfig) $(_InternalBuildArgs) /p:AssetManifestOS=$(assetManifestOS) /p:PlatformName=$(assetManifestPlatform) --projects $(Build.SourcesDirectory)/llvm.proj
+ ./eng/common/build.sh --ci --restore --publish --configuration $(_BuildConfig) $(_InternalBuildArgs) /p:AssetManifestOS=$(assetManifestOS) /p:PlatformName=$(assetManifestPlatform) $(ClangVersionArg) --projects $(Build.SourcesDirectory)/llvm.proj
+ displayName: Publish packages
+ condition: and(succeeded(), ne(variables['System.TeamProject'], 'public'), ne(variables['Build.Reason'], 'PullRequest'))
+
+ ############ LINUX MUSL BUILD ############
+ - job: Build_Linux_musl
+ displayName: Linux_musl
+ timeoutInMinutes: 210
+ variables:
+ - _BuildConfig: Release
+ strategy:
+ matrix:
+ x64:
+ assetManifestOS: linux-musl
+ assetManifestPlatform: x64
+ imagename: mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.13-WithNode
+ rootfs:
+ ClangTargetArg:
+ archflag: --arch x64
+ LLVMTableGenArg:
+ ClangTableGenArg:
+ ClangVersionArg: /p:ClangVersion=clang-9 /p:ClangPlusVersion=clang++-9
+ arm64:
+ assetManifestOS: linux-musl
+ assetManifestPlatform: arm64
+ imagename: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-cross-arm64-alpine
+ rootfs: /crossrootfs/arm64
+ ClangTargetArg: /p:ClangTarget=aarch64-alpine-linux-musl
+ archflag: --arch arm64
+ LLVMTableGenArg: /p:LLVMTableGenPath=$(Build.SourcesDirectory)/artifacts/obj/BuildRoot-x64/bin/llvm-tblgen
+ ClangTableGenArg: /p:ClangTableGenPath=$(Build.SourcesDirectory)/artifacts/obj/BuildRoot-x64/bin/clang-tblgen
+ ClangVersionArg: /p:ClangVersion=clang-15 /p:ClangPlusVersion=clang++-15
+ pool:
+ ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ name: $(DncEngPublicBuildPool)
+ demands: ImageOverride -equals build.ubuntu.2204.amd64.open
+ ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ name: $(DncEngInternalBuildPool)
+ demands: ImageOverride -equals build.ubuntu.2204.amd64
+ container:
+ image: $(imagename)
+ steps:
+ - bash: |
+ set -ex
+ git clean -ffdx
+ git reset --hard HEAD
+ displayName: 'Clean up working directory'
+
+ - bash: |
+ ./build.sh --ci --restore --build --arch x64 -configuration $(_BuildConfig) $(_InternalBuildArgs) /p:BuildLLVMTableGenOnly=true $(ClangVersionArg)
+ displayName: 'Build host llvm-tblgen for cross-compiling'
+ condition: and(succeeded(), ne(variables['assetManifestPlatform'], 'x64'))
+
+ - bash: |
+ ./build.sh --ci --restore --build --pack $(archflag) --configuration $(_BuildConfig) $(_InternalBuildArgs) $(LLVMTableGenArg) $(ClangTableGenArg) /p:OutputRid=linux-musl-$(assetManifestPlatform) $(ClangVersionArg) $(ClangTargetArg)
+ displayName: 'Build and package'
+ env:
+ ROOTFS_DIR: $(rootfs)
+
+ - bash: |
+ ./eng/common/build.sh --ci --restore --publish --configuration $(_BuildConfig) $(_InternalBuildArgs) /p:AssetManifestOS=$(assetManifestOS) /p:PlatformName=$(assetManifestPlatform) $(ClangVersionArg) --projects $(Build.SourcesDirectory)/llvm.proj
displayName: Publish packages
condition: and(succeeded(), ne(variables['System.TeamProject'], 'public'), ne(variables['Build.Reason'], 'PullRequest'))
############ MACOS BUILD ############
- job: Build_macOS
displayName: macOS
- timeoutInMinutes: 180
+ timeoutInMinutes: 210
+ variables:
+ - _BuildConfig: Release
strategy:
matrix:
x64:
@@ -94,13 +172,15 @@ stages:
assetManifestPlatform: x64
archflag: --arch x64
LLVMTableGenArg:
+ ClangTableGenArg:
arm64:
assetManifestOS: osx
assetManifestPlatform: arm64
archflag: --arch arm64
LLVMTableGenArg: /p:LLVMTableGenPath=$(Build.SourcesDirectory)/artifacts/obj/BuildRoot-x64/bin/llvm-tblgen
+ ClangTableGenArg: /p:ClangTableGenPath=$(Build.SourcesDirectory)/artifacts/obj/BuildRoot-x64/bin/clang-tblgen
pool:
- vmImage: macOS-10.15
+ vmImage: macos-11
steps:
- bash: |
set -ex
@@ -114,7 +194,7 @@ stages:
condition: and(succeeded(), ne(variables['assetManifestPlatform'], 'x64'))
- bash: |
- ./build.sh --ci --restore --build --pack $(archflag) --configuration $(_BuildConfig) $(_InternalBuildArgs) $(LLVMTableGenArg)
+ ./build.sh --ci --restore --build --pack $(archflag) --configuration $(_BuildConfig) $(_InternalBuildArgs) $(LLVMTableGenArg) $(ClangTableGenArg)
displayName: 'Build and package'
- bash:
@@ -125,30 +205,60 @@ stages:
############ WINDOWS BUILD ############
- job: Build_Windows
displayName: Windows
- timeoutInMinutes: 180
+ timeoutInMinutes: 210
strategy:
matrix:
- x64:
+ # Release
+ x64_release:
+ _BuildConfig: Release
assetManifestOS: win
assetManifestPlatform: x64
archflag: -arch x64
LLVMTableGenArg:
- arm64:
+ ClangTableGenArg:
+ arm64_release:
+ _BuildConfig: Release
assetManifestOS: win
assetManifestPlatform: arm64
archflag: -arch arm64
LLVMTableGenArg: /p:LLVMTableGenPath=$(Build.SourcesDirectory)\artifacts\obj\BuildRoot-x64\bin\llvm-tblgen.exe
- arm:
+ ClangTableGenArg: /p:ClangTableGenPath=$(Build.SourcesDirectory)\artifacts\obj\BuildRoot-x64\bin\clang-tblgen.exe
+ arm_release:
+ _BuildConfig: Release
+ assetManifestOS: win
+ assetManifestPlatform: arm
+ archflag: -arch arm
+ LLVMTableGenArg: /p:LLVMTableGenPath=$(Build.SourcesDirectory)\artifacts\obj\BuildRoot-x64\bin\llvm-tblgen.exe
+ ClangTableGenArg: /p:ClangTableGenPath=$(Build.SourcesDirectory)\artifacts\obj\BuildRoot-x64\bin\clang-tblgen.exe
+ # Debug
+ x64_debug:
+ _BuildConfig: Debug
+ assetManifestOS: win
+ assetManifestPlatform: x64
+ archflag: -arch x64
+ LLVMTableGenArg:
+ ClangTableGenArg:
+ arm64_debug:
+ _BuildConfig: Debug
+ assetManifestOS: win
+ assetManifestPlatform: arm64
+ archflag: -arch arm64
+ LLVMTableGenArg: /p:LLVMTableGenPath=$(Build.SourcesDirectory)\artifacts\obj\BuildRoot-x64\bin\llvm-tblgen.exe
+ ClangTableGenArg: /p:ClangTableGenPath=$(Build.SourcesDirectory)\artifacts\obj\BuildRoot-x64\bin\clang-tblgen.exe
+ arm_debug:
+ _BuildConfig: Debug
assetManifestOS: win
assetManifestPlatform: arm
archflag: -arch arm
LLVMTableGenArg: /p:LLVMTableGenPath=$(Build.SourcesDirectory)\artifacts\obj\BuildRoot-x64\bin\llvm-tblgen.exe
+ ClangTableGenArg: /p:ClangTableGenPath=$(Build.SourcesDirectory)\artifacts\obj\BuildRoot-x64\bin\clang-tblgen.exe
pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
- vmImage: windows-2019
+ name: $(DncEngPublicBuildPool)
+ demands: ImageOverride -equals windows.vs2022.amd64.open
${{ if eq(variables['System.TeamProject'], 'internal') }}:
- name: NetCore1ESPool-Internal
- demands: ImageOverride -equals Build.Server.Amd64.VS2019
+ name: $(DncEngInternalBuildPool)
+ demands: ImageOverride -equals windows.vs2022.amd64
steps:
- checkout: self
clean: true
@@ -163,10 +273,10 @@ stages:
displayName: 'Build host llvm-tblgen for cross-compiling'
condition: and(succeeded(), ne(variables['assetManifestPlatform'], 'x64'))
- - powershell: eng\build.ps1 -ci -restore -build -pack $(archflag) -configuration $(_BuildConfig) $(_InternalBuildArgs) $(LLVMTableGenArg)
+ - powershell: eng\build.ps1 -ci -restore -build -pack $(archflag) -configuration $(_BuildConfig) $(_InternalBuildArgs) $(LLVMTableGenArg) $(ClangTableGenArg)
displayName: 'Build and package'
- - powershell: eng\common\build.ps1 -ci -restore -publish -configuration $(_BuildConfig) $(_InternalBuildArgs) /p:AssetManifestOS=$(assetManifestOS) /p:PlatformName=$(assetManifestPlatform) -projects $(Build.SourcesDirectory)\llvm.proj
+ - powershell: eng\common\build.ps1 -ci -restore -publish -configuration $(_BuildConfig) $(_InternalBuildArgs) /p:AssetManifestOS=$(_BuildConfig)-$(assetManifestOS) /p:PlatformName=$(assetManifestPlatform) -projects $(Build.SourcesDirectory)\llvm.proj
displayName: Publish packages
condition: and(succeeded(), ne(variables['System.TeamProject'], 'public'), ne(variables['Build.Reason'], 'PullRequest'))
diff --git a/eng/common/BuildConfiguration/build-configuration.json b/eng/common/BuildConfiguration/build-configuration.json
new file mode 100644
index 0000000000000..3d1cc89894c94
--- /dev/null
+++ b/eng/common/BuildConfiguration/build-configuration.json
@@ -0,0 +1,4 @@
+{
+ "RetryCountLimit": 1,
+ "RetryByAnyError": false
+}
diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1
index 18823840b1127..6e99723945183 100644
--- a/eng/common/SetupNugetSources.ps1
+++ b/eng/common/SetupNugetSources.ps1
@@ -146,22 +146,22 @@ $userName = "dn-bot"
# Insert credential nodes for Maestro's private feeds
InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Username $userName -Password $Password
+# 3.1 uses a different feed url format so it's handled differently here
$dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']")
if ($dotnet31Source -ne $null) {
AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username $userName -Password $Password
AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -Password $Password
}
-$dotnet5Source = $sources.SelectSingleNode("add[@key='dotnet5']")
-if ($dotnet5Source -ne $null) {
- AddPackageSource -Sources $sources -SourceName "dotnet5-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet5-internal/nuget/v2" -Creds $creds -Username $userName -Password $Password
- AddPackageSource -Sources $sources -SourceName "dotnet5-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet5-internal-transport/nuget/v2" -Creds $creds -Username $userName -Password $Password
-}
+$dotnetVersions = @('5','6','7')
-$dotnet6Source = $sources.SelectSingleNode("add[@key='dotnet6']")
-if ($dotnet6Source -ne $null) {
- AddPackageSource -Sources $sources -SourceName "dotnet6-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet6-internal/nuget/v2" -Creds $creds -Username $userName -Password $Password
- AddPackageSource -Sources $sources -SourceName "dotnet6-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet6-internal-transport/nuget/v2" -Creds $creds -Username $userName -Password $Password
+foreach ($dotnetVersion in $dotnetVersions) {
+ $feedPrefix = "dotnet" + $dotnetVersion;
+ $dotnetSource = $sources.SelectSingleNode("add[@key='$feedPrefix']")
+ if ($dotnetSource -ne $null) {
+ AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/v2" -Creds $creds -Username $userName -Password $Password
+ AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/v2" -Creds $creds -Username $userName -Password $Password
+ }
}
$doc.Save($filename)
diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh
index ad3fb74fd2cc8..8af7d899db121 100644
--- a/eng/common/SetupNugetSources.sh
+++ b/eng/common/SetupNugetSources.sh
@@ -105,53 +105,33 @@ if [ "$?" == "0" ]; then
PackageSources+=('dotnet3.1-internal-transport')
fi
-# Ensure dotnet5-internal and dotnet5-internal-transport are in the packageSources if the public dotnet5 feeds are present
-grep -i ""
-
- sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile
- fi
- PackageSources+=('dotnet5-internal')
-
- grep -i "" $ConfigFile
- if [ "$?" != "0" ]; then
- echo "Adding dotnet5-internal-transport to the packageSources."
- PackageSourcesNodeFooter=""
- PackageSourceTemplate="${TB}"
-
- sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile
- fi
- PackageSources+=('dotnet5-internal-transport')
-fi
-
-# Ensure dotnet6-internal and dotnet6-internal-transport are in the packageSources if the public dotnet6 feeds are present
-grep -i ""
+DotNetVersions=('5' '6' '7')
+
+for DotNetVersion in ${DotNetVersions[@]} ; do
+ FeedPrefix="dotnet${DotNetVersion}";
+ grep -i ""
+
+ sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile
+ fi
+ PackageSources+=("$FeedPrefix-internal")
- sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile
- fi
- PackageSources+=('dotnet6-internal')
+ grep -i "" $ConfigFile
+ if [ "$?" != "0" ]; then
+ echo "Adding $FeedPrefix-internal-transport to the packageSources."
+ PackageSourcesNodeFooter=""
+ PackageSourceTemplate="${TB}"
- grep -i "" $ConfigFile
- if [ "$?" != "0" ]; then
- echo "Adding dotnet6-internal-transport to the packageSources."
- PackageSourcesNodeFooter=""
- PackageSourceTemplate="${TB}"
-
- sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile
+ sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile
+ fi
+ PackageSources+=("$FeedPrefix-internal-transport")
fi
- PackageSources+=('dotnet6-internal-transport')
-fi
+done
# I want things split line by line
PrevIFS=$IFS
diff --git a/eng/common/build.ps1 b/eng/common/build.ps1
index 8943da242f6e9..33a6f2d0e2481 100644
--- a/eng/common/build.ps1
+++ b/eng/common/build.ps1
@@ -26,6 +26,7 @@ Param(
[string] $runtimeSourceFeed = '',
[string] $runtimeSourceFeedKey = '',
[switch] $excludePrereleaseVS,
+ [switch] $nativeToolsOnMachine,
[switch] $help,
[Parameter(ValueFromRemainingArguments=$true)][String[]]$properties
)
@@ -67,6 +68,7 @@ function Print-Usage() {
Write-Host " -warnAsError Sets warnaserror msbuild parameter ('true' or 'false')"
Write-Host " -msbuildEngine Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)."
Write-Host " -excludePrereleaseVS Set to exclude build engines in prerelease versions of Visual Studio"
+ Write-Host " -nativeToolsOnMachine Sets the native tools on machine environment variable (indicating that the script should use native tools on machine)"
Write-Host ""
Write-Host "Command line arguments not listed above are passed thru to msbuild."
@@ -146,6 +148,9 @@ try {
$nodeReuse = $false
}
+ if ($nativeToolsOnMachine) {
+ $env:NativeToolsOnMachine = $true
+ }
if ($restore) {
InitializeNativeTools
}
diff --git a/eng/common/build.sh b/eng/common/build.sh
index 55b298f16ccd1..50af40cdd2ce6 100755
--- a/eng/common/build.sh
+++ b/eng/common/build.sh
@@ -19,6 +19,9 @@ usage()
echo "Actions:"
echo " --restore Restore dependencies (short: -r)"
echo " --build Build solution (short: -b)"
+ echo " --sourceBuild Source-build the solution (short: -sb)"
+ echo " Will additionally trigger the following actions: --restore, --build, --pack"
+ echo " If --configuration is not set explicitly, will also set it to 'Release'"
echo " --rebuild Rebuild solution"
echo " --test Run all unit tests in the solution (short: -t)"
echo " --integrationTest Run all integration tests in the solution"
@@ -55,6 +58,7 @@ scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
restore=false
build=false
+source_build=false
rebuild=false
test=false
integration_test=false
@@ -73,7 +77,7 @@ exclude_ci_binary_log=false
pipelines_log=false
projects=''
-configuration='Debug'
+configuration=''
prepare_machine=false
verbosity='minimal'
runtime_source_feed=''
@@ -119,6 +123,12 @@ while [[ $# > 0 ]]; do
-pack)
pack=true
;;
+ -sourcebuild|-sb)
+ build=true
+ source_build=true
+ restore=true
+ pack=true
+ ;;
-test|-t)
test=true
;;
@@ -168,6 +178,10 @@ while [[ $# > 0 ]]; do
shift
done
+if [[ -z "$configuration" ]]; then
+ if [[ "$source_build" = true ]]; then configuration="Release"; else configuration="Debug"; fi
+fi
+
if [[ "$ci" == true ]]; then
pipelines_log=true
node_reuse=false
@@ -205,6 +219,7 @@ function Build {
/p:RepoRoot="$repo_root" \
/p:Restore=$restore \
/p:Build=$build \
+ /p:ArcadeBuildFromSource=$source_build \
/p:Rebuild=$rebuild \
/p:Test=$test \
/p:Pack=$pack \
diff --git a/eng/common/cross/arm/sources.list.focal b/eng/common/cross/arm/sources.list.focal
new file mode 100644
index 0000000000000..4de2600c17478
--- /dev/null
+++ b/eng/common/cross/arm/sources.list.focal
@@ -0,0 +1,11 @@
+deb http://ports.ubuntu.com/ubuntu-ports/ focal main restricted universe
+deb-src http://ports.ubuntu.com/ubuntu-ports/ focal main restricted universe
+
+deb http://ports.ubuntu.com/ubuntu-ports/ focal-updates main restricted universe
+deb-src http://ports.ubuntu.com/ubuntu-ports/ focal-updates main restricted universe
+
+deb http://ports.ubuntu.com/ubuntu-ports/ focal-backports main restricted
+deb-src http://ports.ubuntu.com/ubuntu-ports/ focal-backports main restricted
+
+deb http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse
+deb-src http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse
diff --git a/eng/common/cross/arm/sources.list.jammy b/eng/common/cross/arm/sources.list.jammy
new file mode 100644
index 0000000000000..6bb0453029cc4
--- /dev/null
+++ b/eng/common/cross/arm/sources.list.jammy
@@ -0,0 +1,11 @@
+deb http://ports.ubuntu.com/ubuntu-ports/ jammy main restricted universe
+deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy main restricted universe
+
+deb http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main restricted universe
+deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main restricted universe
+
+deb http://ports.ubuntu.com/ubuntu-ports/ jammy-backports main restricted
+deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-backports main restricted
+
+deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted universe multiverse
+deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted universe multiverse
diff --git a/eng/common/cross/arm/tizen-build-rootfs.sh b/eng/common/cross/arm/tizen-build-rootfs.sh
deleted file mode 100644
index 9fdb32e920e22..0000000000000
--- a/eng/common/cross/arm/tizen-build-rootfs.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env bash
-set -e
-
-__ARM_HARDFP_CrossDir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
-__TIZEN_CROSSDIR="$__ARM_HARDFP_CrossDir/tizen"
-
-if [[ -z "$ROOTFS_DIR" ]]; then
- echo "ROOTFS_DIR is not defined."
- exit 1;
-fi
-
-TIZEN_TMP_DIR=$ROOTFS_DIR/tizen_tmp
-mkdir -p $TIZEN_TMP_DIR
-
-# Download files
-echo ">>Start downloading files"
-VERBOSE=1 $__ARM_HARDFP_CrossDir/tizen-fetch.sh $TIZEN_TMP_DIR
-echo "<>Start constructing Tizen rootfs"
-TIZEN_RPM_FILES=`ls $TIZEN_TMP_DIR/*.rpm`
-cd $ROOTFS_DIR
-for f in $TIZEN_RPM_FILES; do
- rpm2cpio $f | cpio -idm --quiet
-done
-echo "<>Start configuring Tizen rootfs"
-ln -sfn asm-arm ./usr/include/asm
-patch -p1 < $__TIZEN_CROSSDIR/tizen.patch
-echo "</dev/null; then
- VERBOSE=0
-fi
-
-Log()
-{
- if [ $VERBOSE -ge $1 ]; then
- echo ${@:2}
- fi
-}
-
-Inform()
-{
- Log 1 -e "\x1B[0;34m$@\x1B[m"
-}
-
-Debug()
-{
- Log 2 -e "\x1B[0;32m$@\x1B[m"
-}
-
-Error()
-{
- >&2 Log 0 -e "\x1B[0;31m$@\x1B[m"
-}
-
-Fetch()
-{
- URL=$1
- FILE=$2
- PROGRESS=$3
- if [ $VERBOSE -ge 1 ] && [ $PROGRESS ]; then
- CURL_OPT="--progress-bar"
- else
- CURL_OPT="--silent"
- fi
- curl $CURL_OPT $URL > $FILE
-}
-
-hash curl 2> /dev/null || { Error "Require 'curl' Aborting."; exit 1; }
-hash xmllint 2> /dev/null || { Error "Require 'xmllint' Aborting."; exit 1; }
-hash sha256sum 2> /dev/null || { Error "Require 'sha256sum' Aborting."; exit 1; }
-
-TMPDIR=$1
-if [ ! -d $TMPDIR ]; then
- TMPDIR=./tizen_tmp
- Debug "Create temporary directory : $TMPDIR"
- mkdir -p $TMPDIR
-fi
-
-TIZEN_URL=http://download.tizen.org/snapshots/tizen
-BUILD_XML=build.xml
-REPOMD_XML=repomd.xml
-PRIMARY_XML=primary.xml
-TARGET_URL="http://__not_initialized"
-
-Xpath_get()
-{
- XPATH_RESULT=''
- XPATH=$1
- XML_FILE=$2
- RESULT=$(xmllint --xpath $XPATH $XML_FILE)
- if [[ -z ${RESULT// } ]]; then
- Error "Can not find target from $XML_FILE"
- Debug "Xpath = $XPATH"
- exit 1
- fi
- XPATH_RESULT=$RESULT
-}
-
-fetch_tizen_pkgs_init()
-{
- TARGET=$1
- PROFILE=$2
- Debug "Initialize TARGET=$TARGET, PROFILE=$PROFILE"
-
- TMP_PKG_DIR=$TMPDIR/tizen_${PROFILE}_pkgs
- if [ -d $TMP_PKG_DIR ]; then rm -rf $TMP_PKG_DIR; fi
- mkdir -p $TMP_PKG_DIR
-
- PKG_URL=$TIZEN_URL/$PROFILE/latest
-
- BUILD_XML_URL=$PKG_URL/$BUILD_XML
- TMP_BUILD=$TMP_PKG_DIR/$BUILD_XML
- TMP_REPOMD=$TMP_PKG_DIR/$REPOMD_XML
- TMP_PRIMARY=$TMP_PKG_DIR/$PRIMARY_XML
- TMP_PRIMARYGZ=${TMP_PRIMARY}.gz
-
- Fetch $BUILD_XML_URL $TMP_BUILD
-
- Debug "fetch $BUILD_XML_URL to $TMP_BUILD"
-
- TARGET_XPATH="//build/buildtargets/buildtarget[@name=\"$TARGET\"]/repo[@type=\"binary\"]/text()"
- Xpath_get $TARGET_XPATH $TMP_BUILD
- TARGET_PATH=$XPATH_RESULT
- TARGET_URL=$PKG_URL/$TARGET_PATH
-
- REPOMD_URL=$TARGET_URL/repodata/repomd.xml
- PRIMARY_XPATH='string(//*[local-name()="data"][@type="primary"]/*[local-name()="location"]/@href)'
-
- Fetch $REPOMD_URL $TMP_REPOMD
-
- Debug "fetch $REPOMD_URL to $TMP_REPOMD"
-
- Xpath_get $PRIMARY_XPATH $TMP_REPOMD
- PRIMARY_XML_PATH=$XPATH_RESULT
- PRIMARY_URL=$TARGET_URL/$PRIMARY_XML_PATH
-
- Fetch $PRIMARY_URL $TMP_PRIMARYGZ
-
- Debug "fetch $PRIMARY_URL to $TMP_PRIMARYGZ"
-
- gunzip $TMP_PRIMARYGZ
-
- Debug "unzip $TMP_PRIMARYGZ to $TMP_PRIMARY"
-}
-
-fetch_tizen_pkgs()
-{
- ARCH=$1
- PACKAGE_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]][*[local-name()="arch"][text()="_ARCH_"]]/*[local-name()="location"]/@href)'
-
- PACKAGE_CHECKSUM_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]][*[local-name()="arch"][text()="_ARCH_"]]/*[local-name()="checksum"]/text())'
-
- for pkg in ${@:2}
- do
- Inform "Fetching... $pkg"
- XPATH=${PACKAGE_XPATH_TPL/_PKG_/$pkg}
- XPATH=${XPATH/_ARCH_/$ARCH}
- Xpath_get $XPATH $TMP_PRIMARY
- PKG_PATH=$XPATH_RESULT
-
- XPATH=${PACKAGE_CHECKSUM_XPATH_TPL/_PKG_/$pkg}
- XPATH=${XPATH/_ARCH_/$ARCH}
- Xpath_get $XPATH $TMP_PRIMARY
- CHECKSUM=$XPATH_RESULT
-
- PKG_URL=$TARGET_URL/$PKG_PATH
- PKG_FILE=$(basename $PKG_PATH)
- PKG_PATH=$TMPDIR/$PKG_FILE
-
- Debug "Download $PKG_URL to $PKG_PATH"
- Fetch $PKG_URL $PKG_PATH true
-
- echo "$CHECKSUM $PKG_PATH" | sha256sum -c - > /dev/null
- if [ $? -ne 0 ]; then
- Error "Fail to fetch $PKG_URL to $PKG_PATH"
- Debug "Checksum = $CHECKSUM"
- exit 1
- fi
- done
-}
-
-Inform "Initialize arm base"
-fetch_tizen_pkgs_init standard base
-Inform "fetch common packages"
-fetch_tizen_pkgs armv7hl gcc gcc-devel-static glibc glibc-devel libicu libicu-devel libatomic linux-glibc-devel keyutils keyutils-devel libkeyutils
-Inform "fetch coreclr packages"
-fetch_tizen_pkgs armv7hl lldb lldb-devel libgcc libstdc++ libstdc++-devel libunwind libunwind-devel lttng-ust-devel lttng-ust userspace-rcu-devel userspace-rcu
-Inform "fetch corefx packages"
-fetch_tizen_pkgs armv7hl libcom_err libcom_err-devel zlib zlib-devel libopenssl11 libopenssl1.1-devel krb5 krb5-devel
-
-Inform "Initialize standard unified"
-fetch_tizen_pkgs_init standard unified
-Inform "fetch corefx packages"
-fetch_tizen_pkgs armv7hl gssdp gssdp-devel tizen-release
-
diff --git a/eng/common/cross/arm64/sources.list.focal b/eng/common/cross/arm64/sources.list.focal
new file mode 100644
index 0000000000000..4de2600c17478
--- /dev/null
+++ b/eng/common/cross/arm64/sources.list.focal
@@ -0,0 +1,11 @@
+deb http://ports.ubuntu.com/ubuntu-ports/ focal main restricted universe
+deb-src http://ports.ubuntu.com/ubuntu-ports/ focal main restricted universe
+
+deb http://ports.ubuntu.com/ubuntu-ports/ focal-updates main restricted universe
+deb-src http://ports.ubuntu.com/ubuntu-ports/ focal-updates main restricted universe
+
+deb http://ports.ubuntu.com/ubuntu-ports/ focal-backports main restricted
+deb-src http://ports.ubuntu.com/ubuntu-ports/ focal-backports main restricted
+
+deb http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse
+deb-src http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse
diff --git a/eng/common/cross/arm64/sources.list.jammy b/eng/common/cross/arm64/sources.list.jammy
new file mode 100644
index 0000000000000..6bb0453029cc4
--- /dev/null
+++ b/eng/common/cross/arm64/sources.list.jammy
@@ -0,0 +1,11 @@
+deb http://ports.ubuntu.com/ubuntu-ports/ jammy main restricted universe
+deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy main restricted universe
+
+deb http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main restricted universe
+deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main restricted universe
+
+deb http://ports.ubuntu.com/ubuntu-ports/ jammy-backports main restricted
+deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-backports main restricted
+
+deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted universe multiverse
+deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted universe multiverse
diff --git a/eng/common/cross/arm64/tizen-fetch.sh b/eng/common/cross/arm64/tizen-fetch.sh
deleted file mode 100644
index 16d1301f21e4c..0000000000000
--- a/eng/common/cross/arm64/tizen-fetch.sh
+++ /dev/null
@@ -1,170 +0,0 @@
-#!/usr/bin/env bash
-set -e
-
-if [[ -z "${VERBOSE// }" ]] || [ "$VERBOSE" -ne "$VERBOSE" ] 2>/dev/null; then
- VERBOSE=0
-fi
-
-Log()
-{
- if [ $VERBOSE -ge $1 ]; then
- echo ${@:2}
- fi
-}
-
-Inform()
-{
- Log 1 -e "\x1B[0;34m$@\x1B[m"
-}
-
-Debug()
-{
- Log 2 -e "\x1B[0;32m$@\x1B[m"
-}
-
-Error()
-{
- >&2 Log 0 -e "\x1B[0;31m$@\x1B[m"
-}
-
-Fetch()
-{
- URL=$1
- FILE=$2
- PROGRESS=$3
- if [ $VERBOSE -ge 1 ] && [ $PROGRESS ]; then
- CURL_OPT="--progress-bar"
- else
- CURL_OPT="--silent"
- fi
- curl $CURL_OPT $URL > $FILE
-}
-
-hash curl 2> /dev/null || { Error "Require 'curl' Aborting."; exit 1; }
-hash xmllint 2> /dev/null || { Error "Require 'xmllint' Aborting."; exit 1; }
-hash sha256sum 2> /dev/null || { Error "Require 'sha256sum' Aborting."; exit 1; }
-
-TMPDIR=$1
-if [ ! -d $TMPDIR ]; then
- TMPDIR=./tizen_tmp
- Debug "Create temporary directory : $TMPDIR"
- mkdir -p $TMPDIR
-fi
-
-TIZEN_URL=http://download.tizen.org/snapshots/tizen/
-BUILD_XML=build.xml
-REPOMD_XML=repomd.xml
-PRIMARY_XML=primary.xml
-TARGET_URL="http://__not_initialized"
-
-Xpath_get()
-{
- XPATH_RESULT=''
- XPATH=$1
- XML_FILE=$2
- RESULT=$(xmllint --xpath $XPATH $XML_FILE)
- if [[ -z ${RESULT// } ]]; then
- Error "Can not find target from $XML_FILE"
- Debug "Xpath = $XPATH"
- exit 1
- fi
- XPATH_RESULT=$RESULT
-}
-
-fetch_tizen_pkgs_init()
-{
- TARGET=$1
- PROFILE=$2
- Debug "Initialize TARGET=$TARGET, PROFILE=$PROFILE"
-
- TMP_PKG_DIR=$TMPDIR/tizen_${PROFILE}_pkgs
- if [ -d $TMP_PKG_DIR ]; then rm -rf $TMP_PKG_DIR; fi
- mkdir -p $TMP_PKG_DIR
-
- PKG_URL=$TIZEN_URL/$PROFILE/latest
-
- BUILD_XML_URL=$PKG_URL/$BUILD_XML
- TMP_BUILD=$TMP_PKG_DIR/$BUILD_XML
- TMP_REPOMD=$TMP_PKG_DIR/$REPOMD_XML
- TMP_PRIMARY=$TMP_PKG_DIR/$PRIMARY_XML
- TMP_PRIMARYGZ=${TMP_PRIMARY}.gz
-
- Fetch $BUILD_XML_URL $TMP_BUILD
-
- Debug "fetch $BUILD_XML_URL to $TMP_BUILD"
-
- TARGET_XPATH="//build/buildtargets/buildtarget[@name=\"$TARGET\"]/repo[@type=\"binary\"]/text()"
- Xpath_get $TARGET_XPATH $TMP_BUILD
- TARGET_PATH=$XPATH_RESULT
- TARGET_URL=$PKG_URL/$TARGET_PATH
-
- REPOMD_URL=$TARGET_URL/repodata/repomd.xml
- PRIMARY_XPATH='string(//*[local-name()="data"][@type="primary"]/*[local-name()="location"]/@href)'
-
- Fetch $REPOMD_URL $TMP_REPOMD
-
- Debug "fetch $REPOMD_URL to $TMP_REPOMD"
-
- Xpath_get $PRIMARY_XPATH $TMP_REPOMD
- PRIMARY_XML_PATH=$XPATH_RESULT
- PRIMARY_URL=$TARGET_URL/$PRIMARY_XML_PATH
-
- Fetch $PRIMARY_URL $TMP_PRIMARYGZ
-
- Debug "fetch $PRIMARY_URL to $TMP_PRIMARYGZ"
-
- gunzip $TMP_PRIMARYGZ
-
- Debug "unzip $TMP_PRIMARYGZ to $TMP_PRIMARY"
-}
-
-fetch_tizen_pkgs()
-{
- ARCH=$1
- PACKAGE_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]][*[local-name()="arch"][text()="_ARCH_"]]/*[local-name()="location"]/@href)'
-
- PACKAGE_CHECKSUM_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]][*[local-name()="arch"][text()="_ARCH_"]]/*[local-name()="checksum"]/text())'
-
- for pkg in ${@:2}
- do
- Inform "Fetching... $pkg"
- XPATH=${PACKAGE_XPATH_TPL/_PKG_/$pkg}
- XPATH=${XPATH/_ARCH_/$ARCH}
- Xpath_get $XPATH $TMP_PRIMARY
- PKG_PATH=$XPATH_RESULT
-
- XPATH=${PACKAGE_CHECKSUM_XPATH_TPL/_PKG_/$pkg}
- XPATH=${XPATH/_ARCH_/$ARCH}
- Xpath_get $XPATH $TMP_PRIMARY
- CHECKSUM=$XPATH_RESULT
-
- PKG_URL=$TARGET_URL/$PKG_PATH
- PKG_FILE=$(basename $PKG_PATH)
- PKG_PATH=$TMPDIR/$PKG_FILE
-
- Debug "Download $PKG_URL to $PKG_PATH"
- Fetch $PKG_URL $PKG_PATH true
-
- echo "$CHECKSUM $PKG_PATH" | sha256sum -c - > /dev/null
- if [ $? -ne 0 ]; then
- Error "Fail to fetch $PKG_URL to $PKG_PATH"
- Debug "Checksum = $CHECKSUM"
- exit 1
- fi
- done
-}
-
-Inform "Initialize arm base"
-fetch_tizen_pkgs_init standard base
-Inform "fetch common packages"
-fetch_tizen_pkgs aarch64 gcc glibc glibc-devel libicu libicu-devel libatomic linux-glibc-devel keyutils keyutils-devel libkeyutils
-Inform "fetch coreclr packages"
-fetch_tizen_pkgs aarch64 lldb lldb-devel libgcc libstdc++ libstdc++-devel libunwind libunwind-devel lttng-ust-devel lttng-ust userspace-rcu-devel userspace-rcu
-Inform "fetch corefx packages"
-fetch_tizen_pkgs aarch64 libcom_err libcom_err-devel zlib zlib-devel libopenssl11 libopenssl1.1-devel krb5 krb5-devel
-
-Inform "Initialize standard unified"
-fetch_tizen_pkgs_init standard unified
-Inform "fetch corefx packages"
-fetch_tizen_pkgs aarch64 gssdp gssdp-devel tizen-release
-
diff --git a/eng/common/cross/armel/tizen-build-rootfs.sh b/eng/common/cross/armel/tizen-build-rootfs.sh
deleted file mode 100755
index 9a4438af61c21..0000000000000
--- a/eng/common/cross/armel/tizen-build-rootfs.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env bash
-set -e
-
-__ARM_SOFTFP_CrossDir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
-__TIZEN_CROSSDIR="$__ARM_SOFTFP_CrossDir/tizen"
-
-if [[ -z "$ROOTFS_DIR" ]]; then
- echo "ROOTFS_DIR is not defined."
- exit 1;
-fi
-
-TIZEN_TMP_DIR=$ROOTFS_DIR/tizen_tmp
-mkdir -p $TIZEN_TMP_DIR
-
-# Download files
-echo ">>Start downloading files"
-VERBOSE=1 $__ARM_SOFTFP_CrossDir/tizen-fetch.sh $TIZEN_TMP_DIR
-echo "<>Start constructing Tizen rootfs"
-TIZEN_RPM_FILES=`ls $TIZEN_TMP_DIR/*.rpm`
-cd $ROOTFS_DIR
-for f in $TIZEN_RPM_FILES; do
- rpm2cpio $f | cpio -idm --quiet
-done
-echo "<>Start configuring Tizen rootfs"
-ln -sfn asm-arm ./usr/include/asm
-patch -p1 < $__TIZEN_CROSSDIR/tizen.patch
-echo "</dev/null; then
- VERBOSE=0
-fi
-
-Log()
-{
- if [ $VERBOSE -ge $1 ]; then
- echo ${@:2}
- fi
-}
-
-Inform()
-{
- Log 1 -e "\x1B[0;34m$@\x1B[m"
-}
-
-Debug()
-{
- Log 2 -e "\x1B[0;32m$@\x1B[m"
-}
-
-Error()
-{
- >&2 Log 0 -e "\x1B[0;31m$@\x1B[m"
-}
-
-Fetch()
-{
- URL=$1
- FILE=$2
- PROGRESS=$3
- if [ $VERBOSE -ge 1 ] && [ $PROGRESS ]; then
- CURL_OPT="--progress-bar"
- else
- CURL_OPT="--silent"
- fi
- curl $CURL_OPT $URL > $FILE
-}
-
-hash curl 2> /dev/null || { Error "Require 'curl' Aborting."; exit 1; }
-hash xmllint 2> /dev/null || { Error "Require 'xmllint' Aborting."; exit 1; }
-hash sha256sum 2> /dev/null || { Error "Require 'sha256sum' Aborting."; exit 1; }
-
-TMPDIR=$1
-if [ ! -d $TMPDIR ]; then
- TMPDIR=./tizen_tmp
- Debug "Create temporary directory : $TMPDIR"
- mkdir -p $TMPDIR
-fi
-
-TIZEN_URL=http://download.tizen.org/snapshots/tizen
-BUILD_XML=build.xml
-REPOMD_XML=repomd.xml
-PRIMARY_XML=primary.xml
-TARGET_URL="http://__not_initialized"
-
-Xpath_get()
-{
- XPATH_RESULT=''
- XPATH=$1
- XML_FILE=$2
- RESULT=$(xmllint --xpath $XPATH $XML_FILE)
- if [[ -z ${RESULT// } ]]; then
- Error "Can not find target from $XML_FILE"
- Debug "Xpath = $XPATH"
- exit 1
- fi
- XPATH_RESULT=$RESULT
-}
-
-fetch_tizen_pkgs_init()
-{
- TARGET=$1
- PROFILE=$2
- Debug "Initialize TARGET=$TARGET, PROFILE=$PROFILE"
-
- TMP_PKG_DIR=$TMPDIR/tizen_${PROFILE}_pkgs
- if [ -d $TMP_PKG_DIR ]; then rm -rf $TMP_PKG_DIR; fi
- mkdir -p $TMP_PKG_DIR
-
- PKG_URL=$TIZEN_URL/$PROFILE/latest
-
- BUILD_XML_URL=$PKG_URL/$BUILD_XML
- TMP_BUILD=$TMP_PKG_DIR/$BUILD_XML
- TMP_REPOMD=$TMP_PKG_DIR/$REPOMD_XML
- TMP_PRIMARY=$TMP_PKG_DIR/$PRIMARY_XML
- TMP_PRIMARYGZ=${TMP_PRIMARY}.gz
-
- Fetch $BUILD_XML_URL $TMP_BUILD
-
- Debug "fetch $BUILD_XML_URL to $TMP_BUILD"
-
- TARGET_XPATH="//build/buildtargets/buildtarget[@name=\"$TARGET\"]/repo[@type=\"binary\"]/text()"
- Xpath_get $TARGET_XPATH $TMP_BUILD
- TARGET_PATH=$XPATH_RESULT
- TARGET_URL=$PKG_URL/$TARGET_PATH
-
- REPOMD_URL=$TARGET_URL/repodata/repomd.xml
- PRIMARY_XPATH='string(//*[local-name()="data"][@type="primary"]/*[local-name()="location"]/@href)'
-
- Fetch $REPOMD_URL $TMP_REPOMD
-
- Debug "fetch $REPOMD_URL to $TMP_REPOMD"
-
- Xpath_get $PRIMARY_XPATH $TMP_REPOMD
- PRIMARY_XML_PATH=$XPATH_RESULT
- PRIMARY_URL=$TARGET_URL/$PRIMARY_XML_PATH
-
- Fetch $PRIMARY_URL $TMP_PRIMARYGZ
-
- Debug "fetch $PRIMARY_URL to $TMP_PRIMARYGZ"
-
- gunzip $TMP_PRIMARYGZ
-
- Debug "unzip $TMP_PRIMARYGZ to $TMP_PRIMARY"
-}
-
-fetch_tizen_pkgs()
-{
- ARCH=$1
- PACKAGE_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]][*[local-name()="arch"][text()="_ARCH_"]]/*[local-name()="location"]/@href)'
-
- PACKAGE_CHECKSUM_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]][*[local-name()="arch"][text()="_ARCH_"]]/*[local-name()="checksum"]/text())'
-
- for pkg in ${@:2}
- do
- Inform "Fetching... $pkg"
- XPATH=${PACKAGE_XPATH_TPL/_PKG_/$pkg}
- XPATH=${XPATH/_ARCH_/$ARCH}
- Xpath_get $XPATH $TMP_PRIMARY
- PKG_PATH=$XPATH_RESULT
-
- XPATH=${PACKAGE_CHECKSUM_XPATH_TPL/_PKG_/$pkg}
- XPATH=${XPATH/_ARCH_/$ARCH}
- Xpath_get $XPATH $TMP_PRIMARY
- CHECKSUM=$XPATH_RESULT
-
- PKG_URL=$TARGET_URL/$PKG_PATH
- PKG_FILE=$(basename $PKG_PATH)
- PKG_PATH=$TMPDIR/$PKG_FILE
-
- Debug "Download $PKG_URL to $PKG_PATH"
- Fetch $PKG_URL $PKG_PATH true
-
- echo "$CHECKSUM $PKG_PATH" | sha256sum -c - > /dev/null
- if [ $? -ne 0 ]; then
- Error "Fail to fetch $PKG_URL to $PKG_PATH"
- Debug "Checksum = $CHECKSUM"
- exit 1
- fi
- done
-}
-
-Inform "Initialize arm base"
-fetch_tizen_pkgs_init standard base
-Inform "fetch common packages"
-fetch_tizen_pkgs armv7l gcc gcc-devel-static glibc glibc-devel libicu libicu-devel libatomic linux-glibc-devel keyutils keyutils-devel libkeyutils
-Inform "fetch coreclr packages"
-fetch_tizen_pkgs armv7l lldb lldb-devel libgcc libstdc++ libstdc++-devel libunwind libunwind-devel lttng-ust-devel lttng-ust userspace-rcu-devel userspace-rcu
-Inform "fetch corefx packages"
-fetch_tizen_pkgs armv7l libcom_err libcom_err-devel zlib zlib-devel libopenssl11 libopenssl1.1-devel krb5 krb5-devel
-
-Inform "Initialize standard unified"
-fetch_tizen_pkgs_init standard unified
-Inform "fetch corefx packages"
-fetch_tizen_pkgs armv7l gssdp gssdp-devel tizen-release
-
diff --git a/eng/common/cross/armel/tizen/tizen-dotnet.ks b/eng/common/cross/armel/tizen/tizen-dotnet.ks
deleted file mode 100644
index 506d455bd4ff8..0000000000000
--- a/eng/common/cross/armel/tizen/tizen-dotnet.ks
+++ /dev/null
@@ -1,50 +0,0 @@
-lang en_US.UTF-8
-keyboard us
-timezone --utc Asia/Seoul
-
-part / --fstype="ext4" --size=3500 --ondisk=mmcblk0 --label rootfs --fsoptions=defaults,noatime
-
-rootpw tizen
-desktop --autologinuser=root
-user --name root --groups audio,video --password 'tizen'
-
-repo --name=standard --baseurl=http://download.tizen.org/releases/milestone/tizen/unified/latest/repos/standard/packages/ --ssl_verify=no
-repo --name=base --baseurl=http://download.tizen.org/releases/milestone/tizen/base/latest/repos/standard/packages/ --ssl_verify=no
-
-%packages
-tar
-gzip
-
-sed
-grep
-gawk
-perl
-
-binutils
-findutils
-util-linux
-lttng-ust
-userspace-rcu
-procps-ng
-tzdata
-ca-certificates
-
-
-### Core FX
-libicu
-libunwind
-iputils
-zlib
-krb5
-libcurl
-libopenssl
-
-%end
-
-%post
-
-### Update /tmp privilege
-chmod 777 /tmp
-####################################
-
-%end
diff --git a/eng/common/cross/build-android-rootfs.sh b/eng/common/cross/build-android-rootfs.sh
index 42516bbeebc3f..f163fb9dae966 100755
--- a/eng/common/cross/build-android-rootfs.sh
+++ b/eng/common/cross/build-android-rootfs.sh
@@ -107,12 +107,12 @@ __AndroidPackages+=" liblzma"
__AndroidPackages+=" krb5"
__AndroidPackages+=" openssl"
-for path in $(wget -qO- http://termux.net/dists/stable/main/binary-$__AndroidArch/Packages |\
+for path in $(wget -qO- https://packages.termux.dev/termux-main-21/dists/stable/main/binary-$__AndroidArch/Packages |\
grep -A15 "Package: \(${__AndroidPackages// /\\|}\)" | grep -v "static\|tool" | grep Filename); do
if [[ "$path" != "Filename:" ]]; then
echo "Working on: $path"
- wget -qO- http://termux.net/$path | dpkg -x - "$__TmpDir"
+ wget -qO- https://packages.termux.dev/termux-main-21/$path | dpkg -x - "$__TmpDir"
fi
done
diff --git a/eng/common/cross/build-rootfs.sh b/eng/common/cross/build-rootfs.sh
index e784c9c005a2a..1ebf454f3cf28 100755
--- a/eng/common/cross/build-rootfs.sh
+++ b/eng/common/cross/build-rootfs.sh
@@ -4,22 +4,27 @@ set -e
usage()
{
- echo "Usage: $0 [BuildArch] [CodeName] [lldbx.y] [--skipunmount] --rootfsdir ]"
- echo "BuildArch can be: arm(default), armel, arm64, x86"
+ echo "Usage: $0 [BuildArch] [CodeName] [lldbx.y] [llvmx[.y]] [--skipunmount] --rootfsdir ]"
+ echo "BuildArch can be: arm(default), arm64, armel, armv6, ppc64le, riscv64, s390x, x64, x86"
echo "CodeName - optional, Code name for Linux, can be: xenial(default), zesty, bionic, alpine, alpine3.13 or alpine3.14. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen."
echo " for FreeBSD can be: freebsd12, freebsd13"
- echo " for illumos can be: illumos."
+ echo " for illumos can be: illumos"
+ echo " for Haiku can be: haiku."
echo "lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine and FreeBSD"
+ echo "llvmx[.y] - optional, LLVM version for LLVM related packages."
echo "--skipunmount - optional, will skip the unmount of rootfs folder."
echo "--use-mirror - optional, use mirror URL to fetch resources, when available."
+ echo "--jobs N - optional, restrict to N jobs."
exit 1
}
__CodeName=xenial
__CrossDir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
-__InitialDir=$PWD
__BuildArch=arm
__AlpineArch=armv7
+__FreeBSDArch=arm
+__FreeBSDMachineArch=armv7
+__IllumosArch=arm7
__QEMUArch=arm
__UbuntuArch=armhf
__UbuntuRepo="http://ports.ubuntu.com/"
@@ -39,17 +44,20 @@ __AlpinePackages+=" libedit"
# symlinks fixer
__UbuntuPackages+=" symlinks"
-# CoreCLR and CoreFX dependencies
+# runtime dependencies
__UbuntuPackages+=" libicu-dev"
__UbuntuPackages+=" liblttng-ust-dev"
__UbuntuPackages+=" libunwind8-dev"
+__UbuntuPackages+=" libnuma-dev"
__AlpinePackages+=" gettext-dev"
__AlpinePackages+=" icu-dev"
__AlpinePackages+=" libunwind-dev"
__AlpinePackages+=" lttng-ust-dev"
+__AlpinePackages+=" compiler-rt-static"
+__AlpinePackages+=" numactl-dev"
-# CoreFX dependencies
+# runtime libraries' dependencies
__UbuntuPackages+=" libcurl4-openssl-dev"
__UbuntuPackages+=" libkrb5-dev"
__UbuntuPackages+=" libssl-dev"
@@ -70,26 +78,38 @@ __FreeBSDPackages+=" openssl"
__FreeBSDPackages+=" krb5"
__FreeBSDPackages+=" terminfo-db"
-__IllumosPackages="icu-64.2nb2"
-__IllumosPackages+=" mit-krb5-1.16.2nb4"
-__IllumosPackages+=" openssl-1.1.1e"
-__IllumosPackages+=" zlib-1.2.11"
+__IllumosPackages="icu"
+__IllumosPackages+=" mit-krb5"
+__IllumosPackages+=" openssl"
+__IllumosPackages+=" zlib"
+
+__HaikuPackages="gmp"
+__HaikuPackages+=" gmp_devel"
+__HaikuPackages+=" krb5"
+__HaikuPackages+=" krb5_devel"
+__HaikuPackages+=" libiconv"
+__HaikuPackages+=" libiconv_devel"
+__HaikuPackages+=" llvm12_libunwind"
+__HaikuPackages+=" llvm12_libunwind_devel"
+__HaikuPackages+=" mpfr"
+__HaikuPackages+=" mpfr_devel"
# ML.NET dependencies
__UbuntuPackages+=" libomp5"
__UbuntuPackages+=" libomp-dev"
+__Keyring=
__UseMirror=0
__UnprocessedBuildArgs=
while :; do
- if [ $# -le 0 ]; then
+ if [[ "$#" -le 0 ]]; then
break
fi
- lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")"
+ lowerI="$(echo "$1" | tr "[:upper:]" "[:lower:]")"
case $lowerI in
- -?|-h|--help)
+ -\?|-h|--help)
usage
exit 1
;;
@@ -99,20 +119,13 @@ while :; do
__AlpineArch=armv7
__QEMUArch=arm
;;
- armv6)
- __BuildArch=armv6
- __UbuntuArch=armhf
- __QEMUArch=arm
- __UbuntuRepo="http://raspbian.raspberrypi.org/raspbian/"
- __CodeName=buster
- __LLDB_Package="liblldb-6.0-dev"
- __Keyring="/usr/share/keyrings/raspbian-archive-keyring.gpg"
- ;;
arm64)
__BuildArch=arm64
__UbuntuArch=arm64
__AlpineArch=aarch64
__QEMUArch=aarch64
+ __FreeBSDArch=arm64
+ __FreeBSDMachineArch=aarch64
;;
armel)
__BuildArch=armel
@@ -120,65 +133,111 @@ while :; do
__UbuntuRepo="http://ftp.debian.org/debian/"
__CodeName=jessie
;;
+ armv6)
+ __BuildArch=armv6
+ __UbuntuArch=armhf
+ __QEMUArch=arm
+ __UbuntuRepo="http://raspbian.raspberrypi.org/raspbian/"
+ __CodeName=buster
+ __LLDB_Package="liblldb-6.0-dev"
+
+ if [[ -e "/usr/share/keyrings/raspbian-archive-keyring.gpg" ]]; then
+ __Keyring="--keyring /usr/share/keyrings/raspbian-archive-keyring.gpg"
+ fi
+ ;;
ppc64le)
__BuildArch=ppc64le
__UbuntuArch=ppc64el
__UbuntuRepo="http://ports.ubuntu.com/ubuntu-ports/"
- __UbuntuPackages=$(echo ${__UbuntuPackages} | sed 's/ libunwind8-dev//')
- __UbuntuPackages=$(echo ${__UbuntuPackages} | sed 's/ libomp-dev//')
- __UbuntuPackages=$(echo ${__UbuntuPackages} | sed 's/ libomp5//')
+ __UbuntuPackages="${__UbuntuPackages// libunwind8-dev/}"
+ __UbuntuPackages="${__UbuntuPackages// libomp-dev/}"
+ __UbuntuPackages="${__UbuntuPackages// libomp5/}"
+ unset __LLDB_Package
+ ;;
+ riscv64)
+ __BuildArch=riscv64
+ __UbuntuArch=riscv64
+ __UbuntuRepo="http://deb.debian.org/debian-ports"
+ __CodeName=sid
+ __UbuntuPackages="${__UbuntuPackages// libunwind8-dev/}"
unset __LLDB_Package
+
+ if [[ -e "/usr/share/keyrings/debian-ports-archive-keyring.gpg" ]]; then
+ __Keyring="--keyring /usr/share/keyrings/debian-ports-archive-keyring.gpg --include=debian-ports-archive-keyring"
+ fi
;;
s390x)
__BuildArch=s390x
__UbuntuArch=s390x
__UbuntuRepo="http://ports.ubuntu.com/ubuntu-ports/"
- __UbuntuPackages=$(echo ${__UbuntuPackages} | sed 's/ libunwind8-dev//')
- __UbuntuPackages=$(echo ${__UbuntuPackages} | sed 's/ libomp-dev//')
- __UbuntuPackages=$(echo ${__UbuntuPackages} | sed 's/ libomp5//')
+ __UbuntuPackages="${__UbuntuPackages// libunwind8-dev/}"
+ __UbuntuPackages="${__UbuntuPackages// libomp-dev/}"
+ __UbuntuPackages="${__UbuntuPackages// libomp5/}"
unset __LLDB_Package
;;
+ x64)
+ __BuildArch=x64
+ __UbuntuArch=amd64
+ __FreeBSDArch=amd64
+ __FreeBSDMachineArch=amd64
+ __illumosArch=x86_64
+ __UbuntuRepo=
+ ;;
x86)
__BuildArch=x86
__UbuntuArch=i386
__UbuntuRepo="http://archive.ubuntu.com/ubuntu/"
;;
- lldb3.6)
- __LLDB_Package="lldb-3.6-dev"
- ;;
- lldb3.8)
- __LLDB_Package="lldb-3.8-dev"
- ;;
- lldb3.9)
- __LLDB_Package="liblldb-3.9-dev"
- ;;
- lldb4.0)
- __LLDB_Package="liblldb-4.0-dev"
- ;;
- lldb5.0)
- __LLDB_Package="liblldb-5.0-dev"
- ;;
- lldb6.0)
- __LLDB_Package="liblldb-6.0-dev"
+ lldb*)
+ version="${lowerI/lldb/}"
+ parts=(${version//./ })
+
+ # for versions > 6.0, lldb has dropped the minor version
+ if [[ "${parts[0]}" -gt 6 ]]; then
+ version="${parts[0]}"
+ fi
+
+ __LLDB_Package="liblldb-${version}-dev"
;;
no-lldb)
unset __LLDB_Package
;;
+ llvm*)
+ version="${lowerI/llvm/}"
+ parts=(${version//./ })
+ __LLVM_MajorVersion="${parts[0]}"
+ __LLVM_MinorVersion="${parts[1]}"
+
+ # for versions > 6.0, llvm has dropped the minor version
+ if [[ -z "$__LLVM_MinorVersion" && "$__LLVM_MajorVersion" -le 6 ]]; then
+ __LLVM_MinorVersion=0;
+ fi
+ ;;
xenial) # Ubuntu 16.04
- if [ "$__CodeName" != "jessie" ]; then
+ if [[ "$__CodeName" != "jessie" ]]; then
__CodeName=xenial
fi
;;
zesty) # Ubuntu 17.04
- if [ "$__CodeName" != "jessie" ]; then
+ if [[ "$__CodeName" != "jessie" ]]; then
__CodeName=zesty
fi
;;
bionic) # Ubuntu 18.04
- if [ "$__CodeName" != "jessie" ]; then
+ if [[ "$__CodeName" != "jessie" ]]; then
__CodeName=bionic
fi
;;
+ focal) # Ubuntu 20.04
+ if [[ "$__CodeName" != "jessie" ]]; then
+ __CodeName=focal
+ fi
+ ;;
+ jammy) # Ubuntu 22.04
+ if [[ "$__CodeName" != "jessie" ]]; then
+ __CodeName=jammy
+ fi
+ ;;
jessie) # Debian 8
__CodeName=jessie
__UbuntuRepo="http://ftp.debian.org/debian/"
@@ -194,11 +253,6 @@ while :; do
__LLDB_Package="liblldb-6.0-dev"
;;
tizen)
- if [ "$__BuildArch" != "arm" ] && [ "$__BuildArch" != "armel" ] && [ "$__BuildArch" != "arm64" ] && [ "$__BuildArch" != "x86" ] ; then
- echo "Tizen is available only for arm, armel, arm64 and x86."
- usage;
- exit 1;
- fi
__CodeName=
__UbuntuRepo=
__Tizen=tizen
@@ -217,18 +271,20 @@ while :; do
;;
freebsd12)
__CodeName=freebsd
- __BuildArch=x64
__SkipUnmount=1
;;
freebsd13)
__CodeName=freebsd
__FreeBSDBase="13.0-RELEASE"
__FreeBSDABI="13"
- __BuildArch=x64
__SkipUnmount=1
;;
illumos)
__CodeName=illumos
+ __SkipUnmount=1
+ ;;
+ haiku)
+ __CodeName=haiku
__BuildArch=x64
__SkipUnmount=1
;;
@@ -237,11 +293,15 @@ while :; do
;;
--rootfsdir|-rootfsdir)
shift
- __RootfsDir=$1
+ __RootfsDir="$1"
;;
--use-mirror)
__UseMirror=1
;;
+ --use-jobs)
+ shift
+ MAXJOBS=$1
+ ;;
*)
__UnprocessedBuildArgs="$__UnprocessedBuildArgs $1"
;;
@@ -250,77 +310,78 @@ while :; do
shift
done
-if [ -e "$__Keyring" ]; then
- __Keyring="--keyring=$__Keyring"
-else
- __Keyring=""
-fi
-
-if [ "$__BuildArch" == "armel" ]; then
+if [[ "$__BuildArch" == "armel" ]]; then
__LLDB_Package="lldb-3.5-dev"
+elif [[ "$__BuildArch" == "arm" && "$__AlpineVersion" == "3.13" ]]; then
+ __AlpinePackages="${__AlpinePackages//numactl-dev/}"
fi
+
__UbuntuPackages+=" ${__LLDB_Package:-}"
-if [ -z "$__RootfsDir" ] && [ ! -z "$ROOTFS_DIR" ]; then
- __RootfsDir=$ROOTFS_DIR
+if [[ -n "$__LLVM_MajorVersion" ]]; then
+ __UbuntuPackages+=" libclang-common-${__LLVM_MajorVersion}${__LLVM_MinorVersion:+.$__LLVM_MinorVersion}-dev"
fi
-if [ -z "$__RootfsDir" ]; then
+if [[ -z "$__RootfsDir" && -n "$ROOTFS_DIR" ]]; then
+ __RootfsDir="$ROOTFS_DIR"
+fi
+
+if [[ -z "$__RootfsDir" ]]; then
__RootfsDir="$__CrossDir/../../../.tools/rootfs/$__BuildArch"
fi
-if [ -d "$__RootfsDir" ]; then
- if [ $__SkipUnmount == 0 ]; then
- umount $__RootfsDir/* || true
+if [[ -d "$__RootfsDir" ]]; then
+ if [[ "$__SkipUnmount" == "0" ]]; then
+ umount "$__RootfsDir"/* || true
fi
- rm -rf $__RootfsDir
+ rm -rf "$__RootfsDir"
fi
-mkdir -p $__RootfsDir
+mkdir -p "$__RootfsDir"
__RootfsDir="$( cd "$__RootfsDir" && pwd )"
if [[ "$__CodeName" == "alpine" ]]; then
__ApkToolsVersion=2.9.1
- __ApkToolsDir=$(mktemp -d)
- wget https://github.com/alpinelinux/apk-tools/releases/download/v$__ApkToolsVersion/apk-tools-$__ApkToolsVersion-x86_64-linux.tar.gz -P $__ApkToolsDir
- tar -xf $__ApkToolsDir/apk-tools-$__ApkToolsVersion-x86_64-linux.tar.gz -C $__ApkToolsDir
- mkdir -p $__RootfsDir/usr/bin
- cp -v /usr/bin/qemu-$__QEMUArch-static $__RootfsDir/usr/bin
-
- $__ApkToolsDir/apk-tools-$__ApkToolsVersion/apk \
- -X http://dl-cdn.alpinelinux.org/alpine/v$__AlpineVersion/main \
- -X http://dl-cdn.alpinelinux.org/alpine/v$__AlpineVersion/community \
- -U --allow-untrusted --root $__RootfsDir --arch $__AlpineArch --initdb \
+ __ApkToolsDir="$(mktemp -d)"
+ wget "https://github.com/alpinelinux/apk-tools/releases/download/v$__ApkToolsVersion/apk-tools-$__ApkToolsVersion-x86_64-linux.tar.gz" -P "$__ApkToolsDir"
+ tar -xf "$__ApkToolsDir/apk-tools-$__ApkToolsVersion-x86_64-linux.tar.gz" -C "$__ApkToolsDir"
+ mkdir -p "$__RootfsDir"/usr/bin
+ cp -v "/usr/bin/qemu-$__QEMUArch-static" "$__RootfsDir/usr/bin"
+
+ "$__ApkToolsDir/apk-tools-$__ApkToolsVersion/apk" \
+ -X "http://dl-cdn.alpinelinux.org/alpine/v$__AlpineVersion/main" \
+ -X "http://dl-cdn.alpinelinux.org/alpine/v$__AlpineVersion/community" \
+ -U --allow-untrusted --root "$__RootfsDir" --arch "$__AlpineArch" --initdb \
add $__AlpinePackages
- rm -r $__ApkToolsDir
+ rm -r "$__ApkToolsDir"
elif [[ "$__CodeName" == "freebsd" ]]; then
- mkdir -p $__RootfsDir/usr/local/etc
- JOBS="$(getconf _NPROCESSORS_ONLN)"
- wget -O - https://download.freebsd.org/ftp/releases/amd64/${__FreeBSDBase}/base.txz | tar -C $__RootfsDir -Jxf - ./lib ./usr/lib ./usr/libdata ./usr/include ./usr/share/keys ./etc ./bin/freebsd-version
- echo "ABI = \"FreeBSD:${__FreeBSDABI}:amd64\"; FINGERPRINTS = \"${__RootfsDir}/usr/share/keys\"; REPOS_DIR = [\"${__RootfsDir}/etc/pkg\"]; REPO_AUTOUPDATE = NO; RUN_SCRIPTS = NO;" > ${__RootfsDir}/usr/local/etc/pkg.conf
- echo "FreeBSD: { url: "pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \"${__RootfsDir}/usr/share/keys/pkg\", enabled: yes }" > ${__RootfsDir}/etc/pkg/FreeBSD.conf
- mkdir -p $__RootfsDir/tmp
+ mkdir -p "$__RootfsDir"/usr/local/etc
+ JOBS=${MAXJOBS:="$(getconf _NPROCESSORS_ONLN)"}
+ wget -O - "https://download.freebsd.org/ftp/releases/${__FreeBSDArch}/${__FreeBSDMachineArch}/${__FreeBSDBase}/base.txz" | tar -C "$__RootfsDir" -Jxf - ./lib ./usr/lib ./usr/libdata ./usr/include ./usr/share/keys ./etc ./bin/freebsd-version
+ echo "ABI = \"FreeBSD:${__FreeBSDABI}:${__FreeBSDMachineArch}\"; FINGERPRINTS = \"${__RootfsDir}/usr/share/keys\"; REPOS_DIR = [\"${__RootfsDir}/etc/pkg\"]; REPO_AUTOUPDATE = NO; RUN_SCRIPTS = NO;" > "${__RootfsDir}"/usr/local/etc/pkg.conf
+ echo "FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly\", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \"${__RootfsDir}/usr/share/keys/pkg\", enabled: yes }" > "${__RootfsDir}"/etc/pkg/FreeBSD.conf
+ mkdir -p "$__RootfsDir"/tmp
# get and build package manager
- wget -O - https://github.com/freebsd/pkg/archive/${__FreeBSDPkg}.tar.gz | tar -C $__RootfsDir/tmp -zxf -
- cd $__RootfsDir/tmp/pkg-${__FreeBSDPkg}
+ wget -O - "https://github.com/freebsd/pkg/archive/${__FreeBSDPkg}.tar.gz" | tar -C "$__RootfsDir"/tmp -zxf -
+ cd "$__RootfsDir/tmp/pkg-${__FreeBSDPkg}"
# needed for install to succeed
- mkdir -p $__RootfsDir/host/etc
- ./autogen.sh && ./configure --prefix=$__RootfsDir/host && make -j "$JOBS" && make install
- rm -rf $__RootfsDir/tmp/pkg-${__FreeBSDPkg}
+ mkdir -p "$__RootfsDir"/host/etc
+ ./autogen.sh && ./configure --prefix="$__RootfsDir"/host && make -j "$JOBS" && make install
+ rm -rf "$__RootfsDir/tmp/pkg-${__FreeBSDPkg}"
# install packages we need.
- INSTALL_AS_USER=$(whoami) $__RootfsDir/host/sbin/pkg -r $__RootfsDir -C $__RootfsDir/usr/local/etc/pkg.conf update
- INSTALL_AS_USER=$(whoami) $__RootfsDir/host/sbin/pkg -r $__RootfsDir -C $__RootfsDir/usr/local/etc/pkg.conf install --yes $__FreeBSDPackages
+ INSTALL_AS_USER=$(whoami) "$__RootfsDir"/host/sbin/pkg -r "$__RootfsDir" -C "$__RootfsDir"/usr/local/etc/pkg.conf update
+ INSTALL_AS_USER=$(whoami) "$__RootfsDir"/host/sbin/pkg -r "$__RootfsDir" -C "$__RootfsDir"/usr/local/etc/pkg.conf install --yes $__FreeBSDPackages
elif [[ "$__CodeName" == "illumos" ]]; then
mkdir "$__RootfsDir/tmp"
pushd "$__RootfsDir/tmp"
- JOBS="$(getconf _NPROCESSORS_ONLN)"
+ JOBS=${MAXJOBS:="$(getconf _NPROCESSORS_ONLN)"}
echo "Downloading sysroot."
wget -O - https://github.com/illumos/sysroot/releases/download/20181213-de6af22ae73b-v1/illumos-sysroot-i386-20181213-de6af22ae73b-v1.tar.gz | tar -C "$__RootfsDir" -xzf -
echo "Building binutils. Please wait.."
wget -O - https://ftp.gnu.org/gnu/binutils/binutils-2.33.1.tar.bz2 | tar -xjf -
mkdir build-binutils && cd build-binutils
- ../binutils-2.33.1/configure --prefix="$__RootfsDir" --target="x86_64-sun-solaris2.10" --program-prefix="x86_64-illumos-" --with-sysroot="$__RootfsDir"
+ ../binutils-2.33.1/configure --prefix="$__RootfsDir" --target="${__illumosArch}-sun-solaris2.10" --program-prefix="${__illumosArch}-illumos-" --with-sysroot="$__RootfsDir"
make -j "$JOBS" && make install && cd ..
echo "Building gcc. Please wait.."
wget -O - https://ftp.gnu.org/gnu/gcc/gcc-8.4.0/gcc-8.4.0.tar.xz | tar -xJf -
@@ -330,22 +391,27 @@ elif [[ "$__CodeName" == "illumos" ]]; then
CFLAGS_FOR_TARGET="-fPIC"
export CFLAGS CXXFLAGS CXXFLAGS_FOR_TARGET CFLAGS_FOR_TARGET
mkdir build-gcc && cd build-gcc
- ../gcc-8.4.0/configure --prefix="$__RootfsDir" --target="x86_64-sun-solaris2.10" --program-prefix="x86_64-illumos-" --with-sysroot="$__RootfsDir" --with-gnu-as \
+ ../gcc-8.4.0/configure --prefix="$__RootfsDir" --target="${__illumosArch}-sun-solaris2.10" --program-prefix="${__illumosArch}-illumos-" --with-sysroot="$__RootfsDir" --with-gnu-as \
--with-gnu-ld --disable-nls --disable-libgomp --disable-libquadmath --disable-libssp --disable-libvtv --disable-libcilkrts --disable-libada --disable-libsanitizer \
--disable-libquadmath-support --disable-shared --enable-tls
make -j "$JOBS" && make install && cd ..
- BaseUrl=https://pkgsrc.joyent.com
+ BaseUrl=https://pkgsrc.smartos.org
if [[ "$__UseMirror" == 1 ]]; then
- BaseUrl=http://pkgsrc.smartos.skylime.net
+ BaseUrl=https://pkgsrc.smartos.skylime.net
fi
- BaseUrl="$BaseUrl"/packages/SmartOS/2020Q1/x86_64/All
+ BaseUrl="$BaseUrl/packages/SmartOS/trunk/${__illumosArch}/All"
+ echo "Downloading manifest"
+ wget "$BaseUrl"
echo "Downloading dependencies."
read -ra array <<<"$__IllumosPackages"
for package in "${array[@]}"; do
- echo "Installing $package..."
+ echo "Installing '$package'"
+ # find last occurrence of package in listing and extract its name
+ package="$(sed -En '/.*href="('"$package"'-[0-9].*).tgz".*/h;$!d;g;s//\1/p' All)"
+ echo "Resolved name '$package'"
wget "$BaseUrl"/"$package".tgz
ar -x "$package".tgz
- tar --skip-old-files -xzf "$package".tmp.tgz -C "$__RootfsDir" 2>/dev/null
+ tar --skip-old-files -xzf "$package".tmp.tg* -C "$__RootfsDir" 2>/dev/null
done
echo "Cleaning up temporary files."
popd
@@ -356,26 +422,90 @@ elif [[ "$__CodeName" == "illumos" ]]; then
wget -P "$__RootfsDir"/usr/include/net https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/io/bpf/net/dlt.h
wget -P "$__RootfsDir"/usr/include/netpacket https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/inet/sockmods/netpacket/packet.h
wget -P "$__RootfsDir"/usr/include/sys https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/sys/sdt.h
-elif [[ -n $__CodeName ]]; then
- qemu-debootstrap $__Keyring --arch $__UbuntuArch $__CodeName $__RootfsDir $__UbuntuRepo
- cp $__CrossDir/$__BuildArch/sources.list.$__CodeName $__RootfsDir/etc/apt/sources.list
- chroot $__RootfsDir apt-get update
- chroot $__RootfsDir apt-get -f -y install
- chroot $__RootfsDir apt-get -y install $__UbuntuPackages
- chroot $__RootfsDir symlinks -cr /usr
- chroot $__RootfsDir apt-get clean
-
- if [ $__SkipUnmount == 0 ]; then
- umount $__RootfsDir/* || true
+elif [[ "$__CodeName" == "haiku" ]]; then
+ JOBS=${MAXJOBS:="$(getconf _NPROCESSORS_ONLN)"}
+
+ echo "Building Haiku sysroot for x86_64"
+ mkdir -p "$__RootfsDir/tmp"
+ cd "$__RootfsDir/tmp"
+ git clone -b hrev56235 https://review.haiku-os.org/haiku
+ git clone -b btrev43195 https://review.haiku-os.org/buildtools
+ cd "$__RootfsDir/tmp/buildtools" && git checkout 7487388f5110021d400b9f3b88e1a7f310dc066d
+
+ # Fetch some unmerged patches
+ cd "$__RootfsDir/tmp/haiku"
+ ## Add development build profile (slimmer than nightly)
+ git fetch origin refs/changes/64/4164/1 && git -c commit.gpgsign=false cherry-pick FETCH_HEAD
+
+ # Build jam
+ cd "$__RootfsDir/tmp/buildtools/jam"
+ make
+
+ # Configure cross tools
+ echo "Building cross-compiler"
+ mkdir -p "$__RootfsDir/generated"
+ cd "$__RootfsDir/generated"
+ "$__RootfsDir/tmp/haiku/configure" -j"$JOBS" --sysroot "$__RootfsDir" --cross-tools-source "$__RootfsDir/tmp/buildtools" --build-cross-tools x86_64
+
+ # Build Haiku packages
+ echo "Building Haiku"
+ echo 'HAIKU_BUILD_PROFILE = "development-raw" ;' > UserProfileConfig
+ "$__RootfsDir/tmp/buildtools/jam/jam0" -j"$JOBS" -q 'package' 'Haiku'
+
+ BaseUrl="https://depot.haiku-os.org/__api/v2/pkg/get-pkg"
+
+ # Download additional packages
+ echo "Downloading additional required packages"
+ read -ra array <<<"$__HaikuPackages"
+ for package in "${array[@]}"; do
+ echo "Downloading $package..."
+ # API documented here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L60
+ # The schema here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L598
+ hpkgDownloadUrl="$(wget -qO- --post-data='{"name":"'"$package"'","repositorySourceCode":"haikuports_x86_64","versionType":"LATEST","naturalLanguageCode":"en"}' \
+ --header='Content-Type:application/json' "$BaseUrl" | jq -r '.result.versions[].hpkgDownloadURL')"
+ wget -P "$__RootfsDir/generated/download" "$hpkgDownloadUrl"
+ done
+
+ # Setup the sysroot
+ echo "Setting up sysroot and extracting needed packages"
+ mkdir -p "$__RootfsDir/boot/system"
+ for file in "$__RootfsDir/generated/objects/haiku/x86_64/packaging/packages/"*.hpkg; do
+ "$__RootfsDir/generated/objects/linux/x86_64/release/tools/package/package" extract -C "$__RootfsDir/boot/system" "$file"
+ done
+ for file in "$__RootfsDir/generated/download/"*.hpkg; do
+ "$__RootfsDir/generated/objects/linux/x86_64/release/tools/package/package" extract -C "$__RootfsDir/boot/system" "$file"
+ done
+
+ # Cleaning up temporary files
+ echo "Cleaning up temporary files"
+ rm -rf "$__RootfsDir/tmp"
+ for name in "$__RootfsDir/generated/"*; do
+ if [[ "$name" =~ "cross-tools-" ]]; then
+ : # Keep the cross-compiler
+ else
+ rm -rf "$name"
+ fi
+ done
+elif [[ -n "$__CodeName" ]]; then
+ qemu-debootstrap $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo"
+ cp "$__CrossDir/$__BuildArch/sources.list.$__CodeName" "$__RootfsDir/etc/apt/sources.list"
+ chroot "$__RootfsDir" apt-get update
+ chroot "$__RootfsDir" apt-get -f -y install
+ chroot "$__RootfsDir" apt-get -y install $__UbuntuPackages
+ chroot "$__RootfsDir" symlinks -cr /usr
+ chroot "$__RootfsDir" apt-get clean
+
+ if [[ "$__SkipUnmount" == "0" ]]; then
+ umount "$__RootfsDir"/* || true
fi
if [[ "$__BuildArch" == "armel" && "$__CodeName" == "jessie" ]]; then
- pushd $__RootfsDir
- patch -p1 < $__CrossDir/$__BuildArch/armel.jessie.patch
+ pushd "$__RootfsDir"
+ patch -p1 < "$__CrossDir/$__BuildArch/armel.jessie.patch"
popd
fi
elif [[ "$__Tizen" == "tizen" ]]; then
- ROOTFS_DIR=$__RootfsDir $__CrossDir/$__BuildArch/tizen-build-rootfs.sh
+ ROOTFS_DIR="$__RootfsDir" "$__CrossDir/tizen-build-rootfs.sh" "$__BuildArch"
else
echo "Unsupported target platform."
usage;
diff --git a/eng/common/cross/riscv64/sources.list.sid b/eng/common/cross/riscv64/sources.list.sid
new file mode 100644
index 0000000000000..65f730d224caa
--- /dev/null
+++ b/eng/common/cross/riscv64/sources.list.sid
@@ -0,0 +1 @@
+deb http://deb.debian.org/debian-ports sid main
diff --git a/eng/common/cross/arm64/tizen-build-rootfs.sh b/eng/common/cross/tizen-build-rootfs.sh
similarity index 55%
rename from eng/common/cross/arm64/tizen-build-rootfs.sh
rename to eng/common/cross/tizen-build-rootfs.sh
index 13bfddb5e2a70..ac84173d44fc3 100644
--- a/eng/common/cross/arm64/tizen-build-rootfs.sh
+++ b/eng/common/cross/tizen-build-rootfs.sh
@@ -1,8 +1,34 @@
#!/usr/bin/env bash
set -e
+ARCH=$1
+LINK_ARCH=$ARCH
+
+case "$ARCH" in
+ arm)
+ TIZEN_ARCH="armv7hl"
+ ;;
+ armel)
+ TIZEN_ARCH="armv7l"
+ LINK_ARCH="arm"
+ ;;
+ arm64)
+ TIZEN_ARCH="aarch64"
+ ;;
+ x86)
+ TIZEN_ARCH="i686"
+ ;;
+ x64)
+ TIZEN_ARCH="x86_64"
+ LINK_ARCH="x86"
+ ;;
+ *)
+ echo "Unsupported architecture for tizen: $ARCH"
+ exit 1
+esac
+
__CrossDir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
-__TIZEN_CROSSDIR="$__CrossDir/tizen"
+__TIZEN_CROSSDIR="$__CrossDir/${ARCH}/tizen"
if [[ -z "$ROOTFS_DIR" ]]; then
echo "ROOTFS_DIR is not defined."
@@ -14,7 +40,7 @@ mkdir -p $TIZEN_TMP_DIR
# Download files
echo ">>Start downloading files"
-VERBOSE=1 $__CrossDir/tizen-fetch.sh $TIZEN_TMP_DIR
+VERBOSE=1 $__CrossDir/tizen-fetch.sh $TIZEN_TMP_DIR $TIZEN_ARCH
echo "<>Start constructing Tizen rootfs"
@@ -30,6 +56,6 @@ rm -rf $TIZEN_TMP_DIR
# Configure Tizen rootfs
echo ">>Start configuring Tizen rootfs"
-ln -sfn asm-arm64 ./usr/include/asm
+ln -sfn asm-${LINK_ARCH} ./usr/include/asm
patch -p1 < $__TIZEN_CROSSDIR/tizen.patch
echo "</dev/null; then
+ VERBOSE=0
+fi
+
+Log()
+{
+ if [ $VERBOSE -ge $1 ]; then
+ echo ${@:2}
+ fi
+}
+
+Inform()
+{
+ Log 1 -e "\x1B[0;34m$@\x1B[m"
+}
+
+Debug()
+{
+ Log 2 -e "\x1B[0;32m$@\x1B[m"
+}
+
+Error()
+{
+ >&2 Log 0 -e "\x1B[0;31m$@\x1B[m"
+}
+
+Fetch()
+{
+ URL=$1
+ FILE=$2
+ PROGRESS=$3
+ if [ $VERBOSE -ge 1 ] && [ $PROGRESS ]; then
+ CURL_OPT="--progress-bar"
+ else
+ CURL_OPT="--silent"
+ fi
+ curl $CURL_OPT $URL > $FILE
+}
+
+hash curl 2> /dev/null || { Error "Require 'curl' Aborting."; exit 1; }
+hash xmllint 2> /dev/null || { Error "Require 'xmllint' Aborting."; exit 1; }
+hash sha256sum 2> /dev/null || { Error "Require 'sha256sum' Aborting."; exit 1; }
+
+TMPDIR=$1
+if [ ! -d $TMPDIR ]; then
+ TMPDIR=./tizen_tmp
+ Debug "Create temporary directory : $TMPDIR"
+ mkdir -p $TMPDIR
+fi
+
+TIZEN_ARCH=$2
+
+TIZEN_URL=http://download.tizen.org/snapshots/TIZEN/Tizen
+BUILD_XML=build.xml
+REPOMD_XML=repomd.xml
+PRIMARY_XML=primary.xml
+TARGET_URL="http://__not_initialized"
+
+Xpath_get()
+{
+ XPATH_RESULT=''
+ XPATH=$1
+ XML_FILE=$2
+ RESULT=$(xmllint --xpath $XPATH $XML_FILE)
+ if [[ -z ${RESULT// } ]]; then
+ Error "Can not find target from $XML_FILE"
+ Debug "Xpath = $XPATH"
+ exit 1
+ fi
+ XPATH_RESULT=$RESULT
+}
+
+fetch_tizen_pkgs_init()
+{
+ TARGET=$1
+ PROFILE=$2
+ Debug "Initialize TARGET=$TARGET, PROFILE=$PROFILE"
+
+ TMP_PKG_DIR=$TMPDIR/tizen_${PROFILE}_pkgs
+ if [ -d $TMP_PKG_DIR ]; then rm -rf $TMP_PKG_DIR; fi
+ mkdir -p $TMP_PKG_DIR
+
+ PKG_URL=$TIZEN_URL/$PROFILE/latest
+
+ BUILD_XML_URL=$PKG_URL/$BUILD_XML
+ TMP_BUILD=$TMP_PKG_DIR/$BUILD_XML
+ TMP_REPOMD=$TMP_PKG_DIR/$REPOMD_XML
+ TMP_PRIMARY=$TMP_PKG_DIR/$PRIMARY_XML
+ TMP_PRIMARYGZ=${TMP_PRIMARY}.gz
+
+ Fetch $BUILD_XML_URL $TMP_BUILD
+
+ Debug "fetch $BUILD_XML_URL to $TMP_BUILD"
+
+ TARGET_XPATH="//build/buildtargets/buildtarget[@name=\"$TARGET\"]/repo[@type=\"binary\"]/text()"
+ Xpath_get $TARGET_XPATH $TMP_BUILD
+ TARGET_PATH=$XPATH_RESULT
+ TARGET_URL=$PKG_URL/$TARGET_PATH
+
+ REPOMD_URL=$TARGET_URL/repodata/repomd.xml
+ PRIMARY_XPATH='string(//*[local-name()="data"][@type="primary"]/*[local-name()="location"]/@href)'
+
+ Fetch $REPOMD_URL $TMP_REPOMD
+
+ Debug "fetch $REPOMD_URL to $TMP_REPOMD"
+
+ Xpath_get $PRIMARY_XPATH $TMP_REPOMD
+ PRIMARY_XML_PATH=$XPATH_RESULT
+ PRIMARY_URL=$TARGET_URL/$PRIMARY_XML_PATH
+
+ Fetch $PRIMARY_URL $TMP_PRIMARYGZ
+
+ Debug "fetch $PRIMARY_URL to $TMP_PRIMARYGZ"
+
+ gunzip $TMP_PRIMARYGZ
+
+ Debug "unzip $TMP_PRIMARYGZ to $TMP_PRIMARY"
+}
+
+fetch_tizen_pkgs()
+{
+ ARCH=$1
+ PACKAGE_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]][*[local-name()="arch"][text()="_ARCH_"]]/*[local-name()="location"]/@href)'
+
+ PACKAGE_CHECKSUM_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]][*[local-name()="arch"][text()="_ARCH_"]]/*[local-name()="checksum"]/text())'
+
+ for pkg in ${@:2}
+ do
+ Inform "Fetching... $pkg"
+ XPATH=${PACKAGE_XPATH_TPL/_PKG_/$pkg}
+ XPATH=${XPATH/_ARCH_/$ARCH}
+ Xpath_get $XPATH $TMP_PRIMARY
+ PKG_PATH=$XPATH_RESULT
+
+ XPATH=${PACKAGE_CHECKSUM_XPATH_TPL/_PKG_/$pkg}
+ XPATH=${XPATH/_ARCH_/$ARCH}
+ Xpath_get $XPATH $TMP_PRIMARY
+ CHECKSUM=$XPATH_RESULT
+
+ PKG_URL=$TARGET_URL/$PKG_PATH
+ PKG_FILE=$(basename $PKG_PATH)
+ PKG_PATH=$TMPDIR/$PKG_FILE
+
+ Debug "Download $PKG_URL to $PKG_PATH"
+ Fetch $PKG_URL $PKG_PATH true
+
+ echo "$CHECKSUM $PKG_PATH" | sha256sum -c - > /dev/null
+ if [ $? -ne 0 ]; then
+ Error "Fail to fetch $PKG_URL to $PKG_PATH"
+ Debug "Checksum = $CHECKSUM"
+ exit 1
+ fi
+ done
+}
+
+Inform "Initialize ${TIZEN_ARCH} base"
+fetch_tizen_pkgs_init standard Tizen-Base
+Inform "fetch common packages"
+fetch_tizen_pkgs ${TIZEN_ARCH} gcc gcc-devel-static glibc glibc-devel libicu libicu-devel libatomic linux-glibc-devel keyutils keyutils-devel libkeyutils
+Inform "fetch coreclr packages"
+fetch_tizen_pkgs ${TIZEN_ARCH} lldb lldb-devel libgcc libstdc++ libstdc++-devel libunwind libunwind-devel lttng-ust-devel lttng-ust userspace-rcu-devel userspace-rcu
+Inform "fetch corefx packages"
+fetch_tizen_pkgs ${TIZEN_ARCH} libcom_err libcom_err-devel zlib zlib-devel libopenssl11 libopenssl1.1-devel krb5 krb5-devel
+
+Inform "Initialize standard unified"
+fetch_tizen_pkgs_init standard Tizen-Unified
+Inform "fetch corefx packages"
+fetch_tizen_pkgs ${TIZEN_ARCH} gssdp gssdp-devel tizen-release
+
diff --git a/eng/common/cross/toolchain.cmake b/eng/common/cross/toolchain.cmake
index eaeeab38fa1f3..ccfb9951a52cb 100644
--- a/eng/common/cross/toolchain.cmake
+++ b/eng/common/cross/toolchain.cmake
@@ -1,5 +1,12 @@
set(CROSS_ROOTFS $ENV{ROOTFS_DIR})
+# reset platform variables (e.g. cmake 3.25 sets LINUX=1)
+unset(LINUX)
+unset(FREEBSD)
+unset(ILLUMOS)
+unset(ANDROID)
+unset(TIZEN)
+
set(TARGET_ARCH_NAME $ENV{TARGET_BUILD_ARCH})
if(EXISTS ${CROSS_ROOTFS}/bin/freebsd-version)
set(CMAKE_SYSTEM_NAME FreeBSD)
@@ -7,6 +14,8 @@ if(EXISTS ${CROSS_ROOTFS}/bin/freebsd-version)
elseif(EXISTS ${CROSS_ROOTFS}/usr/platform/i86pc)
set(CMAKE_SYSTEM_NAME SunOS)
set(ILLUMOS 1)
+elseif(EXISTS ${CROSS_ROOTFS}/boot/system/develop/headers/config/HaikuConfig.h)
+ set(CMAKE_SYSTEM_NAME Haiku)
else()
set(CMAKE_SYSTEM_NAME Linux)
set(LINUX 1)
@@ -19,13 +28,7 @@ elseif(EXISTS ${CROSS_ROOTFS}/android_platform)
set(ANDROID 1)
endif()
-if(TARGET_ARCH_NAME STREQUAL "armel")
- set(CMAKE_SYSTEM_PROCESSOR armv7l)
- set(TOOLCHAIN "arm-linux-gnueabi")
- if(TIZEN)
- set(TIZEN_TOOLCHAIN "armv7l-tizen-linux-gnueabi/9.2.0")
- endif()
-elseif(TARGET_ARCH_NAME STREQUAL "arm")
+if(TARGET_ARCH_NAME STREQUAL "arm")
set(CMAKE_SYSTEM_PROCESSOR armv7l)
if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv7-alpine-linux-musleabihf)
set(TOOLCHAIN "armv7-alpine-linux-musleabihf")
@@ -37,43 +40,62 @@ elseif(TARGET_ARCH_NAME STREQUAL "arm")
if(TIZEN)
set(TIZEN_TOOLCHAIN "armv7hl-tizen-linux-gnueabihf/9.2.0")
endif()
-elseif(TARGET_ARCH_NAME STREQUAL "armv6")
- set(CMAKE_SYSTEM_PROCESSOR armv6l)
- if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv6-alpine-linux-musleabihf)
- set(TOOLCHAIN "armv6-alpine-linux-musleabihf")
- else()
- set(TOOLCHAIN "arm-linux-gnueabihf")
- endif()
elseif(TARGET_ARCH_NAME STREQUAL "arm64")
set(CMAKE_SYSTEM_PROCESSOR aarch64)
if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/aarch64-alpine-linux-musl)
set(TOOLCHAIN "aarch64-alpine-linux-musl")
- else()
+ elseif(LINUX)
set(TOOLCHAIN "aarch64-linux-gnu")
+ if(TIZEN)
+ set(TIZEN_TOOLCHAIN "aarch64-tizen-linux-gnu/9.2.0")
+ endif()
+ elseif(FREEBSD)
+ set(triple "aarch64-unknown-freebsd12")
endif()
+elseif(TARGET_ARCH_NAME STREQUAL "armel")
+ set(CMAKE_SYSTEM_PROCESSOR armv7l)
+ set(TOOLCHAIN "arm-linux-gnueabi")
if(TIZEN)
- set(TIZEN_TOOLCHAIN "aarch64-tizen-linux-gnu/9.2.0")
+ set(TIZEN_TOOLCHAIN "armv7l-tizen-linux-gnueabi/9.2.0")
+ endif()
+elseif(TARGET_ARCH_NAME STREQUAL "armv6")
+ set(CMAKE_SYSTEM_PROCESSOR armv6l)
+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv6-alpine-linux-musleabihf)
+ set(TOOLCHAIN "armv6-alpine-linux-musleabihf")
+ else()
+ set(TOOLCHAIN "arm-linux-gnueabihf")
endif()
elseif(TARGET_ARCH_NAME STREQUAL "ppc64le")
set(CMAKE_SYSTEM_PROCESSOR ppc64le)
set(TOOLCHAIN "powerpc64le-linux-gnu")
+elseif(TARGET_ARCH_NAME STREQUAL "riscv64")
+ set(CMAKE_SYSTEM_PROCESSOR riscv64)
+ set(TOOLCHAIN "riscv64-linux-gnu")
elseif(TARGET_ARCH_NAME STREQUAL "s390x")
set(CMAKE_SYSTEM_PROCESSOR s390x)
set(TOOLCHAIN "s390x-linux-gnu")
+elseif(TARGET_ARCH_NAME STREQUAL "x64")
+ set(CMAKE_SYSTEM_PROCESSOR x86_64)
+ if(LINUX)
+ set(TOOLCHAIN "x86_64-linux-gnu")
+ if(TIZEN)
+ set(TIZEN_TOOLCHAIN "x86_64-tizen-linux-gnu/9.2.0")
+ endif()
+ elseif(FREEBSD)
+ set(triple "x86_64-unknown-freebsd12")
+ elseif(ILLUMOS)
+ set(TOOLCHAIN "x86_64-illumos")
+ elseif(HAIKU)
+ set(TOOLCHAIN "x64_64-unknown-haiku")
+ endif()
elseif(TARGET_ARCH_NAME STREQUAL "x86")
set(CMAKE_SYSTEM_PROCESSOR i686)
set(TOOLCHAIN "i686-linux-gnu")
if(TIZEN)
set(TIZEN_TOOLCHAIN "i586-tizen-linux-gnu/9.2.0")
endif()
-elseif (FREEBSD)
- set(CMAKE_SYSTEM_PROCESSOR "x86_64")
- set(triple "x86_64-unknown-freebsd12")
-elseif (ILLUMOS)
- set(CMAKE_SYSTEM_PROCESSOR "x86_64")
- set(TOOLCHAIN "x86_64-illumos")
else()
- message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only armel, arm, armv6, arm64, ppc64le, s390x and x86 are supported!")
+ message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm, arm64, armel, armv6, ppc64le, riscv64, s390x, x64 and x86 are supported!")
endif()
if(DEFINED ENV{TOOLCHAIN})
@@ -98,6 +120,10 @@ if(TIZEN)
include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/)
include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/i586-tizen-linux-gnu)
endif()
+ if(TARGET_ARCH_NAME STREQUAL "x64")
+ include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/)
+ include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/x86_64-tizen-linux-gnu)
+ endif()
endif()
if(ANDROID)
@@ -159,6 +185,41 @@ elseif(ILLUMOS)
set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp")
set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp")
+elseif(HAIKU)
+ set(CMAKE_SYSROOT "${CROSS_ROOTFS}")
+
+ set(TOOLSET_PREFIX ${TOOLCHAIN}-)
+ function(locate_toolchain_exec exec var)
+ string(TOUPPER ${exec} EXEC_UPPERCASE)
+ if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "")
+ set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE)
+ return()
+ endif()
+
+ set(SEARCH_PATH "${CROSS_ROOTFS}/generated/cross-tools-x86_64/bin")
+
+ find_program(EXEC_LOCATION_${exec}
+ PATHS ${SEARCH_PATH}
+ NAMES
+ "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}"
+ "${TOOLSET_PREFIX}${exec}")
+
+ if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND")
+ message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.")
+ endif()
+ set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE)
+ endfunction()
+
+ set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}")
+
+ locate_toolchain_exec(gcc CMAKE_C_COMPILER)
+ locate_toolchain_exec(g++ CMAKE_CXX_COMPILER)
+
+ set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp")
+ set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp")
+
+ # let CMake set up the correct search paths
+ include(Platform/Haiku)
else()
set(CMAKE_SYSROOT "${CROSS_ROOTFS}")
@@ -191,7 +252,7 @@ if(TARGET_ARCH_NAME MATCHES "^(arm|armel)$")
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib")
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
endif()
-elseif(TARGET_ARCH_NAME STREQUAL "arm64")
+elseif(TARGET_ARCH_NAME MATCHES "^(arm64|x64)$")
if(TIZEN)
add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}")
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib64")
@@ -218,7 +279,7 @@ endif()
# Specify compile options
-if((TARGET_ARCH_NAME MATCHES "^(arm|armv6|armel|arm64|ppc64le|s390x)$" AND NOT ANDROID) OR ILLUMOS)
+if((TARGET_ARCH_NAME MATCHES "^(arm|arm64|armel|armv6|ppc64le|riscv64|s390x)$" AND NOT ANDROID AND NOT FREEBSD) OR ILLUMOS OR HAIKU)
set(CMAKE_C_COMPILER_TARGET ${TOOLCHAIN})
set(CMAKE_CXX_COMPILER_TARGET ${TOOLCHAIN})
set(CMAKE_ASM_COMPILER_TARGET ${TOOLCHAIN})
diff --git a/eng/common/cross/x64/tizen/tizen.patch b/eng/common/cross/x64/tizen/tizen.patch
new file mode 100644
index 0000000000000..56fbc881095b3
--- /dev/null
+++ b/eng/common/cross/x64/tizen/tizen.patch
@@ -0,0 +1,9 @@
+diff -u -r a/usr/lib64/libc.so b/usr/lib64/libc.so
+--- a/usr/lib64/libc.so 2016-12-30 23:00:08.284951863 +0900
++++ b/usr/lib64/libc.so 2016-12-30 23:00:32.140951815 +0900
+@@ -2,4 +2,4 @@
+ Use the shared library, but some functions are only in
+ the static library, so try that secondarily. */
+ OUTPUT_FORMAT(elf64-x86-64)
+-GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib64/ld-linux-x86-64.so.2 ) )
++GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux-x86-64.so.2 ) )
diff --git a/eng/common/cross/x86/sources.list.focal b/eng/common/cross/x86/sources.list.focal
new file mode 100644
index 0000000000000..99d5731330e79
--- /dev/null
+++ b/eng/common/cross/x86/sources.list.focal
@@ -0,0 +1,11 @@
+deb http://archive.ubuntu.com/ubuntu/ focal main restricted universe
+deb-src http://archive.ubuntu.com/ubuntu/ focal main restricted universe
+
+deb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted universe
+deb-src http://archive.ubuntu.com/ubuntu/ focal-updates main restricted universe
+
+deb http://archive.ubuntu.com/ubuntu/ focal-backports main restricted
+deb-src http://archive.ubuntu.com/ubuntu/ focal-backports main restricted
+
+deb http://archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
+deb-src http://archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
diff --git a/eng/common/cross/x86/sources.list.jammy b/eng/common/cross/x86/sources.list.jammy
new file mode 100644
index 0000000000000..af1c1feaeac1b
--- /dev/null
+++ b/eng/common/cross/x86/sources.list.jammy
@@ -0,0 +1,11 @@
+deb http://archive.ubuntu.com/ubuntu/ jammy main restricted universe
+deb-src http://archive.ubuntu.com/ubuntu/ jammy main restricted universe
+
+deb http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe
+deb-src http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe
+
+deb http://archive.ubuntu.com/ubuntu/ jammy-backports main restricted
+deb-src http://archive.ubuntu.com/ubuntu/ jammy-backports main restricted
+
+deb http://archive.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
+deb-src http://archive.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
diff --git a/eng/common/cross/x86/tizen-build-rootfs.sh b/eng/common/cross/x86/tizen-build-rootfs.sh
deleted file mode 100644
index f5f955dc8f267..0000000000000
--- a/eng/common/cross/x86/tizen-build-rootfs.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env bash
-set -e
-
-__X86_CrossDir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
-__TIZEN_CROSSDIR="$__X86_CrossDir/tizen"
-
-if [[ -z "$ROOTFS_DIR" ]]; then
- echo "ROOTFS_DIR is not defined."
- exit 1;
-fi
-
-TIZEN_TMP_DIR=$ROOTFS_DIR/tizen_tmp
-mkdir -p $TIZEN_TMP_DIR
-
-# Download files
-echo ">>Start downloading files"
-VERBOSE=1 $__X86_CrossDir/tizen-fetch.sh $TIZEN_TMP_DIR
-echo "<>Start constructing Tizen rootfs"
-TIZEN_RPM_FILES=`ls $TIZEN_TMP_DIR/*.rpm`
-cd $ROOTFS_DIR
-for f in $TIZEN_RPM_FILES; do
- rpm2cpio $f | cpio -idm --quiet
-done
-echo "<>Start configuring Tizen rootfs"
-ln -sfn asm-x86 ./usr/include/asm
-patch -p1 < $__TIZEN_CROSSDIR/tizen.patch
-echo "</dev/null; then
- VERBOSE=0
-fi
-
-Log()
-{
- if [ $VERBOSE -ge $1 ]; then
- echo ${@:2}
- fi
-}
-
-Inform()
-{
- Log 1 -e "\x1B[0;34m$@\x1B[m"
-}
-
-Debug()
-{
- Log 2 -e "\x1B[0;32m$@\x1B[m"
-}
-
-Error()
-{
- >&2 Log 0 -e "\x1B[0;31m$@\x1B[m"
-}
-
-Fetch()
-{
- URL=$1
- FILE=$2
- PROGRESS=$3
- if [ $VERBOSE -ge 1 ] && [ $PROGRESS ]; then
- CURL_OPT="--progress-bar"
- else
- CURL_OPT="--silent"
- fi
- curl $CURL_OPT $URL > $FILE
-}
-
-hash curl 2> /dev/null || { Error "Require 'curl' Aborting."; exit 1; }
-hash xmllint 2> /dev/null || { Error "Require 'xmllint' Aborting."; exit 1; }
-hash sha256sum 2> /dev/null || { Error "Require 'sha256sum' Aborting."; exit 1; }
-
-TMPDIR=$1
-if [ ! -d $TMPDIR ]; then
- TMPDIR=./tizen_tmp
- Debug "Create temporary directory : $TMPDIR"
- mkdir -p $TMPDIR
-fi
-
-TIZEN_URL=http://download.tizen.org/snapshots/tizen
-BUILD_XML=build.xml
-REPOMD_XML=repomd.xml
-PRIMARY_XML=primary.xml
-TARGET_URL="http://__not_initialized"
-
-Xpath_get()
-{
- XPATH_RESULT=''
- XPATH=$1
- XML_FILE=$2
- RESULT=$(xmllint --xpath $XPATH $XML_FILE)
- if [[ -z ${RESULT// } ]]; then
- Error "Can not find target from $XML_FILE"
- Debug "Xpath = $XPATH"
- exit 1
- fi
- XPATH_RESULT=$RESULT
-}
-
-fetch_tizen_pkgs_init()
-{
- TARGET=$1
- PROFILE=$2
- Debug "Initialize TARGET=$TARGET, PROFILE=$PROFILE"
-
- TMP_PKG_DIR=$TMPDIR/tizen_${PROFILE}_pkgs
- if [ -d $TMP_PKG_DIR ]; then rm -rf $TMP_PKG_DIR; fi
- mkdir -p $TMP_PKG_DIR
-
- PKG_URL=$TIZEN_URL/$PROFILE/latest
-
- BUILD_XML_URL=$PKG_URL/$BUILD_XML
- TMP_BUILD=$TMP_PKG_DIR/$BUILD_XML
- TMP_REPOMD=$TMP_PKG_DIR/$REPOMD_XML
- TMP_PRIMARY=$TMP_PKG_DIR/$PRIMARY_XML
- TMP_PRIMARYGZ=${TMP_PRIMARY}.gz
-
- Fetch $BUILD_XML_URL $TMP_BUILD
-
- Debug "fetch $BUILD_XML_URL to $TMP_BUILD"
-
- TARGET_XPATH="//build/buildtargets/buildtarget[@name=\"$TARGET\"]/repo[@type=\"binary\"]/text()"
- Xpath_get $TARGET_XPATH $TMP_BUILD
- TARGET_PATH=$XPATH_RESULT
- TARGET_URL=$PKG_URL/$TARGET_PATH
-
- REPOMD_URL=$TARGET_URL/repodata/repomd.xml
- PRIMARY_XPATH='string(//*[local-name()="data"][@type="primary"]/*[local-name()="location"]/@href)'
-
- Fetch $REPOMD_URL $TMP_REPOMD
-
- Debug "fetch $REPOMD_URL to $TMP_REPOMD"
-
- Xpath_get $PRIMARY_XPATH $TMP_REPOMD
- PRIMARY_XML_PATH=$XPATH_RESULT
- PRIMARY_URL=$TARGET_URL/$PRIMARY_XML_PATH
-
- Fetch $PRIMARY_URL $TMP_PRIMARYGZ
-
- Debug "fetch $PRIMARY_URL to $TMP_PRIMARYGZ"
-
- gunzip $TMP_PRIMARYGZ
-
- Debug "unzip $TMP_PRIMARYGZ to $TMP_PRIMARY"
-}
-
-fetch_tizen_pkgs()
-{
- ARCH=$1
- PACKAGE_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]][*[local-name()="arch"][text()="_ARCH_"]]/*[local-name()="location"]/@href)'
-
- PACKAGE_CHECKSUM_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]][*[local-name()="arch"][text()="_ARCH_"]]/*[local-name()="checksum"]/text())'
-
- for pkg in ${@:2}
- do
- Inform "Fetching... $pkg"
- XPATH=${PACKAGE_XPATH_TPL/_PKG_/$pkg}
- XPATH=${XPATH/_ARCH_/$ARCH}
- Xpath_get $XPATH $TMP_PRIMARY
- PKG_PATH=$XPATH_RESULT
-
- XPATH=${PACKAGE_CHECKSUM_XPATH_TPL/_PKG_/$pkg}
- XPATH=${XPATH/_ARCH_/$ARCH}
- Xpath_get $XPATH $TMP_PRIMARY
- CHECKSUM=$XPATH_RESULT
-
- PKG_URL=$TARGET_URL/$PKG_PATH
- PKG_FILE=$(basename $PKG_PATH)
- PKG_PATH=$TMPDIR/$PKG_FILE
-
- Debug "Download $PKG_URL to $PKG_PATH"
- Fetch $PKG_URL $PKG_PATH true
-
- echo "$CHECKSUM $PKG_PATH" | sha256sum -c - > /dev/null
- if [ $? -ne 0 ]; then
- Error "Fail to fetch $PKG_URL to $PKG_PATH"
- Debug "Checksum = $CHECKSUM"
- exit 1
- fi
- done
-}
-
-Inform "Initialize i686 base"
-fetch_tizen_pkgs_init standard base
-Inform "fetch common packages"
-fetch_tizen_pkgs i686 gcc gcc-devel-static glibc glibc-devel libicu libicu-devel libatomic linux-glibc-devel keyutils keyutils-devel libkeyutils
-Inform "fetch coreclr packages"
-fetch_tizen_pkgs i686 lldb lldb-devel libgcc libstdc++ libstdc++-devel libunwind libunwind-devel lttng-ust-devel lttng-ust userspace-rcu-devel userspace-rcu
-Inform "fetch corefx packages"
-fetch_tizen_pkgs i686 libcom_err libcom_err-devel zlib zlib-devel libopenssl11 libopenssl1.1-devel krb5 krb5-devel
-
-Inform "Initialize standard unified"
-fetch_tizen_pkgs_init standard unified
-Inform "fetch corefx packages"
-fetch_tizen_pkgs i686 gssdp gssdp-devel tizen-release
-
diff --git a/eng/common/dotnet-install.sh b/eng/common/dotnet-install.sh
index 5c94e98632a0a..abd045a3247f0 100755
--- a/eng/common/dotnet-install.sh
+++ b/eng/common/dotnet-install.sh
@@ -52,7 +52,7 @@ done
# Use uname to determine what the CPU is, see https://en.wikipedia.org/wiki/Uname#Examples
cpuname=$(uname -m)
case $cpuname in
- aarch64)
+ arm64|aarch64)
buildarch=arm64
;;
loongarch64)
@@ -64,7 +64,7 @@ case $cpuname in
armv*l)
buildarch=arm
;;
- i686)
+ i[3-6]86)
buildarch=x86
;;
*)
diff --git a/eng/common/generate-locproject.ps1 b/eng/common/generate-locproject.ps1
index 25e97ac00772d..524aaa57f2b74 100644
--- a/eng/common/generate-locproject.ps1
+++ b/eng/common/generate-locproject.ps1
@@ -10,9 +10,7 @@ Param(
Set-StrictMode -Version 2.0
$ErrorActionPreference = "Stop"
-. $PSScriptRoot\tools.ps1
-
-Import-Module -Name (Join-Path $PSScriptRoot 'native\CommonLibrary.psm1')
+. $PSScriptRoot\pipeline-logging-functions.ps1
$exclusionsFilePath = "$SourcesDirectory\eng\Localize\LocExclusions.json"
$exclusions = @{ Exclusions = @() }
@@ -28,13 +26,34 @@ $jsonFiles = @()
$jsonTemplateFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\.template\.config\\localize\\.+\.en\.json" } # .NET templating pattern
$jsonTemplateFiles | ForEach-Object {
$null = $_.Name -Match "(.+)\.[\w-]+\.json" # matches '[filename].[langcode].json
-
+
$destinationFile = "$($_.Directory.FullName)\$($Matches.1).json"
$jsonFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru
}
$jsonWinformsTemplateFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "en\\strings\.json" } # current winforms pattern
+$wxlFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\\.+\.wxl" -And -Not( $_.Directory.Name -Match "\d{4}" ) } # localized files live in four digit lang ID directories; this excludes them
+if (-not $wxlFiles) {
+ $wxlEnFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\\1033\\.+\.wxl" } # pick up en files (1033 = en) specifically so we can copy them to use as the neutral xlf files
+ if ($wxlEnFiles) {
+ $wxlFiles = @()
+ $wxlEnFiles | ForEach-Object {
+ $destinationFile = "$($_.Directory.Parent.FullName)\$($_.Name)"
+ $wxlFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru
+ }
+ }
+}
+
+$macosHtmlEnFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "en\.lproj\\.+\.html$" } # add installer HTML files
+$macosHtmlFiles = @()
+if ($macosHtmlEnFiles) {
+ $macosHtmlEnFiles | ForEach-Object {
+ $destinationFile = "$($_.Directory.Parent.FullName)\$($_.Name)"
+ $macosHtmlFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru
+ }
+}
+
$xlfFiles = @()
$allXlfFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory\*\*.xlf"
@@ -46,7 +65,7 @@ if ($allXlfFiles) {
}
$langXlfFiles | ForEach-Object {
$null = $_.Name -Match "(.+)\.[\w-]+\.xlf" # matches '[filename].[langcode].xlf
-
+
$destinationFile = "$($_.Directory.FullName)\$($Matches.1).xlf"
$xlfFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru
}
@@ -59,10 +78,10 @@ $locJson = @{
LanguageSet = $LanguageSet
LocItems = @(
$locFiles | ForEach-Object {
- $outputPath = "$(($_.DirectoryName | Resolve-Path -Relative) + "\")"
+ $outputPath = "$(($_.DirectoryName | Resolve-Path -Relative) + "\")"
$continue = $true
foreach ($exclusion in $exclusions.Exclusions) {
- if ($outputPath.Contains($exclusion))
+ if ($_.FullName.Contains($exclusion))
{
$continue = $false
}
@@ -79,8 +98,7 @@ $locJson = @{
CopyOption = "LangIDOnPath"
OutputPath = "$($_.Directory.Parent.FullName | Resolve-Path -Relative)\"
}
- }
- else {
+ } else {
return @{
SourceFile = $sourceFile
CopyOption = "LangIDOnName"
@@ -90,6 +108,60 @@ $locJson = @{
}
}
)
+ },
+ @{
+ LanguageSet = $LanguageSet
+ CloneLanguageSet = "WiX_CloneLanguages"
+ LssFiles = @( "wxl_loc.lss" )
+ LocItems = @(
+ $wxlFiles | ForEach-Object {
+ $outputPath = "$($_.Directory.FullName | Resolve-Path -Relative)\"
+ $continue = $true
+ foreach ($exclusion in $exclusions.Exclusions) {
+ if ($_.FullName.Contains($exclusion)) {
+ $continue = $false
+ }
+ }
+ $sourceFile = ($_.FullName | Resolve-Path -Relative)
+ if ($continue)
+ {
+ return @{
+ SourceFile = $sourceFile
+ CopyOption = "LangIDOnPath"
+ OutputPath = $outputPath
+ }
+ }
+ }
+ )
+ },
+ @{
+ LanguageSet = $LanguageSet
+ CloneLanguageSet = "VS_macOS_CloneLanguages"
+ LssFiles = @( ".\eng\common\loc\P22DotNetHtmlLocalization.lss" )
+ LocItems = @(
+ $macosHtmlFiles | ForEach-Object {
+ $outputPath = "$($_.Directory.FullName | Resolve-Path -Relative)\"
+ $continue = $true
+ foreach ($exclusion in $exclusions.Exclusions) {
+ if ($_.FullName.Contains($exclusion)) {
+ $continue = $false
+ }
+ }
+ $sourceFile = ($_.FullName | Resolve-Path -Relative)
+ $lciFile = $sourceFile + ".lci"
+ if ($continue) {
+ $result = @{
+ SourceFile = $sourceFile
+ CopyOption = "LangIDOnPath"
+ OutputPath = $outputPath
+ }
+ if (Test-Path $lciFile -PathType Leaf) {
+ $result["LciFile"] = $lciFile
+ }
+ return $result
+ }
+ }
+ )
}
)
}
@@ -108,10 +180,10 @@ else {
if ((Get-FileHash "$SourcesDirectory\eng\Localize\LocProject-generated.json").Hash -ne (Get-FileHash "$SourcesDirectory\eng\Localize\LocProject.json").Hash) {
Write-PipelineTelemetryError -Category "OneLocBuild" -Message "Existing LocProject.json differs from generated LocProject.json. Download LocProject-generated.json and compare them."
-
+
exit 1
}
else {
Write-Host "Generated LocProject.json and current LocProject.json are identical."
}
-}
\ No newline at end of file
+}
diff --git a/eng/common/generate-sbom-prep.ps1 b/eng/common/generate-sbom-prep.ps1
index a733a8885824a..3e5c1c74a1c50 100644
--- a/eng/common/generate-sbom-prep.ps1
+++ b/eng/common/generate-sbom-prep.ps1
@@ -2,6 +2,8 @@ Param(
[Parameter(Mandatory=$true)][string] $ManifestDirPath # Manifest directory where sbom will be placed
)
+. $PSScriptRoot\pipeline-logging-functions.ps1
+
Write-Host "Creating dir $ManifestDirPath"
# create directory for sbom manifest to be placed
if (!(Test-Path -path $ManifestDirPath))
diff --git a/eng/common/generate-sbom-prep.sh b/eng/common/generate-sbom-prep.sh
index f6c77453142a2..d5c76dc827b49 100644
--- a/eng/common/generate-sbom-prep.sh
+++ b/eng/common/generate-sbom-prep.sh
@@ -2,6 +2,18 @@
source="${BASH_SOURCE[0]}"
+# resolve $SOURCE until the file is no longer a symlink
+while [[ -h $source ]]; do
+ scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
+ source="$(readlink "$source")"
+
+ # if $source was a relative symlink, we need to resolve it relative to the path where the
+ # symlink file was located
+ [[ $source != /* ]] && source="$scriptroot/$source"
+done
+scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
+. $scriptroot/pipeline-logging-functions.sh
+
manifest_dir=$1
if [ ! -d "$manifest_dir" ] ; then
diff --git a/eng/common/init-tools-native.ps1 b/eng/common/init-tools-native.ps1
index db830c00a6f8d..27ccdb9ecc951 100644
--- a/eng/common/init-tools-native.ps1
+++ b/eng/common/init-tools-native.ps1
@@ -31,6 +31,10 @@ Wait time between retry attempts in seconds
.PARAMETER GlobalJsonFile
File path to global.json file
+.PARAMETER PathPromotion
+Optional switch to enable either promote native tools specified in the global.json to the path (in Azure Pipelines)
+or break the build if a native tool is not found on the path (on a local dev machine)
+
.NOTES
#>
[CmdletBinding(PositionalBinding=$false)]
@@ -41,7 +45,8 @@ Param (
[switch] $Force = $False,
[int] $DownloadRetries = 5,
[int] $RetryWaitTimeInSeconds = 30,
- [string] $GlobalJsonFile
+ [string] $GlobalJsonFile,
+ [switch] $PathPromotion
)
if (!$GlobalJsonFile) {
@@ -77,53 +82,99 @@ try {
ConvertFrom-Json |
Select-Object -Expand 'native-tools' -ErrorAction SilentlyContinue
if ($NativeTools) {
- $NativeTools.PSObject.Properties | ForEach-Object {
- $ToolName = $_.Name
- $ToolVersion = $_.Value
- $LocalInstallerArguments = @{ ToolName = "$ToolName" }
- $LocalInstallerArguments += @{ InstallPath = "$InstallBin" }
- $LocalInstallerArguments += @{ BaseUri = "$BaseUri" }
- $LocalInstallerArguments += @{ CommonLibraryDirectory = "$EngCommonBaseDir" }
- $LocalInstallerArguments += @{ Version = "$ToolVersion" }
-
- if ($Verbose) {
- $LocalInstallerArguments += @{ Verbose = $True }
- }
- if (Get-Variable 'Force' -ErrorAction 'SilentlyContinue') {
- if($Force) {
- $LocalInstallerArguments += @{ Force = $True }
- }
- }
- if ($Clean) {
- $LocalInstallerArguments += @{ Clean = $True }
- }
-
- Write-Verbose "Installing $ToolName version $ToolVersion"
- Write-Verbose "Executing '$InstallerPath $($LocalInstallerArguments.Keys.ForEach({"-$_ '$($LocalInstallerArguments.$_)'"}) -join ' ')'"
- & $InstallerPath @LocalInstallerArguments
- if ($LASTEXITCODE -Ne "0") {
- $errMsg = "$ToolName installation failed"
- if ((Get-Variable 'DoNotAbortNativeToolsInstallationOnFailure' -ErrorAction 'SilentlyContinue') -and $DoNotAbortNativeToolsInstallationOnFailure) {
- $showNativeToolsWarning = $true
- if ((Get-Variable 'DoNotDisplayNativeToolsInstallationWarnings' -ErrorAction 'SilentlyContinue') -and $DoNotDisplayNativeToolsInstallationWarnings) {
- $showNativeToolsWarning = $false
+ if ($PathPromotion -eq $True) {
+ $ArcadeToolsDirectory = "$env:SYSTEMDRIVE\arcade-tools"
+ if (Test-Path $ArcadeToolsDirectory) { # if this directory exists, we should use native tools on machine
+ $NativeTools.PSObject.Properties | ForEach-Object {
+ $ToolName = $_.Name
+ $ToolVersion = $_.Value
+ $InstalledTools = @{}
+
+ if ((Get-Command "$ToolName" -ErrorAction SilentlyContinue) -eq $null) {
+ if ($ToolVersion -eq "latest") {
+ $ToolVersion = ""
+ }
+ $ToolDirectories = (Get-ChildItem -Path "$ArcadeToolsDirectory" -Filter "$ToolName-$ToolVersion*" | Sort-Object -Descending)
+ if ($ToolDirectories -eq $null) {
+ Write-Error "Unable to find directory for $ToolName $ToolVersion; please make sure the tool is installed on this image."
+ exit 1
}
- if ($showNativeToolsWarning) {
- Write-Warning $errMsg
+ $ToolDirectory = $ToolDirectories[0]
+ $BinPathFile = "$($ToolDirectory.FullName)\binpath.txt"
+ if (-not (Test-Path -Path "$BinPathFile")) {
+ Write-Error "Unable to find binpath.txt in '$($ToolDirectory.FullName)' ($ToolName $ToolVersion); artifact is either installed incorrectly or is not a bootstrappable tool."
+ exit 1
}
- $toolInstallationFailure = $true
- } else {
- # We cannot change this to Write-PipelineTelemetryError because of https://github.com/dotnet/arcade/issues/4482
- Write-Host $errMsg
- exit 1
+ $BinPath = Get-Content "$BinPathFile"
+ $ToolPath = Convert-Path -Path $BinPath
+ Write-Host "Adding $ToolName to the path ($ToolPath)..."
+ Write-Host "##vso[task.prependpath]$ToolPath"
+ $env:PATH = "$ToolPath;$env:PATH"
+ $InstalledTools += @{ $ToolName = $ToolDirectory.FullName }
+ }
}
+ return $InstalledTools
+ } else {
+ $NativeTools.PSObject.Properties | ForEach-Object {
+ $ToolName = $_.Name
+ $ToolVersion = $_.Value
+
+ if ((Get-Command "$ToolName" -ErrorAction SilentlyContinue) -eq $null) {
+ Write-PipelineTelemetryError -Category 'NativeToolsBootstrap' -Message "$ToolName not found on path. Please install $ToolName $ToolVersion before proceeding."
+ Write-PipelineTelemetryError -Category 'NativeToolsBootstrap' -Message "If this is running on a build machine, the arcade-tools directory was not found, which means there's an error with the image."
+ }
+ }
+ exit 0
+ }
+ } else {
+ $NativeTools.PSObject.Properties | ForEach-Object {
+ $ToolName = $_.Name
+ $ToolVersion = $_.Value
+ $LocalInstallerArguments = @{ ToolName = "$ToolName" }
+ $LocalInstallerArguments += @{ InstallPath = "$InstallBin" }
+ $LocalInstallerArguments += @{ BaseUri = "$BaseUri" }
+ $LocalInstallerArguments += @{ CommonLibraryDirectory = "$EngCommonBaseDir" }
+ $LocalInstallerArguments += @{ Version = "$ToolVersion" }
+
+ if ($Verbose) {
+ $LocalInstallerArguments += @{ Verbose = $True }
+ }
+ if (Get-Variable 'Force' -ErrorAction 'SilentlyContinue') {
+ if($Force) {
+ $LocalInstallerArguments += @{ Force = $True }
+ }
+ }
+ if ($Clean) {
+ $LocalInstallerArguments += @{ Clean = $True }
+ }
+
+ Write-Verbose "Installing $ToolName version $ToolVersion"
+ Write-Verbose "Executing '$InstallerPath $($LocalInstallerArguments.Keys.ForEach({"-$_ '$($LocalInstallerArguments.$_)'"}) -join ' ')'"
+ & $InstallerPath @LocalInstallerArguments
+ if ($LASTEXITCODE -Ne "0") {
+ $errMsg = "$ToolName installation failed"
+ if ((Get-Variable 'DoNotAbortNativeToolsInstallationOnFailure' -ErrorAction 'SilentlyContinue') -and $DoNotAbortNativeToolsInstallationOnFailure) {
+ $showNativeToolsWarning = $true
+ if ((Get-Variable 'DoNotDisplayNativeToolsInstallationWarnings' -ErrorAction 'SilentlyContinue') -and $DoNotDisplayNativeToolsInstallationWarnings) {
+ $showNativeToolsWarning = $false
+ }
+ if ($showNativeToolsWarning) {
+ Write-Warning $errMsg
+ }
+ $toolInstallationFailure = $true
+ } else {
+ # We cannot change this to Write-PipelineTelemetryError because of https://github.com/dotnet/arcade/issues/4482
+ Write-Host $errMsg
+ exit 1
+ }
+ }
+ }
+
+ if ((Get-Variable 'toolInstallationFailure' -ErrorAction 'SilentlyContinue') -and $toolInstallationFailure) {
+ # We cannot change this to Write-PipelineTelemetryError because of https://github.com/dotnet/arcade/issues/4482
+ Write-Host 'Native tools bootstrap failed'
+ exit 1
}
- }
-
- if ((Get-Variable 'toolInstallationFailure' -ErrorAction 'SilentlyContinue') -and $toolInstallationFailure) {
- # We cannot change this to Write-PipelineTelemetryError because of https://github.com/dotnet/arcade/issues/4482
- Write-Host 'Native tools bootstrap failed'
- exit 1
}
}
else {
@@ -139,7 +190,7 @@ try {
Write-Host "##vso[task.prependpath]$(Convert-Path -Path $InstallBin)"
return $InstallBin
}
- else {
+ elseif (-not ($PathPromotion)) {
Write-PipelineTelemetryError -Category 'NativeToolsBootstrap' -Message 'Native tools install directory does not exist, installation failed'
exit 1
}
diff --git a/eng/common/internal/Tools.csproj b/eng/common/internal/Tools.csproj
index beb9c4648ea19..7f5ce6d608133 100644
--- a/eng/common/internal/Tools.csproj
+++ b/eng/common/internal/Tools.csproj
@@ -8,6 +8,9 @@
+
+
+
diff --git a/eng/common/loc/P22DotNetHtmlLocalization.lss b/eng/common/loc/P22DotNetHtmlLocalization.lss
new file mode 100644
index 0000000000000..6661fed566e49
Binary files /dev/null and b/eng/common/loc/P22DotNetHtmlLocalization.lss differ
diff --git a/eng/common/native/init-compiler.sh b/eng/common/native/init-compiler.sh
index 6d7ba15e5f2b5..7aee4213e1b06 100644
--- a/eng/common/native/init-compiler.sh
+++ b/eng/common/native/init-compiler.sh
@@ -1,30 +1,25 @@
-#!/usr/bin/env bash
+#!/bin/sh
#
# This file detects the C/C++ compiler and exports it to the CC/CXX environment variables
#
# NOTE: some scripts source this file and rely on stdout being empty, make sure to not output anything here!
-if [[ "$#" -lt 3 ]]; then
+if [ -z "$build_arch" ] || [ -z "$compiler" ]; then
echo "Usage..."
- echo "init-compiler.sh