Skip to content

Remove bundled_program dep from mpsdelegate #12562

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 30 commits into from
Jul 18, 2025
Merged
Show file tree
Hide file tree
Changes from 28 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
167 changes: 105 additions & 62 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -164,86 +164,126 @@ endif()
add_subdirectory(third-party)

if(NOT DEFINED FXDIV_SOURCE_DIR)
set(ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG
${CMAKE_POSITION_INDEPENDENT_CODE}
include(GNUInstallDirs)
get_extra_cmake_args_for_external_project(FXDIV_EXTRA_CMAKE_ARGS)
set(FXDIV_SOURCE_DIR
"${CMAKE_CURRENT_LIST_DIR}/backends/xnnpack/third-party/FXdiv"
)
set(FXDIV_SOURCE_DIR "backends/xnnpack/third-party/FXdiv")
add_subdirectory("${FXDIV_SOURCE_DIR}")
set(CMAKE_POSITION_INDEPENDENT_CODE
${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG}
set(FXDIV_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/fxdiv")
set(FXDIV_INSTALL_DIR "${FXDIV_BINARY_DIR}/install")
set(FXDIV_HEADER "${FXDIV_INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR}/fxdiv.h")
ExternalProject_Add(
fxdivExternalProject
SOURCE_DIR "${FXDIV_SOURCE_DIR}"
BINARY_DIR "${FXDIV_BINARY_DIR}"
INSTALL_DIR "${FXDIV_INSTALL_DIR}"
BUILD_BYPRODUCTS "${FXDIV_HEADER}"
CMAKE_ARGS "${FXDIV_EXTRA_CMAKE_ARGS}"
-D
CMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-D
FXDIV_BUILD_TESTS=OFF
-D
FXDIV_BUILD_BENCHMARKS=OFF
)
add_library(fxdiv INTERFACE IMPORTED)
set_property(TARGET fxdiv PROPERTY IMPORTED_LOCATION "${FXDIV_HEADER}")
endif()

if(EXECUTORCH_BUILD_CPUINFO)
# --- cpuinfo
set(ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG
${CMAKE_POSITION_INDEPENDENT_CODE}
set(CPUINFO_SOURCE_DIR
"${CMAKE_CURRENT_LIST_DIR}/backends/xnnpack/third-party/cpuinfo"
)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CPUINFO_SOURCE_DIR "backends/xnnpack/third-party/cpuinfo")
set(CPUINFO_BUILD_TOOLS
OFF
CACHE BOOL ""
set(CPUINFO_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/cpuinfo")
set(CPUINFO_INSTALL_DIR "${CPUINFO_BINARY_DIR}/install")
set(CPUINFO_LIBRARY
"${CPUINFO_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libcpuinfo.a"
)
set(CPUINFO_BUILD_UNIT_TESTS
OFF
CACHE BOOL ""
)
set(CPUINFO_BUILD_MOCK_TESTS
OFF
CACHE BOOL ""
)
set(CPUINFO_BUILD_BENCHMARKS
OFF
CACHE BOOL ""
)
set(CPUINFO_LIBRARY_TYPE
"static"
CACHE STRING ""
)
set(CPUINFO_LOG_LEVEL
"error"
CACHE STRING ""

get_extra_cmake_args_for_external_project(CPUINFO_EXTRA_CMAKE_ARGS)
ExternalProject_Add(
cpuinfoExternalProject
SOURCE_DIR "${CPUINFO_SOURCE_DIR}"
BINARY_DIR "${CPUINFO_BINARY_DIR}"
INSTALL_DIR "${CPUINFO_INSTALL_DIR}"
BUILD_BYPRODUCTS "${CPUINFO_LIBRARY}"
CMAKE_ARGS "${CPUINFO_EXTRA_CMAKE_ARGS}"
-D
CMAKE_POSITION_INDEPENDENT_CODE=ON
-D
CPUINFO_BUILD_TOOLS=OFF
-D
CPUINFO_BUILD_UNIT_TESTS=OFF
-D
CPUINFO_BUILD_MOCK_TESTS=OFF
-D
CPUINFO_BUILD_BENCHMARKS=OFF
-D
CPUINFO_LIBRARY_TYPE=static
-D
CPUINFO_LOG_LEVEL=error
-D
CMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-D
CLOG_SOURCE_DIR="${CPUINFO_SOURCE_DIR}/deps/clog"
)
set(CLOG_SOURCE_DIR "${CPUINFO_SOURCE_DIR}/deps/clog")
add_subdirectory("${CPUINFO_SOURCE_DIR}")
set(CMAKE_POSITION_INDEPENDENT_CODE
${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG}
add_library(cpuinfo STATIC IMPORTED)
set_property(TARGET cpuinfo PROPERTY IMPORTED_LOCATION "${CPUINFO_LIBRARY}")
add_dependencies(cpuinfo cpuinfoExternalProject)
# Trailing slash matters here! "Move everything from the temporary pthreadpool
# install directory to the proper install directory."
install(DIRECTORY "${CPUINFO_INSTALL_DIR}/"
DESTINATION "${CMAKE_INSTALL_PREFIX}"
)
endif()

if(EXECUTORCH_BUILD_PTHREADPOOL)
# --- pthreadpool
set(ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG
${CMAKE_POSITION_INDEPENDENT_CODE}
)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(PTHREADPOOL_SOURCE_DIR "backends/xnnpack/third-party/pthreadpool")
set(PTHREADPOOL_BUILD_TESTS
OFF
CACHE BOOL ""
set(PTHREADPOOL_SOURCE_DIR
"${CMAKE_CURRENT_LIST_DIR}/backends/xnnpack/third-party/pthreadpool"
)
set(PTHREADPOOL_BUILD_BENCHMARKS
OFF
CACHE BOOL ""
)
set(PTHREADPOOL_LIBRARY_TYPE
"static"
CACHE STRING ""
)
set(PTHREADPOOL_ALLOW_DEPRECATED_API
ON
CACHE BOOL ""
include(GNUInstallDirs)
set(PTHREADPOOL_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/pthreadpool")
set(PTHREADPOOL_INSTALL_DIR "${PTHREADPOOL_BINARY_DIR}/install")
set(PTHREADPOOL_LIBRARY
"${PTHREADPOOL_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libpthreadpool.a"
)
get_extra_cmake_args_for_external_project(PTHREADPOOL_EXTRA_CMAKE_ARGS)
if(APPLE)
set(PTHREADPOOL_SYNC_PRIMITIVE
"condvar"
CACHE STRING ""
list(APPEND PTHREADPOOL_EXTRA_CMAKE_ARGS -D
PTHREADPOOL_SYNC_PRIMITIVE=condvar
)
endif()
add_subdirectory("${PTHREADPOOL_SOURCE_DIR}")
set(CMAKE_POSITION_INDEPENDENT_CODE
${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG}
ExternalProject_Add(
pthreadpoolExternalProject
SOURCE_DIR "${PTHREADPOOL_SOURCE_DIR}"
BINARY_DIR "${PTHREADPOOL_BINARY_DIR}"
INSTALL_DIR "${PTHREADPOOL_INSTALL_DIR}"
BUILD_BYPRODUCTS "${PTHREADPOOL_LIBRARY}"
CMAKE_ARGS ${PTHREADPOOL_EXTRA_CMAKE_ARGS}
-D
PTHREADPOOL_BUILD_TESTS=OFF
-D
PTHREADPOOL_BUILD_BENCHMARKS=OFF
-D
PTHREADPOOL_LIBRARY_TYPE=static
-D
PTHREADPOOL_ALLOW_DEPRECATED_API=ON
-D
CMAKE_POSITION_INDEPENDENT_CODE=ON
-D
CMAKE_INSTALL_PREFIX=<INSTALL_DIR>
)
add_library(pthreadpool STATIC IMPORTED)
set_property(
TARGET pthreadpool PROPERTY IMPORTED_LOCATION "${PTHREADPOOL_LIBRARY}"
)
add_dependencies(pthreadpool pthreadpoolExternalProject)
# Trailing slash matters here! "Move everything from the temporary pthreadpool
# install directory to the proper install directory."
install(DIRECTORY "${PTHREADPOOL_INSTALL_DIR}/"
DESTINATION "${CMAKE_INSTALL_PREFIX}"
)
endif()

Expand Down Expand Up @@ -731,7 +771,10 @@ if(EXECUTORCH_BUILD_EXECUTOR_RUNNER)
endif()

set(CMAKE_EXECUTABLE_SUFFIX ".html")
target_link_options(executor_runner PUBLIC -sALLOW_MEMORY_GROWTH --embed-file "${WASM_MODEL_DIR}@/")
target_link_options(
executor_runner PUBLIC -sALLOW_MEMORY_GROWTH --embed-file
"${WASM_MODEL_DIR}@/"
)
endif()
endif()

Expand Down
3 changes: 1 addition & 2 deletions backends/apple/mps/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,7 @@ find_library(MPS_GRAPH_FRAMEWORK MetalPerformanceShadersGraph)

target_link_libraries(
mpsdelegate
PRIVATE bundled_program
mps_schema
PRIVATE mps_schema
executorch_core
${FOUNDATION_FRAMEWORK}
${METAL_FRAMEWORK}
Expand Down
3 changes: 1 addition & 2 deletions backends/xnnpack/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,8 @@ target_include_directories(
${EXECUTORCH_ROOT}/third-party/flatbuffers/include
)

set(xnnpack_third_party pthreadpool extension_threadpool cpuinfo)

include(cmake/Dependencies.cmake)
set(xnnpack_third_party XNNPACK pthreadpool extension_threadpool cpuinfo)

list(TRANSFORM _xnnpack_backend__srcs PREPEND "${EXECUTORCH_ROOT}/")
add_library(xnnpack_backend ${_xnnpack_backend__srcs})
Expand Down
124 changes: 67 additions & 57 deletions backends/xnnpack/cmake/Dependencies.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,73 +10,83 @@ set(THIRD_PARTY_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/third-party")

# --- XNNPACK

# Setting this global PIC flag for all XNNPACK targets. This is needed for
# Object libraries within XNNPACK which must be PIC to successfully link this
# static libXNNPACK
set(ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG
${CMAKE_POSITION_INDEPENDENT_CODE}
)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

set(XNNPACK_SOURCE_DIR "${THIRD_PARTY_ROOT}/XNNPACK")
set(XNNPACK_INCLUDE_DIR "${XNNPACK_SOURCE_DIR}/include")
set(XNNPACK_LIBRARY_TYPE
"static"
CACHE STRING ""

include(ExternalProject)
include(GNUInstallDirs) # For CMAKE_INSTALL_LIBDIR
set(XNNPACK_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/XNNPACK/install")
set(XNNPACK_STATIC_LIB
"${XNNPACK_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libXNNPACK.a"
)
set(XNNPACK_BUILD_BENCHMARKS
OFF
CACHE BOOL ""
set(XNNPACK_MICROKERNELS_STATIC_LIB
"${XNNPACK_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libxnnpack-microkernels-prod.a"
)
set(XNNPACK_BUILD_TESTS
OFF
CACHE BOOL ""
get_extra_cmake_args_for_external_project(XNNPACK_EXTRA_CMAKE_ARGS)
ExternalProject_Add(
XNNPACKExternalProject
SOURCE_DIR ${XNNPACK_SOURCE_DIR}
# Not 100% clear on these locations
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/XNNPACK
INSTALL_DIR ${XNNPACK_INSTALL_DIR}
INSTALL_BYPRODUCTS ${XNNPACK_STATIC_LIB} ${XNNPACK_MICROKERNELS_STATIC_LIB}
CMAKE_ARGS
${XNNPACK_EXTRA_CMAKE_ARGS}
-D
XNNPACK_LIBRARY_TYPE=static
-D
XNNPACK_BUILD_BENCHMARKS=OFF
-D
XNNPACK_BUILD_TESTS=OFF
-D
XNNPACK_ENABLE_AVXVNNI=OFF
# Work around observed failure:
# https://github.com/pytorch/executorch/pull/10362#issuecomment-2906391232
-D
XNNPACK_ENABLE_AVX512VNNIGFNI=OFF
-D
ENABLE_XNNPACK_WEIGHTS_CACHE=${EXECUTORCH_XNNPACK_ENABLE_WEIGHT_CACHE}
-D
ENABLE_XNNPACK_SHARED_WORKSPACE=${EXECUTORCH_XNNPACK_SHARED_WORKSPACE}
-D
XNNPACK_ENABLE_KLEIDIAI=${EXECUTORCH_XNNPACK_ENABLE_KLEIDIAI}
-D
CMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-D
XNNPACK_BUILD_ALL_MICROKERNELS=OFF
-D
CMAKE_POSITION_INDEPENDENT_CODE=ON
)
set(XNNPACK_ENABLE_AVXVNNI
OFF
CACHE BOOL ""
)
# Work around observed failure: https://github.com/pytorch/executorch/pull/10362#issuecomment-2906391232
set(XNNPACK_ENABLE_AVX512VNNIGFNI
OFF
CACHE BOOL "")

if(EXECUTORCH_XNNPACK_ENABLE_KLEIDI)
set(XNNPACK_ENABLE_KLEIDIAI
ON
CACHE BOOL ""
)
else()
set(XNNPACK_ENABLE_KLEIDIAI
OFF
CACHE BOOL ""
)
endif()
add_library(XNNPACK STATIC IMPORTED GLOBAL)
# TODO: this probably doesn't work on Windows.
set_property(TARGET XNNPACK PROPERTY IMPORTED_LOCATION ${XNNPACK_STATIC_LIB})

add_dependencies(XNNPACK XNNPACKExternalProject)

add_library(xnnpack-microkernels-prod STATIC IMPORTED GLOBAL)
set_property(
TARGET xnnpack-microkernels-prod PROPERTY IMPORTED_LOCATION
${XNNPACK_MICROKERNELS_STATIC_LIB}
)
add_dependencies(xnnpack-microkernels-prod XNNPACKExternalProject)

set(XNNPACK_BUILD_ALL_MICROKERNELS
OFF
CACHE BOOL ""
set_target_properties(
XNNPACK PROPERTIES INTERFACE_LINK_LIBRARIES xnnpack-microkernels-prod
)
add_subdirectory("${XNNPACK_SOURCE_DIR}")
include_directories(SYSTEM ${XNNPACK_INCLUDE_DIR})
list(APPEND xnnpack_third_party XNNPACK)
install(TARGETS xnnpack-microkernels-prod
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

install(DIRECTORY ${XNNPACK_INSTALL_DIR}/ DESTINATION ${CMAKE_INSTALL_PREFIX})

if(EXECUTORCH_XNNPACK_ENABLE_KLEIDI)
if(TARGET kleidiai)
install(TARGETS kleidiai
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
add_library(kleidiai SHARED IMPORTED)
find_library(
KLEIDIAI_LIBRARY kleidiai
PATHS "${CMAKE_CURRENT_BINARY_DIR}/XNNPACK/kleidiai-source"
)
if(KLEIDIAI_LIBRARY)
message(WARNING "Can't find KleidiAI, skipping install")
install(FILES ${KLEIDIAI_LIBRARY} PUBLIC_HEADER
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
endif()
endif()

# Revert PIC Flag to what it originally was
set(CMAKE_POSITION_INDEPENDENT_CODE
${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG}
)
Loading
Loading