From 2a634f452c96fcb60a8f763d0ec9ffbaa17f1f7b Mon Sep 17 00:00:00 2001 From: Kevin Gozali Date: Sat, 24 Oct 2020 13:59:57 -0700 Subject: [PATCH] Codegen BUCK: moved generate-test.sh to be general-purpose generate-all CLI Summary: This moves the test script that generates **all outputs using all generators** to a dedicated "generate-all" CLI. This allows us to use it via Buck, at FB and OSS. Also renamed the target to be more specific: "rn_codegen" => "generate_all_from_schema" Changelog: [Internal] Reviewed By: hramos Differential Revision: D24513995 fbshipit-source-id: 8435d3d065718eb1309c1c61fe28fb592787311a --- packages/react-native-codegen/DEFS.bzl | 104 +++++++++--------- .../scripts/buck-oss/generate-all.sh | 15 +++ .../cli/generators/generate-all.js} | 6 +- .../cli/generators/generate-all.sh} | 4 +- tools/build_defs/oss/rn_defs.bzl | 6 + 5 files changed, 77 insertions(+), 58 deletions(-) create mode 100755 packages/react-native-codegen/scripts/buck-oss/generate-all.sh rename packages/react-native-codegen/{buck_tests/generate-tests.js => src/cli/generators/generate-all.js} (89%) rename packages/react-native-codegen/{buck_tests/generate-tests.sh => src/cli/generators/generate-all.sh} (77%) diff --git a/packages/react-native-codegen/DEFS.bzl b/packages/react-native-codegen/DEFS.bzl index 1df3d9222c3..ca4b377a417 100644 --- a/packages/react-native-codegen/DEFS.bzl +++ b/packages/react-native-codegen/DEFS.bzl @@ -9,7 +9,6 @@ load( "IS_OSS_BUILD", "MACOSX", "YOGA_CXX_TARGET", - "fb_apple_library", "fb_xplat_cxx_test", "get_apple_compiler_flags", "get_apple_inspector_flags", @@ -21,6 +20,7 @@ load( "react_native_xplat_target", "react_native_xplat_target_apple", "rn_android_library", + "rn_apple_library", "rn_xplat_cxx_library", ) @@ -41,15 +41,14 @@ def rn_codegen_cli(): ) fb_native.sh_binary( - name = "rn_codegen", - main = "buck_tests/generate-tests.sh", + name = "generate_all_from_schema", + main = "src/cli/generators/generate-all.sh", resources = native.glob( [ "buck_tests/**/*.js", "src/**/*.js", ], ) + [ - "buck_tests/generate-tests.js", "package.json", "//xplat/js:setup_env", ], @@ -89,18 +88,11 @@ def rn_codegen_cli(): visibility = ["PUBLIC"], ) - # TODO: This doesn't work yet... fb_native.sh_binary( - name = "rn_codegen", - main = "buck_tests/generate-tests.sh", - resources = native.glob( - [ - "buck_tests/**/*.js", - "src/**/*.js", - ], - ) + [ - "buck_tests/generate-tests.js", - "package.json", + name = "generate_all_from_schema", + main = "scripts/buck-oss/generate-all.sh", + resources = [ + ":setup_cli", ], visibility = ["PUBLIC"], ) @@ -120,7 +112,7 @@ def rn_codegen_modules( fb_native.genrule( name = generate_fixtures_rule_name, srcs = native.glob(["src/generators/**/*.js"]), - cmd = "$(exe {}) $(location {}) {} $OUT {}".format(react_native_root_target("packages/react-native-codegen:rn_codegen"), schema_target, name, native_module_spec_name), + cmd = "$(exe {}) $(location {}) {} $OUT {}".format(react_native_root_target("packages/react-native-codegen:generate_all_from_schema"), schema_target, name, native_module_spec_name), out = "codegenfiles-{}".format(name), labels = ["codegen_rule"], ) @@ -211,45 +203,47 @@ def rn_codegen_modules( ############## # iOS handling ############## - fb_native.genrule( - name = generate_module_hobjcpp_name, - cmd = "cp $(location :{})/{}.h $OUT".format(generate_fixtures_rule_name, native_module_spec_name), - out = "{}.h".format(native_module_spec_name), - labels = ["codegen_rule"], - ) + if not IS_OSS_BUILD: + # iOS Buck build isn't fully working in OSS, so let's skip it for OSS for now. + fb_native.genrule( + name = generate_module_hobjcpp_name, + cmd = "cp $(location :{})/{}.h $OUT".format(generate_fixtures_rule_name, native_module_spec_name), + out = "{}.h".format(native_module_spec_name), + labels = ["codegen_rule"], + ) - fb_native.genrule( - name = generate_module_mm_name, - cmd = "cp $(location :{})/{}-generated.mm $OUT".format(generate_fixtures_rule_name, native_module_spec_name), - out = "{}-generated.mm".format(native_module_spec_name), - labels = ["codegen_rule"], - ) + fb_native.genrule( + name = generate_module_mm_name, + cmd = "cp $(location :{})/{}-generated.mm $OUT".format(generate_fixtures_rule_name, native_module_spec_name), + out = "{}-generated.mm".format(native_module_spec_name), + labels = ["codegen_rule"], + ) - fb_apple_library( - name = "generated_objcpp_modules-{}Apple".format(name), - extension_api_only = True, - header_namespace = "", - sdks = (IOS), - compiler_flags = [ - "-Wno-unused-private-field", - ], - exported_headers = { - "{}/{}.h".format(native_module_spec_name, native_module_spec_name): ":{}".format(generate_module_hobjcpp_name), - }, - headers = [ - ":{}".format(generate_module_hobjcpp_name), - ], - srcs = [ - ":{}".format(generate_module_mm_name), - ], - labels = ["codegen_rule"], - visibility = ["PUBLIC"], - exported_deps = [ - "//xplat/js/react-native-github:RCTTypeSafety", - "//xplat/js/react-native-github/Libraries/RCTRequired:RCTRequired", - react_native_xplat_target_apple("react/nativemodule/core:core"), - ], - ) + rn_apple_library( + name = "generated_objcpp_modules-{}Apple".format(name), + extension_api_only = True, + header_namespace = "", + sdks = (IOS), + compiler_flags = [ + "-Wno-unused-private-field", + ], + exported_headers = { + "{}/{}.h".format(native_module_spec_name, native_module_spec_name): ":{}".format(generate_module_hobjcpp_name), + }, + headers = [ + ":{}".format(generate_module_hobjcpp_name), + ], + srcs = [ + ":{}".format(generate_module_mm_name), + ], + labels = ["codegen_rule"], + visibility = ["PUBLIC"], + exported_deps = [ + "//xplat/js/react-native-github:RCTTypeSafety", + "//xplat/js/react-native-github/Libraries/RCTRequired:RCTRequired", + react_native_xplat_target_apple("react/nativemodule/core:core"), + ], + ) def rn_codegen_components( name = "", @@ -272,7 +266,7 @@ def rn_codegen_components( fb_native.genrule( name = generate_fixtures_rule_name, srcs = native.glob(["src/generators/**/*.js"]), - cmd = "$(exe {}) $(location {}) {} $OUT {}".format(react_native_root_target("packages/react-native-codegen:rn_codegen"), schema_target, name, name), + cmd = "$(exe {}) $(location {}) {} $OUT {}".format(react_native_root_target("packages/react-native-codegen:generate_all_from_schema"), schema_target, name, name), out = "codegenfiles-{}".format(name), labels = ["codegen_rule"], ) @@ -501,7 +495,7 @@ def rn_codegen_cxx_modules( fb_native.genrule( name = generate_fixtures_rule_name, srcs = native.glob(["src/generators/**/*.js"]), - cmd = "$(exe {}) $(location {}) {} $OUT {}".format(react_native_root_target("packages/react-native-codegen:rn_codegen"), schema_target, name, name), + cmd = "$(exe {}) $(location {}) {} $OUT {}".format(react_native_root_target("packages/react-native-codegen:generate_all_from_schema"), schema_target, name, name), out = "codegenfiles-{}".format(name), labels = ["codegen_rule"], ) diff --git a/packages/react-native-codegen/scripts/buck-oss/generate-all.sh b/packages/react-native-codegen/scripts/buck-oss/generate-all.sh new file mode 100755 index 00000000000..a60d6f40fe8 --- /dev/null +++ b/packages/react-native-codegen/scripts/buck-oss/generate-all.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# Copyright (c) Facebook, Inc. and its affiliates. +# +# This source code is licensed under the MIT license found in the +# LICENSE file in the root directory of this source tree. + +# Note: To be invoked by Buck sh_binary() in OSS environment. +# DO NOT USE outside of Buck! + +set -e +set -u + +pushd "$BUCK_DEFAULT_RUNTIME_RESOURCES" >/dev/null +node "build/lib/cli/generators/generate-all.js" "$@" +popd >/dev/null diff --git a/packages/react-native-codegen/buck_tests/generate-tests.js b/packages/react-native-codegen/src/cli/generators/generate-all.js similarity index 89% rename from packages/react-native-codegen/buck_tests/generate-tests.js rename to packages/react-native-codegen/src/cli/generators/generate-all.js index 02e44a3524d..613eec58c0b 100644 --- a/packages/react-native-codegen/buck_tests/generate-tests.js +++ b/packages/react-native-codegen/src/cli/generators/generate-all.js @@ -8,9 +8,13 @@ * @format */ +/** + * This generates all possible outputs by executing all available generators. + */ + 'use strict'; -const RNCodegen = require('../src/generators/RNCodegen.js'); +const RNCodegen = require('../../generators/RNCodegen.js'); const fs = require('fs'); const mkdirp = require('mkdirp'); diff --git a/packages/react-native-codegen/buck_tests/generate-tests.sh b/packages/react-native-codegen/src/cli/generators/generate-all.sh similarity index 77% rename from packages/react-native-codegen/buck_tests/generate-tests.sh rename to packages/react-native-codegen/src/cli/generators/generate-all.sh index 5a45850d25e..c17f3a36bbf 100755 --- a/packages/react-native-codegen/buck_tests/generate-tests.sh +++ b/packages/react-native-codegen/src/cli/generators/generate-all.sh @@ -10,10 +10,10 @@ set -u THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd) # shellcheck source=xplat/js/env-utils/setup_env_vars.sh -source "$THIS_DIR/../../../../env-utils/setup_env_vars.sh" +source "$THIS_DIR/../../../../../../env-utils/setup_env_vars.sh" pushd "$JS_DIR" >/dev/null "$INSTALL_NODE_MODULES" popd >/dev/null -exec "$FLOW_NODE_BINARY" "$THIS_DIR/generate-tests.js" "$@" +exec "$FLOW_NODE_BINARY" "$THIS_DIR/generate-all.js" "$@" diff --git a/tools/build_defs/oss/rn_defs.bzl b/tools/build_defs/oss/rn_defs.bzl index 6be1080867f..42bafe6335f 100644 --- a/tools/build_defs/oss/rn_defs.bzl +++ b/tools/build_defs/oss/rn_defs.bzl @@ -185,7 +185,13 @@ def rn_apple_library(*args, **kwargs): kwargs.setdefault("link_whole", True) kwargs.setdefault("enable_exceptions", True) kwargs.setdefault("target_sdk_version", "10.0") + + # Unsupported kwargs _ = kwargs.pop("plugins_only", False) + _ = kwargs.pop("enable_exceptions", False) + _ = kwargs.pop("extension_api_only", False) + _ = kwargs.pop("sdks", []) + native.apple_library(*args, **kwargs) def rn_java_library(*args, **kwargs):