1*890232f2SAndroid Build Coastguard Worker#!/usr/bin/env python3 2*890232f2SAndroid Build Coastguard Worker# 3*890232f2SAndroid Build Coastguard Worker# Copyright 2021 Google Inc. All rights reserved. 4*890232f2SAndroid Build Coastguard Worker# 5*890232f2SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*890232f2SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*890232f2SAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*890232f2SAndroid Build Coastguard Worker# 9*890232f2SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*890232f2SAndroid Build Coastguard Worker# 11*890232f2SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*890232f2SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*890232f2SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*890232f2SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*890232f2SAndroid Build Coastguard Worker# limitations under the License. 16*890232f2SAndroid Build Coastguard Worker 17*890232f2SAndroid Build Coastguard Workerimport argparse 18*890232f2SAndroid Build Coastguard Workerimport filecmp 19*890232f2SAndroid Build Coastguard Workerimport glob 20*890232f2SAndroid Build Coastguard Workerimport platform 21*890232f2SAndroid Build Coastguard Workerimport shutil 22*890232f2SAndroid Build Coastguard Workerimport subprocess 23*890232f2SAndroid Build Coastguard Workerimport generate_grpc_examples 24*890232f2SAndroid Build Coastguard Workerfrom pathlib import Path 25*890232f2SAndroid Build Coastguard Worker 26*890232f2SAndroid Build Coastguard Workerparser = argparse.ArgumentParser() 27*890232f2SAndroid Build Coastguard Workerparser.add_argument( 28*890232f2SAndroid Build Coastguard Worker "--flatc", 29*890232f2SAndroid Build Coastguard Worker help="path of the Flat C compiler relative to the root directory", 30*890232f2SAndroid Build Coastguard Worker) 31*890232f2SAndroid Build Coastguard Workerparser.add_argument("--cpp-0x", action="store_true", help="use --cpp-std c++ox") 32*890232f2SAndroid Build Coastguard Workerparser.add_argument( 33*890232f2SAndroid Build Coastguard Worker "--skip-monster-extra", 34*890232f2SAndroid Build Coastguard Worker action="store_true", 35*890232f2SAndroid Build Coastguard Worker help="skip generating tests involving monster_extra.fbs", 36*890232f2SAndroid Build Coastguard Worker) 37*890232f2SAndroid Build Coastguard Workerparser.add_argument( 38*890232f2SAndroid Build Coastguard Worker "--skip-gen-reflection", 39*890232f2SAndroid Build Coastguard Worker action="store_true", 40*890232f2SAndroid Build Coastguard Worker help="skip generating the reflection.fbs files", 41*890232f2SAndroid Build Coastguard Worker) 42*890232f2SAndroid Build Coastguard Workerargs = parser.parse_args() 43*890232f2SAndroid Build Coastguard Worker 44*890232f2SAndroid Build Coastguard Worker# Get the path where this script is located so we can invoke the script from 45*890232f2SAndroid Build Coastguard Worker# any directory and have the paths work correctly. 46*890232f2SAndroid Build Coastguard Workerscript_path = Path(__file__).parent.resolve() 47*890232f2SAndroid Build Coastguard Worker 48*890232f2SAndroid Build Coastguard Worker# Get the root path as an absolute path, so all derived paths are absolute. 49*890232f2SAndroid Build Coastguard Workerroot_path = script_path.parent.absolute() 50*890232f2SAndroid Build Coastguard Worker 51*890232f2SAndroid Build Coastguard Worker# Get the location of the flatc executable, reading from the first command line 52*890232f2SAndroid Build Coastguard Worker# argument or defaulting to default names. 53*890232f2SAndroid Build Coastguard Workerflatc_exe = Path( 54*890232f2SAndroid Build Coastguard Worker ("flatc" if not platform.system() == "Windows" else "flatc.exe") 55*890232f2SAndroid Build Coastguard Worker if not args.flatc 56*890232f2SAndroid Build Coastguard Worker else args.flatc 57*890232f2SAndroid Build Coastguard Worker) 58*890232f2SAndroid Build Coastguard Worker 59*890232f2SAndroid Build Coastguard Worker# Find and assert flatc compiler is present. 60*890232f2SAndroid Build Coastguard Workerif root_path in flatc_exe.parents: 61*890232f2SAndroid Build Coastguard Worker flatc_exe = flatc_exe.relative_to(root_path) 62*890232f2SAndroid Build Coastguard Workerflatc_path = Path(root_path, flatc_exe) 63*890232f2SAndroid Build Coastguard Workerassert flatc_path.exists(), "Cannot find the flatc compiler " + str(flatc_path) 64*890232f2SAndroid Build Coastguard Worker 65*890232f2SAndroid Build Coastguard Worker# Specify the other paths that will be referenced 66*890232f2SAndroid Build Coastguard Workertests_path = Path(root_path, "tests") 67*890232f2SAndroid Build Coastguard Workerswift_code_gen = Path(root_path, "tests/FlatBuffers.Test.Swift/CodeGenerationTests") 68*890232f2SAndroid Build Coastguard Workersamples_path = Path(root_path, "samples") 69*890232f2SAndroid Build Coastguard Workerreflection_path = Path(root_path, "reflection") 70*890232f2SAndroid Build Coastguard Worker 71*890232f2SAndroid Build Coastguard Worker# Execute the flatc compiler with the specified parameters 72*890232f2SAndroid Build Coastguard Workerdef flatc(options, schema, prefix=None, include=None, data=None, cwd=tests_path): 73*890232f2SAndroid Build Coastguard Worker cmd = [str(flatc_path)] + options 74*890232f2SAndroid Build Coastguard Worker if prefix: 75*890232f2SAndroid Build Coastguard Worker cmd += ["-o"] + [prefix] 76*890232f2SAndroid Build Coastguard Worker if include: 77*890232f2SAndroid Build Coastguard Worker cmd += ["-I"] + [include] 78*890232f2SAndroid Build Coastguard Worker cmd += [schema] if isinstance(schema, str) else schema 79*890232f2SAndroid Build Coastguard Worker if data: 80*890232f2SAndroid Build Coastguard Worker cmd += [data] if isinstance(data, str) else data 81*890232f2SAndroid Build Coastguard Worker result = subprocess.run(cmd, cwd=str(cwd), check=True) 82*890232f2SAndroid Build Coastguard Worker 83*890232f2SAndroid Build Coastguard Worker 84*890232f2SAndroid Build Coastguard Worker# Generate the code for flatbuffers reflection schema 85*890232f2SAndroid Build Coastguard Workerdef flatc_reflection(options, location, target): 86*890232f2SAndroid Build Coastguard Worker full_options = ["--no-prefix"] + options 87*890232f2SAndroid Build Coastguard Worker temp_dir = ".tmp" 88*890232f2SAndroid Build Coastguard Worker flatc( 89*890232f2SAndroid Build Coastguard Worker full_options, 90*890232f2SAndroid Build Coastguard Worker prefix=temp_dir, 91*890232f2SAndroid Build Coastguard Worker schema="reflection.fbs", 92*890232f2SAndroid Build Coastguard Worker cwd=reflection_path, 93*890232f2SAndroid Build Coastguard Worker ) 94*890232f2SAndroid Build Coastguard Worker new_reflection_path = Path(reflection_path, temp_dir, target) 95*890232f2SAndroid Build Coastguard Worker original_reflection_path = Path(root_path, location, target) 96*890232f2SAndroid Build Coastguard Worker if not filecmp.cmp(str(new_reflection_path), str(original_reflection_path)): 97*890232f2SAndroid Build Coastguard Worker shutil.rmtree(str(original_reflection_path), ignore_errors=True) 98*890232f2SAndroid Build Coastguard Worker shutil.move(str(new_reflection_path), str(original_reflection_path)) 99*890232f2SAndroid Build Coastguard Worker shutil.rmtree(str(Path(reflection_path, temp_dir))) 100*890232f2SAndroid Build Coastguard Worker 101*890232f2SAndroid Build Coastguard Workerdef flatc_annotate(schema, file, include=None, cwd=tests_path): 102*890232f2SAndroid Build Coastguard Worker cmd = [str(flatc_path)] 103*890232f2SAndroid Build Coastguard Worker if include: 104*890232f2SAndroid Build Coastguard Worker cmd += ["-I"] + [include] 105*890232f2SAndroid Build Coastguard Worker cmd += ["--annotate", schema, file] 106*890232f2SAndroid Build Coastguard Worker result = subprocess.run(cmd, cwd=str(cwd), check=True) 107*890232f2SAndroid Build Coastguard Worker 108*890232f2SAndroid Build Coastguard Worker# Glob a pattern relative to file path 109*890232f2SAndroid Build Coastguard Workerdef glob(path, pattern): 110*890232f2SAndroid Build Coastguard Worker return [str(p) for p in path.glob(pattern)] 111*890232f2SAndroid Build Coastguard Worker 112*890232f2SAndroid Build Coastguard Worker 113*890232f2SAndroid Build Coastguard Worker# flatc options that are shared 114*890232f2SAndroid Build Coastguard WorkerBASE_OPTS = ["--reflect-names", "--gen-mutable", "--gen-object-api"] 115*890232f2SAndroid Build Coastguard WorkerNO_INCL_OPTS = BASE_OPTS + ["--no-includes"] 116*890232f2SAndroid Build Coastguard Worker 117*890232f2SAndroid Build Coastguard Worker# Language specific options 118*890232f2SAndroid Build Coastguard WorkerCS_OPTS = ["--csharp", "--cs-gen-json-serializer"] 119*890232f2SAndroid Build Coastguard WorkerCPP_OPTS = [ 120*890232f2SAndroid Build Coastguard Worker "--cpp", 121*890232f2SAndroid Build Coastguard Worker "--gen-compare", 122*890232f2SAndroid Build Coastguard Worker "--cpp-ptr-type", 123*890232f2SAndroid Build Coastguard Worker "flatbuffers::unique_ptr", 124*890232f2SAndroid Build Coastguard Worker] + (["--cpp-std", "c++0x"] if args.cpp_0x else []) 125*890232f2SAndroid Build Coastguard Worker 126*890232f2SAndroid Build Coastguard WorkerCPP_17_OPTS = NO_INCL_OPTS + [ 127*890232f2SAndroid Build Coastguard Worker "--cpp", 128*890232f2SAndroid Build Coastguard Worker "--cpp-std", 129*890232f2SAndroid Build Coastguard Worker "c++17", 130*890232f2SAndroid Build Coastguard Worker "--cpp-static-reflection", 131*890232f2SAndroid Build Coastguard Worker "--gen-object-api", 132*890232f2SAndroid Build Coastguard Worker] 133*890232f2SAndroid Build Coastguard WorkerRUST_OPTS = BASE_OPTS + [ 134*890232f2SAndroid Build Coastguard Worker "--rust", 135*890232f2SAndroid Build Coastguard Worker "--gen-all", 136*890232f2SAndroid Build Coastguard Worker "--gen-name-strings", 137*890232f2SAndroid Build Coastguard Worker "--rust-module-root-file", 138*890232f2SAndroid Build Coastguard Worker] 139*890232f2SAndroid Build Coastguard WorkerRUST_SERIALIZE_OPTS = BASE_OPTS + [ 140*890232f2SAndroid Build Coastguard Worker "--rust", 141*890232f2SAndroid Build Coastguard Worker "--gen-all", 142*890232f2SAndroid Build Coastguard Worker "--gen-name-strings", 143*890232f2SAndroid Build Coastguard Worker "--rust-serialize", 144*890232f2SAndroid Build Coastguard Worker "--rust-module-root-file", 145*890232f2SAndroid Build Coastguard Worker] 146*890232f2SAndroid Build Coastguard WorkerTS_OPTS = ["--ts", "--gen-name-strings"] 147*890232f2SAndroid Build Coastguard WorkerLOBSTER_OPTS = ["--lobster"] 148*890232f2SAndroid Build Coastguard WorkerSWIFT_OPTS = ["--swift", "--gen-json-emit", "--bfbs-filenames", str(tests_path)] 149*890232f2SAndroid Build Coastguard WorkerSWIFT_OPTS_CODE_GEN = [ 150*890232f2SAndroid Build Coastguard Worker "--swift", 151*890232f2SAndroid Build Coastguard Worker "--gen-json-emit", 152*890232f2SAndroid Build Coastguard Worker "--bfbs-filenames", 153*890232f2SAndroid Build Coastguard Worker swift_code_gen 154*890232f2SAndroid Build Coastguard Worker] 155*890232f2SAndroid Build Coastguard WorkerJAVA_OPTS = ["--java"] 156*890232f2SAndroid Build Coastguard WorkerKOTLIN_OPTS = ["--kotlin"] 157*890232f2SAndroid Build Coastguard WorkerPHP_OPTS = ["--php"] 158*890232f2SAndroid Build Coastguard WorkerDART_OPTS = ["--dart"] 159*890232f2SAndroid Build Coastguard WorkerPYTHON_OPTS = ["--python"] 160*890232f2SAndroid Build Coastguard WorkerBINARY_OPTS = ["-b", "--schema", "--bfbs-comments", "--bfbs-builtins"] 161*890232f2SAndroid Build Coastguard Worker 162*890232f2SAndroid Build Coastguard Worker# Basic Usage 163*890232f2SAndroid Build Coastguard Worker 164*890232f2SAndroid Build Coastguard Workerflatc( 165*890232f2SAndroid Build Coastguard Worker NO_INCL_OPTS 166*890232f2SAndroid Build Coastguard Worker + CPP_OPTS 167*890232f2SAndroid Build Coastguard Worker + CS_OPTS 168*890232f2SAndroid Build Coastguard Worker + TS_OPTS 169*890232f2SAndroid Build Coastguard Worker + [ 170*890232f2SAndroid Build Coastguard Worker "--binary", 171*890232f2SAndroid Build Coastguard Worker "--java", 172*890232f2SAndroid Build Coastguard Worker "--kotlin", 173*890232f2SAndroid Build Coastguard Worker "--dart", 174*890232f2SAndroid Build Coastguard Worker "--go", 175*890232f2SAndroid Build Coastguard Worker "--lobster", 176*890232f2SAndroid Build Coastguard Worker "--php", 177*890232f2SAndroid Build Coastguard Worker ], 178*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 179*890232f2SAndroid Build Coastguard Worker include="include_test", 180*890232f2SAndroid Build Coastguard Worker data="monsterdata_test.json", 181*890232f2SAndroid Build Coastguard Worker) 182*890232f2SAndroid Build Coastguard Worker 183*890232f2SAndroid Build Coastguard Workerflatc( 184*890232f2SAndroid Build Coastguard Worker ["--lua", "--bfbs-filenames", str(tests_path)], 185*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 186*890232f2SAndroid Build Coastguard Worker include="include_test", 187*890232f2SAndroid Build Coastguard Worker) 188*890232f2SAndroid Build Coastguard Worker 189*890232f2SAndroid Build Coastguard Workerflatc( 190*890232f2SAndroid Build Coastguard Worker NO_INCL_OPTS + CPP_OPTS + ["--grpc"], 191*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 192*890232f2SAndroid Build Coastguard Worker include="include_test", 193*890232f2SAndroid Build Coastguard Worker data="monsterdata_test.json", 194*890232f2SAndroid Build Coastguard Worker) 195*890232f2SAndroid Build Coastguard Worker 196*890232f2SAndroid Build Coastguard Workerflatc( 197*890232f2SAndroid Build Coastguard Worker RUST_OPTS, 198*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 199*890232f2SAndroid Build Coastguard Worker include="include_test", 200*890232f2SAndroid Build Coastguard Worker prefix="monster_test", 201*890232f2SAndroid Build Coastguard Worker data="monsterdata_test.json", 202*890232f2SAndroid Build Coastguard Worker) 203*890232f2SAndroid Build Coastguard Worker 204*890232f2SAndroid Build Coastguard Workerflatc( 205*890232f2SAndroid Build Coastguard Worker RUST_SERIALIZE_OPTS, 206*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 207*890232f2SAndroid Build Coastguard Worker include="include_test", 208*890232f2SAndroid Build Coastguard Worker prefix="monster_test_serialize", 209*890232f2SAndroid Build Coastguard Worker data="monsterdata_test.json", 210*890232f2SAndroid Build Coastguard Worker) 211*890232f2SAndroid Build Coastguard Worker 212*890232f2SAndroid Build Coastguard Workerflatc( 213*890232f2SAndroid Build Coastguard Worker options=BASE_OPTS + ["--python"], 214*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 215*890232f2SAndroid Build Coastguard Worker include="include_test", 216*890232f2SAndroid Build Coastguard Worker data="monsterdata_test.json", 217*890232f2SAndroid Build Coastguard Worker) 218*890232f2SAndroid Build Coastguard Worker 219*890232f2SAndroid Build Coastguard Workerflatc( 220*890232f2SAndroid Build Coastguard Worker options=BASE_OPTS + ["--python", "--gen-onefile"], 221*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 222*890232f2SAndroid Build Coastguard Worker include="include_test", 223*890232f2SAndroid Build Coastguard Worker data="monsterdata_test.json", 224*890232f2SAndroid Build Coastguard Worker) 225*890232f2SAndroid Build Coastguard Worker 226*890232f2SAndroid Build Coastguard Worker# For Rust we currently generate two independent schemas, with namespace_test2 227*890232f2SAndroid Build Coastguard Worker# duplicating the types in namespace_test1 228*890232f2SAndroid Build Coastguard Workerflatc( 229*890232f2SAndroid Build Coastguard Worker RUST_OPTS, 230*890232f2SAndroid Build Coastguard Worker prefix="namespace_test", 231*890232f2SAndroid Build Coastguard Worker schema=[ 232*890232f2SAndroid Build Coastguard Worker "namespace_test/namespace_test1.fbs", 233*890232f2SAndroid Build Coastguard Worker "namespace_test/namespace_test2.fbs", 234*890232f2SAndroid Build Coastguard Worker ], 235*890232f2SAndroid Build Coastguard Worker) 236*890232f2SAndroid Build Coastguard Worker 237*890232f2SAndroid Build Coastguard Workerflatc( 238*890232f2SAndroid Build Coastguard Worker BASE_OPTS + CPP_OPTS + CS_OPTS + TS_OPTS + JAVA_OPTS + KOTLIN_OPTS + PHP_OPTS, 239*890232f2SAndroid Build Coastguard Worker prefix="union_vector", 240*890232f2SAndroid Build Coastguard Worker schema="union_vector/union_vector.fbs", 241*890232f2SAndroid Build Coastguard Worker) 242*890232f2SAndroid Build Coastguard Worker 243*890232f2SAndroid Build Coastguard Workerflatc( 244*890232f2SAndroid Build Coastguard Worker BASE_OPTS + TS_OPTS + ["--gen-name-strings", "--gen-mutable"], 245*890232f2SAndroid Build Coastguard Worker include="include_test", 246*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 247*890232f2SAndroid Build Coastguard Worker) 248*890232f2SAndroid Build Coastguard Worker 249*890232f2SAndroid Build Coastguard Worker# Generate the complete flat file TS of monster. 250*890232f2SAndroid Build Coastguard Workerflatc( 251*890232f2SAndroid Build Coastguard Worker ["--ts", "--gen-all", "--ts-flat-files"], 252*890232f2SAndroid Build Coastguard Worker include="include_test", 253*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 254*890232f2SAndroid Build Coastguard Worker prefix="ts/ts-flat-files" 255*890232f2SAndroid Build Coastguard Worker) 256*890232f2SAndroid Build Coastguard Worker 257*890232f2SAndroid Build Coastguard Workerflatc( 258*890232f2SAndroid Build Coastguard Worker BASE_OPTS + TS_OPTS + ["-b"], 259*890232f2SAndroid Build Coastguard Worker include="include_test", 260*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 261*890232f2SAndroid Build Coastguard Worker data="unicode_test.json", 262*890232f2SAndroid Build Coastguard Worker) 263*890232f2SAndroid Build Coastguard Worker 264*890232f2SAndroid Build Coastguard Workerflatc( 265*890232f2SAndroid Build Coastguard Worker BASE_OPTS + TS_OPTS + ["--gen-name-strings"], 266*890232f2SAndroid Build Coastguard Worker prefix="union_vector", 267*890232f2SAndroid Build Coastguard Worker schema="union_vector/union_vector.fbs", 268*890232f2SAndroid Build Coastguard Worker) 269*890232f2SAndroid Build Coastguard Worker 270*890232f2SAndroid Build Coastguard Workerflatc( 271*890232f2SAndroid Build Coastguard Worker RUST_OPTS, 272*890232f2SAndroid Build Coastguard Worker prefix="include_test1", 273*890232f2SAndroid Build Coastguard Worker include="include_test", 274*890232f2SAndroid Build Coastguard Worker schema="include_test/include_test1.fbs", 275*890232f2SAndroid Build Coastguard Worker) 276*890232f2SAndroid Build Coastguard Worker 277*890232f2SAndroid Build Coastguard Workerflatc( 278*890232f2SAndroid Build Coastguard Worker RUST_OPTS, 279*890232f2SAndroid Build Coastguard Worker prefix="include_test2", 280*890232f2SAndroid Build Coastguard Worker include="include_test", 281*890232f2SAndroid Build Coastguard Worker schema="include_test/sub/include_test2.fbs", 282*890232f2SAndroid Build Coastguard Worker) 283*890232f2SAndroid Build Coastguard Worker 284*890232f2SAndroid Build Coastguard Workerflatc( 285*890232f2SAndroid Build Coastguard Worker BINARY_OPTS + ["--bfbs-filenames", str(tests_path)], 286*890232f2SAndroid Build Coastguard Worker include="include_test", 287*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 288*890232f2SAndroid Build Coastguard Worker) 289*890232f2SAndroid Build Coastguard Worker 290*890232f2SAndroid Build Coastguard Worker# Generate the annotated binary of the monster_test binary schema. 291*890232f2SAndroid Build Coastguard Workerflatc_annotate( 292*890232f2SAndroid Build Coastguard Worker schema="../reflection/reflection.fbs", 293*890232f2SAndroid Build Coastguard Worker file="monster_test.bfbs", 294*890232f2SAndroid Build Coastguard Worker include="include_test" 295*890232f2SAndroid Build Coastguard Worker) 296*890232f2SAndroid Build Coastguard Worker 297*890232f2SAndroid Build Coastguard Workerflatc_annotate( 298*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 299*890232f2SAndroid Build Coastguard Worker file="monsterdata_test.mon", 300*890232f2SAndroid Build Coastguard Worker include="include_test" 301*890232f2SAndroid Build Coastguard Worker) 302*890232f2SAndroid Build Coastguard Worker 303*890232f2SAndroid Build Coastguard Workerflatc( 304*890232f2SAndroid Build Coastguard Worker CPP_OPTS 305*890232f2SAndroid Build Coastguard Worker + NO_INCL_OPTS 306*890232f2SAndroid Build Coastguard Worker + [ 307*890232f2SAndroid Build Coastguard Worker "--bfbs-comments", 308*890232f2SAndroid Build Coastguard Worker "--bfbs-builtins", 309*890232f2SAndroid Build Coastguard Worker "--bfbs-gen-embed", 310*890232f2SAndroid Build Coastguard Worker "--bfbs-filenames", 311*890232f2SAndroid Build Coastguard Worker str(tests_path), 312*890232f2SAndroid Build Coastguard Worker ], 313*890232f2SAndroid Build Coastguard Worker include="include_test", 314*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 315*890232f2SAndroid Build Coastguard Worker) 316*890232f2SAndroid Build Coastguard Worker 317*890232f2SAndroid Build Coastguard Workerflatc( 318*890232f2SAndroid Build Coastguard Worker BINARY_OPTS + ["--bfbs-filenames", str(tests_path)], 319*890232f2SAndroid Build Coastguard Worker include="include_test", 320*890232f2SAndroid Build Coastguard Worker schema="arrays_test.fbs", 321*890232f2SAndroid Build Coastguard Worker) 322*890232f2SAndroid Build Coastguard Worker 323*890232f2SAndroid Build Coastguard Workerflatc( 324*890232f2SAndroid Build Coastguard Worker ["--jsonschema", "--schema"], 325*890232f2SAndroid Build Coastguard Worker include="include_test", 326*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 327*890232f2SAndroid Build Coastguard Worker) 328*890232f2SAndroid Build Coastguard Worker 329*890232f2SAndroid Build Coastguard Workerif not args.skip_monster_extra: 330*890232f2SAndroid Build Coastguard Worker flatc( 331*890232f2SAndroid Build Coastguard Worker CPP_OPTS + CS_OPTS + NO_INCL_OPTS + JAVA_OPTS + KOTLIN_OPTS + PYTHON_OPTS, 332*890232f2SAndroid Build Coastguard Worker schema="monster_extra.fbs", 333*890232f2SAndroid Build Coastguard Worker data="monsterdata_extra.json", 334*890232f2SAndroid Build Coastguard Worker ) 335*890232f2SAndroid Build Coastguard Worker 336*890232f2SAndroid Build Coastguard Worker flatc( 337*890232f2SAndroid Build Coastguard Worker DART_OPTS + ["--gen-object-api"], 338*890232f2SAndroid Build Coastguard Worker schema="monster_extra.fbs", 339*890232f2SAndroid Build Coastguard Worker ) 340*890232f2SAndroid Build Coastguard Worker 341*890232f2SAndroid Build Coastguard Workerflatc( 342*890232f2SAndroid Build Coastguard Worker CPP_OPTS + CS_OPTS + NO_INCL_OPTS + JAVA_OPTS + ["--jsonschema", "--scoped-enums"], 343*890232f2SAndroid Build Coastguard Worker schema="arrays_test.fbs", 344*890232f2SAndroid Build Coastguard Worker) 345*890232f2SAndroid Build Coastguard Worker 346*890232f2SAndroid Build Coastguard Workerflatc( 347*890232f2SAndroid Build Coastguard Worker RUST_OPTS, 348*890232f2SAndroid Build Coastguard Worker prefix="arrays_test", 349*890232f2SAndroid Build Coastguard Worker schema="arrays_test.fbs", 350*890232f2SAndroid Build Coastguard Worker) 351*890232f2SAndroid Build Coastguard Worker 352*890232f2SAndroid Build Coastguard Workerflatc( 353*890232f2SAndroid Build Coastguard Worker BASE_OPTS + PYTHON_OPTS, 354*890232f2SAndroid Build Coastguard Worker schema="arrays_test.fbs", 355*890232f2SAndroid Build Coastguard Worker) 356*890232f2SAndroid Build Coastguard Worker 357*890232f2SAndroid Build Coastguard Worker 358*890232f2SAndroid Build Coastguard Worker# Optional Scalars 359*890232f2SAndroid Build Coastguard Workeroptional_scalars_schema = "optional_scalars.fbs" 360*890232f2SAndroid Build Coastguard Workerflatc(["--java", "--kotlin", "--lobster", "--ts"], schema=optional_scalars_schema) 361*890232f2SAndroid Build Coastguard Worker 362*890232f2SAndroid Build Coastguard Workerflatc(["--csharp", "--python", "--gen-object-api"], schema=optional_scalars_schema) 363*890232f2SAndroid Build Coastguard Worker 364*890232f2SAndroid Build Coastguard Workerflatc(RUST_OPTS, prefix="optional_scalars", schema=optional_scalars_schema) 365*890232f2SAndroid Build Coastguard Worker 366*890232f2SAndroid Build Coastguard Workerflatc(NO_INCL_OPTS + CPP_OPTS, schema=optional_scalars_schema) 367*890232f2SAndroid Build Coastguard Worker 368*890232f2SAndroid Build Coastguard Worker# Type / field collsion 369*890232f2SAndroid Build Coastguard Workertype_field_collsion_schema = "type_field_collsion.fbs" 370*890232f2SAndroid Build Coastguard Worker 371*890232f2SAndroid Build Coastguard Workerflatc(["--csharp", "--gen-object-api"], schema=type_field_collsion_schema) 372*890232f2SAndroid Build Coastguard Worker 373*890232f2SAndroid Build Coastguard Worker# Generate string/vector default code for tests 374*890232f2SAndroid Build Coastguard Workerflatc(RUST_OPTS, prefix="more_defaults", schema="more_defaults.fbs") 375*890232f2SAndroid Build Coastguard Worker 376*890232f2SAndroid Build Coastguard Worker# Generate the schema evolution tests 377*890232f2SAndroid Build Coastguard Workerflatc( 378*890232f2SAndroid Build Coastguard Worker CPP_OPTS + ["--scoped-enums"], 379*890232f2SAndroid Build Coastguard Worker prefix="evolution_test", 380*890232f2SAndroid Build Coastguard Worker schema=glob(tests_path, "evolution_test/evolution_v*.fbs"), 381*890232f2SAndroid Build Coastguard Worker) 382*890232f2SAndroid Build Coastguard Worker 383*890232f2SAndroid Build Coastguard Worker# Generate the keywords tests 384*890232f2SAndroid Build Coastguard Workerflatc(BASE_OPTS + CS_OPTS, schema="keyword_test.fbs") 385*890232f2SAndroid Build Coastguard Workerflatc(RUST_OPTS, prefix="keyword_test", schema="keyword_test.fbs") 386*890232f2SAndroid Build Coastguard Workerflatc( 387*890232f2SAndroid Build Coastguard Worker BASE_OPTS + CS_OPTS + ["--cs-global-alias", "--gen-onefile"], 388*890232f2SAndroid Build Coastguard Worker prefix="nested_namespace_test", 389*890232f2SAndroid Build Coastguard Worker schema=glob(tests_path, "nested_namespace_test/nested_namespace_test*.fbs"), 390*890232f2SAndroid Build Coastguard Worker) 391*890232f2SAndroid Build Coastguard Workerflatc(BASE_OPTS + DART_OPTS, prefix="../dart/test/", schema="keyword_test.fbs") 392*890232f2SAndroid Build Coastguard Worker 393*890232f2SAndroid Build Coastguard Worker# Field key lookup with default value test 394*890232f2SAndroid Build Coastguard Workerdictionary_lookup_schema = "dictionary_lookup.fbs" 395*890232f2SAndroid Build Coastguard Workerflatc(["--java", "--kotlin"], schema=dictionary_lookup_schema) 396*890232f2SAndroid Build Coastguard Worker 397*890232f2SAndroid Build Coastguard Worker# Swift Tests 398*890232f2SAndroid Build Coastguard Workerswift_prefix = "FlatBuffers.Test.Swift/Tests/FlatBuffers.Test.SwiftTests" 399*890232f2SAndroid Build Coastguard Workerflatc( 400*890232f2SAndroid Build Coastguard Worker SWIFT_OPTS + BASE_OPTS + ["--grpc"], 401*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 402*890232f2SAndroid Build Coastguard Worker include="include_test", 403*890232f2SAndroid Build Coastguard Worker prefix=swift_prefix, 404*890232f2SAndroid Build Coastguard Worker) 405*890232f2SAndroid Build Coastguard Workerflatc( 406*890232f2SAndroid Build Coastguard Worker SWIFT_OPTS + BASE_OPTS, 407*890232f2SAndroid Build Coastguard Worker schema="union_vector/union_vector.fbs", 408*890232f2SAndroid Build Coastguard Worker prefix=swift_prefix, 409*890232f2SAndroid Build Coastguard Worker) 410*890232f2SAndroid Build Coastguard Workerflatc(SWIFT_OPTS, schema="optional_scalars.fbs", prefix=swift_prefix) 411*890232f2SAndroid Build Coastguard Workerflatc(SWIFT_OPTS, schema="vector_has_test.fbs", prefix=swift_prefix) 412*890232f2SAndroid Build Coastguard Workerflatc( 413*890232f2SAndroid Build Coastguard Worker SWIFT_OPTS + ["--gen-object-api"], 414*890232f2SAndroid Build Coastguard Worker schema="more_defaults.fbs", 415*890232f2SAndroid Build Coastguard Worker prefix=swift_prefix, 416*890232f2SAndroid Build Coastguard Worker) 417*890232f2SAndroid Build Coastguard Workerflatc( 418*890232f2SAndroid Build Coastguard Worker SWIFT_OPTS + BASE_OPTS, 419*890232f2SAndroid Build Coastguard Worker schema="MutatingBool.fbs", 420*890232f2SAndroid Build Coastguard Worker prefix=swift_prefix, 421*890232f2SAndroid Build Coastguard Worker) 422*890232f2SAndroid Build Coastguard Worker 423*890232f2SAndroid Build Coastguard Workerflatc( 424*890232f2SAndroid Build Coastguard Worker SWIFT_OPTS_CODE_GEN + BASE_OPTS + ["--grpc", "--swift-implementation-only"], 425*890232f2SAndroid Build Coastguard Worker schema="test_import.fbs", 426*890232f2SAndroid Build Coastguard Worker cwd=swift_code_gen 427*890232f2SAndroid Build Coastguard Worker) 428*890232f2SAndroid Build Coastguard Worker 429*890232f2SAndroid Build Coastguard Workerflatc( 430*890232f2SAndroid Build Coastguard Worker SWIFT_OPTS_CODE_GEN + NO_INCL_OPTS + ["--grpc"], 431*890232f2SAndroid Build Coastguard Worker schema="test_no_include.fbs", 432*890232f2SAndroid Build Coastguard Worker cwd=swift_code_gen 433*890232f2SAndroid Build Coastguard Worker) 434*890232f2SAndroid Build Coastguard Worker 435*890232f2SAndroid Build Coastguard Worker# --filename-suffix and --filename-ext tests 436*890232f2SAndroid Build Coastguard Workerflatc( 437*890232f2SAndroid Build Coastguard Worker CPP_OPTS + NO_INCL_OPTS + ["--grpc", "--filename-ext", "hpp"], 438*890232f2SAndroid Build Coastguard Worker include="include_test", 439*890232f2SAndroid Build Coastguard Worker prefix="monster_test_suffix/ext_only", 440*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 441*890232f2SAndroid Build Coastguard Worker) 442*890232f2SAndroid Build Coastguard Workerflatc( 443*890232f2SAndroid Build Coastguard Worker CPP_OPTS + NO_INCL_OPTS + ["--grpc", "--filename-suffix", "_suffix"], 444*890232f2SAndroid Build Coastguard Worker include="include_test", 445*890232f2SAndroid Build Coastguard Worker prefix="monster_test_suffix/filesuffix_only", 446*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 447*890232f2SAndroid Build Coastguard Worker) 448*890232f2SAndroid Build Coastguard Workerflatc( 449*890232f2SAndroid Build Coastguard Worker CPP_OPTS + NO_INCL_OPTS + ["--grpc", "--filename-suffix", "_suffix", "--filename-ext", "hpp"], 450*890232f2SAndroid Build Coastguard Worker include="include_test", 451*890232f2SAndroid Build Coastguard Worker prefix="monster_test_suffix", 452*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 453*890232f2SAndroid Build Coastguard Worker) 454*890232f2SAndroid Build Coastguard Worker 455*890232f2SAndroid Build Coastguard Worker# Flag c++17 requires Clang6, GCC7, MSVC2017 (_MSC_VER >= 1914) or higher. 456*890232f2SAndroid Build Coastguard Workercpp_17_prefix = "cpp17/generated_cpp17" 457*890232f2SAndroid Build Coastguard Workerflatc( 458*890232f2SAndroid Build Coastguard Worker CPP_17_OPTS, 459*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", 460*890232f2SAndroid Build Coastguard Worker include="include_test", 461*890232f2SAndroid Build Coastguard Worker prefix=cpp_17_prefix, 462*890232f2SAndroid Build Coastguard Worker) 463*890232f2SAndroid Build Coastguard Workerflatc( 464*890232f2SAndroid Build Coastguard Worker CPP_17_OPTS, 465*890232f2SAndroid Build Coastguard Worker schema="optional_scalars.fbs", 466*890232f2SAndroid Build Coastguard Worker prefix=cpp_17_prefix, 467*890232f2SAndroid Build Coastguard Worker) 468*890232f2SAndroid Build Coastguard Workerflatc( 469*890232f2SAndroid Build Coastguard Worker CPP_17_OPTS, 470*890232f2SAndroid Build Coastguard Worker schema="union_vector/union_vector.fbs", 471*890232f2SAndroid Build Coastguard Worker prefix=cpp_17_prefix, 472*890232f2SAndroid Build Coastguard Worker) 473*890232f2SAndroid Build Coastguard Worker 474*890232f2SAndroid Build Coastguard Worker# Private annotations 475*890232f2SAndroid Build Coastguard Workerannotations_test_schema = "private_annotation_test.fbs" 476*890232f2SAndroid Build Coastguard Worker 477*890232f2SAndroid Build Coastguard Workerflatc(RUST_OPTS + ["--no-leak-private-annotation", "--gen-object-api"], prefix="private_annotation_test", schema=annotations_test_schema) 478*890232f2SAndroid Build Coastguard Worker 479*890232f2SAndroid Build Coastguard Worker# Sample files 480*890232f2SAndroid Build Coastguard Workersamples_schema = "monster.fbs" 481*890232f2SAndroid Build Coastguard Workerflatc(BASE_OPTS + CPP_OPTS + LOBSTER_OPTS, schema=samples_schema, cwd=samples_path) 482*890232f2SAndroid Build Coastguard Workerflatc(RUST_OPTS, prefix="rust_generated", schema=samples_schema, cwd=samples_path) 483*890232f2SAndroid Build Coastguard Workerflatc( 484*890232f2SAndroid Build Coastguard Worker BINARY_OPTS + ["--bfbs-filenames", str(samples_path)], 485*890232f2SAndroid Build Coastguard Worker schema=samples_schema, 486*890232f2SAndroid Build Coastguard Worker cwd=samples_path, 487*890232f2SAndroid Build Coastguard Worker) 488*890232f2SAndroid Build Coastguard Worker 489*890232f2SAndroid Build Coastguard Worker# Reflection 490*890232f2SAndroid Build Coastguard Worker 491*890232f2SAndroid Build Coastguard Worker# Skip generating the reflection if told too, as we run this script after 492*890232f2SAndroid Build Coastguard Worker# building flatc which uses the reflection_generated.h itself. 493*890232f2SAndroid Build Coastguard Workerif not args.skip_gen_reflection: 494*890232f2SAndroid Build Coastguard Worker # C++ Reflection 495*890232f2SAndroid Build Coastguard Worker flatc_reflection( 496*890232f2SAndroid Build Coastguard Worker ["-c", "--cpp-std", "c++0x"], "include/flatbuffers", "reflection_generated.h" 497*890232f2SAndroid Build Coastguard Worker ) 498*890232f2SAndroid Build Coastguard Worker 499*890232f2SAndroid Build Coastguard Worker# Python Reflection 500*890232f2SAndroid Build Coastguard Workerflatc_reflection(["-p"], "python/flatbuffers", "reflection") 501*890232f2SAndroid Build Coastguard Worker 502*890232f2SAndroid Build Coastguard Worker# Annotation 503*890232f2SAndroid Build Coastguard Worker 504*890232f2SAndroid Build Coastguard Worker 505*890232f2SAndroid Build Coastguard Workerdef flatc_annotate(schema, include=None, data=None, cwd=tests_path): 506*890232f2SAndroid Build Coastguard Worker cmd = [str(flatc_path)] 507*890232f2SAndroid Build Coastguard Worker if include: 508*890232f2SAndroid Build Coastguard Worker cmd += ["-I"] + [include] 509*890232f2SAndroid Build Coastguard Worker cmd += ["--annotate", schema] 510*890232f2SAndroid Build Coastguard Worker if data: 511*890232f2SAndroid Build Coastguard Worker cmd += [data] if isinstance(data, str) else data 512*890232f2SAndroid Build Coastguard Worker subprocess.run(cmd, cwd=str(cwd), check=True) 513*890232f2SAndroid Build Coastguard Worker 514*890232f2SAndroid Build Coastguard Worker 515*890232f2SAndroid Build Coastguard Workerflatc_annotate( 516*890232f2SAndroid Build Coastguard Worker schema="monster_test.fbs", include="include_test", data="monsterdata_test.mon" 517*890232f2SAndroid Build Coastguard Worker) 518*890232f2SAndroid Build Coastguard Worker 519*890232f2SAndroid Build Coastguard Worker# Run the generate_grpc_examples script 520*890232f2SAndroid Build Coastguard Workergenerate_grpc_examples.GenerateGRPCExamples() 521