Skip to content

Commit 9513b30

Browse files
committed
feat: attempt to build tor for iOS
Part of ooni/probe#2564
1 parent 313c4c9 commit 9513b30

File tree

18 files changed

+234
-182
lines changed

18 files changed

+234
-182
lines changed

go.mod

+2-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ require (
2222
github.com/miekg/dns v1.1.56
2323
github.com/mitchellh/go-wordwrap v1.0.1
2424
github.com/montanaflynn/stats v0.7.1
25-
github.com/ooni/go-libtor v1.1.8
2625
github.com/ooni/netem v0.0.0-20230920215742-15f3ffec0107
2726
github.com/ooni/oocrypto v0.5.5
2827
github.com/ooni/oohttp v0.6.5
@@ -145,9 +144,9 @@ require (
145144
github.com/xtaci/kcp-go/v5 v5.6.2 // indirect
146145
github.com/xtaci/smux v1.5.24 // indirect
147146
gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec // indirect
148-
golang.org/x/mod v0.12.0 // indirect
147+
golang.org/x/mod v0.13.0 // indirect
149148
golang.org/x/term v0.13.0 // indirect
150149
golang.org/x/text v0.13.0 // indirect
151-
golang.org/x/tools v0.13.0 // indirect
150+
golang.org/x/tools v0.14.0 // indirect
152151
google.golang.org/protobuf v1.31.0 // indirect
153152
)

go.sum

+5-9
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t
7474
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
7575
github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI=
7676
github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
77-
github.com/cretz/bine v0.1.0/go.mod h1:6PF6fWAvYtwjRGkAuDEJeWNOv3a2hUouSP/yRYXmvHw=
7877
github.com/cretz/bine v0.2.0 h1:8GiDRGlTgz+o8H9DSnsl+5MeBK4HsExxgl6WgzOCuZo=
7978
github.com/cretz/bine v0.2.0/go.mod h1:WU4o9QR9wWp8AVKtTM1XD5vUHkEqnf2vVSo6dBqbetI=
8079
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -322,8 +321,6 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J
322321
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
323322
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
324323
github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
325-
github.com/ooni/go-libtor v1.1.8 h1:Wo3V3DVTxl5vZdxtQakqYP+DAHx7pPtAFSl1bnAa08w=
326-
github.com/ooni/go-libtor v1.1.8/go.mod h1:q1YyLwRD9GeMyeerVvwc0vJ2YgwDLTp2bdVcrh/JXyI=
327324
github.com/ooni/netem v0.0.0-20230920215742-15f3ffec0107 h1:PktaCPQ1NYZOaK+J8pQGYiPCYFkGR5H3ZURg9zPkQsI=
328325
github.com/ooni/netem v0.0.0-20230920215742-15f3ffec0107/go.mod h1:5X3Lk4+cnrwrQiYgRlCWXgV33IMDgLaO5s1x0DD/fO0=
329326
github.com/ooni/oocrypto v0.5.5 h1:x0wIgtBfghVu8Ok0tR/xVyfHlo646hN1LB/5bzuXcIg=
@@ -550,7 +547,6 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
550547
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
551548
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
552549
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
553-
golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
554550
golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
555551
golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
556552
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -588,8 +584,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
588584
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
589585
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
590586
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
591-
golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
592-
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
587+
golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY=
588+
golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
593589
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
594590
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
595591
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -626,7 +622,7 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
626622
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
627623
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
628624
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
629-
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
625+
golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=
630626
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
631627
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
632628
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -718,8 +714,8 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK
718714
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
719715
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
720716
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
721-
golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ=
722-
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
717+
golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc=
718+
golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
723719
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
724720
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
725721
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

internal/cmd/buildtool/android.go

+21-19
Original file line numberDiff line numberDiff line change
@@ -215,25 +215,27 @@ func androidNewCBuildEnv(androidHome, ndkDir, ooniArch string) *cBuildEnv {
215215
"internal", "libtor", "android", ooniArch,
216216
)))
217217
out := &cBuildEnv{
218-
ANDROID_HOME: androidHome,
219-
ANDROID_NDK_ROOT: ndkDir,
220-
AS: "", // later
221-
AR: filepath.Join(binpath, "llvm-ar"),
222-
BINPATH: binpath,
223-
CC: "", // later
224-
CFLAGS: androidCflags(ooniArch),
225-
CONFIGURE_HOST: "", // later
226-
DESTDIR: destdir,
227-
CXX: "", // later
228-
CXXFLAGS: androidCflags(ooniArch),
229-
GOARCH: ooniArch,
230-
GOARM: "", // maybe later
231-
LD: filepath.Join(binpath, "ld"),
232-
LDFLAGS: []string{}, // empty
233-
OPENSSL_API_DEFINE: "-D__ANDROID_API__=21",
234-
OPENSSL_COMPILER: "", // later
235-
RANLIB: filepath.Join(binpath, "llvm-ranlib"),
236-
STRIP: filepath.Join(binpath, "llvm-strip"),
218+
ANDROID_HOME: androidHome,
219+
ANDROID_NDK_ROOT: ndkDir,
220+
AS: "", // later
221+
AR: filepath.Join(binpath, "llvm-ar"),
222+
BINPATH: binpath,
223+
CC: "", // later
224+
CFLAGS: androidCflags(ooniArch),
225+
CONFIGURE_HOST: "", // later
226+
DESTDIR: destdir,
227+
CXX: "", // later
228+
CXXFLAGS: androidCflags(ooniArch),
229+
GOARCH: ooniArch,
230+
GOARM: "", // maybe later
231+
LD: filepath.Join(binpath, "ld"),
232+
LDFLAGS: []string{}, // empty
233+
OPENSSL_COMPILER: "", // later
234+
OPENSSL_POST_COMPILER_FLAGS: []string{
235+
"-D__ANDROID_API__=21",
236+
},
237+
RANLIB: filepath.Join(binpath, "llvm-ranlib"),
238+
STRIP: filepath.Join(binpath, "llvm-strip"),
237239
}
238240
switch ooniArch {
239241
case "arm":

internal/cmd/buildtool/builddeps.go

+4
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,7 @@ func (*buildDeps) GOOS() string {
8282
func (*buildDeps) VerifySHA256(expectedSHA256 string, tarball string) {
8383
cdepsMustVerifySHA256(expectedSHA256, tarball)
8484
}
85+
86+
func (*buildDeps) XCRun(args ...string) string {
87+
return iosXCRun(args...)
88+
}

internal/cmd/buildtool/cbuildenv.go

+23-22
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ type cBuildEnv struct {
6161
// LDFLAGS contains the LDFLAGS to use when compiling.
6262
LDFLAGS []string
6363

64-
// OPENSSL_API_DEFINE is an extra define we need to add on Android.
65-
OPENSSL_API_DEFINE string
66-
6764
// OPENSSL_COMPILER is the compiler name for OpenSSL.
6865
OPENSSL_COMPILER string
6966

67+
// OPENSSL_POST_COMPILER_FLAGS contains extra flags to pass after OPENSSL_COMPILER
68+
OPENSSL_POST_COMPILER_FLAGS []string
69+
7070
// RANLIB is the path to the ranlib tool.
7171
RANLIB string
7272

@@ -86,29 +86,30 @@ type cBuildEnv struct {
8686
// environment variables to CFLAGS, CXXFLAGS, etc.
8787
func cBuildMerge(global, local *cBuildEnv) *cBuildEnv {
8888
out := &cBuildEnv{
89-
ANDROID_HOME: global.ANDROID_HOME,
90-
ANDROID_NDK_ROOT: global.ANDROID_NDK_ROOT,
91-
AR: global.AR,
92-
AS: global.AS,
93-
BINPATH: global.BINPATH,
94-
CC: global.CC,
95-
CFLAGS: append([]string{}, global.CFLAGS...),
96-
CONFIGURE_HOST: global.CONFIGURE_HOST,
97-
DESTDIR: global.DESTDIR,
98-
CXX: global.CXX,
99-
CXXFLAGS: append([]string{}, global.CXXFLAGS...),
100-
GOARCH: global.GOARCH,
101-
GOARM: global.GOARM,
102-
LD: global.LD,
103-
LDFLAGS: append([]string{}, global.LDFLAGS...),
104-
OPENSSL_API_DEFINE: global.OPENSSL_API_DEFINE,
105-
OPENSSL_COMPILER: global.OPENSSL_COMPILER,
106-
RANLIB: global.RANLIB,
107-
STRIP: global.STRIP,
89+
ANDROID_HOME: global.ANDROID_HOME,
90+
ANDROID_NDK_ROOT: global.ANDROID_NDK_ROOT,
91+
AR: global.AR,
92+
AS: global.AS,
93+
BINPATH: global.BINPATH,
94+
CC: global.CC,
95+
CFLAGS: append([]string{}, global.CFLAGS...),
96+
CONFIGURE_HOST: global.CONFIGURE_HOST,
97+
DESTDIR: global.DESTDIR,
98+
CXX: global.CXX,
99+
CXXFLAGS: append([]string{}, global.CXXFLAGS...),
100+
GOARCH: global.GOARCH,
101+
GOARM: global.GOARM,
102+
LD: global.LD,
103+
LDFLAGS: append([]string{}, global.LDFLAGS...),
104+
OPENSSL_COMPILER: global.OPENSSL_COMPILER,
105+
OPENSSL_POST_COMPILER_FLAGS: append([]string{}, global.OPENSSL_POST_COMPILER_FLAGS...),
106+
RANLIB: global.RANLIB,
107+
STRIP: global.STRIP,
108108
}
109109
out.CFLAGS = append(out.CFLAGS, local.CFLAGS...)
110110
out.CXXFLAGS = append(out.CXXFLAGS, local.CXXFLAGS...)
111111
out.LDFLAGS = append(out.LDFLAGS, local.LDFLAGS...)
112+
out.OPENSSL_POST_COMPILER_FLAGS = append(out.OPENSSL_POST_COMPILER_FLAGS, local.OPENSSL_POST_COMPILER_FLAGS...)
112113
return out
113114
}
114115

internal/cmd/buildtool/cdepslibevent.go

+4
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ func cdepsLibeventBuildMain(globalEnv *cBuildEnv, deps buildtoolmodel.Dependenci
4949
}
5050
envp := cBuildExportAutotools(cBuildMerge(globalEnv, localEnv))
5151

52+
// On iOS, we need PKG_CONFIG_PATH to convince libevent to use the OpenSSL we built but]
53+
// always letting libevent's configure be pkgconfig aware would probably be fine
54+
envp.Append("PKG_CONFIG_PATH", filepath.Join(globalEnv.DESTDIR, "lib", "pkgconfig"))
55+
5256
argv := runtimex.Try1(shellx.NewArgv("./configure"))
5357
if globalEnv.CONFIGURE_HOST != "" {
5458
argv.Append("--host=" + globalEnv.CONFIGURE_HOST)

internal/cmd/buildtool/cdepsopenssl.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,7 @@ func cdepsOpenSSLBuildMain(globalEnv *cBuildEnv, deps buildtoolmodel.Dependencie
6767
"no-rc2", "no-rc4", "no-rc5", "no-rmd160", "no-whirlpool", "no-dso",
6868
"no-ui-console", "no-shared", "no-unit-test", globalEnv.OPENSSL_COMPILER,
6969
))
70-
if globalEnv.OPENSSL_API_DEFINE != "" {
71-
argv.Append(globalEnv.OPENSSL_API_DEFINE)
72-
}
70+
argv.Append(globalEnv.OPENSSL_POST_COMPILER_FLAGS...)
7371
argv.Append("--libdir=lib", "--prefix=/", "--openssldir=/")
7472
runtimex.Try0(shellx.RunEx(defaultShellxConfig(), argv, envp))
7573

@@ -84,5 +82,7 @@ func cdepsOpenSSLBuildMain(globalEnv *cBuildEnv, deps buildtoolmodel.Dependencie
8482
))
8583

8684
must.Run(log.Log, "make", "DESTDIR="+globalEnv.DESTDIR, "install_dev")
87-
must.Run(log.Log, "rm", "-rf", filepath.Join(globalEnv.DESTDIR, "lib", "pkgconfig"))
85+
86+
// FIXME: we need to explain this change
87+
//must.Run(log.Log, "rm", "-rf", filepath.Join(globalEnv.DESTDIR, "lib", "pkgconfig"))
8888
}

internal/cmd/buildtool/cdepstor.go

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ func cdepsTorBuildMain(globalEnv *cBuildEnv, deps buildtoolmodel.Dependencies) {
5656
"--disable-tool-name-check",
5757
"--disable-systemd",
5858
"--prefix=/",
59+
"--disable-unittests",
5960
)
6061
runtimex.Try0(shellx.RunEx(defaultShellxConfig(), argv, envp))
6162

internal/cmd/buildtool/internal/buildtoolmodel/buildtoolmodel.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ type Dependencies interface {
1818
// function returns the Android home path.
1919
AndroidSDKCheck() string
2020

21+
// GOOS returns the current GOOS.
22+
GOOS() string
23+
2124
// GOPATH returns the current GOPATH.
2225
GOPATH() string
2326

@@ -50,6 +53,7 @@ type Dependencies interface {
5053
// expected version of mingw-w64.
5154
WindowsMingwCheck()
5255

53-
// GOOS returns the current GOOS.
54-
GOOS() string
56+
// XCRun executes `xcrun [args]` and returns its output or
57+
// invokes PANIC in case of failure.
58+
XCRun(args ...string) string
5559
}

internal/cmd/buildtool/internal/buildtooltest/buildtooltest.go

+5
Original file line numberDiff line numberDiff line change
@@ -245,3 +245,8 @@ func (cc *DependenciesCallCounter) increment(name string) {
245245
}
246246
cc.Counter[name]++
247247
}
248+
249+
// XCRun implements buildtoolmodel.Dependencies.
250+
func (*DependenciesCallCounter) XCRun(args ...string) string {
251+
panic("unimplemented") // TODO(bassosimone): implement this function
252+
}

0 commit comments

Comments
 (0)