mirror of
https://github.com/pytorch/pytorch.git
synced 2025-10-20 12:54:11 +08:00
Updating XNNPACK Version to 4ea82e595b36106653175dcb04b2aa532660d0d8 submodule update Pull Request resolved: https://github.com/pytorch/pytorch/pull/139913 Approved by: https://github.com/digantdesai, https://github.com/huydhn
145 lines
4.9 KiB
Ruby
145 lines
4.9 KiB
Ruby
require 'xcodeproj'
|
|
require 'fileutils'
|
|
require 'optparse'
|
|
|
|
options = {}
|
|
option_parser = OptionParser.new do |opts|
|
|
opts.banner = 'Script for setting up TestApp.xcodeproj'
|
|
opts.on('-t', '--team_id ', 'development team ID') { |value|
|
|
options[:team_id] = value
|
|
}
|
|
opts.on('-l', '--lite ', 'use lite interpreter') { |value|
|
|
options[:lite] = value
|
|
}
|
|
opts.on('-b', '--benchmark', 'build app to run benchmark') { |value|
|
|
options[:benchmark] = value
|
|
}
|
|
end.parse!
|
|
puts options.inspect
|
|
|
|
puts "Current directory: #{Dir.pwd}"
|
|
install_path = File.expand_path("../../../build_ios/install")
|
|
if not Dir.exist? (install_path)
|
|
raise "path doesn't exist:#{install_path}!"
|
|
end
|
|
xcodeproj_path = File.expand_path("../TestApp.xcodeproj")
|
|
if not File.exist? (xcodeproj_path)
|
|
raise "path doesn't exist:#{xcodeproj_path}!"
|
|
end
|
|
puts "Setting up TestApp.xcodeproj..."
|
|
project = Xcodeproj::Project.open(xcodeproj_path)
|
|
targets = project.targets
|
|
test_target = targets.last
|
|
header_search_path = ['$(inherited)', "#{install_path}/include"]
|
|
libraries_search_path = ['$(inherited)', "#{install_path}/lib"]
|
|
other_linker_flags = ['$(inherited)', "-all_load"]
|
|
# TestApp and TestAppTests
|
|
targets.each do |target|
|
|
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'
|
|
if (options[:lite])
|
|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = ['$(inherited)', "BUILD_LITE_INTERPRETER"]
|
|
else
|
|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = ['$(inherited)']
|
|
end
|
|
if (options[:benchmark])
|
|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'].append("RUN_BENCHMARK")
|
|
end
|
|
dev_team_id = options[:team_id]
|
|
if dev_team_id
|
|
config.build_settings['DEVELOPMENT_TEAM'] = dev_team_id
|
|
end
|
|
end
|
|
end
|
|
group = project.main_group.find_subpath(File.join('TestApp'),true)
|
|
group.set_source_tree('SOURCE_ROOT')
|
|
group.files.each do |file|
|
|
if (file.name.to_s.end_with?(".pt") ||
|
|
file.name.to_s.end_with?(".ptl") ||
|
|
file.name == "config.json")
|
|
group.remove_reference(file)
|
|
targets.each do |target|
|
|
target.resources_build_phase.remove_file_reference(file)
|
|
end
|
|
end
|
|
end
|
|
|
|
config_path = File.expand_path("./config.json")
|
|
if not File.exist?(config_path)
|
|
raise "config.json can't be found!"
|
|
end
|
|
config_file_ref = group.new_reference(config_path)
|
|
|
|
file_refs = []
|
|
# collect models
|
|
puts "Installing models..."
|
|
models_dir = File.expand_path("../models")
|
|
Dir.foreach(models_dir) do |model|
|
|
if(model.end_with?(".pt") || model.end_with?(".ptl"))
|
|
model_path = models_dir + "/" + model
|
|
file_refs.push(group.new_reference(model_path))
|
|
end
|
|
end
|
|
|
|
targets.each do |target|
|
|
target.resources_build_phase.add_file_reference(config_file_ref, true)
|
|
file_refs.each do |ref|
|
|
target.resources_build_phase.add_file_reference(ref, true)
|
|
end
|
|
end
|
|
|
|
# add test files
|
|
puts "Adding test files..."
|
|
testTarget = targets[1]
|
|
testFilePath = File.expand_path('../TestAppTests/')
|
|
group = project.main_group.find_subpath(File.join('TestAppTests'),true)
|
|
group.files.each do |file|
|
|
if (file.path.end_with?(".mm"))
|
|
file.remove_from_project
|
|
end
|
|
end
|
|
|
|
if(options[:lite])
|
|
file = group.new_file("TestLiteInterpreter.mm")
|
|
testTarget.add_file_references([file])
|
|
else
|
|
file = group.new_file("TestFullJIT.mm")
|
|
testTarget.add_file_references([file])
|
|
end
|
|
|
|
puts "Linking static libraries..."
|
|
libs = ['libc10.a', 'libclog.a', 'libpthreadpool.a', 'libXNNPACK.a', 'libmicrokernels-prod.a', 'libeigen_blas.a', 'libcpuinfo.a', 'libpytorch_qnnpack.a', 'libtorch_cpu.a', 'libtorch.a']
|
|
frameworks = ['CoreML', 'Metal', 'MetalPerformanceShaders', 'Accelerate', 'UIKit']
|
|
targets.each do |target|
|
|
# NB: All these libraries and frameworks have already been linked by TestApp, adding them
|
|
# again onto the test target will cause the app to crash on actual devices
|
|
if (target == test_target)
|
|
next
|
|
end
|
|
target.frameworks_build_phases.clear
|
|
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
|
|
# link system frameworks
|
|
if frameworks
|
|
frameworks.each do |framework|
|
|
path = "System/Library/Frameworks/#{framework}.framework"
|
|
framework_ref = project.frameworks_group.new_reference(path)
|
|
framework_ref.name = "#{framework}.framework"
|
|
framework_ref.source_tree = 'SDKROOT'
|
|
target.frameworks_build_phases.add_file_reference(framework_ref)
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
project.save
|
|
puts "Done."
|