1 *cf78ab8cSAndroid Build Coastguard Worker#!/usr/bin/env python3 2 *cf78ab8cSAndroid Build Coastguard Worker# 3 *cf78ab8cSAndroid Build Coastguard Worker# Copyright 2023 - The Android Open Source Project 4 *cf78ab8cSAndroid Build Coastguard Worker# 5 *cf78ab8cSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the', help="License"); 6 *cf78ab8cSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7 *cf78ab8cSAndroid Build Coastguard Worker# You may obtain a copy of the License at 8 *cf78ab8cSAndroid Build Coastguard Worker# 9 *cf78ab8cSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10 *cf78ab8cSAndroid Build Coastguard Worker# 11 *cf78ab8cSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12 *cf78ab8cSAndroid Build Coastguard Worker# distributed under the License is distributed on an', help="AS IS" BASIS, 13 *cf78ab8cSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 *cf78ab8cSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15 *cf78ab8cSAndroid Build Coastguard Worker# limitations under the License. 16 *cf78ab8cSAndroid Build Coastguard Workerfrom __future__ import absolute_import, division, print_function 17 *cf78ab8cSAndroid Build Coastguard Worker 18 *cf78ab8cSAndroid Build Coastguard Workerimport argparse 19 *cf78ab8cSAndroid Build Coastguard Workerimport logging 20 *cf78ab8cSAndroid Build Coastguard Workerimport os 21 *cf78ab8cSAndroid Build Coastguard Workerfrom pathlib import Path 22 *cf78ab8cSAndroid Build Coastguard Worker 23 *cf78ab8cSAndroid Build Coastguard Workerfrom environment import get_default_environment 24 *cf78ab8cSAndroid Build Coastguard Workerfrom server_config import ServerConfig 25 *cf78ab8cSAndroid Build Coastguard Workerfrom tasks import ( 26 *cf78ab8cSAndroid Build Coastguard Worker TASK_LIST, 27 *cf78ab8cSAndroid Build Coastguard Worker get_tasks, 28 *cf78ab8cSAndroid Build Coastguard Worker log_enabled_tasks, 29 *cf78ab8cSAndroid Build Coastguard Worker) 30 *cf78ab8cSAndroid Build Coastguard Workerfrom utils import ( 31 *cf78ab8cSAndroid Build Coastguard Worker AOSP_ROOT, 32 *cf78ab8cSAndroid Build Coastguard Worker config_logging, 33 *cf78ab8cSAndroid Build Coastguard Worker create_emulator_artifact_path, 34 *cf78ab8cSAndroid Build Coastguard Worker default_target, 35 *cf78ab8cSAndroid Build Coastguard Worker fetch_build_chaining_artifacts, 36 *cf78ab8cSAndroid Build Coastguard Worker is_presubmit, 37 *cf78ab8cSAndroid Build Coastguard Worker log_system_info, 38 *cf78ab8cSAndroid Build Coastguard Worker) 39 *cf78ab8cSAndroid Build Coastguard Worker 40 *cf78ab8cSAndroid Build Coastguard Worker 41 *cf78ab8cSAndroid Build Coastguard Workerdef main(): 42 *cf78ab8cSAndroid Build Coastguard Worker config_logging() 43 *cf78ab8cSAndroid Build Coastguard Worker log_system_info() 44 *cf78ab8cSAndroid Build Coastguard Worker create_emulator_artifact_path() 45 *cf78ab8cSAndroid Build Coastguard Worker 46 *cf78ab8cSAndroid Build Coastguard Worker parser = argparse.ArgumentParser( 47 *cf78ab8cSAndroid Build Coastguard Worker description=( 48 *cf78ab8cSAndroid Build Coastguard Worker "Configures the android netsim cmake project so it can be build" 49 *cf78ab8cSAndroid Build Coastguard Worker ) 50 *cf78ab8cSAndroid Build Coastguard Worker ) 51 *cf78ab8cSAndroid Build Coastguard Worker parser.add_argument( 52 *cf78ab8cSAndroid Build Coastguard Worker "--out_dir", 53 *cf78ab8cSAndroid Build Coastguard Worker type=str, 54 *cf78ab8cSAndroid Build Coastguard Worker default="tools/netsim/objs/", 55 *cf78ab8cSAndroid Build Coastguard Worker help="The output directory", 56 *cf78ab8cSAndroid Build Coastguard Worker ) 57 *cf78ab8cSAndroid Build Coastguard Worker parser.add_argument( 58 *cf78ab8cSAndroid Build Coastguard Worker "--dist_dir", type=str, default="dist/", help="The destination directory" 59 *cf78ab8cSAndroid Build Coastguard Worker ) 60 *cf78ab8cSAndroid Build Coastguard Worker parser.add_argument( 61 *cf78ab8cSAndroid Build Coastguard Worker "--build-id", 62 *cf78ab8cSAndroid Build Coastguard Worker type=str, 63 *cf78ab8cSAndroid Build Coastguard Worker default="", 64 *cf78ab8cSAndroid Build Coastguard Worker dest="build_id", 65 *cf78ab8cSAndroid Build Coastguard Worker help="The netsim build number", 66 *cf78ab8cSAndroid Build Coastguard Worker ) 67 *cf78ab8cSAndroid Build Coastguard Worker parser.add_argument( 68 *cf78ab8cSAndroid Build Coastguard Worker "--target", 69 *cf78ab8cSAndroid Build Coastguard Worker type=str, 70 *cf78ab8cSAndroid Build Coastguard Worker default=default_target(), 71 *cf78ab8cSAndroid Build Coastguard Worker help="The build target, defaults to current os", 72 *cf78ab8cSAndroid Build Coastguard Worker ) 73 *cf78ab8cSAndroid Build Coastguard Worker parser.add_argument( 74 *cf78ab8cSAndroid Build Coastguard Worker "--enable_system_rust", 75 *cf78ab8cSAndroid Build Coastguard Worker action="store_true", 76 *cf78ab8cSAndroid Build Coastguard Worker help="Build the netsim with the System Rust on the host machine", 77 *cf78ab8cSAndroid Build Coastguard Worker ) 78 *cf78ab8cSAndroid Build Coastguard Worker parser.add_argument( 79 *cf78ab8cSAndroid Build Coastguard Worker "--with_debug", action="store_true", help="Build debug instead of release" 80 *cf78ab8cSAndroid Build Coastguard Worker ) 81 *cf78ab8cSAndroid Build Coastguard Worker parser.add_argument( 82 *cf78ab8cSAndroid Build Coastguard Worker "--buildbot", action="store_true", help="Invoked by Android buildbots" 83 *cf78ab8cSAndroid Build Coastguard Worker ) 84 *cf78ab8cSAndroid Build Coastguard Worker parser.add_argument( 85 *cf78ab8cSAndroid Build Coastguard Worker "--task", 86 *cf78ab8cSAndroid Build Coastguard Worker nargs="+", 87 *cf78ab8cSAndroid Build Coastguard Worker type=str.lower, 88 *cf78ab8cSAndroid Build Coastguard Worker choices=[choice.lower() for choice in TASK_LIST], 89 *cf78ab8cSAndroid Build Coastguard Worker help=( 90 *cf78ab8cSAndroid Build Coastguard Worker "Tasks to perform (Configure, Compile, CompileInstall," 91 *cf78ab8cSAndroid Build Coastguard Worker " InstallEmulator, RunPyTest, LocalRunAll)" 92 *cf78ab8cSAndroid Build Coastguard Worker ), 93 *cf78ab8cSAndroid Build Coastguard Worker ) 94 *cf78ab8cSAndroid Build Coastguard Worker parser.add_argument( 95 *cf78ab8cSAndroid Build Coastguard Worker "--config", 96 *cf78ab8cSAndroid Build Coastguard Worker default="release", 97 *cf78ab8cSAndroid Build Coastguard Worker choices=["debug", "release"], 98 *cf78ab8cSAndroid Build Coastguard Worker help="Whether we are building a release or debug configuration.", 99 *cf78ab8cSAndroid Build Coastguard Worker ) 100 *cf78ab8cSAndroid Build Coastguard Worker parser.add_argument( 101 *cf78ab8cSAndroid Build Coastguard Worker "--emulator_target", 102 *cf78ab8cSAndroid Build Coastguard Worker type=str, 103 *cf78ab8cSAndroid Build Coastguard Worker default="emulator-linux_x64", 104 *cf78ab8cSAndroid Build Coastguard Worker help=( 105 *cf78ab8cSAndroid Build Coastguard Worker "The emulator build target to install for local case, defaults to" 106 *cf78ab8cSAndroid Build Coastguard Worker " emulator-linux_x64" 107 *cf78ab8cSAndroid Build Coastguard Worker ), 108 *cf78ab8cSAndroid Build Coastguard Worker ) 109 *cf78ab8cSAndroid Build Coastguard Worker parser.add_argument( 110 *cf78ab8cSAndroid Build Coastguard Worker "--local_emulator_dir", 111 *cf78ab8cSAndroid Build Coastguard Worker type=str, 112 *cf78ab8cSAndroid Build Coastguard Worker default="", 113 *cf78ab8cSAndroid Build Coastguard Worker help=( 114 *cf78ab8cSAndroid Build Coastguard Worker "For providing an emulator build artifact in a directory." 115 *cf78ab8cSAndroid Build Coastguard Worker " This will install the emulator from local_emulator_dir instead of" 116 *cf78ab8cSAndroid Build Coastguard Worker " fetching the artifacts" 117 *cf78ab8cSAndroid Build Coastguard Worker ), 118 *cf78ab8cSAndroid Build Coastguard Worker ) 119 *cf78ab8cSAndroid Build Coastguard Worker parser.add_argument( 120 *cf78ab8cSAndroid Build Coastguard Worker "--pytest_input_dir", 121 *cf78ab8cSAndroid Build Coastguard Worker type=str, 122 *cf78ab8cSAndroid Build Coastguard Worker default="", 123 *cf78ab8cSAndroid Build Coastguard Worker help=( 124 *cf78ab8cSAndroid Build Coastguard Worker "For providing netsim & emulator binaries and libraries for pytest." 125 *cf78ab8cSAndroid Build Coastguard Worker " This will allow pytest to be run on directory path specified on" 126 *cf78ab8cSAndroid Build Coastguard Worker " pytest_input_dir" 127 *cf78ab8cSAndroid Build Coastguard Worker ), 128 *cf78ab8cSAndroid Build Coastguard Worker ) 129 *cf78ab8cSAndroid Build Coastguard Worker 130 *cf78ab8cSAndroid Build Coastguard Worker args = parser.parse_args() 131 *cf78ab8cSAndroid Build Coastguard Worker 132 *cf78ab8cSAndroid Build Coastguard Worker presubmit = is_presubmit(args.build_id) 133 *cf78ab8cSAndroid Build Coastguard Worker 134 *cf78ab8cSAndroid Build Coastguard Worker # The environment of build 135 *cf78ab8cSAndroid Build Coastguard Worker env = get_default_environment(AOSP_ROOT) 136 *cf78ab8cSAndroid Build Coastguard Worker if args.buildbot: 137 *cf78ab8cSAndroid Build Coastguard Worker cfg = ServerConfig(presubmit, args) 138 *cf78ab8cSAndroid Build Coastguard Worker env = cfg.get_env() 139 *cf78ab8cSAndroid Build Coastguard Worker 140 *cf78ab8cSAndroid Build Coastguard Worker # Set Environment Variables 141 *cf78ab8cSAndroid Build Coastguard Worker os.environ["GIT_DISCOVERY_ACROSS_FILESYSTEM"] = "1" 142 *cf78ab8cSAndroid Build Coastguard Worker if not args.buildbot: 143 *cf78ab8cSAndroid Build Coastguard Worker # Able to config C++ file in vscode. 144 *cf78ab8cSAndroid Build Coastguard Worker os.environ["CMAKE_EXPORT_COMPILE_COMMANDS"] = "1" 145 *cf78ab8cSAndroid Build Coastguard Worker 146 *cf78ab8cSAndroid Build Coastguard Worker # Provide absolute path for args.out_dir 147 *cf78ab8cSAndroid Build Coastguard Worker if not os.path.isabs(args.out_dir): 148 *cf78ab8cSAndroid Build Coastguard Worker args.out_dir = os.path.join(AOSP_ROOT, args.out_dir) 149 *cf78ab8cSAndroid Build Coastguard Worker 150 *cf78ab8cSAndroid Build Coastguard Worker # Build preparation work for buildbot 151 *cf78ab8cSAndroid Build Coastguard Worker if args.buildbot: 152 *cf78ab8cSAndroid Build Coastguard Worker # Fetch Emulator Artifacts 153 *cf78ab8cSAndroid Build Coastguard Worker fetch_build_chaining_artifacts(args.out_dir, presubmit) 154 *cf78ab8cSAndroid Build Coastguard Worker # Set the out_dir to "out/objs" 155 *cf78ab8cSAndroid Build Coastguard Worker args.out_dir = Path(args.out_dir) / "objs" 156 *cf78ab8cSAndroid Build Coastguard Worker 157 *cf78ab8cSAndroid Build Coastguard Worker # Obtain tasks 158 *cf78ab8cSAndroid Build Coastguard Worker tasks = get_tasks(args, env) 159 *cf78ab8cSAndroid Build Coastguard Worker 160 *cf78ab8cSAndroid Build Coastguard Worker # Log enabled tasks 161 *cf78ab8cSAndroid Build Coastguard Worker log_enabled_tasks(tasks) 162 *cf78ab8cSAndroid Build Coastguard Worker 163 *cf78ab8cSAndroid Build Coastguard Worker # Turn on sccache? 164 *cf78ab8cSAndroid Build Coastguard Worker # if args.buildbot and cfg.sccache: 165 *cf78ab8cSAndroid Build Coastguard Worker # launcher.append(f"-DOPTION_CCACHE=${cfg.sccache}") 166 *cf78ab8cSAndroid Build Coastguard Worker 167 *cf78ab8cSAndroid Build Coastguard Worker # Configure 168 *cf78ab8cSAndroid Build Coastguard Worker tasks.get("Configure").run() 169 *cf78ab8cSAndroid Build Coastguard Worker 170 *cf78ab8cSAndroid Build Coastguard Worker # Build 171 *cf78ab8cSAndroid Build Coastguard Worker tasks.get("Compile").run() 172 *cf78ab8cSAndroid Build Coastguard Worker 173 *cf78ab8cSAndroid Build Coastguard Worker # Install 174 *cf78ab8cSAndroid Build Coastguard Worker tasks.get("CompileInstall").run() 175 *cf78ab8cSAndroid Build Coastguard Worker 176 *cf78ab8cSAndroid Build Coastguard Worker # Run Tests 177 *cf78ab8cSAndroid Build Coastguard Worker tasks.get("RunTest").run() 178 *cf78ab8cSAndroid Build Coastguard Worker 179 *cf78ab8cSAndroid Build Coastguard Worker # Zip results.. 180 *cf78ab8cSAndroid Build Coastguard Worker tasks.get("ZipArtifact").run() 181 *cf78ab8cSAndroid Build Coastguard Worker 182 *cf78ab8cSAndroid Build Coastguard Worker # Install Emulator artifacts and Run PyTests 183 *cf78ab8cSAndroid Build Coastguard Worker tasks.get("InstallEmulator").run() 184 *cf78ab8cSAndroid Build Coastguard Worker tasks.get("RunPyTest").run() 185 *cf78ab8cSAndroid Build Coastguard Worker 186 *cf78ab8cSAndroid Build Coastguard Worker 187 *cf78ab8cSAndroid Build Coastguard Workerif __name__ == "__main__": 188 *cf78ab8cSAndroid Build Coastguard Worker main() 189