Unfortunately, I am having difficulty cross-compiling Git for the ARMv6 architecture.
But before I begin describing the steps I've taken and commands I've entered, I should briefly describe the build environment:
/home/my_name/cctoolchain
(this directory contains bin/
, lib/
, etc.).I began by grabbing Git 1.8.2 from here. After extracting the directory I ran:
export PATH=$PATH:/home/my_name/cctoolchain/bin
I also ran autoconf
to make sure that ./configure
was up to date. Then I invoked ./configure
as follows:
./configure --prefix=/home/my_name/git-arm --build=x86_64-linux-gnu --host=arm-linux-androideabi
This ran for a couple of seconds and then aborted with:
checking whether system succeeds to read fopen'ed directory... configure: error: in `/home/my_name/git-1.8.2': configure: error: cannot run test program while cross compiling
I cracked open configure.ac
and removed lines 806-825, disabling the test. After doing that, I also had to remove lines 806-839 for a similar reason.
At this point, the ./configure
script was able to complete. I then excitedly ran make
to build Git and after a few more moments, ran into this error:
fetch-pack.c: In function 'fetch_pack': fetch-pack.c:928:16: error: 'struct stat' has no member named 'st_mtim' make: *** [fetch-pack.o] Error 1
Somehow I get the feeling I'm "doing it wrong". This sounds like something that should be a lot easier than manually removing tests from configure.ac
. What am I missing?
"building a cross-compiler is significantly harder than building a compiler that targets the platform it runs on." The problem exists due to the way libraries are built and accessed. In the normal situation all the libraries are located in a specific spot, and are used by all apps on that system.
To cross-compile is to build on one platform a binary that will run on another platform.
The macro that's failing is ST_MTIME_NSEC
in git-compat-util.h
. This macro is controlled by the macros USE_NSEC
, NO_NSEC
and USE_ST_TIMESPEC
, which are provided on the build commandline or by config.mak.uname
, not by configure.
It should be that if no options are provided, git doesn't attempt to use nanosecond timestamps (or st_mtim
) at all, but it looks like a bug slipped through.
Try make NO_NSEC=1
and see if that resolves your problem.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With