[LLVMdev] Android, llvm-ar and setLastModificationAndAccessTime
James Lyon
jameslyon0 at gmail.com
Tue Nov 26 00:50:46 PST 2013
I think this is an NDK bug then. I just re-downloaded it to check, and
indeed in the NDK from
http://developer.android.com/tools/sdk/ndk/index.html that's not true,
platforms/android-19/arch-arm/usr/lib/libc.so and
platforms/android-9/arch-arm/usr/lib/libc.so are identical.
James
On 26/11/13 00:06, Stephen Hines wrote:
> This is only available for apps that target API level 19 and up. On 18
> and lower, the futimens() function won't be available via libc.so. You
> will need to target API 19 (KitKat) in order to actually use it. If I
> do an "nm -D
> prebuilts/ndk/9/platforms/android-19/arch-arm/usr/lib/libc.so", I can
> see futimens() is present. On the others, it is definitely missing.
>
> Steve
>
>
> On Mon, Nov 25, 2013 at 3:57 PM, James Lyon <jameslyon0 at gmail.com
> <mailto:jameslyon0 at gmail.com>> wrote:
>
> Hmmm.... following up on your point I've noticed something
> strange. futimens is missing from the NDK (r9b; it's not in any
> headers and the libc.so files are the same all the way back to
> android-9), which is why I thought it's missing from Android
> generally. The NDK is by far the easiest way to cross-compile
> since it provides a standalone cross-compilation toolchain. It is
> however present in
>
> https://android.googlesource.com/platform/prebuilts/ndk/+/master/9/platforms/android-19/arch-arm/usr/include/sys/stat.h
>
> which seems odd to me. Steve, perhaps you know whether this is
> intentional? My googling isn't getting me anywhere on why the file
> I've linked is different to
> platforms/android-19/arch-arm/usr/include/sys/stat.h in the NDK.
>
> James
>
>
> On 25/11/13 22:12, Stephen Hines wrote:
>> On Mon, Nov 25, 2013 at 12:36 PM, Alp Toker <alp at nuanti.com
>> <mailto:alp at nuanti.com>> wrote:
>>
>>
>> On 25/11/2013 18:27, Stephen Hines wrote:
>>
>> futimens() is available in Android KitKat. We work
>> extensively with LLVM and this allowed us to remove our
>> ugly workaround for not having this functionality.
>>
>>
>> Hi Steve,
>>
>> Is your work on a branch somewhere?
>>
>>
>> It is all available as part of the Android Open Source Project
>> (AOSP). I should mention that we do not use the JIT path, but
>> LLVM does require futimens() to build properly for Android (hence
>> us fixing this missing part of bionic). If you want to look at
>> local patches that we have for LLVM/Clang, those are available in
>> "external/llvm" and "external/clang". We have very few
>> differences from upstream LLVM.
>>
>>
>> James is putting a lot of time into this, and the LLVM
>> community has been making best efforts to help review his
>> patches which can be difficult for those who don't normally
>> work with the Android platform.
>>
>> So if the work is already out there, that'd be useful to know
>> in order to avoid duplication of effort. There are lots of
>> other useful things we could be doing if support for that
>> platform is already complete somewhere on Github :-)
>>
>>
>> http://source.android.com <http://source.android.com/> has
>> instructions for how to pull down AOSP. We don't use github.
>>
>> Steve
>>
>>
>> Cheers,
>> Alp.
>>
>>
>>
>> Steve
>>
>>
>>
>> On Mon, Nov 25, 2013 at 8:30 AM, James Lyon
>> <jameslyon0 at gmail.com <mailto:jameslyon0 at gmail.com>
>> <mailto:jameslyon0 at gmail.com
>> <mailto:jameslyon0 at gmail.com>>> wrote:
>>
>> Hi,
>>
>> I've been trying to get LLVM working as a JIT
>> compiler on Android
>> for a while. It works now, except that the
>> setLastModificationAndAccessTime function won't build
>> because the
>> Bionic C library lacks both futimes and futimens.
>> There doesn't
>> appear to be any "nice" workaround for this problem:
>> the only ways
>> I can think of to make
>> setLastModificationAndAccessTime work are
>> either to go by /proc/self/fd or invoke the system
>> call directly
>> (the second option isn't helped by the fact that the
>> Android
>> headers don't define the relevant system call number
>> and it varies
>> between platforms).
>>
>> Right now the only part of LLVM that uses this
>> function is
>> llvm-ar, so it's not as if lack of support for this
>> function is a
>> serious shortcoming. I don't really know the history of
>> PathV1/PathV2 but I think the simplest solutions are:
>>
>> 1. Have setLastModificationAndAccessTime fail on
>> platforms
>>
>> without futimes/futimens (by ENOSYS). This is
>> pretty ugly
>> because having a function which can never succeed
>> seems likely
>> to confuse users.
>> 2. Only declare setLastModificationAndAccessTime if
>> it is
>>
>> actually available (add something to
>> llvm-config.h to indicate
>> this). The downside here is that (in theory at
>> least) users
>> need to know that
>> setLastModificationAndAccessTime might be
>> missing, although in practise they can probably
>> ignore the issue.
>>
>> (1) is trivial to implement and is what I'm doing
>> now; I can also
>> create a patch to do (2), I just thought I'd ask for
>> opinions first.
>>
>> Regards,
>>
>> James
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
>> <mailto:LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>>
>>
>> http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>>
>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
>> http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>>
>> --
>> http://www.nuanti.com
>> the browser experts
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131126/292b40ab/attachment.html>
More information about the llvm-dev
mailing list