Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable on-device tests for evergreen AOSP #3247

Draft
wants to merge 11 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 30 additions & 8 deletions .github/actions/build/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,44 @@ runs:
set -x
env
if [ -z ${COBALT_EVERGREEN_LOADER+x} ]; then
BUILD_PLATFORM=${{ matrix.target_platform }}
BUILD_TARGET=all
if [[ "${{matrix.config}}" =~ ^(qa|gold)$ ]]; then
BUILD_TARGET=default
BUILD_PLATFORM="${{ matrix.target_platform }}"
BUILD_TARGET="default"
if [[ "${{ matrix.config }}" =~ ^(debug|devel)$ ]]; then
BUILD_TARGET="all"
fi
else
BUILD_PLATFORM=${COBALT_EVERGREEN_LOADER}
BUILD_TARGET='loader_app_install elf_loader_sandbox_install native_target/crashpad_handler'


BUILD_PLATFORM="${COBALT_EVERGREEN_LOADER}"
BUILD_TARGET="loader_app_install elf_loader_sandbox_install native_target/crashpad_handler"

# TODO(todo): Use gn to query for targets.
# Specify build targets for EG AOSP loader build.
if [[ "${BUILD_PLATFORM}" == "android-arm" && "${{ matrix.config }}" =~ ^(debug|devel)$ ]]; then
# TODO(oxv): We should build evergreen compat targets here too.
# nplb_evergreen_compat_tests_evergreen_loader_install
# TODO(oxv): Build all test targets.
BUILD_TARGET="${BUILD_TARGET} nplb_evergreen_loader_install"
fi
fi

# TODO(todo): Adapt image to GitHub and remove this.
# GitHub Runners have home set to /github/home.
if [ -d /root/starboard-toolchains ]; then
ln -s /root/starboard-toolchains /github/home/starboard-toolchains
fi
# Set Ninja output format

# Set Ninja output format.
NINJA_STATUS="[%e sec | %f/%t %u remaining | %c/sec | j%r] "
ninja -C ${GITHUB_WORKSPACE}/out/${BUILD_PLATFORM}_${{matrix.config}} ${BUILD_TARGET}

# TODO(todo): Half workers for EG AOSP build as it runs out of memory while building.
if [[ -n ${COBALT_EVERGREEN_LOADER} && "${BUILD_PLATFORM}" == "android-arm" ]]; then
ninja -C ${GITHUB_WORKSPACE}/out/${BUILD_PLATFORM}_${{matrix.config}} ${BUILD_TARGET}
ninja -j 1 -C ${GITHUB_WORKSPACE}/out/${BUILD_PLATFORM}_${{matrix.config}} ${BUILD_TARGET_INSTALL}
else
ninja -C ${GITHUB_WORKSPACE}/out/${BUILD_PLATFORM}_${{matrix.config}} ${BUILD_TARGET}
fi

shell: bash
- name: Show Sccache Stats
run: sccache -s
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/gn/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ runs:
if: startsWith(${{matrix.target_platform}}, 'android')
run: |
echo "ANDROID_HOME=/root/starboard-toolchains/AndroidSdk/" >> $GITHUB_ENV
echo "COBALT_GRADLE_BUILD_COUNT=24" >> $GITHUB_ENV
echo "COBALT_GRADLE_BUILD_COUNT=2" >> $GITHUB_ENV
PROJECT_NAME=$(gcloud config get-value project)
echo "GCS_NIGHTLY_PATH=gs://${PROJECT_NAME}-build-artifacts" >> $GITHUB_ENV
- name: GN
Expand Down
2 changes: 1 addition & 1 deletion .github/config/evergreen-arm-softfp.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"docker_service": "build-android-evergreen",
"evergreen_loader": "android-arm",
"on_device_test": {
"enabled": false,
"enabled": true,
"tests": [
"evergreen_test",
"0",
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ jobs:
shell: bash
run: |
set -u
COBALT_EVERGREEN_LOADER="${{needs.initialize.outputs.evergreen_loader}}"
COBALT_EVERGREEN_LOADER="${{ needs.initialize.outputs.evergreen_loader }}"
echo "COBALT_EVERGREEN_LOADER=${COBALT_EVERGREEN_LOADER}" >> $GITHUB_ENV
# Build Evergreen loader for on-host tests if necessary.
- name: Evergreen loader GN
Expand All @@ -295,7 +295,7 @@ jobs:
if: ${{ ( inputs.nightly == 'true' || github.event_name == 'schedule' ) && matrix.config != 'debug' }}
uses: ./.github/actions/upload_nightly_artifacts
- name: Upload Evergreen loader On Host Test Artifacts
if: ${{ needs.initialize.outputs.evergreen_loader != 'null' && matrix.config == 'devel' && needs.initialize.outputs.on_host_test == 'true'}}
if: ${{ needs.initialize.outputs.evergreen_loader != 'null' && matrix.config == 'devel' && needs.initialize.outputs.on_host_test == 'true' }}
uses: ./.github/actions/upload_test_artifacts
with:
type: onhost
Expand Down
36 changes: 29 additions & 7 deletions starboard/android/shared/install_target.gni
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,21 @@ template("install_target") {
not_needed(invoker, [ "type" ])

installable_target_name = invoker.installable_target_name
target_output = "$root_out_dir/lib${installable_target_name}.so"
gradle_content_dir = "$sb_install_output_dir/$installable_target_name/$sb_install_content_subdir"
gradle_files_dir = "$root_out_dir/gradle/$installable_target_name"

action("build_${target_name}_apk") {
forward_variables_from(invoker, [ "testonly" ])

deps = invoker.deps
deps += [ ":$installable_target_name" ]

target_output = "$root_out_dir/lib${installable_target_name}.so"
gradle_content_dir = "$sb_install_output_dir/$installable_target_name/$sb_install_content_subdir"
gradle_files_dir = "$root_out_dir/gradle/$installable_target_name"
# The gradle build expects libcrashpad_handler.so to be present in the out directory.
if (sb_is_evergreen_compatible) {
deps += [ "//starboard/loader_app:copy_crashpad_handler_named_as_so" ]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The crashpad_handler target is not needed for unit test targets. Removing the dependency will save us some space.

}

if (is_gold) {
gradle_build_type = "release"
} else {
Expand All @@ -62,8 +67,7 @@ template("install_target") {
cobalt_gradle_dir = rebase_path(gradle_files_dir)
cobalt_product_dir = rebase_path(root_out_dir)
cobalt_library_dir = rebase_path(root_out_dir)
project_cache_dir =
rebase_path("$root_build_dir/gradle/$installable_target_name/cache")
project_cache_dir = rebase_path("$gradle_files_dir/cache")
use_parallel_build = num_gradle_workers != "1"

script = "//starboard/build/run_bash.py"
Expand Down Expand Up @@ -93,9 +97,26 @@ template("install_target") {
"-P",
"evergreenCompatible=$sb_is_evergreen_compatible",
"assembleCobalt_$gradle_build_type",
"-Dorg.gradle.daemon=$use_parallel_build",
"-Dorg.gradle.parallel=$use_parallel_build",
"-Dorg.gradle.workers.max=$num_gradle_workers",
"-Dorg.gradle.workers.parallel=$use_parallel_build",
"-Dorg.gradle.workers.daemon=$use_parallel_build",
]
}

action("clean_${target_name}_gradle_files") {
forward_variables_from(invoker, [ "testonly" ])

deps = [ ":build_${invoker.target_name}_apk" ]

# TODO: Fake output.
outputs =
[ "${target_out_dir}/${target_name}-${invoker.target_name}.stamp" ]

script = "//starboard/build/run_bash.py"
args = [
"rm",
"-rf",
rebase_path(gradle_files_dir),
]
}

Expand All @@ -104,6 +125,7 @@ template("install_target") {
deps = [
":$installable_target_name",
":build_${target_name}_apk",
":clean_${target_name}_gradle_files",
]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ gtest_target_type = "shared_library"
starboard_level_final_executable_type = "shared_library"
starboard_level_gtest_target_type = "shared_library"

sb_enable_benchmark = true
# TODO: libbenchmark.so is not built by evergreen.
# Enabling it causes the EG AOSP build to fail due to it missing.
sb_enable_benchmark = false

size_config_path = "//starboard/android/shared/platform_configuration:size"
speed_config_path = "//starboard/android/shared/platform_configuration:speed"
Expand Down
3 changes: 3 additions & 0 deletions starboard/build/config/BUILDCONFIG.gn
Original file line number Diff line number Diff line change
Expand Up @@ -613,6 +613,9 @@ template("shared_library") {
}
}

# TODO(todo): Targets that have an evergreen loader don't support the
# regular install target. This should be controlled in some manner
# other than target name.
if (sb_is_evergreen_compatible && sb_evergreen_compatible_package &&
target_name != "loader_app") {
evergreen_loader(original_target_name + "_evergreen_loader") {
Expand Down
14 changes: 11 additions & 3 deletions starboard/evergreen/shared/launcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,6 @@ def __init__(self, platform, target_name, config, device_id, **kwargs):
env_variables['ASAN_OPTIONS'] = ':'.join(asan_options)
kwargs['env_variables'] = env_variables

# pylint: disable=super-with-arguments
super().__init__(platform, target_name, config, device_id, **kwargs)

self.loader_platform = kwargs.get('loader_platform')
if not self.loader_platform:
raise ValueError('|loader_platform| cannot be |None|.')
Expand All @@ -65,6 +62,14 @@ def __init__(self, platform, target_name, config, device_id, **kwargs):
if not self.loader_config:
raise ValueError('|loader_config| cannot be |None|.')

# Add the suffix if running android-arm. APKs built for evergreen have
# the suffix appended to differentiate them from monolithic builds.
if 'android-arm' in self.loader_platform:
target_name = target_name + '_evergreen_loader'

# pylint: disable=super-with-arguments
super().__init__(platform, target_name, config, device_id, **kwargs)

# RDK doesn't use our loader, therefore the test files are stored
# in the folder named after the target
if 'rdk' in self.loader_platform:
Expand Down Expand Up @@ -184,6 +189,9 @@ def _StageTargetsAndContents(self):
self._StageTargetsAndContentsRaspi()
elif 'rdk' in self.loader_platform:
self._StageTargetsAndContentsRdk()
elif 'android-arm' in self.loader_platform:
# No staging necessary for android-arm.
return
else:
raise ValueError(f"'{self.loader_platform}' is not recognized")

Expand Down
Loading