Windows x64 Build with support for xnnpack and llama example - #6979

Closed
vortex-captain wants to merge 16 commits into
pytorch:mainfrom
vortex-captain:win_build
Closed

Windows x64 Build with support for xnnpack and llama example#6979
vortex-captain wants to merge 16 commits into
pytorch:mainfrom
vortex-captain:win_build

Conversation

@vortex-captain

@vortex-captainvortex-captain commented Nov 20, 2024

Copy link
Copy Markdown

Summary

This PR introduces support for out-of-the-box builds on Windows x64 with xnnpack, simplifying the setup process for developers using executorch on Windows. Additionally, it lays the groundwork for future Windows build pipelines and prebuilt PyPI packages.

Fixes#4661

Test plan

PR tested by running minimal executor_runner example (https://pytorch.org/executorch/stable/getting-started-setup.html#run-your-program) in the following environment:

  • Windows 11 x64
  • Visual Studio Enterprise 2022 with these components installed:
    • C++ Clang tools for Windows
    • MSBuild support for LLVM (clang-cl) toolset
    • C++ CMake tools for Windows

Steps:

# run the following in command prompt
cd executorch/# contains code of this PR
git pull
git submodule sync
git submodule update --init
./install_requirements.bat--pybind xnnpack
Remove-Item-Path "add.pte"-ErrorAction SilentlyContinue
python .\export_add.py # export_add.py from https://pytorch.org/executorch/stable/getting-started-setup.html#export-a-program
msbuild pip-out\temp.win-amd64-cpython-310\cmake-out\executorch.sln /t:Rebuild
pip-out\temp.win-amd64-cpython-310\cmake-out\Debug\executor_runner.exe--model-path add.pte

References

#4681
#5252
#4899
#5164
#4993

@pytorch-bot

pytorch-botBot commented Nov 20, 2024

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/6979

Note: Links to docs will display an error until the docs builds have been completed.

❌ 6 New Failures

As of commit 8e2b8bd with merge base 3475707 (image):

NEW FAILURES - The following jobs have failed:

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Nov 20, 2024
@pytorch-bot

Copy link
Copy Markdown

❌ 🤖 pytorchbot command failed:

@pytorchbot: error: argument command: invalid choice: 'Release' (choose from 'merge', 'revert', 'rebase', 'label', 'drci', 'cherry-pick', 'close')
usage: @pytorchbot [-h] {merge,revert,rebase,label,drci,cherry-pick,close} ...

Try @pytorchbot --help for more info.

@vortex-captain

Copy link
Copy Markdown
Author

@pytorchbot label "Release notes: build"

@pytorch-bot

Copy link
Copy Markdown

Didn't find following labels among repository labels: Release notes: build

@vortex-captain

Copy link
Copy Markdown
Author

@pytorchbot label "release notes: build"

@pytorch-botpytorch-botBot added the release notes: build Changes related to build, including dependency upgrades, build flags, optimizations, etc. label Nov 21, 2024
@vortex-captain
vortex-captain marked this pull request as ready for review November 21, 2024 03:24
@vortex-captain

Copy link
Copy Markdown
Author

Hi @kirklandsign and @dbort! Could you kindly help assign reviewers to this PR? Many thanks!

vortex-captainand others added 2 commits November 22, 2024 09:48
- attempt to fix extension/data_loader/file_data_loader.cpp:20:10: fatal error: 'executorch/runtime/platform/unistd.h' file not found
@vortex-captain

Copy link
Copy Markdown
Author

Hi @dbort I attempted to address the issues in the checks, could you kindly help rerun them? Thanks 😄

Comment threadbackends/xnnpack/CMakeLists.txt Outdated
Comment threadkernels/quantized/CMakeLists.txt
@vortex-captainvortex-captain changed the title Windows x64 Build SupportWindows x64 Build Support with xnnpackDec 3, 2024
@vortex-captainvortex-captain changed the title Windows x64 Build Support with xnnpackWindows x64 Build with support for xnnpack and llama exampleDec 4, 2024

@malfetmalfet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO this change would benefit from splitting it into several separate PRs, namely:

  • Please rename unistd.h to compat_unistd.h as redefining system headers might create some hard to debug confusions
  • Submit a separate PR for adding dataloader on Windows
  • Submit smaller fixes for individual changes in headers/cpp files explaining why they are needed
  • Submit a separate PR with generic build system changes

@mcr229mcr229 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

XNN related changes look good to me

endif()


if (WIN32)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks fine to me, i'm assuming this has to be done for every flatbuffer outputted header file

@vortex-captainvortex-captainDec 6, 2024

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks fine to me, i'm assuming this has to be done for every flatbuffer outputted header file

Thanks for the review! As suggested, we will split into smaller PRs (#7217), and apply these "platform-dependent shell command" changes everywhere in a later PR

// There currently doesn't seem to be a great way to do this in Windows and
// given that weak linkage is not really critical on Windows, we'll just leave
// it as a stub.
#define ET_WEAK

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vortex-captain does this work with MSVC now? Is there a certain version of MSVC this works for, because i remember it didn't work for the older versions.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vortex-captain does this work with MSVC now? Is there a certain version of MSVC this works for, because i remember it didn't work for the older versions.

yes, Windows x64 build uses clang-cl compiler, which supports __attribute__((weak))

@@ -0,0 +1,251 @@
/*
* Copyright (c) Google Inc. and affiliates.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as @malfet mentioned, isolating these changes to a separate PR would be much more easier to review.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as @malfet mentioned, isolating these changes to a separate PR would be much more easier to review.

Sure! We plan to split into 3 smaller PRs: #7217

@@ -0,0 +1,75 @@
/*

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should maybe create a separate folder for this like runtime/platform/windows and put this under there. @dbort what do you think?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should maybe create a separate folder for this like runtime/platform/windows and put this under there. @dbort what do you think?

As @malfet suggested, We renamed unistd.h to compat_unistd.h in the new PR which would serve as a wrapper of <unistd.h> used in different platforms. Would it be clearer to put it in runtime/platform/windows? Thanks!

@vortex-captain

Copy link
Copy Markdown
Author

IMO this change would benefit from splitting it into several separate PRs, namely:

  • Please rename unistd.h to compat_unistd.h as redefining system headers might create some hard to debug confusions
  • Submit a separate PR for adding dataloader on Windows
  • Submit smaller fixes for individual changes in headers/cpp files explaining why they are needed
  • Submit a separate PR with generic build system changes

Thanks for the great suggestions! We plan to split this PR into 3 smaller ones, please find details in the new PR here, in which unistd.h has been renamed to compat_unistd.h

@SS-JIA

Copy link
Copy Markdown
Contributor

Closing this PR now, as the changes contained in this PR are now merged as a part of the recent Windows support effort i.e. #9198

@SS-JIASS-JIA closed this Mar 17, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.release notes: buildChanges related to build, including dependency upgrades, build flags, optimizations, etc.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support build on native Windows

7 participants

@vortex-captain@SS-JIA@malfet@mcr229@tarun292@facebook-github-bot@chinazhangchao
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Windows x64 Build with support for xnnpack and llama example - #6979

Closed
vortex-captain wants to merge 16 commits into
pytorch:mainfrom
vortex-captain:win_build
Closed

Windows x64 Build with support for xnnpack and llama example#6979
vortex-captain wants to merge 16 commits into
pytorch:mainfrom
vortex-captain:win_build

Conversation

@vortex-captain

@vortex-captainvortex-captain commented Nov 20, 2024

Copy link
Copy Markdown

Summary

This PR introduces support for out-of-the-box builds on Windows x64 with xnnpack, simplifying the setup process for developers using executorch on Windows. Additionally, it lays the groundwork for future Windows build pipelines and prebuilt PyPI packages.

Fixes#4661

Test plan

PR tested by running minimal executor_runner example (https://pytorch.org/executorch/stable/getting-started-setup.html#run-your-program) in the following environment:

  • Windows 11 x64
  • Visual Studio Enterprise 2022 with these components installed:
    • C++ Clang tools for Windows
    • MSBuild support for LLVM (clang-cl) toolset
    • C++ CMake tools for Windows

Steps:

# run the following in command prompt
cd executorch/# contains code of this PR
git pull
git submodule sync
git submodule update --init
./install_requirements.bat--pybind xnnpack
Remove-Item-Path "add.pte"-ErrorAction SilentlyContinue
python .\export_add.py # export_add.py from https://pytorch.org/executorch/stable/getting-started-setup.html#export-a-program
msbuild pip-out\temp.win-amd64-cpython-310\cmake-out\executorch.sln /t:Rebuild
pip-out\temp.win-amd64-cpython-310\cmake-out\Debug\executor_runner.exe--model-path add.pte

References

#4681
#5252
#4899
#5164
#4993

@pytorch-bot

pytorch-botBot commented Nov 20, 2024

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/6979

Note: Links to docs will display an error until the docs builds have been completed.

❌ 6 New Failures

As of commit 8e2b8bd with merge base 3475707 (image):

NEW FAILURES - The following jobs have failed:

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Nov 20, 2024
@pytorch-bot

Copy link
Copy Markdown

❌ 🤖 pytorchbot command failed:

@pytorchbot: error: argument command: invalid choice: 'Release' (choose from 'merge', 'revert', 'rebase', 'label', 'drci', 'cherry-pick', 'close')
usage: @pytorchbot [-h] {merge,revert,rebase,label,drci,cherry-pick,close} ...

Try @pytorchbot --help for more info.

@vortex-captain

Copy link
Copy Markdown
Author

@pytorchbot label "Release notes: build"

@pytorch-bot

Copy link
Copy Markdown

Didn't find following labels among repository labels: Release notes: build

@vortex-captain

Copy link
Copy Markdown
Author

@pytorchbot label "release notes: build"

@pytorch-botpytorch-botBot added the release notes: build Changes related to build, including dependency upgrades, build flags, optimizations, etc. label Nov 21, 2024
@vortex-captain
vortex-captain marked this pull request as ready for review November 21, 2024 03:24
@vortex-captain

Copy link
Copy Markdown
Author

Hi @kirklandsign and @dbort! Could you kindly help assign reviewers to this PR? Many thanks!

vortex-captainand others added 2 commits November 22, 2024 09:48
- attempt to fix extension/data_loader/file_data_loader.cpp:20:10: fatal error: 'executorch/runtime/platform/unistd.h' file not found
@vortex-captain

Copy link
Copy Markdown
Author

Hi @dbort I attempted to address the issues in the checks, could you kindly help rerun them? Thanks 😄

Comment threadbackends/xnnpack/CMakeLists.txt Outdated
Comment threadkernels/quantized/CMakeLists.txt
@vortex-captainvortex-captain changed the title Windows x64 Build SupportWindows x64 Build Support with xnnpackDec 3, 2024
@vortex-captainvortex-captain changed the title Windows x64 Build Support with xnnpackWindows x64 Build with support for xnnpack and llama exampleDec 4, 2024

@malfetmalfet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO this change would benefit from splitting it into several separate PRs, namely:

  • Please rename unistd.h to compat_unistd.h as redefining system headers might create some hard to debug confusions
  • Submit a separate PR for adding dataloader on Windows
  • Submit smaller fixes for individual changes in headers/cpp files explaining why they are needed
  • Submit a separate PR with generic build system changes

@mcr229mcr229 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

XNN related changes look good to me

endif()


if (WIN32)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks fine to me, i'm assuming this has to be done for every flatbuffer outputted header file

@vortex-captainvortex-captainDec 6, 2024

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks fine to me, i'm assuming this has to be done for every flatbuffer outputted header file

Thanks for the review! As suggested, we will split into smaller PRs (#7217), and apply these "platform-dependent shell command" changes everywhere in a later PR

// There currently doesn't seem to be a great way to do this in Windows and
// given that weak linkage is not really critical on Windows, we'll just leave
// it as a stub.
#define ET_WEAK

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vortex-captain does this work with MSVC now? Is there a certain version of MSVC this works for, because i remember it didn't work for the older versions.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vortex-captain does this work with MSVC now? Is there a certain version of MSVC this works for, because i remember it didn't work for the older versions.

yes, Windows x64 build uses clang-cl compiler, which supports __attribute__((weak))

@@ -0,0 +1,251 @@
/*
* Copyright (c) Google Inc. and affiliates.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as @malfet mentioned, isolating these changes to a separate PR would be much more easier to review.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as @malfet mentioned, isolating these changes to a separate PR would be much more easier to review.

Sure! We plan to split into 3 smaller PRs: #7217

@@ -0,0 +1,75 @@
/*

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should maybe create a separate folder for this like runtime/platform/windows and put this under there. @dbort what do you think?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should maybe create a separate folder for this like runtime/platform/windows and put this under there. @dbort what do you think?

As @malfet suggested, We renamed unistd.h to compat_unistd.h in the new PR which would serve as a wrapper of <unistd.h> used in different platforms. Would it be clearer to put it in runtime/platform/windows? Thanks!

@vortex-captain

Copy link
Copy Markdown
Author

IMO this change would benefit from splitting it into several separate PRs, namely:

  • Please rename unistd.h to compat_unistd.h as redefining system headers might create some hard to debug confusions
  • Submit a separate PR for adding dataloader on Windows
  • Submit smaller fixes for individual changes in headers/cpp files explaining why they are needed
  • Submit a separate PR with generic build system changes

Thanks for the great suggestions! We plan to split this PR into 3 smaller ones, please find details in the new PR here, in which unistd.h has been renamed to compat_unistd.h

@SS-JIA

Copy link
Copy Markdown
Contributor

Closing this PR now, as the changes contained in this PR are now merged as a part of the recent Windows support effort i.e. #9198

@SS-JIASS-JIA closed this Mar 17, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.release notes: buildChanges related to build, including dependency upgrades, build flags, optimizations, etc.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support build on native Windows

7 participants

@vortex-captain@SS-JIA@malfet@mcr229@tarun292@facebook-github-bot@chinazhangchao
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Windows x64 Build with support for xnnpack and llama example - #6979

Closed
vortex-captain wants to merge 16 commits into
pytorch:mainfrom
vortex-captain:win_build
Closed

Windows x64 Build with support for xnnpack and llama example#6979
vortex-captain wants to merge 16 commits into
pytorch:mainfrom
vortex-captain:win_build

Conversation

@vortex-captain

@vortex-captainvortex-captain commented Nov 20, 2024

Copy link
Copy Markdown

Summary

This PR introduces support for out-of-the-box builds on Windows x64 with xnnpack, simplifying the setup process for developers using executorch on Windows. Additionally, it lays the groundwork for future Windows build pipelines and prebuilt PyPI packages.

Fixes#4661

Test plan

PR tested by running minimal executor_runner example (https://pytorch.org/executorch/stable/getting-started-setup.html#run-your-program) in the following environment:

  • Windows 11 x64
  • Visual Studio Enterprise 2022 with these components installed:
    • C++ Clang tools for Windows
    • MSBuild support for LLVM (clang-cl) toolset
    • C++ CMake tools for Windows

Steps:

# run the following in command prompt
cd executorch/# contains code of this PR
git pull
git submodule sync
git submodule update --init
./install_requirements.bat--pybind xnnpack
Remove-Item-Path "add.pte"-ErrorAction SilentlyContinue
python .\export_add.py # export_add.py from https://pytorch.org/executorch/stable/getting-started-setup.html#export-a-program
msbuild pip-out\temp.win-amd64-cpython-310\cmake-out\executorch.sln /t:Rebuild
pip-out\temp.win-amd64-cpython-310\cmake-out\Debug\executor_runner.exe--model-path add.pte

References

#4681
#5252
#4899
#5164
#4993

@pytorch-bot

pytorch-botBot commented Nov 20, 2024

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/6979

Note: Links to docs will display an error until the docs builds have been completed.

❌ 6 New Failures

As of commit 8e2b8bd with merge base 3475707 (image):

NEW FAILURES - The following jobs have failed:

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Nov 20, 2024
@pytorch-bot

Copy link
Copy Markdown

❌ 🤖 pytorchbot command failed:

@pytorchbot: error: argument command: invalid choice: 'Release' (choose from 'merge', 'revert', 'rebase', 'label', 'drci', 'cherry-pick', 'close')
usage: @pytorchbot [-h] {merge,revert,rebase,label,drci,cherry-pick,close} ...

Try @pytorchbot --help for more info.

@vortex-captain

Copy link
Copy Markdown
Author

@pytorchbot label "Release notes: build"

@pytorch-bot

Copy link
Copy Markdown

Didn't find following labels among repository labels: Release notes: build

@vortex-captain

Copy link
Copy Markdown
Author

@pytorchbot label "release notes: build"

@pytorch-botpytorch-botBot added the release notes: build Changes related to build, including dependency upgrades, build flags, optimizations, etc. label Nov 21, 2024
@vortex-captain
vortex-captain marked this pull request as ready for review November 21, 2024 03:24
@vortex-captain

Copy link
Copy Markdown
Author

Hi @kirklandsign and @dbort! Could you kindly help assign reviewers to this PR? Many thanks!

vortex-captainand others added 2 commits November 22, 2024 09:48
- attempt to fix extension/data_loader/file_data_loader.cpp:20:10: fatal error: 'executorch/runtime/platform/unistd.h' file not found
@vortex-captain

Copy link
Copy Markdown
Author

Hi @dbort I attempted to address the issues in the checks, could you kindly help rerun them? Thanks 😄

Comment threadbackends/xnnpack/CMakeLists.txt Outdated
Comment threadkernels/quantized/CMakeLists.txt
@vortex-captainvortex-captain changed the title Windows x64 Build SupportWindows x64 Build Support with xnnpackDec 3, 2024
@vortex-captainvortex-captain changed the title Windows x64 Build Support with xnnpackWindows x64 Build with support for xnnpack and llama exampleDec 4, 2024

@malfetmalfet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO this change would benefit from splitting it into several separate PRs, namely:

  • Please rename unistd.h to compat_unistd.h as redefining system headers might create some hard to debug confusions
  • Submit a separate PR for adding dataloader on Windows
  • Submit smaller fixes for individual changes in headers/cpp files explaining why they are needed
  • Submit a separate PR with generic build system changes

@mcr229mcr229 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

XNN related changes look good to me

endif()


if (WIN32)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks fine to me, i'm assuming this has to be done for every flatbuffer outputted header file

@vortex-captainvortex-captainDec 6, 2024

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks fine to me, i'm assuming this has to be done for every flatbuffer outputted header file

Thanks for the review! As suggested, we will split into smaller PRs (#7217), and apply these "platform-dependent shell command" changes everywhere in a later PR

// There currently doesn't seem to be a great way to do this in Windows and
// given that weak linkage is not really critical on Windows, we'll just leave
// it as a stub.
#define ET_WEAK

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vortex-captain does this work with MSVC now? Is there a certain version of MSVC this works for, because i remember it didn't work for the older versions.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vortex-captain does this work with MSVC now? Is there a certain version of MSVC this works for, because i remember it didn't work for the older versions.

yes, Windows x64 build uses clang-cl compiler, which supports __attribute__((weak))

@@ -0,0 +1,251 @@
/*
* Copyright (c) Google Inc. and affiliates.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as @malfet mentioned, isolating these changes to a separate PR would be much more easier to review.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as @malfet mentioned, isolating these changes to a separate PR would be much more easier to review.

Sure! We plan to split into 3 smaller PRs: #7217

@@ -0,0 +1,75 @@
/*

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should maybe create a separate folder for this like runtime/platform/windows and put this under there. @dbort what do you think?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should maybe create a separate folder for this like runtime/platform/windows and put this under there. @dbort what do you think?

As @malfet suggested, We renamed unistd.h to compat_unistd.h in the new PR which would serve as a wrapper of <unistd.h> used in different platforms. Would it be clearer to put it in runtime/platform/windows? Thanks!

@vortex-captain

Copy link
Copy Markdown
Author

IMO this change would benefit from splitting it into several separate PRs, namely:

  • Please rename unistd.h to compat_unistd.h as redefining system headers might create some hard to debug confusions
  • Submit a separate PR for adding dataloader on Windows
  • Submit smaller fixes for individual changes in headers/cpp files explaining why they are needed
  • Submit a separate PR with generic build system changes

Thanks for the great suggestions! We plan to split this PR into 3 smaller ones, please find details in the new PR here, in which unistd.h has been renamed to compat_unistd.h

@SS-JIA

Copy link
Copy Markdown
Contributor

Closing this PR now, as the changes contained in this PR are now merged as a part of the recent Windows support effort i.e. #9198

@SS-JIASS-JIA closed this Mar 17, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.release notes: buildChanges related to build, including dependency upgrades, build flags, optimizations, etc.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support build on native Windows

7 participants

@vortex-captain@SS-JIA@malfet@mcr229@tarun292@facebook-github-bot@chinazhangchao
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Windows x64 Build with support for xnnpack and llama example - #6979

Closed
vortex-captain wants to merge 16 commits into
pytorch:mainfrom
vortex-captain:win_build
Closed

Windows x64 Build with support for xnnpack and llama example#6979
vortex-captain wants to merge 16 commits into
pytorch:mainfrom
vortex-captain:win_build

Conversation

@vortex-captain

@vortex-captainvortex-captain commented Nov 20, 2024

Copy link
Copy Markdown

Summary

This PR introduces support for out-of-the-box builds on Windows x64 with xnnpack, simplifying the setup process for developers using executorch on Windows. Additionally, it lays the groundwork for future Windows build pipelines and prebuilt PyPI packages.

Fixes#4661

Test plan

PR tested by running minimal executor_runner example (https://pytorch.org/executorch/stable/getting-started-setup.html#run-your-program) in the following environment:

  • Windows 11 x64
  • Visual Studio Enterprise 2022 with these components installed:
    • C++ Clang tools for Windows
    • MSBuild support for LLVM (clang-cl) toolset
    • C++ CMake tools for Windows

Steps:

# run the following in command prompt
cd executorch/# contains code of this PR
git pull
git submodule sync
git submodule update --init
./install_requirements.bat--pybind xnnpack
Remove-Item-Path "add.pte"-ErrorAction SilentlyContinue
python .\export_add.py # export_add.py from https://pytorch.org/executorch/stable/getting-started-setup.html#export-a-program
msbuild pip-out\temp.win-amd64-cpython-310\cmake-out\executorch.sln /t:Rebuild
pip-out\temp.win-amd64-cpython-310\cmake-out\Debug\executor_runner.exe--model-path add.pte

References

#4681
#5252
#4899
#5164
#4993

@pytorch-bot

pytorch-botBot commented Nov 20, 2024

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/6979

Note: Links to docs will display an error until the docs builds have been completed.

❌ 6 New Failures

As of commit 8e2b8bd with merge base 3475707 (image):

NEW FAILURES - The following jobs have failed:

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Nov 20, 2024
@pytorch-bot

Copy link
Copy Markdown

❌ 🤖 pytorchbot command failed:

@pytorchbot: error: argument command: invalid choice: 'Release' (choose from 'merge', 'revert', 'rebase', 'label', 'drci', 'cherry-pick', 'close')
usage: @pytorchbot [-h] {merge,revert,rebase,label,drci,cherry-pick,close} ...

Try @pytorchbot --help for more info.

@vortex-captain

Copy link
Copy Markdown
Author

@pytorchbot label "Release notes: build"

@pytorch-bot

Copy link
Copy Markdown

Didn't find following labels among repository labels: Release notes: build

@vortex-captain

Copy link
Copy Markdown
Author

@pytorchbot label "release notes: build"

@pytorch-botpytorch-botBot added the release notes: build Changes related to build, including dependency upgrades, build flags, optimizations, etc. label Nov 21, 2024
@vortex-captain
vortex-captain marked this pull request as ready for review November 21, 2024 03:24
@vortex-captain

Copy link
Copy Markdown
Author

Hi @kirklandsign and @dbort! Could you kindly help assign reviewers to this PR? Many thanks!

vortex-captainand others added 2 commits November 22, 2024 09:48
- attempt to fix extension/data_loader/file_data_loader.cpp:20:10: fatal error: 'executorch/runtime/platform/unistd.h' file not found
@vortex-captain

Copy link
Copy Markdown
Author

Hi @dbort I attempted to address the issues in the checks, could you kindly help rerun them? Thanks 😄

Comment threadbackends/xnnpack/CMakeLists.txt Outdated
Comment threadkernels/quantized/CMakeLists.txt
@vortex-captainvortex-captain changed the title Windows x64 Build SupportWindows x64 Build Support with xnnpackDec 3, 2024
@vortex-captainvortex-captain changed the title Windows x64 Build Support with xnnpackWindows x64 Build with support for xnnpack and llama exampleDec 4, 2024

@malfetmalfet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO this change would benefit from splitting it into several separate PRs, namely:

  • Please rename unistd.h to compat_unistd.h as redefining system headers might create some hard to debug confusions
  • Submit a separate PR for adding dataloader on Windows
  • Submit smaller fixes for individual changes in headers/cpp files explaining why they are needed
  • Submit a separate PR with generic build system changes

@mcr229mcr229 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

XNN related changes look good to me

endif()


if (WIN32)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks fine to me, i'm assuming this has to be done for every flatbuffer outputted header file

@vortex-captainvortex-captainDec 6, 2024

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks fine to me, i'm assuming this has to be done for every flatbuffer outputted header file

Thanks for the review! As suggested, we will split into smaller PRs (#7217), and apply these "platform-dependent shell command" changes everywhere in a later PR

// There currently doesn't seem to be a great way to do this in Windows and
// given that weak linkage is not really critical on Windows, we'll just leave
// it as a stub.
#define ET_WEAK

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vortex-captain does this work with MSVC now? Is there a certain version of MSVC this works for, because i remember it didn't work for the older versions.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vortex-captain does this work with MSVC now? Is there a certain version of MSVC this works for, because i remember it didn't work for the older versions.

yes, Windows x64 build uses clang-cl compiler, which supports __attribute__((weak))

@@ -0,0 +1,251 @@
/*
* Copyright (c) Google Inc. and affiliates.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as @malfet mentioned, isolating these changes to a separate PR would be much more easier to review.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as @malfet mentioned, isolating these changes to a separate PR would be much more easier to review.

Sure! We plan to split into 3 smaller PRs: #7217

@@ -0,0 +1,75 @@
/*

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should maybe create a separate folder for this like runtime/platform/windows and put this under there. @dbort what do you think?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should maybe create a separate folder for this like runtime/platform/windows and put this under there. @dbort what do you think?

As @malfet suggested, We renamed unistd.h to compat_unistd.h in the new PR which would serve as a wrapper of <unistd.h> used in different platforms. Would it be clearer to put it in runtime/platform/windows? Thanks!

@vortex-captain

Copy link
Copy Markdown
Author

IMO this change would benefit from splitting it into several separate PRs, namely:

  • Please rename unistd.h to compat_unistd.h as redefining system headers might create some hard to debug confusions
  • Submit a separate PR for adding dataloader on Windows
  • Submit smaller fixes for individual changes in headers/cpp files explaining why they are needed
  • Submit a separate PR with generic build system changes

Thanks for the great suggestions! We plan to split this PR into 3 smaller ones, please find details in the new PR here, in which unistd.h has been renamed to compat_unistd.h

@SS-JIA

Copy link
Copy Markdown
Contributor

Closing this PR now, as the changes contained in this PR are now merged as a part of the recent Windows support effort i.e. #9198

@SS-JIASS-JIA closed this Mar 17, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.release notes: buildChanges related to build, including dependency upgrades, build flags, optimizations, etc.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support build on native Windows

7 participants

@vortex-captain@SS-JIA@malfet@mcr229@tarun292@facebook-github-bot@chinazhangchao
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Windows x64 Build with support for xnnpack and llama example - #6979

Closed
vortex-captain wants to merge 16 commits into
pytorch:mainfrom
vortex-captain:win_build
Closed

Windows x64 Build with support for xnnpack and llama example#6979
vortex-captain wants to merge 16 commits into
pytorch:mainfrom
vortex-captain:win_build

Conversation

@vortex-captain

@vortex-captainvortex-captain commented Nov 20, 2024

Copy link
Copy Markdown

Summary

This PR introduces support for out-of-the-box builds on Windows x64 with xnnpack, simplifying the setup process for developers using executorch on Windows. Additionally, it lays the groundwork for future Windows build pipelines and prebuilt PyPI packages.

Fixes#4661

Test plan

PR tested by running minimal executor_runner example (https://pytorch.org/executorch/stable/getting-started-setup.html#run-your-program) in the following environment:

  • Windows 11 x64
  • Visual Studio Enterprise 2022 with these components installed:
    • C++ Clang tools for Windows
    • MSBuild support for LLVM (clang-cl) toolset
    • C++ CMake tools for Windows

Steps:

# run the following in command prompt
cd executorch/# contains code of this PR
git pull
git submodule sync
git submodule update --init
./install_requirements.bat--pybind xnnpack
Remove-Item-Path "add.pte"-ErrorAction SilentlyContinue
python .\export_add.py # export_add.py from https://pytorch.org/executorch/stable/getting-started-setup.html#export-a-program
msbuild pip-out\temp.win-amd64-cpython-310\cmake-out\executorch.sln /t:Rebuild
pip-out\temp.win-amd64-cpython-310\cmake-out\Debug\executor_runner.exe--model-path add.pte

References

#4681
#5252
#4899
#5164
#4993

@pytorch-bot

pytorch-botBot commented Nov 20, 2024

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/6979

Note: Links to docs will display an error until the docs builds have been completed.

❌ 6 New Failures

As of commit 8e2b8bd with merge base 3475707 (image):

NEW FAILURES - The following jobs have failed:

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Nov 20, 2024
@pytorch-bot

Copy link
Copy Markdown

❌ 🤖 pytorchbot command failed:

@pytorchbot: error: argument command: invalid choice: 'Release' (choose from 'merge', 'revert', 'rebase', 'label', 'drci', 'cherry-pick', 'close')
usage: @pytorchbot [-h] {merge,revert,rebase,label,drci,cherry-pick,close} ...

Try @pytorchbot --help for more info.

@vortex-captain

Copy link
Copy Markdown
Author

@pytorchbot label "Release notes: build"

@pytorch-bot

Copy link
Copy Markdown

Didn't find following labels among repository labels: Release notes: build

@vortex-captain

Copy link
Copy Markdown
Author

@pytorchbot label "release notes: build"

@pytorch-botpytorch-botBot added the release notes: build Changes related to build, including dependency upgrades, build flags, optimizations, etc. label Nov 21, 2024
@vortex-captain
vortex-captain marked this pull request as ready for review November 21, 2024 03:24
@vortex-captain

Copy link
Copy Markdown
Author

Hi @kirklandsign and @dbort! Could you kindly help assign reviewers to this PR? Many thanks!

vortex-captainand others added 2 commits November 22, 2024 09:48
- attempt to fix extension/data_loader/file_data_loader.cpp:20:10: fatal error: 'executorch/runtime/platform/unistd.h' file not found
@vortex-captain

Copy link
Copy Markdown
Author

Hi @dbort I attempted to address the issues in the checks, could you kindly help rerun them? Thanks 😄

Comment threadbackends/xnnpack/CMakeLists.txt Outdated
Comment threadkernels/quantized/CMakeLists.txt
@vortex-captainvortex-captain changed the title Windows x64 Build SupportWindows x64 Build Support with xnnpackDec 3, 2024
@vortex-captainvortex-captain changed the title Windows x64 Build Support with xnnpackWindows x64 Build with support for xnnpack and llama exampleDec 4, 2024

@malfetmalfet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO this change would benefit from splitting it into several separate PRs, namely:

  • Please rename unistd.h to compat_unistd.h as redefining system headers might create some hard to debug confusions
  • Submit a separate PR for adding dataloader on Windows
  • Submit smaller fixes for individual changes in headers/cpp files explaining why they are needed
  • Submit a separate PR with generic build system changes

@mcr229mcr229 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

XNN related changes look good to me

endif()


if (WIN32)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks fine to me, i'm assuming this has to be done for every flatbuffer outputted header file

@vortex-captainvortex-captainDec 6, 2024

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks fine to me, i'm assuming this has to be done for every flatbuffer outputted header file

Thanks for the review! As suggested, we will split into smaller PRs (#7217), and apply these "platform-dependent shell command" changes everywhere in a later PR

// There currently doesn't seem to be a great way to do this in Windows and
// given that weak linkage is not really critical on Windows, we'll just leave
// it as a stub.
#define ET_WEAK

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vortex-captain does this work with MSVC now? Is there a certain version of MSVC this works for, because i remember it didn't work for the older versions.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vortex-captain does this work with MSVC now? Is there a certain version of MSVC this works for, because i remember it didn't work for the older versions.

yes, Windows x64 build uses clang-cl compiler, which supports __attribute__((weak))

@@ -0,0 +1,251 @@
/*
* Copyright (c) Google Inc. and affiliates.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as @malfet mentioned, isolating these changes to a separate PR would be much more easier to review.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as @malfet mentioned, isolating these changes to a separate PR would be much more easier to review.

Sure! We plan to split into 3 smaller PRs: #7217

@@ -0,0 +1,75 @@
/*

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should maybe create a separate folder for this like runtime/platform/windows and put this under there. @dbort what do you think?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should maybe create a separate folder for this like runtime/platform/windows and put this under there. @dbort what do you think?

As @malfet suggested, We renamed unistd.h to compat_unistd.h in the new PR which would serve as a wrapper of <unistd.h> used in different platforms. Would it be clearer to put it in runtime/platform/windows? Thanks!

@vortex-captain

Copy link
Copy Markdown
Author

IMO this change would benefit from splitting it into several separate PRs, namely:

  • Please rename unistd.h to compat_unistd.h as redefining system headers might create some hard to debug confusions
  • Submit a separate PR for adding dataloader on Windows
  • Submit smaller fixes for individual changes in headers/cpp files explaining why they are needed
  • Submit a separate PR with generic build system changes

Thanks for the great suggestions! We plan to split this PR into 3 smaller ones, please find details in the new PR here, in which unistd.h has been renamed to compat_unistd.h

@SS-JIA

Copy link
Copy Markdown
Contributor

Closing this PR now, as the changes contained in this PR are now merged as a part of the recent Windows support effort i.e. #9198

@SS-JIASS-JIA closed this Mar 17, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.release notes: buildChanges related to build, including dependency upgrades, build flags, optimizations, etc.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support build on native Windows

7 participants

@vortex-captain@SS-JIA@malfet@mcr229@tarun292@facebook-github-bot@chinazhangchao
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Windows x64 Build with support for xnnpack and llama example - #6979

Closed
vortex-captain wants to merge 16 commits into
pytorch:mainfrom
vortex-captain:win_build
Closed

Windows x64 Build with support for xnnpack and llama example#6979
vortex-captain wants to merge 16 commits into
pytorch:mainfrom
vortex-captain:win_build

Conversation

@vortex-captain

@vortex-captainvortex-captain commented Nov 20, 2024

Copy link
Copy Markdown

Summary

This PR introduces support for out-of-the-box builds on Windows x64 with xnnpack, simplifying the setup process for developers using executorch on Windows. Additionally, it lays the groundwork for future Windows build pipelines and prebuilt PyPI packages.

Fixes#4661

Test plan

PR tested by running minimal executor_runner example (https://pytorch.org/executorch/stable/getting-started-setup.html#run-your-program) in the following environment:

  • Windows 11 x64
  • Visual Studio Enterprise 2022 with these components installed:
    • C++ Clang tools for Windows
    • MSBuild support for LLVM (clang-cl) toolset
    • C++ CMake tools for Windows

Steps:

# run the following in command prompt
cd executorch/# contains code of this PR
git pull
git submodule sync
git submodule update --init
./install_requirements.bat--pybind xnnpack
Remove-Item-Path "add.pte"-ErrorAction SilentlyContinue
python .\export_add.py # export_add.py from https://pytorch.org/executorch/stable/getting-started-setup.html#export-a-program
msbuild pip-out\temp.win-amd64-cpython-310\cmake-out\executorch.sln /t:Rebuild
pip-out\temp.win-amd64-cpython-310\cmake-out\Debug\executor_runner.exe--model-path add.pte

References

#4681
#5252
#4899
#5164
#4993

@pytorch-bot

pytorch-botBot commented Nov 20, 2024

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/6979

Note: Links to docs will display an error until the docs builds have been completed.

❌ 6 New Failures

As of commit 8e2b8bd with merge base 3475707 (image):

NEW FAILURES - The following jobs have failed:

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Nov 20, 2024
@pytorch-bot

Copy link
Copy Markdown

❌ 🤖 pytorchbot command failed:

@pytorchbot: error: argument command: invalid choice: 'Release' (choose from 'merge', 'revert', 'rebase', 'label', 'drci', 'cherry-pick', 'close')
usage: @pytorchbot [-h] {merge,revert,rebase,label,drci,cherry-pick,close} ...

Try @pytorchbot --help for more info.

@vortex-captain

Copy link
Copy Markdown
Author

@pytorchbot label "Release notes: build"

@pytorch-bot

Copy link
Copy Markdown

Didn't find following labels among repository labels: Release notes: build

@vortex-captain

Copy link
Copy Markdown
Author

@pytorchbot label "release notes: build"

@pytorch-botpytorch-botBot added the release notes: build Changes related to build, including dependency upgrades, build flags, optimizations, etc. label Nov 21, 2024
@vortex-captain
vortex-captain marked this pull request as ready for review November 21, 2024 03:24
@vortex-captain

Copy link
Copy Markdown
Author

Hi @kirklandsign and @dbort! Could you kindly help assign reviewers to this PR? Many thanks!

vortex-captainand others added 2 commits November 22, 2024 09:48
- attempt to fix extension/data_loader/file_data_loader.cpp:20:10: fatal error: 'executorch/runtime/platform/unistd.h' file not found
@vortex-captain

Copy link
Copy Markdown
Author

Hi @dbort I attempted to address the issues in the checks, could you kindly help rerun them? Thanks 😄

Comment threadbackends/xnnpack/CMakeLists.txt Outdated
Comment threadkernels/quantized/CMakeLists.txt
@vortex-captainvortex-captain changed the title Windows x64 Build SupportWindows x64 Build Support with xnnpackDec 3, 2024
@vortex-captainvortex-captain changed the title Windows x64 Build Support with xnnpackWindows x64 Build with support for xnnpack and llama exampleDec 4, 2024

@malfetmalfet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO this change would benefit from splitting it into several separate PRs, namely:

  • Please rename unistd.h to compat_unistd.h as redefining system headers might create some hard to debug confusions
  • Submit a separate PR for adding dataloader on Windows
  • Submit smaller fixes for individual changes in headers/cpp files explaining why they are needed
  • Submit a separate PR with generic build system changes

@mcr229mcr229 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

XNN related changes look good to me

endif()


if (WIN32)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks fine to me, i'm assuming this has to be done for every flatbuffer outputted header file

@vortex-captainvortex-captainDec 6, 2024

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks fine to me, i'm assuming this has to be done for every flatbuffer outputted header file

Thanks for the review! As suggested, we will split into smaller PRs (#7217), and apply these "platform-dependent shell command" changes everywhere in a later PR

// There currently doesn't seem to be a great way to do this in Windows and
// given that weak linkage is not really critical on Windows, we'll just leave
// it as a stub.
#define ET_WEAK

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vortex-captain does this work with MSVC now? Is there a certain version of MSVC this works for, because i remember it didn't work for the older versions.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vortex-captain does this work with MSVC now? Is there a certain version of MSVC this works for, because i remember it didn't work for the older versions.

yes, Windows x64 build uses clang-cl compiler, which supports __attribute__((weak))

@@ -0,0 +1,251 @@
/*
* Copyright (c) Google Inc. and affiliates.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as @malfet mentioned, isolating these changes to a separate PR would be much more easier to review.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as @malfet mentioned, isolating these changes to a separate PR would be much more easier to review.

Sure! We plan to split into 3 smaller PRs: #7217

@@ -0,0 +1,75 @@
/*

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should maybe create a separate folder for this like runtime/platform/windows and put this under there. @dbort what do you think?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should maybe create a separate folder for this like runtime/platform/windows and put this under there. @dbort what do you think?

As @malfet suggested, We renamed unistd.h to compat_unistd.h in the new PR which would serve as a wrapper of <unistd.h> used in different platforms. Would it be clearer to put it in runtime/platform/windows? Thanks!

@vortex-captain

Copy link
Copy Markdown
Author

IMO this change would benefit from splitting it into several separate PRs, namely:

  • Please rename unistd.h to compat_unistd.h as redefining system headers might create some hard to debug confusions
  • Submit a separate PR for adding dataloader on Windows
  • Submit smaller fixes for individual changes in headers/cpp files explaining why they are needed
  • Submit a separate PR with generic build system changes

Thanks for the great suggestions! We plan to split this PR into 3 smaller ones, please find details in the new PR here, in which unistd.h has been renamed to compat_unistd.h

@SS-JIA

Copy link
Copy Markdown
Contributor

Closing this PR now, as the changes contained in this PR are now merged as a part of the recent Windows support effort i.e. #9198

@SS-JIASS-JIA closed this Mar 17, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.release notes: buildChanges related to build, including dependency upgrades, build flags, optimizations, etc.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support build on native Windows

7 participants

@vortex-captain@SS-JIA@malfet@mcr229@tarun292@facebook-github-bot@chinazhangchao
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Windows x64 Build with support for xnnpack and llama example - #6979

Closed
vortex-captain wants to merge 16 commits into
pytorch:mainfrom
vortex-captain:win_build
Closed

Windows x64 Build with support for xnnpack and llama example#6979
vortex-captain wants to merge 16 commits into
pytorch:mainfrom
vortex-captain:win_build

Conversation

@vortex-captain

@vortex-captainvortex-captain commented Nov 20, 2024

Copy link
Copy Markdown

Summary

This PR introduces support for out-of-the-box builds on Windows x64 with xnnpack, simplifying the setup process for developers using executorch on Windows. Additionally, it lays the groundwork for future Windows build pipelines and prebuilt PyPI packages.

Fixes#4661

Test plan

PR tested by running minimal executor_runner example (https://pytorch.org/executorch/stable/getting-started-setup.html#run-your-program) in the following environment:

  • Windows 11 x64
  • Visual Studio Enterprise 2022 with these components installed:
    • C++ Clang tools for Windows
    • MSBuild support for LLVM (clang-cl) toolset
    • C++ CMake tools for Windows

Steps:

# run the following in command prompt
cd executorch/# contains code of this PR
git pull
git submodule sync
git submodule update --init
./install_requirements.bat--pybind xnnpack
Remove-Item-Path "add.pte"-ErrorAction SilentlyContinue
python .\export_add.py # export_add.py from https://pytorch.org/executorch/stable/getting-started-setup.html#export-a-program
msbuild pip-out\temp.win-amd64-cpython-310\cmake-out\executorch.sln /t:Rebuild
pip-out\temp.win-amd64-cpython-310\cmake-out\Debug\executor_runner.exe--model-path add.pte

References

#4681
#5252
#4899
#5164
#4993

@pytorch-bot

pytorch-botBot commented Nov 20, 2024

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/6979

Note: Links to docs will display an error until the docs builds have been completed.

❌ 6 New Failures

As of commit 8e2b8bd with merge base 3475707 (image):

NEW FAILURES - The following jobs have failed:

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Nov 20, 2024
@pytorch-bot

Copy link
Copy Markdown

❌ 🤖 pytorchbot command failed:

@pytorchbot: error: argument command: invalid choice: 'Release' (choose from 'merge', 'revert', 'rebase', 'label', 'drci', 'cherry-pick', 'close')
usage: @pytorchbot [-h] {merge,revert,rebase,label,drci,cherry-pick,close} ...

Try @pytorchbot --help for more info.

@vortex-captain

Copy link
Copy Markdown
Author

@pytorchbot label "Release notes: build"

@pytorch-bot

Copy link
Copy Markdown

Didn't find following labels among repository labels: Release notes: build

@vortex-captain

Copy link
Copy Markdown
Author

@pytorchbot label "release notes: build"

@pytorch-botpytorch-botBot added the release notes: build Changes related to build, including dependency upgrades, build flags, optimizations, etc. label Nov 21, 2024
@vortex-captain
vortex-captain marked this pull request as ready for review November 21, 2024 03:24
@vortex-captain

Copy link
Copy Markdown
Author

Hi @kirklandsign and @dbort! Could you kindly help assign reviewers to this PR? Many thanks!

vortex-captainand others added 2 commits November 22, 2024 09:48
- attempt to fix extension/data_loader/file_data_loader.cpp:20:10: fatal error: 'executorch/runtime/platform/unistd.h' file not found
@vortex-captain

Copy link
Copy Markdown
Author

Hi @dbort I attempted to address the issues in the checks, could you kindly help rerun them? Thanks 😄

Comment threadbackends/xnnpack/CMakeLists.txt Outdated
Comment threadkernels/quantized/CMakeLists.txt
@vortex-captainvortex-captain changed the title Windows x64 Build SupportWindows x64 Build Support with xnnpackDec 3, 2024
@vortex-captainvortex-captain changed the title Windows x64 Build Support with xnnpackWindows x64 Build with support for xnnpack and llama exampleDec 4, 2024

@malfetmalfet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO this change would benefit from splitting it into several separate PRs, namely:

  • Please rename unistd.h to compat_unistd.h as redefining system headers might create some hard to debug confusions
  • Submit a separate PR for adding dataloader on Windows
  • Submit smaller fixes for individual changes in headers/cpp files explaining why they are needed
  • Submit a separate PR with generic build system changes

@mcr229mcr229 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

XNN related changes look good to me

endif()


if (WIN32)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks fine to me, i'm assuming this has to be done for every flatbuffer outputted header file

@vortex-captainvortex-captainDec 6, 2024

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks fine to me, i'm assuming this has to be done for every flatbuffer outputted header file

Thanks for the review! As suggested, we will split into smaller PRs (#7217), and apply these "platform-dependent shell command" changes everywhere in a later PR

// There currently doesn't seem to be a great way to do this in Windows and
// given that weak linkage is not really critical on Windows, we'll just leave
// it as a stub.
#define ET_WEAK

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vortex-captain does this work with MSVC now? Is there a certain version of MSVC this works for, because i remember it didn't work for the older versions.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vortex-captain does this work with MSVC now? Is there a certain version of MSVC this works for, because i remember it didn't work for the older versions.

yes, Windows x64 build uses clang-cl compiler, which supports __attribute__((weak))

@@ -0,0 +1,251 @@
/*
* Copyright (c) Google Inc. and affiliates.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as @malfet mentioned, isolating these changes to a separate PR would be much more easier to review.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as @malfet mentioned, isolating these changes to a separate PR would be much more easier to review.

Sure! We plan to split into 3 smaller PRs: #7217

@@ -0,0 +1,75 @@
/*

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should maybe create a separate folder for this like runtime/platform/windows and put this under there. @dbort what do you think?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should maybe create a separate folder for this like runtime/platform/windows and put this under there. @dbort what do you think?

As @malfet suggested, We renamed unistd.h to compat_unistd.h in the new PR which would serve as a wrapper of <unistd.h> used in different platforms. Would it be clearer to put it in runtime/platform/windows? Thanks!

@vortex-captain

Copy link
Copy Markdown
Author

IMO this change would benefit from splitting it into several separate PRs, namely:

  • Please rename unistd.h to compat_unistd.h as redefining system headers might create some hard to debug confusions
  • Submit a separate PR for adding dataloader on Windows
  • Submit smaller fixes for individual changes in headers/cpp files explaining why they are needed
  • Submit a separate PR with generic build system changes

Thanks for the great suggestions! We plan to split this PR into 3 smaller ones, please find details in the new PR here, in which unistd.h has been renamed to compat_unistd.h

@SS-JIA

Copy link
Copy Markdown
Contributor

Closing this PR now, as the changes contained in this PR are now merged as a part of the recent Windows support effort i.e. #9198

@SS-JIASS-JIA closed this Mar 17, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.release notes: buildChanges related to build, including dependency upgrades, build flags, optimizations, etc.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support build on native Windows

7 participants

@vortex-captain@SS-JIA@malfet@mcr229@tarun292@facebook-github-bot@chinazhangchao
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Windows x64 Build with support for xnnpack and llama example - #6979

Closed
vortex-captain wants to merge 16 commits into
pytorch:mainfrom
vortex-captain:win_build
Closed

Windows x64 Build with support for xnnpack and llama example#6979
vortex-captain wants to merge 16 commits into
pytorch:mainfrom
vortex-captain:win_build

Conversation

@vortex-captain

@vortex-captainvortex-captain commented Nov 20, 2024

Copy link
Copy Markdown

Summary

This PR introduces support for out-of-the-box builds on Windows x64 with xnnpack, simplifying the setup process for developers using executorch on Windows. Additionally, it lays the groundwork for future Windows build pipelines and prebuilt PyPI packages.

Fixes#4661

Test plan

PR tested by running minimal executor_runner example (https://pytorch.org/executorch/stable/getting-started-setup.html#run-your-program) in the following environment:

  • Windows 11 x64
  • Visual Studio Enterprise 2022 with these components installed:
    • C++ Clang tools for Windows
    • MSBuild support for LLVM (clang-cl) toolset
    • C++ CMake tools for Windows

Steps:

# run the following in command prompt
cd executorch/# contains code of this PR
git pull
git submodule sync
git submodule update --init
./install_requirements.bat--pybind xnnpack
Remove-Item-Path "add.pte"-ErrorAction SilentlyContinue
python .\export_add.py # export_add.py from https://pytorch.org/executorch/stable/getting-started-setup.html#export-a-program
msbuild pip-out\temp.win-amd64-cpython-310\cmake-out\executorch.sln /t:Rebuild
pip-out\temp.win-amd64-cpython-310\cmake-out\Debug\executor_runner.exe--model-path add.pte

References

#4681
#5252
#4899
#5164
#4993

@pytorch-bot

pytorch-botBot commented Nov 20, 2024

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/6979

Note: Links to docs will display an error until the docs builds have been completed.

❌ 6 New Failures

As of commit 8e2b8bd with merge base 3475707 (image):

NEW FAILURES - The following jobs have failed:

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Nov 20, 2024
@pytorch-bot

Copy link
Copy Markdown

❌ 🤖 pytorchbot command failed:

@pytorchbot: error: argument command: invalid choice: 'Release' (choose from 'merge', 'revert', 'rebase', 'label', 'drci', 'cherry-pick', 'close')
usage: @pytorchbot [-h] {merge,revert,rebase,label,drci,cherry-pick,close} ...

Try @pytorchbot --help for more info.

@vortex-captain

Copy link
Copy Markdown
Author

@pytorchbot label "Release notes: build"

@pytorch-bot

Copy link
Copy Markdown

Didn't find following labels among repository labels: Release notes: build

@vortex-captain

Copy link
Copy Markdown
Author

@pytorchbot label "release notes: build"

@pytorch-botpytorch-botBot added the release notes: build Changes related to build, including dependency upgrades, build flags, optimizations, etc. label Nov 21, 2024
@vortex-captain
vortex-captain marked this pull request as ready for review November 21, 2024 03:24
@vortex-captain

Copy link
Copy Markdown
Author

Hi @kirklandsign and @dbort! Could you kindly help assign reviewers to this PR? Many thanks!

vortex-captainand others added 2 commits November 22, 2024 09:48
- attempt to fix extension/data_loader/file_data_loader.cpp:20:10: fatal error: 'executorch/runtime/platform/unistd.h' file not found
@vortex-captain

Copy link
Copy Markdown
Author

Hi @dbort I attempted to address the issues in the checks, could you kindly help rerun them? Thanks 😄

Comment threadbackends/xnnpack/CMakeLists.txt Outdated
Comment threadkernels/quantized/CMakeLists.txt
@vortex-captainvortex-captain changed the title Windows x64 Build SupportWindows x64 Build Support with xnnpackDec 3, 2024
@vortex-captainvortex-captain changed the title Windows x64 Build Support with xnnpackWindows x64 Build with support for xnnpack and llama exampleDec 4, 2024

@malfetmalfet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO this change would benefit from splitting it into several separate PRs, namely:

  • Please rename unistd.h to compat_unistd.h as redefining system headers might create some hard to debug confusions
  • Submit a separate PR for adding dataloader on Windows
  • Submit smaller fixes for individual changes in headers/cpp files explaining why they are needed
  • Submit a separate PR with generic build system changes

@mcr229mcr229 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

XNN related changes look good to me

endif()


if (WIN32)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks fine to me, i'm assuming this has to be done for every flatbuffer outputted header file

@vortex-captainvortex-captainDec 6, 2024

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks fine to me, i'm assuming this has to be done for every flatbuffer outputted header file

Thanks for the review! As suggested, we will split into smaller PRs (#7217), and apply these "platform-dependent shell command" changes everywhere in a later PR

// There currently doesn't seem to be a great way to do this in Windows and
// given that weak linkage is not really critical on Windows, we'll just leave
// it as a stub.
#define ET_WEAK

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vortex-captain does this work with MSVC now? Is there a certain version of MSVC this works for, because i remember it didn't work for the older versions.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vortex-captain does this work with MSVC now? Is there a certain version of MSVC this works for, because i remember it didn't work for the older versions.

yes, Windows x64 build uses clang-cl compiler, which supports __attribute__((weak))

@@ -0,0 +1,251 @@
/*
* Copyright (c) Google Inc. and affiliates.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as @malfet mentioned, isolating these changes to a separate PR would be much more easier to review.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as @malfet mentioned, isolating these changes to a separate PR would be much more easier to review.

Sure! We plan to split into 3 smaller PRs: #7217

@@ -0,0 +1,75 @@
/*

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should maybe create a separate folder for this like runtime/platform/windows and put this under there. @dbort what do you think?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should maybe create a separate folder for this like runtime/platform/windows and put this under there. @dbort what do you think?

As @malfet suggested, We renamed unistd.h to compat_unistd.h in the new PR which would serve as a wrapper of <unistd.h> used in different platforms. Would it be clearer to put it in runtime/platform/windows? Thanks!

@vortex-captain

Copy link
Copy Markdown
Author

IMO this change would benefit from splitting it into several separate PRs, namely:

  • Please rename unistd.h to compat_unistd.h as redefining system headers might create some hard to debug confusions
  • Submit a separate PR for adding dataloader on Windows
  • Submit smaller fixes for individual changes in headers/cpp files explaining why they are needed
  • Submit a separate PR with generic build system changes

Thanks for the great suggestions! We plan to split this PR into 3 smaller ones, please find details in the new PR here, in which unistd.h has been renamed to compat_unistd.h

@SS-JIA

Copy link
Copy Markdown
Contributor

Closing this PR now, as the changes contained in this PR are now merged as a part of the recent Windows support effort i.e. #9198

@SS-JIASS-JIA closed this Mar 17, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.release notes: buildChanges related to build, including dependency upgrades, build flags, optimizations, etc.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support build on native Windows

7 participants

@vortex-captain@SS-JIA@malfet@mcr229@tarun292@facebook-github-bot@chinazhangchao