-
Notifications
You must be signed in to change notification settings - Fork 695
Add Metal backend build system and runtime integration #15024
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
78 commits
Select commit
Hold shift + click to select a range
6420712
Update
manuelcandales d036c07
Update
manuelcandales 1a22c5e
Update
manuelcandales d6f0bc9
Update
manuelcandales 7e11615
Update
manuelcandales dfa435a
Update
manuelcandales 648ee07
Update
manuelcandales 3bea537
Update
manuelcandales b177b63
Update
manuelcandales 9779d54
Update
manuelcandales ca5f1e5
Update
manuelcandales 7e971b0
Update
manuelcandales f12117b
Update
manuelcandales 5dfcd4f
Update
manuelcandales 57d9e45
Update
manuelcandales de83a9f
Update
manuelcandales c4c16aa
Update
manuelcandales ce0f085
Update
manuelcandales e391e17
Update
manuelcandales 3572de8
Update
manuelcandales bcd7655
Update
manuelcandales 71a079d
Update
manuelcandales fd707f3
Update
manuelcandales 2f092af
Update
manuelcandales 89d3f14
Update
manuelcandales 7590e37
Update
manuelcandales bea144f
Update
manuelcandales ade75f0
Update
manuelcandales 094b8bb
Update
manuelcandales 00a154e
Update
manuelcandales e9b3372
Update
manuelcandales f9c8989
Update
manuelcandales b87d5de
Update
manuelcandales 81c4588
Update
manuelcandales 8b1d309
Update
manuelcandales aec8796
Update
manuelcandales 404a1b8
Update
manuelcandales 422e4ba
Update
manuelcandales d075361
Update
manuelcandales 3229b92
Update
manuelcandales 3e8648e
Update
manuelcandales 971a762
Update
manuelcandales 3425f17
Update
manuelcandales c837491
Update
manuelcandales aea11e8
Update
manuelcandales 7f178d3
Update
manuelcandales 23ec80f
Update
manuelcandales f46adc5
Update
manuelcandales 16d863c
Update
manuelcandales c80142d
Update
manuelcandales c3e9d0a
Update
manuelcandales 780d883
Update
manuelcandales 79d8fbc
Update
manuelcandales b782bb5
Update
manuelcandales cf93ffd
Update
manuelcandales 4eaa345
Update
manuelcandales 61ead64
Update
manuelcandales 74cbeef
Update
manuelcandales 750badf
Update
manuelcandales 509e5ce
Update
manuelcandales 76e5a45
Update
manuelcandales 71f87b6
Update
manuelcandales 930f6b9
Update
manuelcandales 2667a0c
Update
manuelcandales 6a6ba04
Update
manuelcandales 07c61d0
Update
manuelcandales 95a7024
Update
manuelcandales f214162
Update
manuelcandales e8b9828
Update
manuelcandales 7c1b9b2
Update
manuelcandales dcafb2e
Update
manuelcandales d37e7ef
Update
manuelcandales 1506e5f
Update
manuelcandales 6f6fd58
Update
manuelcandales 4367977
Update
manuelcandales 735eff5
Update
manuelcandales 9d69769
Update
manuelcandales 1509b6d
Update
manuelcandales File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
# Copyright (c) Meta Platforms, Inc. and affiliates. | ||
# All rights reserved. | ||
# | ||
# This source code is licensed under the BSD-style license found in the | ||
# LICENSE file in the root directory of this source tree. | ||
# | ||
# Build AOTI Metal backend for runtime. | ||
# | ||
# ### Editing this file ### | ||
# | ||
# This file should be formatted with | ||
# ~~~ | ||
# cmake-format -i CMakeLists.txt | ||
# ~~~ | ||
# It should also be cmake-lint clean. | ||
# | ||
cmake_minimum_required(VERSION 3.29) | ||
|
||
set(CMAKE_CXX_STANDARD 17) | ||
set(CMAKE_CXX_STANDARD_REQUIRED ON) | ||
|
||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) | ||
|
||
if(NOT APPLE) | ||
message(FATAL_ERROR "Metal backend requires macOS") | ||
endif() | ||
|
||
# Source root directory for executorch. | ||
if(NOT EXECUTORCH_ROOT) | ||
set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..) | ||
endif() | ||
|
||
include(${EXECUTORCH_ROOT}/tools/cmake/Utils.cmake) | ||
# Use full torch package to get library paths, but only link specific libraries | ||
find_package_torch() | ||
|
||
set(_aoti_metal_sources | ||
runtime/metal_backend.cpp | ||
runtime/shims/memory.cpp | ||
runtime/shims/et_metal.mm | ||
runtime/shims/et_metal_ops.mm | ||
runtime/shims/shim_mps.mm | ||
runtime/shims/tensor_attribute.cpp | ||
runtime/shims/utils.cpp | ||
) | ||
|
||
add_library(metal_backend STATIC ${_aoti_metal_sources}) | ||
target_include_directories( | ||
metal_backend | ||
PUBLIC $<BUILD_INTERFACE:${EXECUTORCH_ROOT}> $<INSTALL_INTERFACE:include> | ||
# PyTorch AOTI headers from ExecutorTorch's torch detection | ||
${TORCH_INCLUDE_DIRS} | ||
) | ||
|
||
# Link Metal framework | ||
find_library(METAL_LIBRARY Metal REQUIRED) | ||
find_library(FOUNDATION_LIBRARY Foundation REQUIRED) | ||
find_library(METALPERFORMANCESHADERS_LIBRARY MetalPerformanceShaders REQUIRED) | ||
find_library( | ||
METALPERFORMANCESHADERSGRAPH_LIBRARY MetalPerformanceShadersGraph REQUIRED | ||
) | ||
target_link_libraries( | ||
metal_backend | ||
PUBLIC ${METAL_LIBRARY} ${FOUNDATION_LIBRARY} | ||
${METALPERFORMANCESHADERS_LIBRARY} | ||
${METALPERFORMANCESHADERSGRAPH_LIBRARY} | ||
) | ||
|
||
target_compile_options(metal_backend PUBLIC -fexceptions -frtti -fPIC) | ||
manuelcandales marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
target_link_options(metal_backend PUBLIC -Wl,-export_dynamic) | ||
|
||
# Find PyTorch's OpenMP library specifically for libtorch-less AOTI | ||
get_torch_base_path(TORCH_BASE_PATH) | ||
find_library( | ||
TORCH_OMP_LIBRARY | ||
NAMES omp libomp | ||
PATHS "${TORCH_BASE_PATH}/lib" | ||
NO_DEFAULT_PATH | ||
) | ||
|
||
if(TORCH_OMP_LIBRARY) | ||
message(STATUS "Found PyTorch OpenMP library: ${TORCH_OMP_LIBRARY}") | ||
# Get the directory containing the OpenMP library for rpath | ||
get_filename_component(TORCH_OMP_LIB_DIR ${TORCH_OMP_LIBRARY} DIRECTORY) | ||
message(STATUS "OpenMP library directory: ${TORCH_OMP_LIB_DIR}") | ||
else() | ||
message( | ||
WARNING "PyTorch OpenMP library not found, may cause runtime linking issues" | ||
) | ||
endif() | ||
|
||
# Link against appropriate backends and standard libraries | ||
target_link_libraries( | ||
metal_backend PUBLIC aoti_common extension_tensor ${CMAKE_DL_LIBS} | ||
${TORCH_OMP_LIBRARY} | ||
) | ||
|
||
# Set rpath for OpenMP library to avoid runtime linking issues | ||
if(TORCH_OMP_LIBRARY AND TORCH_OMP_LIB_DIR) | ||
# Add the OpenMP library directory to the rpath | ||
set_target_properties( | ||
metal_backend PROPERTIES BUILD_RPATH "${TORCH_OMP_LIB_DIR}" | ||
INSTALL_RPATH "${TORCH_OMP_LIB_DIR}" | ||
) | ||
# Also try common OpenMP library locations | ||
target_link_options( | ||
metal_backend PUBLIC -Wl,-rpath,${TORCH_OMP_LIB_DIR} | ||
-Wl,-rpath,/usr/local/opt/libomp/lib | ||
-Wl,-rpath,/opt/homebrew/opt/libomp/lib | ||
) | ||
message(STATUS "Added rpath for OpenMP library: ${TORCH_OMP_LIB_DIR}") | ||
endif() | ||
|
||
executorch_target_link_options_shared_lib(metal_backend) | ||
install( | ||
TARGETS metal_backend | ||
EXPORT ExecuTorchTargets | ||
DESTINATION lib | ||
) |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.