git rebase failing intermittently while Xcode is running

I’ve had a few issues recently with git rebase failing intermittently when there are clearly no conflicts; if you run git rebase –abort and then try the rebase again it often succeeds.

It appears that this can happen when Xcode is running in the background, as described in this discussion; the problem is that an application can be running git status in the background. My own experience supports this (closing Xcode fixes the problem), so if you’re experiencing a similar problem you may find this helpful.

Locic moves to GitHub + Travis

The Loci compiler is currently in the process of being moved to a GitHub repository and built by Travis CI (Continuous Integration). If you visit the second link you can see the latest build status of Locic. This is particularly useful because it verifies the compiler builds against all the supported LLVM versions (3.3, 3.4 and 3.5), and furthermore that Locic can be built by both Clang and GCC.

I’m keen to support multiple versions of LLVM because it makes it much easier for end users to build it on their system with whatever LLVM version is available. LLVM 3.6 is currently under development so it’s a moving target and hence they’re currently set as ‘Allowed failures’, but I hope to fix the builds at some point soon.

Easier local builds

As part of this I’ve also substantially improved the upstream dependency searching for LLVM and Clang. This means that it’s now possible to just install the normal llvm-dev and clang packages (e.g. via apt-get) and then when you build Locic the CMake script will just find those automatically. If you have your own local build of LLVM (you’d have to be quite keen…) then you can set the root directory of that build so it’s used instead.

Expanding platform support

All of this is likely to be paired with a greater focus on getting the compiler to build on Mac and Windows (currently only Linux), and adding support for more ABIs in llvm-abi. In fact I’d also like to push llvm-abi into its own repository so it’s usable for other LLVM-based compiler front-ends.

I expect I’ll explain this in more detail at some point and probably also add documentation for the project when it’s separated from Loci, because it’s a really interesting capability for other compiler developers to avoid re-implementing the ABI code manipulations required for LLVM. It’ll also make sense to mention it on the LLVM mailing lists so I can get some suggestions for improving it to handle some of the more exotic cases.