#!/usr/bin/env python3 # # Copyright 2023 - The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the', help="License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an', help="AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import absolute_import, division, print_function import argparse import logging import os from pathlib import Path from environment import get_default_environment from server_config import ServerConfig from tasks import ( TASK_LIST, get_tasks, log_enabled_tasks, ) from utils import ( AOSP_ROOT, config_logging, create_emulator_artifact_path, default_target, fetch_build_chaining_artifacts, is_presubmit, log_system_info, ) def main(): config_logging() log_system_info() create_emulator_artifact_path() parser = argparse.ArgumentParser( description=( "Configures the android netsim cmake project so it can be build" ) ) parser.add_argument( "--out_dir", type=str, default="tools/netsim/objs/", help="The output directory", ) parser.add_argument( "--dist_dir", type=str, default="dist/", help="The destination directory" ) parser.add_argument( "--build-id", type=str, default="", dest="build_id", help="The netsim build number", ) parser.add_argument( "--target", type=str, default=default_target(), help="The build target, defaults to current os", ) parser.add_argument( "--enable_system_rust", action="store_true", help="Build the netsim with the System Rust on the host machine", ) parser.add_argument( "--with_debug", action="store_true", help="Build debug instead of release" ) parser.add_argument( "--buildbot", action="store_true", help="Invoked by Android buildbots" ) parser.add_argument( "--task", nargs="+", type=str.lower, choices=[choice.lower() for choice in TASK_LIST], help=( "Tasks to perform (Configure, Compile, CompileInstall," " InstallEmulator, RunPyTest, LocalRunAll)" ), ) parser.add_argument( "--config", default="release", choices=["debug", "release"], help="Whether we are building a release or debug configuration.", ) parser.add_argument( "--emulator_target", type=str, default="emulator-linux_x64", help=( "The emulator build target to install for local case, defaults to" " emulator-linux_x64" ), ) parser.add_argument( "--local_emulator_dir", type=str, default="", help=( "For providing an emulator build artifact in a directory." " This will install the emulator from local_emulator_dir instead of" " fetching the artifacts" ), ) args = parser.parse_args() presubmit = is_presubmit(args.build_id) # The environment of build env = get_default_environment(AOSP_ROOT) if args.buildbot: cfg = ServerConfig(presubmit, args) env = cfg.get_env() # Set Environment Variables os.environ["GIT_DISCOVERY_ACROSS_FILESYSTEM"] = "1" if not args.buildbot: # Able to config C++ file in vscode. os.environ["CMAKE_EXPORT_COMPILE_COMMANDS"] = "1" # Provide absolute path for args.out_dir if not os.path.isabs(args.out_dir): args.out_dir = os.path.join(AOSP_ROOT, args.out_dir) # Build preparation work for buildbot if args.buildbot: # Fetch Emulator Artifacts fetch_build_chaining_artifacts(args.out_dir, presubmit) # Set the out_dir to "out/objs" args.out_dir = Path(args.out_dir) / "objs" # Obtain tasks tasks = get_tasks(args, env) # Log enabled tasks log_enabled_tasks(tasks) # Turn on sccache? # if args.buildbot and cfg.sccache: # launcher.append(f"-DOPTION_CCACHE=${cfg.sccache}") # Configure tasks.get("Configure").run() # Build tasks.get("Compile").run() # Install tasks.get("CompileInstall").run() # Zip results.. tasks.get("ZipArtifact").run() # Install Emulator artifacts and Run PyTests tasks.get("InstallEmulator").run() tasks.get("RunPyTest").run() if __name__ == "__main__": main()