diff --git a/Meta/Azure/Caches.yml b/Meta/Azure/Caches.yml index 4e3b31015ae..8e9d630b53e 100644 --- a/Meta/Azure/Caches.yml +++ b/Meta/Azure/Caches.yml @@ -9,6 +9,8 @@ parameters: toolchain_ccache_path: '' toolchain_ccache_size: $(CCACHE_MAXSIZE) with_remote_data_caches: true + ndk_version: '' + with_ndk_cache: false steps: - script: | @@ -75,3 +77,13 @@ steps: key: '"unicode_locale" | Meta/CMake/unicode_data.cmake' path: $(Build.SourcesDirectory)/${{ parameters.build_directory }}/CLDR displayName: 'UnicodeLocale Cache' + + - ${{ if eq(parameters.with_ndk_cache, true) }}: + - bash: | + echo "##vso[task.setvariable variable=ANDROID_SDK_ROOT;]$ANDROID_SDK_ROOT" + displayName: 'Set ANDROID_SDK_ROOT' + - task: Cache@2 + inputs: + key: '"ndk" | "$(Agent.OS)" | "${{ parameters.ndk_version }}" ' + path: $(ANDROID_SDK_ROOT)/ndk + displayName: 'Android NDK Cache' diff --git a/Meta/Azure/Lagom.yml b/Meta/Azure/Lagom.yml index d754527d29a..d3690b71cc9 100644 --- a/Meta/Azure/Lagom.yml +++ b/Meta/Azure/Lagom.yml @@ -12,7 +12,7 @@ jobs: value: $(Build.SourcesDirectory)/.ccache - name: job_pool - ${{ if eq(parameters.os, 'Linux') }}: + ${{ if or(eq(parameters.os, 'Linux'), eq(parameters.os, 'Android')) }}: value: ubuntu-22.04 ${{ if eq(parameters.os, 'macOS') }}: value: macos-11 @@ -23,6 +23,9 @@ jobs: ${{ if eq(parameters.fuzzer, 'NoFuzz') }}: value: gcc + - name: ndk_version # only relevant for Android + value: '24.0.8215888' + pool: vmImage: $(job_pool) @@ -42,8 +45,38 @@ jobs: with_remote_data_caches: false ${{ if eq(parameters.fuzzer, 'NoFuzz') }}: with_remote_data_caches: true + ${{ if eq(parameters.os, 'Android') }}: + with_ndk_cache: true + ndk_version: '$(ndk_version)' - - ${{ if eq(parameters.fuzzer, 'Fuzz') }}: + - ${{ if eq(parameters.os, 'Android') }}: + - script: | + yes | $ANDROID_SDK_ROOT/tools/bin/sdkmanager "ndk;$(ndk_version)" + displayName: "Install NDK $(ndk_version)" + + - script: | + cmake -GNinja -B tools-build \ + -DBUILD_LAGOM=OFF \ + -DENABLE_LAGOM_CCACHE=ON \ + -DCMAKE_INSTALL_PREFIX=tool-install \ + -Dpackage=LagomTools + ninja -C tools-build install + cmake -GNinja -B Build \ + -DBUILD_LAGOM=ON \ + -DENABLE_LAGOM_CCACHE=ON \ + -DBUILD_SHARED_LIBS=OFF \ + -DANDROID_ABI=arm64-v8a \ + -DANDROID_NATIVE_API_LEVEL=30 \ + -DANDROID_NDK=$ANDROID_SDK_ROOT/ndk/$(ndk_version) \ + -DANDROID_STL=c++_shared \ + -DCMAKE_TOOLCHAIN_FILE=$ANDROID_SDK_ROOT/ndk/$(ndk_version)/build/cmake/android.toolchain.cmake \ + -DLagomTools_DIR=$(Build.SourcesDirectory)/Meta/Lagom/tool-install/share/LagomTools + displayName: 'Create Build Environment' + workingDirectory: $(Build.SourcesDirectory)/Meta/Lagom + env: + CCACHE_DIR: '$(SERENITY_CCACHE_DIR)' + + - ${{ elseif eq(parameters.fuzzer, 'Fuzz') }}: - script: | cmake -GNinja -B tools-build \ -DBUILD_LAGOM=OFF \ @@ -63,7 +96,7 @@ jobs: workingDirectory: $(Build.SourcesDirectory)/Meta/Lagom env: CCACHE_DIR: '$(SERENITY_CCACHE_DIR)' - - ${{ if eq(parameters.fuzzer, 'NoFuzz') }}: + - ${{ elseif eq(parameters.fuzzer, 'NoFuzz') }}: - script: | cmake -GNinja -B Build \ -DBUILD_LAGOM=ON \ @@ -87,7 +120,7 @@ jobs: env: CCACHE_DIR: '$(SERENITY_CCACHE_DIR)' - - ${{ if eq(parameters.fuzzer, 'NoFuzz') }}: + - ${{ if and(eq(parameters.fuzzer, 'NoFuzz'), not(eq(parameters.os, 'Android')) ) }}: - script: | ninja test displayName: 'Test' diff --git a/Meta/Azure/Setup.yml b/Meta/Azure/Setup.yml index 4e2db7a29af..46c8022ee18 100644 --- a/Meta/Azure/Setup.yml +++ b/Meta/Azure/Setup.yml @@ -35,3 +35,8 @@ steps: - script: | brew install ninja wabt ccache unzip displayName: 'Install Dependencies' + + - ${{ if eq(parameters.os, 'Android') }}: + - script: | + sudo apt-get install ccache ninja-build unzip + displayName: 'Install Dependencies' diff --git a/Meta/Azure/nightly-pipeline.yml b/Meta/Azure/nightly-pipeline.yml index 36a41af669c..ac76cf7772f 100644 --- a/Meta/Azure/nightly-pipeline.yml +++ b/Meta/Azure/nightly-pipeline.yml @@ -24,3 +24,10 @@ stages: parameters: arch: 'x86_64' coverage: 'ON' + + - stage: Lagom_Android + dependsOn: [] + jobs: + - template: Lagom.yml + parameters: + os: 'Android' diff --git a/Meta/Lagom/CMakeLists.txt b/Meta/Lagom/CMakeLists.txt index e183889883d..9e23947e613 100644 --- a/Meta/Lagom/CMakeLists.txt +++ b/Meta/Lagom/CMakeLists.txt @@ -564,7 +564,7 @@ if (BUILD_LAGOM) lagom_lib(XML xml SOURCES ${LIBXML_SOURCES}) - if (NOT ENABLE_FUZZERS AND NOT ENABLE_COMPILER_EXPLORER_BUILD) + if (NOT ENABLE_FUZZERS AND NOT ENABLE_COMPILER_EXPLORER_BUILD AND NOT ANDROID) # Lagom Services add_subdirectory("${SERENITY_PROJECT_ROOT}/Userland/Services" "${CMAKE_CURRENT_BINARY_DIR}/Services")