blob: 96d2d257d4ad1bd48afbb4336b22ccf62e89eece [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
include(ExternalProject)
# Check if xcodebuild tool is available and configured.
# Otherwise will skip all iOS specific targets.
execute_process(COMMAND xcodebuild -version
RESULT_VARIABLE XCBUILD_AVAILABLE
OUTPUT_QUIET
ERROR_QUIET
)
if (NOT XCBUILD_AVAILABLE EQUAL 0)
message(WARNING
"The build tool xcodebuild is not properly configured. Please install Xcode app and specify "
"path to it via DEVELOPER_DIR env var or \"sudo xcode-select -switch <path-to-xcode-dev-dir>\".\n"
"iOS RPC application target is switched off."
)
return()
endif()
# External project with custom mach-o dynamic loader
# It is required to load unsigned shared modules on real iOS devices
ExternalProject_Add(custom_dso_loader
GIT_REPOSITORY https://github.com/octoml/macho-dyld.git
GIT_TAG 0742b8129de7df1130be355b74faa8c036265bfc
PREFIX custom_dso_loader
LOG_DOWNLOAD TRUE
LOG_CONFIGURE TRUE
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> # to install into local build dir
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
-DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION}
-DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}
-DCMAKE_BUILD_WITH_INSTALL_NAME_DIR=${CMAKE_BUILD_WITH_INSTALL_NAME_DIR}
)
if(NOT CMAKE_IOS_RPC_BUNDLE)
set(CMAKE_IOS_RPC_BUNDLE org.apache.tvmrpc)
endif()
# iOS RPC Xcode project wrapper to integrate into Cmake
ExternalProject_Add(ios_rpc
PREFIX ios_rpc
DEPENDS custom_dso_loader tvm_runtime
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}
CONFIGURE_COMMAND ""
INSTALL_COMMAND ""
BUILD_COMMAND xcodebuild
-target tvmrpc
-configuration ${CMAKE_BUILD_TYPE}
-project <SOURCE_DIR>/tvmrpc.xcodeproj
-sdk ${CMAKE_OSX_SYSROOT}
-arch ${CMAKE_OSX_ARCHITECTURES}
-hideShellScriptEnvironment
-allowProvisioningUpdates
build
SYMROOT=<BINARY_DIR>
IPHONEOS_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}
DEVELOPMENT_TEAM=${CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM}
TVM_BUILD_DIR=${CMAKE_BINARY_DIR}
USE_CUSTOM_DSO_LOADER=1
PRODUCT_BUNDLE_IDENTIFIER=${CMAKE_IOS_RPC_BUNDLE}
)