Skip to content

Commit bd036fa

Browse files
committed
Add E2E tests for swift driver integration
1 parent 8dffbd4 commit bd036fa

File tree

5 files changed

+26
-13
lines changed

5 files changed

+26
-13
lines changed

Rakefile

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ DERIVED_DATA_DIR = File.join('.build').freeze
1010
RELEASES_ROOT_DIR = File.join('releases').freeze
1111

1212
EXECUTABLE_NAME = 'XCRemoteCache'
13-
EXECUTABLE_NAMES = ['xclibtool', 'xcpostbuild', 'xcprebuild', 'xcprepare', 'xcswiftc', 'xcld', 'xcldplusplus', 'xclipo']
13+
EXECUTABLE_NAMES = ['xclibtool', 'xcpostbuild', 'xcprebuild', 'xcprepare', 'xcswiftc', 'swiftc', 'xcswift-frontend', 'swift-frontend', 'xcld', 'xcldplusplus', 'xclipo']
1414
PROJECT_NAME = 'XCRemoteCache'
1515

1616
SWIFTLINT_ENABLED = true
@@ -59,6 +59,10 @@ task :build, [:configuration, :arch, :sdks, :is_archive] do |task, args|
5959

6060
# Path of the executable looks like: `.build/(debug|release)/XCRemoteCache`
6161
build_path_base = File.join(DERIVED_DATA_DIR, args.configuration)
62+
# swift-frontent integration requires that the SWIFT_EXEC is `swiftc` so create
63+
# a symbolic link between swiftc->xcswiftc and swift-frontend->xcswift-frontend
64+
system("cd #{build_path_base} && ln -s xcswiftc swiftc")
65+
system("cd #{build_path_base} && ln -s xcswift-frontend swift-frontend")
6266
sdk_build_paths = EXECUTABLE_NAMES.map {|e| File.join(build_path_base, e)}
6367

6468
build_paths.push(sdk_build_paths)
@@ -130,7 +134,9 @@ def create_release_zip(build_paths)
130134
# Create and move files into the release directory
131135
mkdir_p release_dir
132136
build_paths.each {|p|
133-
cp_r p, release_dir
137+
# -r for recursive
138+
# -P for copying symbolic link as is
139+
system("cp -rP #{p} #{release_dir}")
134140
}
135141

136142
output_artifact_basename = "#{PROJECT_NAME}.zip"
@@ -139,7 +145,8 @@ def create_release_zip(build_paths)
139145
# -X: no extras (uid, gid, file times, ...)
140146
# -x: exclude .DS_Store
141147
# -r: recursive
142-
system("zip -X -x '*.DS_Store' -r #{output_artifact_basename} .") or abort "zip failure"
148+
# -y: to store symbolic links (used for swiftc -> xcswiftc)
149+
system("zip -X -x '*.DS_Store' -r -y #{output_artifact_basename} .") or abort "zip failure"
143150
# List contents of zip file
144151
system("unzip -l #{output_artifact_basename}") or abort "unzip failure"
145152
end

cocoapods-plugin/lib/cocoapods-xcremotecache/command/hooks.rb

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ def self.enable_xcremotecache(
123123
exclude_build_configurations,
124124
final_target,
125125
fake_src_root,
126-
exclude_sdks_configurations
126+
exclude_sdks_configurations,
127+
enable_swift_driver_integration
127128
)
128129
srcroot_relative_xc_location = parent_dir(xc_location, repo_distance)
129130
# location of the entrite CocoaPods project, relative to SRCROOT
@@ -137,14 +138,15 @@ def self.enable_xcremotecache(
137138
elsif mode == 'producer' || mode == 'producer-fast'
138139
config.build_settings.delete('CC') if config.build_settings.key?('CC')
139140
end
140-
reset_build_setting(config.build_settings, 'SWIFT_EXEC', "$SRCROOT/#{srcroot_relative_xc_location}/xcswiftc", exclude_sdks_configurations)
141+
swiftc_name = enable_swift_driver_integration ? 'swiftc' : 'xcswiftc'
142+
reset_build_setting(config.build_settings, 'SWIFT_EXEC', "$SRCROOT/#{srcroot_relative_xc_location}/#{swiftc_name}", exclude_sdks_configurations)
141143
reset_build_setting(config.build_settings, 'LIBTOOL', "$SRCROOT/#{srcroot_relative_xc_location}/xclibtool", exclude_sdks_configurations)
142144
# Setting LIBTOOL to '' breaks SwiftDriver intengration so resetting it to the original value 'libtool' for all excluded configurations
143145
add_build_setting_for_sdks(config.build_settings, 'LIBTOOL', 'libtool', exclude_sdks_configurations)
144146
reset_build_setting(config.build_settings, 'LD', "$SRCROOT/#{srcroot_relative_xc_location}/xcld", exclude_sdks_configurations)
145147
reset_build_setting(config.build_settings, 'LDPLUSPLUS', "$SRCROOT/#{srcroot_relative_xc_location}/xcldplusplus", exclude_sdks_configurations)
146148
reset_build_setting(config.build_settings, 'LIPO', "$SRCROOT/#{srcroot_relative_xc_location}/xclipo", exclude_sdks_configurations)
147-
reset_build_setting(config.build_settings, 'SWIFT_USE_INTEGRATED_DRIVER', 'NO', exclude_sdks_configurations)
149+
reset_build_setting(config.build_settings, 'SWIFT_USE_INTEGRATED_DRIVER', 'NO', exclude_sdks_configurations) unless enable_swift_driver_integration
148150

149151
reset_build_setting(config.build_settings, 'XCREMOTE_CACHE_FAKE_SRCROOT', fake_src_root, exclude_sdks_configurations)
150152
reset_build_setting(config.build_settings, 'XCRC_PLATFORM_PREFERRED_ARCH', "$(LINK_FILE_LIST_$(CURRENT_VARIANT)_$(PLATFORM_PREFERRED_ARCH):dir:standardizepath:file:default=arm64)", exclude_sdks_configurations)
@@ -498,6 +500,7 @@ def self.save_lldbinit_rewrite(user_proj_directory,fake_src_root)
498500
check_platform = @@configuration['check_platform']
499501
fake_src_root = @@configuration['fake_src_root']
500502
exclude_sdks_configurations = @@configuration['exclude_sdks_configurations'] || []
503+
enable_swift_driver_integration = @@configuration['enable_swift_driver_integration'] || false
501504

502505
xccc_location_absolute = "#{user_proj_directory}/#{xccc_location}"
503506
xcrc_location_absolute = "#{user_proj_directory}/#{xcrc_location}"
@@ -521,7 +524,7 @@ def self.save_lldbinit_rewrite(user_proj_directory,fake_src_root)
521524
next if target.name.start_with?("Pods-")
522525
next if target.name.end_with?("Tests")
523526
next if exclude_targets.include?(target.name)
524-
enable_xcremotecache(target, 1, xcrc_location, xccc_location, mode, exclude_build_configurations, final_target,fake_src_root, exclude_sdks_configurations)
527+
enable_xcremotecache(target, 1, xcrc_location, xccc_location, mode, exclude_build_configurations, final_target,fake_src_root, exclude_sdks_configurations, enable_swift_driver_integration)
525528
end
526529

527530
# Create .rcinfo into `Pods` directory as that .xcodeproj reads configuration from .xcodeproj location
@@ -534,7 +537,7 @@ def self.save_lldbinit_rewrite(user_proj_directory,fake_src_root)
534537
next if target.source_build_phase.files_references.empty?
535538
next if target.name.end_with?("Tests")
536539
next if exclude_targets.include?(target.name)
537-
enable_xcremotecache(target, 1, xcrc_location, xccc_location, mode, exclude_build_configurations, final_target,fake_src_root, exclude_sdks_configurations)
540+
enable_xcremotecache(target, 1, xcrc_location, xccc_location, mode, exclude_build_configurations, final_target,fake_src_root, exclude_sdks_configurations, enable_swift_driver_integration)
538541
end
539542
generated_project.save()
540543
end
@@ -575,7 +578,7 @@ def self.save_lldbinit_rewrite(user_proj_directory,fake_src_root)
575578
# Attach XCRC to the app targets
576579
user_project.targets.each do |target|
577580
next if exclude_targets.include?(target.name)
578-
enable_xcremotecache(target, 0, xcrc_location, xccc_location, mode, exclude_build_configurations, final_target,fake_src_root, exclude_sdks_configurations)
581+
enable_xcremotecache(target, 0, xcrc_location, xccc_location, mode, exclude_build_configurations, final_target,fake_src_root, exclude_sdks_configurations, enable_swift_driver_integration)
579582
end
580583

581584
# Set Target sourcemap

cocoapods-plugin/lib/cocoapods-xcremotecache/gem_version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@
1313
# limitations under the License.
1414

1515
module CocoapodsXcremotecache
16-
VERSION = "0.0.16"
16+
VERSION = "0.0.17"
1717
end
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
---
2-
cache_addresses:
2+
cache_addresses:
33
- 'http://localhost:8080/cache/pods'
44
primary_repo: '.'
55
primary_branch: 'e2e-test-branch'
66
mode: 'consumer'
77
final_target': XCRemoteCacheSample'
88
artifact_maximum_age: 0 # do not use local cache in ~/Library/Caches/XCRemoteCache
9+
enable_swift_driver_integration: true

tasks/e2e.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,14 @@
2525
'primary_branch' => GIT_BRANCH,
2626
'mode' => 'consumer',
2727
'final_target' => 'XCRemoteCacheSample',
28-
'artifact_maximum_age' => 0
28+
'artifact_maximum_age' => 0,
29+
'enable_swift_driver_integration' => true
2930
}.freeze
3031
DEFAULT_EXPECTATIONS = {
3132
'misses' => 0,
3233
'hit_rate' => 100
3334
}.freeze
35+
EXCLUDED_ARCHS = 'x86_64'
3436

3537
Stats = Struct.new(:hits, :misses, :hit_rate)
3638

@@ -182,7 +184,7 @@ def self.build_project(workspace, project, scheme, sdk = 'iphone', platform = 'i
182184
'derivedDataPath' => DERIVED_DATA_PATH,
183185
}.merge(extra_args).compact
184186
xcodebuild_vars = {
185-
'EXCLUDED_ARCHS' => 'arm64'
187+
'EXCLUDED_ARCHS' => EXCLUDED_ARCHS
186188
}
187189
args = ['set -o pipefail;', 'xcodebuild']
188190
args.push(*xcodebuild_args.map {|k,v| "-#{k} '#{v}'"})

0 commit comments

Comments
 (0)