aboutsummaryrefslogtreecommitdiff
path: root/doc/devblog/day_15-17__Android_rebuild.mdwn
blob: 758e2d09777ce67e54ae93f2c259eccc011514db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Made a release on Friday. But I had to rebuild the OSX and Linux standalone
builds today to fix a bug in them.

Spent the past **three days** redoing the whole Android build environment.
I've been progressively moving from my first hacked up Android build env to
something more reproducible and sane. Finally I am at the point where I can
run a shell script (well, actually, 3 shell scripts) and get an Android
build chroot. It's still not immune to breaking when new versions of
haskell libs are uploaded, but this is much better, and should be
maintainable going forward. 

This is a good starting point for getting git-annex into the F-Droid app
store, or for trying to build with a newer version of the Android SDK and
NDK, to perhaps get it working on Android 4.3. (Eventually. I am so sick
of building Android stuff right now..)

Friday was all spent struggling to get ghc-android to build. I had not built
it successfully since February. I finally did,
on Saturday, and I have made my own fork of it which builds using a
known-good snapshot of the current development version of ghc. Building
this in a Debian stable chroot means that there should be no possibility
that upstream changes will break the build again.

With ghc built, I moved on to building all the haskell libs git-annex
needs. Unfortunately my build script for these also has stopped working
since I made it in April. I failed to pin every package at a defined
version, and things broke.

So, I redid the build script, and updated all the haskell libs to the
newest versions while I was at it. I have decided not to pin the library
versions (at least until I find a foolproof way to do it), so this new
script will break in the future, but it should break in a way I can fix up
easily by just refreshing a patch.

The new ghc-android build has a nice feature of at least being able to
compile Template Haskell code (though still not run it at compile time.
This made the patching needed in the Haskell libs quite a lot less. Offset
somewhat by me needing to make general fixes to lots of libs to build with
ghc head. Including some fun with `==#` changing its type from `Bool` to
`Int#`. In all, I think I removed around 2.5 thousand lines of patches!
(Only 6 thousand lines to go...)

Today I improved ghc-android some more so it cross builds several C libraries
that are needed to build several haskell libraries needed for XMPP.
I had only ever built those once, and done it by hand, and very hackishly.
Now they all build automatically too.

And, I put together a script that builds the debian stable chroot and
installs ghc-android.

And, I hacked on the EvilSplicer (which is sadly still needed) to
work with the new ghc/yesod/etc.

At this point, I have git-annex successfully building, including the APK!

----

In a bored hour waiting for a compile, I also sped up `git annex add`
on OSX by I think a factor of 10. Using cryptohash for hash calculation
now, when external hash programs are not available. It's still a few
percentage points slower than external hash programs, or I'd use it by
default.

----

This period of important drudgery was sponsored by an unknown bitcoin
user, and by Bradley Unterrheiner and Andreas Olsson.