5
5
# gradle/src/main/groovy/net/zhuoweizhang/swiftandroid/SwiftAndroidPlugin.groovy
6
6
#
7
7
8
+ export ANDROID_HOME=" ${ANDROID_HOME?-Please export ANDROID_HOME} "
9
+ export JAVA_HOME=" ${JAVA_HOME?-Please export JAVA_HOME} "
10
+
8
11
SWIFT_INSTALL=" $( dirname" $PWD " ) "
9
- UNAME=` uname`
12
+ UNAME=" $( uname) "
10
13
11
14
SCRIPTS=~ /.gradle/scripts
12
15
13
- export JAVA_HOME=" ${JAVA_HOME?-Please export JAVA_HOME} "
14
-
15
16
cat<< DOC &&
16
17
17
18
Running:$SWIFT_INSTALL /swift-android-gradle/$0
@@ -117,6 +118,9 @@ SWIFT_INSTALL="$SWIFT_INSTALL"
117
118
export PATH="\$ SWIFT_INSTALL/usr/bin:\$ PATH"
118
119
export SWIFT_EXEC=~/.gradle/scripts/swiftc-android.sh
119
120
121
+ # Uncomment if you would like to work with packages containing prebuilt binaries
122
+ #"\$ SWIFT_INSTALL"/swift-android-gradle/src/main/scripts/collect-dependencies.py
123
+
120
124
swift build "\$ @"
121
125
122
126
SCRIPT
138
142
# remove whatever target SwiftPM has supplied
139
143
ARGS=\$ (echo "\$ *" | sed -E "s@-target [^[:space:]]+ -sdk /[^[:space:]]* (-F /[^[:space:]]* )?@@")
140
144
141
- # for compatability with V3 Package.swift for now
142
- if [[ "\$ ARGS" =~ " -emit-executable " && "\$ ARGS" =~ ".so " ]]; then
143
- ARGS=\$ (echo "\$ ARGS" | sed -E "s@ (-module-name [^[:space:]]+ )?-emit-executable @ -emit-library @")
145
+ if [[ "$UNAME " == "Darwin" ]]; then
146
+ # xctest
147
+ if [[ "\$ *" =~ "-Xlinker -bundle" ]]; then
148
+ xctest_bundle=\$ (echo\$ ARGS | grep -o\$ (pwd)'[^[:space:]]*xctest')
149
+ rm -rf\$ xctest_bundle
150
+
151
+ modulemaps=\$ (find .build/checkouts -name '*.modulemap' | sed 's@^@-I @' | sed 's@/module.modulemap\$ @@')
152
+
153
+ build_dir=\$ (echo "\$ ARGS" | grep -o '\-L '\$ (pwd)'/.build/[^[:space:]]*' | sed -E "s@-L @@")
154
+
155
+ ARGS=\$ (echo "\$ ARGS" | sed -E "s@-Xlinker -bundle@-emit-executable@")
156
+ ARGS=\$ (echo "\$ ARGS" | sed -E "s@xctest[^[:space:]]*PackageTests@xctest@")
157
+
158
+ ARGS="\$ ARGS\$ modulemaps -I\$ build_dir Tests/LinuxMain.swift"
159
+ fi
160
+
161
+ # .dylib -> .so
162
+ if [[ "\$ ARGS" =~ "-emit-library" ]]; then
163
+ ARGS=\$ (echo "\$ ARGS" | sed -E "s@\.dylib@\.so@")
164
+ fi
144
165
fi
145
166
167
+ # for compatability with V3 Package.swift for now
168
+ #if [[ "\$ ARGS" =~ " -emit-executable " && "\$ ARGS" =~ ".so " ]]; then
169
+ # ARGS=\$ (echo "\$ ARGS" | sed -E "s@ (-module-name [^[:space:]]+ )?-emit-executable @ -emit-library @")
170
+ #fi
171
+
146
172
# compile using toolchain's swiftc with Android target
147
173
swiftc -target armv7-none-linux-androideabi -sdk "\$ SWIFT_INSTALL/ndk-android-21"\\
148
174
-L "\$ SWIFT_INSTALL/usr/$UNAME " -tools-directory "\$ SWIFT_INSTALL/usr/$UNAME "\\
@@ -160,11 +186,21 @@ DESTINATION="\$1"
160
186
SWIFT_INSTALL="$SWIFT_INSTALL "
161
187
162
188
mkdir -p "\$ DESTINATION" && cd "\$ DESTINATION" &&
163
- rsync -u "\$ SWIFT_INSTALL"/usr/lib/swift/android/*.so . &&
164
- rm -f *Unittest*
189
+ rsync -u "\$ SWIFT_INSTALL"/usr/lib/swift/android/*.so .
190
+
191
+ SCRIPT
192
+
193
+ cat<< SCRIPT >run-tests.sh &&
194
+ #!/bin/bash
195
+ #
196
+ # Builds test bundles and pushes them to the device and runs them
197
+ #
198
+
199
+ export SWIFT_INSTALL="$SWIFT_INSTALL "
200
+ "\$ SWIFT_INSTALL"/swift-android-gradle/src/main/scripts/run-tests.py
165
201
166
202
SCRIPT
167
203
168
- chmod +x {generate-swift,swift-build,swiftc-android,copy-libraries}.sh&&
169
- echo Created:$SCRIPTS /{generate-swift,swift-build,swiftc-android,copy-libraries}.sh&&
204
+ chmod +x {generate-swift,swift-build,swiftc-android,copy-libraries,run-tests }.sh&&
205
+ echo Created:$SCRIPTS /{generate-swift,swift-build,swiftc-android,copy-libraries,run-tests }.sh&&
170
206
echo