Skip to content
Closed
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .ci/docker/ci_commit_pins/pytorch.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
5616fa4a68718ead203314a3467f7dd9547153ae
c620d0b5c7e8679413d620624725471223ce8359
8 changes: 6 additions & 2 deletions .ci/docker/common/install_conda.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ source "$(dirname "${BASH_SOURCE[0]}")/utils.sh"
install_miniconda() {
BASE_URL="https://repo.anaconda.com/miniconda"
CONDA_FILE="Miniconda3-py${PYTHON_VERSION//./}_${MINICONDA_VERSION}-Linux-x86_64.sh"
if [[ $(uname -m) == "aarch64" ]]; then
if [[ $(uname -m) == "aarch64" ]]; then
CONDA_FILE="Miniconda3-py${PYTHON_VERSION//./}_${MINICONDA_VERSION}-Linux-aarch64.sh"
fi

Expand Down Expand Up @@ -71,4 +71,8 @@ fix_conda_ubuntu_libstdcxx() {
install_miniconda
install_python
install_pip_dependencies
fix_conda_ubuntu_libstdcxx
Copy link
Contributor

Choose a reason for hiding this comment

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

Should we add if [[ $(uname -m) != "aarch64" ]] around this call ?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

done (but with single brackets because I didn't see this comment first)

# Hack breaks the job on aarch64 but is still necessary everywhere
# else.
if [ "$(uname -m)" != "aarch64" ]; then
fix_conda_ubuntu_libstdcxx
fi
2 changes: 1 addition & 1 deletion .ci/docker/conda-env-ci.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake=3.26.4
cmake=3.31.2
ninja=1.10.2
libuv
llvm-openmp
Expand Down
1 change: 1 addition & 0 deletions .ci/scripts/check_c10_sync.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ pushd pytorch
git checkout "$pytorch_pin"
popd
"$(dirname "${BASH_SOURCE[0]}")"/compare_dirs.sh runtime/core/portable_type/c10/c10 pytorch/c10
"$(dirname "${BASH_SOURCE[0]}")"/compare_dirs.sh runtime/core/portable_type/c10/torch/standalone pytorch/torch/standalone
2 changes: 1 addition & 1 deletion install_requirements.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ def python_is_compatible():
#
# NOTE: If you're changing, make the corresponding change in .ci/docker/ci_commit_pins/pytorch.txt
# by picking the hash from the same date in https://hud.pytorch.org/hud/pytorch/pytorch/nightly/
NIGHTLY_VERSION = "dev20250601"
NIGHTLY_VERSION = "dev20250616"


def install_requirements(use_pytorch_nightly):
Expand Down
7 changes: 7 additions & 0 deletions runtime/core/portable_type/c10/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,10 @@ would cause all headers in that directory to be includeable with
`#include <foo.h>`. In particular, that includes
`runtime/core/portable_type/complex.h`, which would shadow the C99
`complex.h` standard header.

`torch/standalone` has been added as an extra "even more bottom of
stack" directory in PyTorch, so we have to add it to our sync
here. The extra "stutter" c10 directory causing `c10/torch/standlone`
is unfortunately awkward; perhaps we can rename the top-level
directory to `pytorch_embedded_mirror` when we have extra time to work
through CI failures.
88 changes: 2 additions & 86 deletions runtime/core/portable_type/c10/c10/macros/Export.h
Original file line number Diff line number Diff line change
@@ -1,95 +1,11 @@
#ifndef C10_MACROS_EXPORT_H_
#define C10_MACROS_EXPORT_H_

/* Header file to define the common scaffolding for exported symbols.
*
* Export is by itself a quite tricky situation to deal with, and if you are
* hitting this file, make sure you start with the background here:
* - Linux: https://gcc.gnu.org/wiki/Visibility
* - Windows:
* https://docs.microsoft.com/en-us/cpp/cpp/dllexport-dllimport?view=vs-2017
*
* Do NOT include this file directly. Instead, use c10/macros/Macros.h
*/

// You do not need to edit this part of file unless you are changing the core
// pytorch export abstractions.
//
// This part defines the C10 core export and import macros. This is controlled
// by whether we are building shared libraries or not, which is determined
// during build time and codified in c10/core/cmake_macros.h.
// When the library is built as a shared lib, EXPORT and IMPORT will contain
// visibility attributes. If it is being built as a static lib, then EXPORT
// and IMPORT basically have no effect.

// As a rule of thumb, you should almost NEVER mix static and shared builds for
// libraries that depend on c10. AKA, if c10 is built as a static library, we
// recommend everything dependent on c10 to be built statically. If c10 is built
// as a shared library, everything dependent on it should be built as shared. In
// the PyTorch project, all native libraries shall use the macro
// C10_BUILD_SHARED_LIB to check whether pytorch is building shared or static
// libraries.

// For build systems that do not directly depend on CMake and directly build
// from the source directory (such as Buck), one may not have a cmake_macros.h
// file at all. In this case, the build system is responsible for providing
// correct macro definitions corresponding to the cmake_macros.h.in file.
//
// In such scenarios, one should define the macro
// C10_USING_CUSTOM_GENERATED_MACROS
// to inform this header that it does not need to include the cmake_macros.h
// file.

#ifndef C10_USING_CUSTOM_GENERATED_MACROS
#include <c10/macros/cmake_macros.h>
#endif // C10_USING_CUSTOM_GENERATED_MACROS

#ifdef _WIN32
#define C10_HIDDEN
#if defined(C10_BUILD_SHARED_LIBS)
#define C10_EXPORT __declspec(dllexport)
#define C10_IMPORT __declspec(dllimport)
#else
#define C10_EXPORT
#define C10_IMPORT
#endif
#else // _WIN32
#if defined(__GNUC__)
#define C10_EXPORT __attribute__((__visibility__("default")))
#define C10_HIDDEN __attribute__((__visibility__("hidden")))
#else // defined(__GNUC__)
#define C10_EXPORT
#define C10_HIDDEN
#endif // defined(__GNUC__)
#define C10_IMPORT C10_EXPORT
#endif // _WIN32

#ifdef NO_EXPORT
#undef C10_EXPORT
#define C10_EXPORT
#endif

// Definition of an adaptive XX_API macro, that depends on whether you are
// building the library itself or not, routes to XX_EXPORT and XX_IMPORT.
// Basically, you will need to do this for each shared library that you are
// building, and the instruction is as follows: assuming that you are building
// a library called libawesome.so. You should:
// (1) for your cmake target (usually done by "add_library(awesome, ...)"),
// define a macro called AWESOME_BUILD_MAIN_LIB using
// target_compile_options.
// (2) define the AWESOME_API macro similar to the one below.
// And in the source file of your awesome library, use AWESOME_API to
// annotate public symbols.

// Here, for the C10 library, we will define the macro C10_API for both import
// and export.

// This one is being used by libc10.so
#ifdef C10_BUILD_MAIN_LIB
#define C10_API C10_EXPORT
#else
#define C10_API C10_IMPORT
#endif
#include <torch/standalone/macros/Export.h>

// This one is being used by libtorch.so
#ifdef CAFFE2_BUILD_MAIN_LIB
Expand Down Expand Up @@ -159,4 +75,4 @@
#define C10_API_ENUM
#endif

#endif // C10_MACROS_MACROS_H_
#endif // C10_MACROS_EXPORT_H_
4 changes: 3 additions & 1 deletion runtime/core/portable_type/c10/c10/targets.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,9 @@ def define_common_targets():
"//executorch/...",
"@EXECUTORCH_CLIENTS",
],
deps = select({
exported_deps = [
"//executorch/runtime/core/portable_type/c10/torch/standalone:torch_standalone_headers",
] + select({
"DEFAULT": [],
# Half-inl.h depends on vec_half.h from ATen, but only when building for x86.
"ovr_config//cpu:x86_64": [
Expand Down
5 changes: 5 additions & 0 deletions runtime/core/portable_type/c10/torch/standalone/TARGETS
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
load(":targets.bzl", "define_common_targets")

oncall("executorch")

define_common_targets()
87 changes: 87 additions & 0 deletions runtime/core/portable_type/c10/torch/standalone/macros/Export.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
#pragma once

/* Header file to define the common scaffolding for exported symbols.
*
* Export is by itself a quite tricky situation to deal with, and if you are
* hitting this file, make sure you start with the background here:
* - Linux: https://gcc.gnu.org/wiki/Visibility
* - Windows:
* https://docs.microsoft.com/en-us/cpp/cpp/dllexport-dllimport?view=vs-2017
*
* Do NOT include this file directly. Instead, use c10/macros/Macros.h
*/

// You do not need to edit this part of file unless you are changing the core
// pytorch export abstractions.
//
// This part defines the C10 core export and import macros. This is controlled
// by whether we are building shared libraries or not, which is determined
// during build time and codified in c10/core/cmake_macros.h.
// When the library is built as a shared lib, EXPORT and IMPORT will contain
// visibility attributes. If it is being built as a static lib, then EXPORT
// and IMPORT basically have no effect.

// As a rule of thumb, you should almost NEVER mix static and shared builds for
// libraries that depend on c10. AKA, if c10 is built as a static library, we
// recommend everything dependent on c10 to be built statically. If c10 is built
// as a shared library, everything dependent on it should be built as shared. In
// the PyTorch project, all native libraries shall use the macro
// C10_BUILD_SHARED_LIB to check whether pytorch is building shared or static
// libraries.

// For build systems that do not directly depend on CMake and directly build
// from the source directory (such as Buck), one may not have a cmake_macros.h
// file at all. In this case, the build system is responsible for providing
// correct macro definitions corresponding to the cmake_macros.h.in file.
//
// In such scenarios, one should define the macro
// C10_USING_CUSTOM_GENERATED_MACROS
// to inform this header that it does not need to include the cmake_macros.h
// file.

#ifdef _WIN32
#define C10_HIDDEN
#if defined(C10_BUILD_SHARED_LIBS)
#define C10_EXPORT __declspec(dllexport)
#define C10_IMPORT __declspec(dllimport)
#else
#define C10_EXPORT
#define C10_IMPORT
#endif
#else // _WIN32
#if defined(__GNUC__)
#define C10_EXPORT __attribute__((__visibility__("default")))
#define C10_HIDDEN __attribute__((__visibility__("hidden")))
#else // defined(__GNUC__)
#define C10_EXPORT
#define C10_HIDDEN
#endif // defined(__GNUC__)
#define C10_IMPORT C10_EXPORT
#endif // _WIN32

#ifdef NO_EXPORT
#undef C10_EXPORT
#define C10_EXPORT
#endif

// Definition of an adaptive XX_API macro, that depends on whether you are
// building the library itself or not, routes to XX_EXPORT and XX_IMPORT.
// Basically, you will need to do this for each shared library that you are
// building, and the instruction is as follows: assuming that you are building
// a library called libawesome.so. You should:
// (1) for your cmake target (usually done by "add_library(awesome, ...)"),
// define a macro called AWESOME_BUILD_MAIN_LIB using
// target_compile_options.
// (2) define the AWESOME_API macro similar to the one below.
// And in the source file of your awesome library, use AWESOME_API to
// annotate public symbols.

// Here, for the C10 library, we will define the macro C10_API for both import
// and export.

// This one is being used by libc10.so
#ifdef C10_BUILD_MAIN_LIB
#define C10_API C10_EXPORT
#else
#define C10_API C10_IMPORT
#endif
14 changes: 14 additions & 0 deletions runtime/core/portable_type/c10/torch/standalone/targets.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
load("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime")

def define_common_targets():
"""Defines targets that should be shared between fbcode and xplat.

The directory containing this targets.bzl file should also contain both
TARGETS and BUCK files that call this function.
"""

runtime.cxx_library(
name = "torch_standalone_headers",
exported_headers = glob(["**/*.h"]),
header_namespace = "torch/standalone",
)
Loading