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/39868 ### Summary why disable NNPACK on iOS - To stay consistency with our internal version - It's currently blocking some external users due to its lack support of x86 architecture - https://github.com/pytorch/pytorch/issues/32040 - https://discuss.pytorch.org/t/undefined-symbols-for-architecture-x86-64-for-libtorch-in-swift-unit-test/84552/6 - NNPACK uses fast convolution algorithms (FFT, winograd) to reduce the computational complexity of convolutions with large kernel size. The algorithmic speedup is limited to specific conv params which are unlikely to appear in mobile networks. - Since XNNPACK has been enabled, it performs much better than NNPACK on depthwise-separable convolutions which is the algorithm being used by most of mobile computer vision networks. ### Test Plan - CI Checks Test Plan: Imported from OSS Differential Revision: D22087365 Pulled By: xta0 fbshipit-source-id: 89a959b0736c1f8703eff10723a8fbd02357fd4a
80 lines
2.8 KiB
Ruby
80 lines
2.8 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 ', 'development 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 and options[:platform] == 'OS'
|
|
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', 'libXNNPACK.a', 'libeigen_blas.a', 'libcpuinfo.a', 'libpytorch_qnnpack.a', 'libtorch_cpu.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 and options[:platform] == 'OS'
|
|
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}"
|