mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-06 12:20:52 +01:00
Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/28405 ### Summary As discussed with AshkanAliabadi and ljk53, the iOS TestApp will share the same benchmark code with Android's speed_benchmark_torch.cpp. This PR is the first part which contains the Objective-C++ code. The second PR will include the scripts to setup and run the benchmark project. The third PR will include scripts that can automate the whole "build - test - install" process. There are many ways to run the benchmark project. The easiest way is to use cocoapods. Simply run `pod install`. However, that will pull the 1.3 binary which is not what we want, but we can still use this approach to test the benchmark code. The second PR will contain scripts to run custom builds that we can tweak. ### Test Plan - Don't break any existing CI jobs (except for those flaky ones) Test Plan: Imported from OSS Differential Revision: D18064187 Pulled By: xta0 fbshipit-source-id: 4cfbb83c045803d8b24bf6d2c110a55871d22962
80 lines
2.7 KiB
Ruby
80 lines
2.7 KiB
Ruby
require 'optparse'
|
|
require 'xcodeproj'
|
|
|
|
options = {}
|
|
option_parser = OptionParser.new do |opts|
|
|
opts.banner = 'Tools for building PyTorch iOS framework on MacOS'
|
|
opts.on('-i', '--install_path ', 'path to the cmake install folder') { |value|
|
|
options[:install] = value
|
|
}
|
|
opts.on('-x', '--xcodeproj_path ', 'path to the XCode project file') { |value|
|
|
options[:xcodeproj] = value
|
|
}
|
|
opts.on('-p', '--platform ', 'platform for the current build, OS or SIMULATOR') { |value|
|
|
options[:platform] = value
|
|
}
|
|
opts.on('-c', '--provisioning_profile ', 'provisioning profile for code signing') { |value|
|
|
options[:profile] = value
|
|
}
|
|
opts.on('-t', '--team_id ', 'developemnt team ID') { |value|
|
|
options[:team_id] = value
|
|
}
|
|
end.parse!
|
|
puts options.inspect
|
|
|
|
install_path = File.expand_path(options[:install])
|
|
if not Dir.exist? (install_path)
|
|
raise "path don't exist:#{install_path}!"
|
|
end
|
|
xcodeproj_path = File.expand_path(options[:xcodeproj])
|
|
if not File.exist? (xcodeproj_path)
|
|
raise "path don't exist:#{xcodeproj_path}!"
|
|
end
|
|
|
|
project = Xcodeproj::Project.open(xcodeproj_path)
|
|
target = project.targets.first #TestApp
|
|
header_search_path = ['$(inherited)', "#{install_path}/include"]
|
|
libraries_search_path = ['$(inherited)', "#{install_path}/lib"]
|
|
other_linker_flags = ['$(inherited)', "-all_load"]
|
|
|
|
target.build_configurations.each do |config|
|
|
config.build_settings['HEADER_SEARCH_PATHS'] = header_search_path
|
|
config.build_settings['LIBRARY_SEARCH_PATHS'] = libraries_search_path
|
|
config.build_settings['OTHER_LDFLAGS'] = other_linker_flags
|
|
config.build_settings['ENABLE_BITCODE'] = 'No'
|
|
dev_team_id = options[:team_id]
|
|
if not dev_team_id
|
|
raise "Please sepecify a valid development team id for code signing"
|
|
end
|
|
config.build_settings['DEVELOPMENT_TEAM'] = dev_team_id
|
|
end
|
|
|
|
# link static libraries
|
|
target.frameworks_build_phases.clear
|
|
libs = ['libc10.a', 'libclog.a', 'libnnpack.a', 'libeigen_blas.a', 'libcpuinfo.a', 'libpytorch_qnnpack.a', 'libtorch.a']
|
|
for lib in libs do
|
|
path = "#{install_path}/lib/#{lib}"
|
|
if File.exist?(path)
|
|
libref = project.frameworks_group.new_file(path)
|
|
target.frameworks_build_phases.add_file_reference(libref)
|
|
end
|
|
end
|
|
project.save
|
|
|
|
sdk = nil
|
|
if options[:platform] == 'SIMULATOR'
|
|
sdk = 'iphonesimulator'
|
|
elsif options[:platform] == 'OS'
|
|
sdk = 'iphoneos'
|
|
else
|
|
raise "unsupported platform #{options[:platform]}"
|
|
end
|
|
|
|
profile = options[:profile]
|
|
if not profile
|
|
raise "no provisioning profile found!"
|
|
end
|
|
|
|
# run xcodebuild
|
|
exec "xcodebuild clean build -project #{xcodeproj_path} -target #{target.name} -sdk #{sdk} -configuration Release PROVISIONING_PROFILE_SPECIFIER=#{profile}"
|