mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/41500 Right now, the old architecture uses Codegen in a slightly different way w.r.t. the New Architecture. In the Old Architecture, codegen is used to generate some basic TM and components that are part of Core. Both architectures use the same scripts that actually generates the code, but they are invoked differently. This is causing some maintenance costs that we would like to reduce. ## Changelog: [Internal] - Defragment how Codegen is run between old and new architecture Reviewed By: dmytrorykun Differential Revision: D51349874 fbshipit-source-id: 188d3ed436a30a77bd42a26306d4a08666d3a00b
58 lines
2.0 KiB
Ruby
58 lines
2.0 KiB
Ruby
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
#
|
|
# This source code is licensed under the MIT license found in the
|
|
# LICENSE file in the root directory of this source tree.
|
|
|
|
# It builds the codegen CLI if it is not present
|
|
#
|
|
# Parameters:
|
|
# - react_native_path: the path to the react native installation
|
|
# - relative_installation_root: the path to the relative installation root of the pods
|
|
# - dir_manager: a class that implements the `Dir` interface. Defaults to `Dir`, the Dependency can be injected for testing purposes.
|
|
# @throws an error if it could not find the codegen folder.
|
|
def build_codegen!(react_native_path, relative_installation_root, dir_manager: Dir)
|
|
codegen_repo_path = "#{basePath(react_native_path, relative_installation_root)}/../react-native-codegen"
|
|
return unless dir_manager.exist?(codegen_repo_path) && !dir_manager.exist?("#{codegen_repo_path}/lib")
|
|
|
|
Pod::UI.puts "[Codegen] building #{codegen_repo_path}"
|
|
system("#{codegen_repo_path}/scripts/oss/build.sh")
|
|
end
|
|
|
|
# keeping the run_codegen! method for testing purposes
|
|
def run_codegen!(
|
|
app_path,
|
|
config_file_dir,
|
|
new_arch_enabled: false,
|
|
disable_codegen: false,
|
|
react_native_path: "../node_modules/react-native",
|
|
fabric_enabled: false,
|
|
hermes_enabled: true,
|
|
codegen_output_dir: 'build/generated/ios',
|
|
config_key: 'codegenConfig',
|
|
package_json_file: '~/app/package.json',
|
|
folly_version: '2023.08.07.00',
|
|
codegen_utils: CodegenUtils.new()
|
|
)
|
|
|
|
codegen_utils.use_react_native_codegen_discovery!(
|
|
disable_codegen,
|
|
app_path,
|
|
:react_native_path => react_native_path,
|
|
:fabric_enabled => fabric_enabled,
|
|
:hermes_enabled => hermes_enabled,
|
|
:config_file_dir => config_file_dir,
|
|
:codegen_output_dir => codegen_output_dir,
|
|
:config_key => config_key,
|
|
:folly_version => folly_version
|
|
)
|
|
end
|
|
|
|
def basePath(react_native_path, relative_installation_root)
|
|
expanded_path = File.expand_path(react_native_path)
|
|
if expanded_path == react_native_path
|
|
react_native_path
|
|
else
|
|
File.join(relative_installation_root.to_s, react_native_path)
|
|
end
|
|
end
|