diff --git a/CMakeLists.txt b/CMakeLists.txt index 698ee041..3c76281b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,6 +76,13 @@ if (DO_PLATFORM_LINUX) # relro+now thwarts some attack vectors by reordering some ELF data structures and also by making the GOT read-only set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie -z relro -z now") + + # Depending on the ordering in PATH environment variable (observed on Ubuntu2004), cmake might search + # /lib instead of /usr/lib which causes Boost::headers to get the non-existent "/include" path. + # (Enable --trace-expand in cmake and look at lines from boost_headers-config.cmake and its callers.) + # Workaround: force cmake to look in "/usr" since the /lib and /bin paths are either + # not relevant for our usage or they are symlinks to /usr/lib and /usr/bin. + set(CMAKE_PREFIX_PATH "/usr") endif (DO_PLATFORM_LINUX) if (DO_PLATFORM_WINDOWS AND DO_INCLUDE_SDK) diff --git a/README.md b/README.md index 3e263d61..263e6bc1 100644 --- a/README.md +++ b/README.md @@ -166,33 +166,33 @@ tracked appropriately. | Architecture | Agent | SDK | Plugin | |-----|--------|-----|--------| -| x86-64 | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Simple%20Client%20x86-64%20Build?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=45&branchName=main) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20CPP-SDK%20x86-64%20Build?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=46&branchName=main) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Plugins%20x86-64%20Build?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=47&branchName=main) | -| arm64 | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Simple%20Client%20ARM%20Build?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=25&branchName=main) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20CPP-SDK%20ARM%20Build?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=33&branchName=main) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Plugins%20ARM%20Build?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=31&branchName=main) | +| x86-64 | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Simple%20Client%20x86-64%20Build?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=45&branchName=develop) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20CPP-SDK%20x86-64%20Build?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=46&branchName=develop) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Plugins%20x86-64%20Build?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=47&branchName=develop) | +| arm64 | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Simple%20Client%20ARM%20Build?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=25&branchName=develop) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20CPP-SDK%20ARM%20Build?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=33&branchName=develop) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Plugins%20ARM%20Build?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=31&branchName=develop) | #### Ubuntu 20.04 | Architecture | Agent | SDK | Plugin | |-----|--------|-----|--------| -| x86-64 | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Simple%20Client%20ARM%20Build?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=25&branchName=main) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20CPP-SDK%20ARM%20Build?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=33&branchName=main) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Plugins%20ARM%20Build?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=31&branchName=main) | -| arm64 | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Simple%20Client%20ARM%20Build?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=25&branchName=main) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20CPP-SDK%20ARM%20Build?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=33&branchName=main) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Plugins%20ARM%20Build?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=31&branchName=main) | +| x86-64 | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Simple%20Client%20ARM%20Build?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=25&branchName=develop) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20CPP-SDK%20ARM%20Build?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=33&branchName=develop) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Plugins%20ARM%20Build?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=31&branchName=develop) | +| arm64 | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Simple%20Client%20ARM%20Build?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=25&branchName=develop) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20CPP-SDK%20ARM%20Build?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=33&branchName=develop) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Plugins%20ARM%20Build?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=31&branchName=develop) | #### Debian 10 | Architecture | Agent | SDK | Plugin | |-----|--------|-----|--------| -| arm32 | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Simple%20Client%20ARM%20Build?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=25&branchName=main) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20CPP-SDK%20ARM%20Build?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=33&branchName=main) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Plugins%20ARM%20Build?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=31&branchName=main) | +| arm32 | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Simple%20Client%20ARM%20Build?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=25&branchName=develop) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20CPP-SDK%20ARM%20Build?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=33&branchName=develop) | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20Plugins%20ARM%20Build?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=31&branchName=develop) | ### Windows 10/11 | Architecture | SDK | |-----|--------| -| x86-64 | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20CPP-SDK%20Windows%2010%20x64?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=59&branchName=main) | +| x86-64 | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20CPP-SDK%20Windows%2010%20x64?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=59&branchName=develop) | ### MacOS | Architecture | SDK | |-----|--------| -| x86-64 | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20CPP-SDK%20MacOS%20X64?branchName=main)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=60&branchName=main) | +| x86-64 | [![Build Status](https://deliveryoptimization.visualstudio.com/client/_apis/build/status/DO%20CPP-SDK%20MacOS%20X64?branchName=develop)](https://deliveryoptimization.visualstudio.com/client/_build/latest?definitionId=60&branchName=develop) | ## Contact diff --git a/azure-pipelines/build/linux/du/docker/dosdkcpp-docker.yml b/azure-pipelines/build/linux/du/docker/dosdkcpp-docker.yml index 8e4349ec..8c644f60 100644 --- a/azure-pipelines/build/linux/du/docker/dosdkcpp-docker.yml +++ b/azure-pipelines/build/linux/du/docker/dosdkcpp-docker.yml @@ -28,7 +28,7 @@ jobs: - template: ../templates/do-docker-jobs.yml parameters: targetOsArch: 'debian10_arm32' - imageVersion: '0.8.0' #hard coded version because debian9 support will soon be removed + imageVersion: ${{variables.containerImageVersion}} stepsTemplate: 'dosdkcpp-docker-steps.yml' - template: ../templates/do-docker-jobs.yml diff --git a/azure-pipelines/build/windows/templates/dosdkcpp-steps.yml b/azure-pipelines/build/windows/templates/dosdkcpp-steps.yml index 3a17eab9..385342c3 100644 --- a/azure-pipelines/build/windows/templates/dosdkcpp-steps.yml +++ b/azure-pipelines/build/windows/templates/dosdkcpp-steps.yml @@ -10,7 +10,7 @@ parameters: type: string default: $(Agent.TempDirectory)\deliveryoptimization_tools\vcpkg - name: dependencyScriptsLocation - type: string + type: string default: $(Build.SourcesDirectory)/build/scripts - name: skipTests type: boolean @@ -22,18 +22,17 @@ steps: inputs: targetType: 'inline' script: | - if (Test-Path "$env:VCPKG_ROOT\vcpkg.exe") + if (Test-Path "$env:VCPKG_INSTALLATION_ROOT\vcpkg.exe") { # Must be a version of pipeline agent that has vcpkg pre-installed - Write-Host "Found existing vcpkg in $env:VCPKG_ROOT" + Write-Host "Found existing vcpkg in $env:VCPKG_INSTALLATION_ROOT" } else { - $vcpkgInstallDir = ${{parameters.vcpkgDir}} + $vcpkgInstallDir = "${{parameters.vcpkgDir}}" Write-Host "Installing vcpkg to $vcpkgInstallDir" git clone https://github.com/microsoft/vcpkg $vcpkgInstallDir # Build pipeline agents usually have both these defined - Write-Host "##vso[task.setvariable variable=VCPKG_ROOT;isoutput=true;isreadonly=true;]$vcpkgInstallDir" Write-Host "##vso[task.setvariable variable=VCPKG_INSTALLATION_ROOT;isoutput=true;isreadonly=true;]$vcpkgInstallDir" } @@ -42,7 +41,7 @@ steps: - task: Cache@2 inputs: key: '${{parameters.dependencyScriptsLocation}}/install-vcpkg-deps.ps1 | "${{parameters.targetOsArch}}"' - path: $(VCPKG_ROOT) + path: $(VCPKG_INSTALLATION_ROOT) cacheHitVar: CACHE_RESTORED - task: PowerShell@2 @@ -50,14 +49,13 @@ steps: inputs: targetType: 'filePath' filePath: ${{parameters.dependencyScriptsLocation}}\install-vcpkg-deps.ps1 - arguments: $(VCPKG_ROOT) displayName: 'Install vcpkg dependencies' - task: PythonScript@0 inputs: scriptSource: 'filePath' scriptPath: 'build/build.py' - arguments: '--project sdk --config ${{parameters.config}} --vcpkgdir $(VCPKG_ROOT) --clean' + arguments: '--project sdk --config ${{parameters.config}} --vcpkgdir $(VCPKG_INSTALLATION_ROOT) --clean' displayName: 'Build sdk-cpp ${{parameters.targetOsArch}}-${{parameters.config}}' - task: CmdLine@2 diff --git a/build/docker/debian9/arm32/Dockerfile b/build/docker/debian9/arm32/Dockerfile deleted file mode 100644 index 2ba82b8a..00000000 --- a/build/docker/debian9/arm32/Dockerfile +++ /dev/null @@ -1,45 +0,0 @@ -# Dockerfile for building DO client components for Debian 9 arm32 -# First, install the docker extension for VSCode. Then you can right-click on this file -# and choose Build Image. Give it a name and it will build the image. -# -# Open interactive terminal into the image in a container: -# docker run -ti --rm --entrypoint=/bin/bash -v :/code -v :/build -# Example: -# docker run -ti --rm --entrypoint=/bin/bash -v D:\do-client-lite:/code -v D:\temp\build_client_lite\arm-linux-debug:/build custom-debian9-arm32 - -FROM arm32v7/debian:stretch - -SHELL [ "/bin/bash", "-c"] - -# QEMU is a Linux emulator which enables cross-arch support in docker -# In order to build this image on a Linux host, need to install QEMU: -# -# sudo apt-get install qemu-user -# update-binfmts --display -# sudo apt install qemu binfmt-support qemu-user-static -# cp /usr/bin/qemu-arm-static /build/docker/debian9/arm32 -# -# Then copy the build script to the build directory -# cp /build/scripts/bootstrap.sh build/docker/debian9/arm32 -# -# After running the above, you can build the image by running in the current dockerfile directory -# sudo docker build -t . --no-cache --network=host - -COPY qemu-arm-static /usr/bin/qemu-arm-static -COPY bootstrap.sh /tmp/bootstrap.sh - -WORKDIR /tmp/ -RUN chmod +x bootstrap.sh -RUN ./bootstrap.sh --platform debian9 --install build - -VOLUME /code -WORKDIR /code - -ENTRYPOINT [ "/bin/bash", "-c"] - -# We specify an empty command so that we can pass options to the ENTRYPOINT command. -# This is a bit of a Dockerfile quirk where if the ENTRYPOINT value is defined, -# then CMD becomes the default options passed to ENTRYPOINT. -# In this case we don't have any desired default arguments. -# However, we have to specify CMD to enable passing of command line parameters to ENTRYPOINT in the first place. -CMD [ ] diff --git a/build/scripts/bootstrap.sh b/build/scripts/bootstrap.sh index 7b252f0e..1f8fe4a8 100755 --- a/build/scripts/bootstrap.sh +++ b/build/scripts/bootstrap.sh @@ -11,7 +11,7 @@ # This script handles provisioning of build environments for the Delivery Optimization client components on supported platforms ### -# Treat all command failures as fatal' +# Treat all command failures as fatal set -e # Defaults @@ -22,7 +22,7 @@ function usage { cat < --install - --platform # Platform to provision, supported platforms: ubuntu1804, ubuntu2004, debian9, debian 10, osx. Required + --platform # Platform to provision, supported platforms: ubuntu1804, ubuntu2004, debian 10, osx. Required --install # Which command to run, supported commands: build, developertools, containertools, qemu, all. Default is all EOM exit 1 @@ -39,7 +39,7 @@ function parseArgs { ;; --platform | -p) PLATFORM="${2,,}" - if [[ "$PLATFORM" == "debian9" || "$PLATFORM" == "debian10" || "$PLATFORM" == "ubuntu1804" || "$PLATFORM" == "ubuntu2004" || "$PLATFORM" == "osx" ]]; + if [[ "$PLATFORM" == "debian10" || "$PLATFORM" == "ubuntu1804" || "$PLATFORM" == "ubuntu2004" || "$PLATFORM" == "osx" ]]; then echo -e "[INFO] Platform set to: ${PLATFORM}" else @@ -86,32 +86,19 @@ function installBuildDependencies apt-get install -y make build-essential g++ gdb gdbserver gcc git wget apt-get install -y python3 ninja-build - - if [[ "$PLATFORM" == "debian9" ]]; - then - # libmsgsl-dev package not available on Debian9. Install from source. - cd /tmp/ - git clone https://github.com/Microsoft/GSL.git - cd GSL/ - git checkout tags/v2.0.0 - cmake -DGSL_TEST=OFF . - make - make install - else - apt-get -y install cmake libmsgsl-dev - fi - + apt-get install -y cmake libmsgsl-dev apt-get install -y libboost-system-dev libboost-filesystem-dev libboost-program-options-dev apt-get install -y libproxy-dev libssl-dev uuid-dev libcurl4-openssl-dev rm -rf /tmp/gtest mkdir /tmp/gtest - cd /tmp/gtest + pushd /tmp/gtest if [[ "$PLATFORM" == "ubuntu2004" || "$PLATFORM" == "debian10" ]]; then - # The latest native-version of gtest on ubuntu2004 and debian10 currently has a bug where CMakeLists doesn't declare an install target, causing 'make install' to fail - # Clone from source and use release-1.10.0 instead, since gtest is a source package anyways + # The latest native-version of gtest on ubuntu2004 and debian10 currently has a bug where + # CMakeLists doesn't declare an install target, causing 'make install' to fail. + # Clone from source and use release-1.10.0 instead, since gtest is a source package anyways. git clone https://github.com/google/googletest.git . git checkout release-1.10.0 mkdir cmake @@ -126,6 +113,10 @@ function installBuildDependencies make make install fi + + popd + rm -rf /tmp/gtest + else echo "[INFO] Builds not supported on this platform, no dependencies installed" fi @@ -196,7 +187,7 @@ function installAll function isSupportedLinux() { - if [[ "$PLATFORM" == "debian9" || "$PLATFORM" == "debian10" || "$PLATFORM" == "ubuntu1804" || "$PLATFORM" == "ubuntu2004" ]]; + if [[ "$PLATFORM" == "debian10" || "$PLATFORM" == "ubuntu1804" || "$PLATFORM" == "ubuntu2004" ]]; then return 0 else diff --git a/build/scripts/install-vcpkg-deps.ps1 b/build/scripts/install-vcpkg-deps.ps1 index b8bc2032..8a56e683 100644 --- a/build/scripts/install-vcpkg-deps.ps1 +++ b/build/scripts/install-vcpkg-deps.ps1 @@ -1,13 +1,13 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. -if (-not (Test-Path "$env:VCPKG_ROOT\vcpkg.exe")) +if (-not (Test-Path "$env:VCPKG_INSTALLATION_ROOT\vcpkg.exe")) { - Write-Host "vcpkg not found in $env:VCPKG_ROOT" + Write-Host "vcpkg not found in $env:VCPKG_INSTALLATION_ROOT" exit 1 } -cd $env:VCPKG_ROOT +cd $env:VCPKG_INSTALLATION_ROOT git checkout 2021.05.12 .\bootstrap-vcpkg.bat .\vcpkg integrate install