<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">I think this is an NDK bug then. I just
      re-downloaded it to check, and indeed in the NDK from <a
        href="http://developer.android.com/tools/sdk/ndk/index.html">http://developer.android.com/tools/sdk/ndk/index.html</a>
      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.<br>
      <br>
      James<br>
      <br>
      On 26/11/13 00:06, Stephen Hines wrote:<br>
    </div>
    <blockquote
cite="mid:CAAzmS687E0+NcOEuA+Rv9=hrRz_d2Ga2uZAMo9-Y=ZpnWWjobA@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>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.</div>
        <div><br>
        </div>
        <div>Steve</div>
      </div>
      <div class="gmail_extra"><br>
        <br>
        <div class="gmail_quote">On Mon, Nov 25, 2013 at 3:57 PM, James
          Lyon <span dir="ltr"><<a moz-do-not-send="true"
              href="mailto:jameslyon0@gmail.com" target="_blank">jameslyon0@gmail.com</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div text="#000000" bgcolor="#FFFFFF">
              <div>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<br>
                <br>
                <a moz-do-not-send="true"
href="https://android.googlesource.com/platform/prebuilts/ndk/+/master/9/platforms/android-19/arch-arm/usr/include/sys/stat.h"
                  target="_blank">https://android.googlesource.com/platform/prebuilts/ndk/+/master/9/platforms/android-19/arch-arm/usr/include/sys/stat.h</a><br>
                <br>
                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.<span class="HOEnZb"><font color="#888888"><br>
                    <br>
                    James</font></span>
                <div>
                  <div class="h5"><br>
                    <br>
                    On 25/11/13 22:12, Stephen Hines wrote:<br>
                  </div>
                </div>
              </div>
              <div>
                <div class="h5">
                  <blockquote type="cite">
                    <div dir="ltr">
                      <div class="gmail_extra">
                        <div class="gmail_quote">On Mon, Nov 25, 2013 at
                          12:36 PM, Alp Toker <span dir="ltr"><<a
                              moz-do-not-send="true"
                              href="mailto:alp@nuanti.com"
                              target="_blank">alp@nuanti.com</a>></span>
                          wrote:<br>
                          <blockquote class="gmail_quote"
                            style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
                            <div><br>
                              On 25/11/2013 18:27, Stephen Hines wrote:<br>
                              <blockquote class="gmail_quote"
                                style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">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.<br>
                              </blockquote>
                              <br>
                            </div>
                            Hi Steve,<br>
                            <br>
                            Is your work on a branch somewhere?<br>
                          </blockquote>
                          <div><br>
                          </div>
                          <div>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.</div>
                          <div><br>
                          </div>
                          <blockquote class="gmail_quote"
                            style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><br>
                            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.<br>
                            <br>
                            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 :-)<br>
                          </blockquote>
                          <div><br>
                          </div>
                          <div><a moz-do-not-send="true"
                              href="http://source.android.com/"
                              target="_blank">http://source.android.com</a> has

                            instructions for how to pull down AOSP. We
                            don't use github.</div>
                          <div><br>
                          </div>
                          <div>Steve</div>
                          <div>  </div>
                          <blockquote class="gmail_quote"
                            style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><br>
                            Cheers,<br>
                            Alp.<br>
                            <br>
                            <br>
                            <blockquote class="gmail_quote"
                              style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
                              <br>
                              Steve
                              <div><br>
                                <br>
                                <br>
                                On Mon, Nov 25, 2013 at 8:30 AM, James
                                Lyon <<a moz-do-not-send="true"
                                  href="mailto:jameslyon0@gmail.com"
                                  target="_blank">jameslyon0@gmail.com</a>
                                <mailto:<a moz-do-not-send="true"
                                  href="mailto:jameslyon0@gmail.com"
                                  target="_blank">jameslyon0@gmail.com</a>>>

                                wrote:<br>
                                <br>
                                    Hi,<br>
                                <br>
                                    I've been trying to get LLVM working
                                as a JIT compiler on Android<br>
                                    for a while. It works now, except
                                that the<br>
                                    setLastModificationAndAccessTime
                                function won't build because the<br>
                                    Bionic C library lacks both futimes
                                and futimens. There doesn't<br>
                                    appear to be any "nice" workaround
                                for this problem: the only ways<br>
                                    I can think of to make
                                setLastModificationAndAccessTime work
                                are<br>
                                    either to go by /proc/self/fd or
                                invoke the system call directly<br>
                                    (the second option isn't helped by
                                the fact that the Android<br>
                                    headers don't define the relevant
                                system call number and it varies<br>
                                    between platforms).<br>
                                <br>
                                    Right now the only part of LLVM that
                                uses this function is<br>
                                    llvm-ar, so it's not as if lack of
                                support for this function is a<br>
                                    serious shortcoming. I don't really
                                know the history of<br>
                                    PathV1/PathV2 but I think the
                                simplest solutions are:<br>
                                <br>
                              </div>
                                   1. Have
                              setLastModificationAndAccessTime fail on
                              platforms
                              <div><br>
                                        without futimes/futimens (by
                                ENOSYS). This is pretty ugly<br>
                                        because having a function which
                                can never succeed seems likely<br>
                                        to confuse users.<br>
                              </div>
                                   2. Only declare
                              setLastModificationAndAccessTime if it is
                              <div><br>
                                        actually available (add
                                something to llvm-config.h to indicate<br>
                                        this). The downside here is that
                                (in theory at least) users<br>
                                        need to know that
                                setLastModificationAndAccessTime might
                                be<br>
                                        missing, although in practise
                                they can probably ignore the issue.<br>
                                <br>
                                    (1) is trivial to implement and is
                                what I'm doing now; I can also<br>
                                    create a patch to do (2), I just
                                thought I'd ask for opinions first.<br>
                                <br>
                                    Regards,<br>
                                <br>
                                    James<br>
                                <br>
                                   
                                _______________________________________________<br>
                                    LLVM Developers mailing list<br>
                              </div>
                                  <a moz-do-not-send="true"
                                href="mailto:LLVMdev@cs.uiuc.edu"
                                target="_blank">LLVMdev@cs.uiuc.edu</a>
                              <mailto:<a moz-do-not-send="true"
                                href="mailto:LLVMdev@cs.uiuc.edu"
                                target="_blank">LLVMdev@cs.uiuc.edu</a>>

                              <div><br>
                                    <a moz-do-not-send="true"
                                  href="http://llvm.cs.uiuc.edu"
                                  target="_blank">http://llvm.cs.uiuc.edu</a><br>
                                    <a moz-do-not-send="true"
                                  href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev"
                                  target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
                                <br>
                                <br>
                                <br>
                                <br>
_______________________________________________<br>
                                LLVM Developers mailing list<br>
                                <a moz-do-not-send="true"
                                  href="mailto:LLVMdev@cs.uiuc.edu"
                                  target="_blank">LLVMdev@cs.uiuc.edu</a>
                                        <a moz-do-not-send="true"
                                  href="http://llvm.cs.uiuc.edu"
                                  target="_blank">http://llvm.cs.uiuc.edu</a><br>
                                <a moz-do-not-send="true"
                                  href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev"
                                  target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
                              </div>
                            </blockquote>
                            <span><font color="#888888"> <br>
                                -- <br>
                                <a moz-do-not-send="true"
                                  href="http://www.nuanti.com"
                                  target="_blank">http://www.nuanti.com</a><br>
                                the browser experts<br>
                                <br>
                              </font></span></blockquote>
                        </div>
                        <br>
                      </div>
                    </div>
                  </blockquote>
                  <br>
                </div>
              </div>
            </div>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
  </body>
</html>