mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-06 00:20:18 +01:00
Change CMake config to enable universal binary for Mac (#50243)
Summary: This PR is a step towards enabling cross compilation from x86_64 to arm64. The following has been added: 1. When cross compilation is detected, compile a local universal fatfile to use as protoc. 2. For the simple compile check in MiscCheck.cmake, make sure to compile the small snippet as a universal binary in order to run the check. **Test plan:** Kick off a minimal build on a mac intel machine with the macOS 11 SDK with this command: ``` CMAKE_OSX_ARCHITECTURES=arm64 USE_MKLDNN=OFF USE_QNNPACK=OFF USE_PYTORCH_QNNPACK=OFF BUILD_TEST=OFF USE_NNPACK=OFF python setup.py install ``` (If you run the above command before this change, or without macOS 11 SDK set up, it will fail.) Then check the platform of the built binaries using this command: ``` lipo -info build/lib/libfmt.a ``` Output: - Before this PR, running a regular build via `python setup.py install` (instead of using the flags listed above): ``` Non-fat file: build/lib/libfmt.a is architecture: x86_64 ``` - Using this PR: ``` Non-fat file: build/lib/libfmt.a is architecture: arm64 ``` Pull Request resolved: https://github.com/pytorch/pytorch/pull/50243 Reviewed By: malfet Differential Revision: D25849955 Pulled By: janeyx99 fbshipit-source-id: e9853709a7279916f66aa4c4e054dfecced3adb1
This commit is contained in:
parent
49bb0a30e8
commit
c2d37cd990
|
|
@ -505,6 +505,20 @@ if(NOT CMAKE_BUILD_TYPE)
|
|||
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build from: Debug Release RelWithDebInfo MinSizeRel Coverage." FORCE)
|
||||
endif()
|
||||
|
||||
# The below means we are cross compiling for arm64 or x86_64 on MacOSX
|
||||
if(NOT IOS AND CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_OSX_ARCHITECTURES MATCHES "^(x86_64|arm64)$")
|
||||
set(CROSS_COMPILING_MACOSX TRUE)
|
||||
# We need to compile a universal protoc to not fail protobuf build
|
||||
execute_process(COMMAND ./scripts/build_host_protoc.sh --other-flags "-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64"
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||
RESULT_VARIABLE BUILD_HOST_PROTOC_RESULT)
|
||||
if(NOT BUILD_HOST_PROTOC_RESULT EQUAL "0")
|
||||
message(FATAL_ERROR "Could not compile universal protoc.")
|
||||
endif()
|
||||
set(PROTOBUF_PROTOC_EXECUTABLE "${PROJECT_SOURCE_DIR}/build_host_protoc/bin/protoc")
|
||||
set(CAFFE2_CUSTOM_PROTOC_EXECUTABLE "${PROJECT_SOURCE_DIR}/build_host_protoc/bin/protoc")
|
||||
endif()
|
||||
|
||||
# ---[ Misc checks to cope with various compiler modes
|
||||
include(cmake/MiscCheck.cmake)
|
||||
|
||||
|
|
|
|||
|
|
@ -174,6 +174,10 @@ std::string show_config() {
|
|||
ss << " - NNPACK is enabled\n";
|
||||
#endif
|
||||
|
||||
#ifdef CROSS_COMPILING_MACOSX
|
||||
ss << " - Cross compiling on MacOSX\n";
|
||||
#endif
|
||||
|
||||
ss << " - "<< used_cpu_capability() << "\n";
|
||||
|
||||
if (hasCUDA()) {
|
||||
|
|
|
|||
|
|
@ -43,6 +43,9 @@ if(NOT INTERN_BUILD_MOBILE)
|
|||
# important because with ASAN you might need to help the compiled library find
|
||||
# some dynamic libraries.
|
||||
cmake_push_check_state(RESET)
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_OSX_ARCHITECTURES MATCHES "^(x86_64|arm64)$")
|
||||
list(APPEND CMAKE_REQUIRED_FLAGS "-arch ${CMAKE_HOST_SYSTEM_PROCESSOR}")
|
||||
endif()
|
||||
CHECK_C_SOURCE_RUNS("
|
||||
int main() { return 0; }
|
||||
" COMPILER_WORKS)
|
||||
|
|
|
|||
|
|
@ -48,7 +48,9 @@ function(caffe2_print_configuration_summary)
|
|||
message(STATUS " BUILD_TEST : ${BUILD_TEST}")
|
||||
message(STATUS " BUILD_JNI : ${BUILD_JNI}")
|
||||
message(STATUS " BUILD_MOBILE_AUTOGRAD : ${BUILD_MOBILE_AUTOGRAD}")
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||
message(STATUS " CROSS_COMPILING_MACOSX : ${CROSS_COMPILING_MACOSX}")
|
||||
endif()
|
||||
message(STATUS " INTERN_BUILD_MOBILE : ${INTERN_BUILD_MOBILE}")
|
||||
|
||||
message(STATUS " USE_BLAS : ${USE_BLAS}")
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user