diff --git a/CMakeLists.txt b/CMakeLists.txt index c7ed7b1fcb1..b1789a592e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,6 +65,11 @@ if(NOT CMAKE_SYSTEM_PROCESSOR) endif() announce_configured_options(CMAKE_SYSTEM_PROCESSOR) +if(NOT CMAKE_SYSTEM_NAME) + set(CMAKE_SYSTEM_NAME ${CMAKE_HOST_SYSTEM_NAME}) +endif() +announce_configured_options(CMAKE_SYSTEM_NAME) + if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Debug) endif() @@ -83,7 +88,7 @@ announce_configured_options(BUCK2) announce_configured_options(CMAKE_CXX_COMPILER_ID) announce_configured_options(CMAKE_TOOLCHAIN_FILE) -load_build_preset() +load_executorch_build_preset_file() include(${PROJECT_SOURCE_DIR}/tools/cmake/preset/default.cmake) # Print all the configs that were called with announce_configured_options. diff --git a/CMakePresets.json b/CMakePresets.json index 9ea91fab343..4886600d4d6 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -13,7 +13,6 @@ "generator": "Xcode", "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/third-party/ios-cmake/ios.toolchain.cmake", - "EXECUTORCH_BUILD_PRESET_FILE": "${sourceDir}/tools/cmake/preset/macos.cmake", "PLATFORM": "MAC_ARM64", "DEPLOYMENT_TARGET": "12.0" }, @@ -30,7 +29,6 @@ "generator": "Xcode", "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/third-party/ios-cmake/ios.toolchain.cmake", - "EXECUTORCH_BUILD_PRESET_FILE": "${sourceDir}/tools/cmake/preset/ios.cmake", "PLATFORM": "OS64", "DEPLOYMENT_TARGET": "17.0" }, @@ -47,7 +45,6 @@ "generator": "Xcode", "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/third-party/ios-cmake/ios.toolchain.cmake", - "EXECUTORCH_BUILD_PRESET_FILE": "${sourceDir}/tools/cmake/preset/ios.cmake", "PLATFORM": "SIMULATORARM64", "DEPLOYMENT_TARGET": "17.0" }, @@ -62,8 +59,7 @@ "displayName": "Build everything buildable on Linux", "inherits": ["common"], "cacheVariables": { - "CMAKE_SYSTEM_NAME": "Linux", - "EXECUTORCH_BUILD_PRESET_FILE": "${sourceDir}/tools/cmake/preset/linux.cmake" + "CMAKE_SYSTEM_NAME": "Linux" }, "condition": { "lhs": "${hostSystemName}", @@ -88,9 +84,7 @@ { "name": "llm", "displayName": "Build LLM libraries", - "inherits": [ - "common" - ], + "inherits": ["common"], "cacheVariables": { "EXECUTORCH_BUILD_PRESET_FILE": "${sourceDir}/tools/cmake/preset/llm.cmake", "CMAKE_OSX_DEPLOYMENT_TARGET": "12.0" @@ -98,11 +92,7 @@ "condition": { "type": "inList", "string": "${hostSystemName}", - "list": [ - "Darwin", - "Linux", - "Windows" - ] + "list": ["Darwin", "Linux", "Windows"] } } ] diff --git a/backends/apple/coreml/CMakeLists.txt b/backends/apple/coreml/CMakeLists.txt index 8d7b89c5a8d..0bbfe78b4a3 100644 --- a/backends/apple/coreml/CMakeLists.txt +++ b/backends/apple/coreml/CMakeLists.txt @@ -212,9 +212,13 @@ if(APPLE) target_link_options_shared_lib(coremldelegate) if(EXECUTORCH_COREML_BUILD_EXECUTOR_RUNNER) - target_link_libraries( - coremldelegate PRIVATE portable_ops_lib portable_kernels - ) + if(EXECUTORCH_BUILD_KERNELS_OPTIMIZED) + target_link_libraries(coremldelegate PRIVATE optimized_native_cpu_ops_lib) + else() + target_link_libraries(coremldelegate PRIVATE portable_ops_lib) + endif() + + target_link_libraries(coremldelegate PRIVATE portable_kernels) endif() target_compile_options( diff --git a/tools/cmake/common/preset.cmake b/tools/cmake/common/preset.cmake index ddcbae61e49..d7f94e0bf61 100644 --- a/tools/cmake/common/preset.cmake +++ b/tools/cmake/common/preset.cmake @@ -94,15 +94,27 @@ macro(set_overridable_option NAME VALUE) endif() endmacro() + # Detemine the build preset and load it. -macro(load_build_preset) +macro(load_executorch_build_preset_file) + # If EXECUTORCH_BUILD_PRESET_FILE is not set, then try to infer it. + if(NOT DEFINED EXECUTORCH_BUILD_PRESET_FILE) + if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(EXECUTORCH_BUILD_PRESET_FILE "${PROJECT_SOURCE_DIR}/tools/cmake/preset/macos.cmake") + elseif(CMAKE_SYSTEM_NAME STREQUAL "iOS") + set(EXECUTORCH_BUILD_PRESET_FILE "${PROJECT_SOURCE_DIR}/tools/cmake/preset/ios.cmake") + elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(EXECUTORCH_BUILD_PRESET_FILE "${PROJECT_SOURCE_DIR}/tools/cmake/preset/linux.cmake") + else() + message(WARNING "Unknown CMAKE_SYSTEM_NAME, unable to determine EXECUTORCH_BUILD_PRESET_FILE") + endif() + endif() + if(DEFINED EXECUTORCH_BUILD_PRESET_FILE) announce_configured_options(EXECUTORCH_BUILD_PRESET_FILE) message(STATUS "Loading build preset: ${EXECUTORCH_BUILD_PRESET_FILE}") include(${EXECUTORCH_BUILD_PRESET_FILE}) endif() - # For now, just continue if the preset file is not set. In the future, we will - # try to determine a preset file. endmacro() diff --git a/tools/cmake/preset/apple_common.cmake b/tools/cmake/preset/apple_common.cmake index c44cfb2cb10..d6ac3889b7a 100644 --- a/tools/cmake/preset/apple_common.cmake +++ b/tools/cmake/preset/apple_common.cmake @@ -4,18 +4,24 @@ # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. -set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++${CMAKE_CXX_STANDARD}") -set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") +if(CMAKE_GENERATOR STREQUAL "Xcode") + set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++${CMAKE_CXX_STANDARD}") + set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") -# Clean up the paths LLDB sees in DWARF. -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gno-record-gcc-switches") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gno-record-gcc-switches") + # Clean up the paths LLDB sees in DWARF. + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gno-record-gcc-switches") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gno-record-gcc-switches") + + # Swift requires Xcode + set_overridable_option(EXECUTORCH_BUILD_EXTENSION_APPLE ON) +else() + message(WARNING "Building Apple targets without Xcode disables some features.") +endif() set_overridable_option(EXECUTORCH_BUILD_XNNPACK ON) set_overridable_option(EXECUTORCH_BUILD_COREML ON) set_overridable_option(EXECUTORCH_BUILD_MPS ON) set_overridable_option(EXECUTORCH_XNNPACK_SHARED_WORKSPACE ON) -set_overridable_option(EXECUTORCH_BUILD_EXTENSION_APPLE ON) set_overridable_option(EXECUTORCH_BUILD_EXTENSION_DATA_LOADER ON) set_overridable_option(EXECUTORCH_BUILD_EXTENSION_MODULE ON) set_overridable_option(EXECUTORCH_BUILD_EXTENSION_FLAT_TENSOR ON)