Skip to content

Conversation

@jonthysell
Copy link
Contributor

@jonthysell jonthysell commented Oct 29, 2024

Description

This PR adds a RnwNewArch MSBuild property and RNW_NEW_ARCH build-time constant / pre-processor directive for use by external (module) devs. This PR also updates @react-native-windows/codegen to use the directive when appropriate, and also applies those changes to sample-custom-component.

The expectation is that external devs now use these new properties and directives instead of the previously exposed UseFabric, UseHermes and/or UseWinUI3 props. All logic expecting external developers to manually set those props has been removed and replaced with more robust checking that keys off RnwNewArch and throws warnings or errors if the other props aren't set correctly.

In addition, this PR adds further checks to make sure external projects load the WindowsSDK props sheet, followed by the appropriate RNW props and then the RNW targets. Failure to load these import properly would always risk putting the project in a broken state, now we at least tell people what they're missing.

Note: Old arch devs will still be able to toggle UseHermes.

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • This change requires a documentation update

Why

We don't want end-users to have access to conditionally build their code for the new or old architectures, without having to use/replicate the current complicated un-scoped directives we use internally.

Closes #13929

What

See above.

Screenshots

N/A

Testing

Verified the flag exists and builds for the sample-custom-component. Also verified that new projects build properly.

Changelog

Should this change be included in the release notes: yes

Add RnwNewArch property and RNW_NEW_ARCH constants when building projects for the new architecture

Microsoft Reviewers: Open in CodeFlow

@microsoft-github-policy-service microsoft-github-policy-service bot added Area: Library Template New Architecture Broad category for issues that apply to the RN "new" architecture of Turbo Modules + Fabric labels Oct 29, 2024
@Yajur-Grover
Copy link
Contributor

Once this is live, will it make the use of UseFabric in new apps/libs redundant? For all versions of RNW where this property exists, we should be using RnwNewArch instead of UseFabric where relevant e.g in community modules?

@jonthysell jonthysell marked this pull request as ready for review November 6, 2024 22:06
@jonthysell jonthysell requested review from a team as code owners November 6, 2024 22:06
@jonthysell
Copy link
Contributor Author

@microsoft-github-policy-service rerun

@jonthysell jonthysell merged commit 6faf568 into microsoft:main Nov 7, 2024
58 checks passed
@jonthysell jonthysell deleted the newarchconstants branch November 7, 2024 20:04
jonthysell added a commit to jonthysell/react-native-windows that referenced this pull request Nov 7, 2024
…ng projects for the new architecture

THis PR backports microsoft#14042 to 0.76.

## Description

This PR adds a `RnwNewArch` MSBuild property and `RNW_NEW_ARCH` build-time constant / pre-processor directive for use by external (module) devs. This PR also updates `@react-native-windows/codegen` to use the directive when appropriate, and also applies those changes to `sample-custom-component`.

The expectation is that external devs now use these new properties and directives instead of the previously exposed `UseFabric`, `UseHermes` and/or `UseWinUI3` props. All logic expecting external developers to manually set those props has been removed and replaced with more robust checking that keys off `RnwNewArch` and throws warnings or errors if the other props aren't set correctly.

In addition, this PR adds further checks to make sure external projects load the WindowsSDK props sheet, followed by the appropriate RNW props and then the RNW targets. Failure to load these import properly would always risk putting the project in a broken state, now we at least tell people what they're missing.

Note: Old arch devs will still be able to toggle `UseHermes`.

### Type of Change
- Bug fix (non-breaking change which fixes an issue)
- New feature (non-breaking change which adds functionality)
- This change requires a documentation update

### Why
We don't want end-users to have access to conditionally build their code for the new or old architectures, without having to use/replicate the current complicated un-scoped directives we use internally.

Closes microsoft#13929

### What
See above.

## Screenshots
N/A

## Testing
Verified the flag exists and builds for the sample-custom-component. Also verified that new projects build properly.

## Changelog
Should this change be included in the release notes: _yes_

Add RnwNewArch property and RNW_NEW_ARCH constants when building projects for the new architecture
jonthysell added a commit that referenced this pull request Nov 7, 2024
…ng projects for the new architecture (#14096)

* [0.76] Add RnwNewArch property and RNW_NEW_ARCH constants when building projects for the new architecture

THis PR backports #14042 to 0.76.

## Description

This PR adds a `RnwNewArch` MSBuild property and `RNW_NEW_ARCH` build-time constant / pre-processor directive for use by external (module) devs. This PR also updates `@react-native-windows/codegen` to use the directive when appropriate, and also applies those changes to `sample-custom-component`.

The expectation is that external devs now use these new properties and directives instead of the previously exposed `UseFabric`, `UseHermes` and/or `UseWinUI3` props. All logic expecting external developers to manually set those props has been removed and replaced with more robust checking that keys off `RnwNewArch` and throws warnings or errors if the other props aren't set correctly.

In addition, this PR adds further checks to make sure external projects load the WindowsSDK props sheet, followed by the appropriate RNW props and then the RNW targets. Failure to load these import properly would always risk putting the project in a broken state, now we at least tell people what they're missing.

Note: Old arch devs will still be able to toggle `UseHermes`.

### Type of Change
- Bug fix (non-breaking change which fixes an issue)
- New feature (non-breaking change which adds functionality)
- This change requires a documentation update

### Why
We don't want end-users to have access to conditionally build their code for the new or old architectures, without having to use/replicate the current complicated un-scoped directives we use internally.

Closes #13929

### What
See above.

## Screenshots
N/A

## Testing
Verified the flag exists and builds for the sample-custom-component. Also verified that new projects build properly.

## Changelog
Should this change be included in the release notes: _yes_

Add RnwNewArch property and RNW_NEW_ARCH constants when building projects for the new architecture
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Area: Library Template New Architecture Broad category for issues that apply to the RN "new" architecture of Turbo Modules + Fabric

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

The new cpp-lib template should be "hybrid ready" with exposed USE_FABRIC constants, etc

2 participants