Hi, Firstly, thanks for the reply & for fixing those warnings.
In response to your question: I have tried to use the lib (I mentioned this in the original post, but should've stated it more prominently) and not much is working. I've tried three things so far: 1. Running an idle loop that spams to the console Result: I can run the idle loop & print stuff just fine. 2. The libuv socket example (http://nikhilm.github.io/uvbook/networking.html). I'm just creating a socket server then connecting to it via my mac's terminal & netcat (this is something we do for our development builds with a non-libuv socket server, so I'm fairly sure the connection/network configuration is correct when using nc). Result: I can't connect. uv_listen returns -13 (*Listen error permission denied*). 3. A libcurl / libuv test program (basically this: https://raw.githubusercontent.com/bagder/curl/master/docs/examples/multi-uv.c but using callbacks for the write -- I have the same example working on iOS) Result: Some of the plumbing appears to trigger. The curl socket callbacks don't trigger, but my requests come through as completing, but with no valid information (e.g. after I receive a CURLMSG_DONE message, curl_easy_getinfo(easy_handle, *....*) doesn't tell me anything, as the out pointers are left unchanged). I'll dig into debugging this a bit more tomorrow and let you know what is/isn't triggered. Tomorrow, I will try to cut down my example programs to a bare minimum then attach them to this thread. Also, do you have any suggestions for simple scenarios that would aid in diagnosing the problem? If there's anything I can do to provide better information, I will get onto that tomorrow. Thanks for the help -- I appreciate it. -Mark On Monday, March 23, 2015 at 4:32:52 PM UTC, Saúl Ibarra Corretgé wrote: > > Hi, > > On 03/23/2015 01:56 PM, Mark Simpson wrote: > > Hi, > > > > I've got a few problems with Android, hopefully someone can give me some > > pointers. I've not done a huge amount of cross-compiling for android, > > but have built a few things successfully (libcurl with openSSL & > > C-ARES). Any help/pointers appreciated, cheers. > > > > *tl;dr summary* > > I can't get libuv compiled using gyp, and I can compile libuv using > > autotools, but make check fails and my test program doesn't function > > correctly if I use this binary. > > > > *Long version* > > I've been doing a bit of prototyping using libuv & libcurl. Thus far, I > > have my test program successfully running on iOS and I'm satisfied with > > it. I'm now trying to get it running on Android. I've run into problems, > > though. > > > > *Development environment* > > Firstly, my development / compile machine's env: > > Mac mini, x86_64, OS X Yosemite 10.10.2 > > Android NDK r10d, with native platform version=9 > > > > *Gyp:* > > if I try to go the documented route and use gyp, the make stage fails. > > > > *$ source ./android-configure > > /Users/mark.simpson/Development/android-ndk-r10d gyp* > > Copying prebuilt binaries... > > Copying sysroot headers and libraries... > > Copying c++ runtime headers and libraries... > > Copying files to: > > /Users/mark.simpson/built_software/libuv/android-toolchain > > Cleaning up... > > Done. > > ['-Dtarget_arch=arm', '-DOS=android', > > '/Users/mark.simpson/built_software/libuv/uv.gyp', '-I', > > '/Users/mark.simpson/built_software/libuv/common.gypi', '--depth=.', > > '-f', 'make', > > '-Goutput_dir=/Users/mark.simpson/built_software/libuv/out', > > '--generator-output', > > '/Users/mark.simpson/built_software/libuv/out', '-Dhost_arch=x64', > > '-Duv_library=static_library', '-Dcomponent=static_library'] > > > > > > The only modification I've made to the android-configure script is > > adding --stl=gnustil, and this is just so that the toolchain mirrors > > what I've used to build my other android libs. I've already > > cross-compiled libcurl & its dependencies and that's working fine. > > > > *$ echo $PATH > > > */Users/mark.simpson/built_software/libuv/android-toolchain/bin:*rest_of_my_path* > > > > > > > > > > *$ make -C out > > * CC(target) > > > /Users/mark.simpson/built_software/libuv/out/Debug/obj.target/libuv/src/fs-poll.o > > > > arm-linux-androideabi-gcc: error: x86_64: No such file or directory > > arm-linux-androideabi-gcc: error: unrecognized command line option > > '-fasm-blocks' > > arm-linux-androideabi-gcc: error: unrecognized command line option > > '-mpascal-strings' > > arm-linux-androideabi-gcc: error: unrecognized command line option > > '-arch' > > make: *** > > > [/Users/mark.simpson/built_software/libuv/out/Debug/obj.target/libuv/src/fs-poll.o] > > > > Error 1 > > > > > > After a brief chat on IRC, tjfontaine said it looks like gyp is getting > > confused and mixing in compile flags that aren't meant for this type of > > cross-compile. He also suggested that gyp sometimes struggles with > > cross-compile scenarios, and it would probably be a good bet to go the > > autotools route. Given that I know absolutely nothing about gyp, I went > > down the autotools route next. > > > > There was a hack somewhere in joyent/libuv to make it work on OSX, but > IIRC this was a problem with GYP on OSX, it does work on Linux. > > > *Autotools:* > > When I go the autotools route, make runs without error, but make check > > fails and my test program doesn't function correctly. > > > > *$ sh autogen.sh > > *+ glibtoolize > > + aclocal -I m4 > > + autoconf > > + automake --add-missing --copy > > > > *$ ./configure --build=x86_64-apple-darwin > > --host=arm-linux-androideabi --with-sysroot=$ANDROID_SYSROOT > > --prefix /Users/mark.simpson/built_software/libuv_compile/* > > checking for a BSD-compatible install... /usr/bin/install -c > > checking whether build environment is sane... yes > > checking for arm-linux-androideabi-strip... > arm-linux-androideabi-strip > > checking for a thread-safe mkdir -p... ./install-sh -c -d > > checking for gawk... no > > checking for mawk... no > > checking for nawk... no > > checking for awk... awk > > checking whether make sets $(MAKE)... yes > > checking whether make supports nested variables... yes > > checking build system type... x86_64-apple-darwin > > checking host system type... arm-unknown-linux-androideabi > > checking for arm-linux-androideabi-gcc... arm-linux-androideabi-gcc > > checking whether the C compiler works... yes > > checking for C compiler default output file name... a.out > > checking for suffix of executables... > > checking whether we are cross compiling... yes > > checking for suffix of object files... o > > checking whether we are using the GNU C compiler... yes > > checking whether arm-linux-androideabi-gcc accepts -g... yes > > checking for arm-linux-androideabi-gcc option to accept ISO C89... > > none needed > > checking whether arm-linux-androideabi-gcc understands -c and -o > > together... yes > > checking for style of include used by make... GNU > > checking dependency style of arm-linux-androideabi-gcc... gcc3 > > checking if arm-linux-androideabi-gcc supports -fvisibility=hidden > > flag... yes > > checking if arm-linux-androideabi-gcc supports -g flag... yes > > checking if arm-linux-androideabi-gcc supports -std=gnu89 flag... > yes > > checking if arm-linux-androideabi-gcc supports -pedantic flag... yes > > checking if arm-linux-androideabi-gcc supports -Wall flag... yes > > checking if arm-linux-androideabi-gcc supports -Wextra flag... yes > > checking if arm-linux-androideabi-gcc supports -Wno-unused-parameter > > flag... yes > > checking for arm-linux-androideabi-ar... arm-linux-androideabi-ar > > checking the archiver (arm-linux-androideabi-ar) interface... ar > > checking how to print strings... printf > > checking for a sed that does not truncate output... /usr/bin/sed > > checking for grep that handles long lines and -e... /usr/bin/grep > > checking for egrep... /usr/bin/grep -E > > checking for fgrep... /usr/bin/grep -F > > checking for ld used by arm-linux-androideabi-gcc... > > > /Users/mark.simpson/built_software/libuv/android-toolchain/arm-linux-androideabi/bin/ld > > > > checking if the linker > > > (/Users/mark.simpson/built_software/libuv/android-toolchain/arm-linux-androideabi/bin/ld) > > > > is GNU ld... yes > > checking for BSD- or MS-compatible name lister (nm)... > > > /Users/mark.simpson/built_software/libuv/android-toolchain/bin/arm-linux-androideabi-nm > > > > -B > > checking the name lister > > > (/Users/mark.simpson/built_software/libuv/android-toolchain/bin/arm-linux-androideabi-nm > > > > -B) interface... BSD nm > > checking whether ln -s works... yes > > checking the maximum length of command line arguments... 196608 > > checking how to convert x86_64-apple-darwin file names to > > arm-unknown-linux-androideabi format... func_convert_file_noop > > checking how to convert x86_64-apple-darwin file names to toolchain > > format... func_convert_file_noop > > checking for > > > /Users/mark.simpson/built_software/libuv/android-toolchain/arm-linux-androideabi/bin/ld > > > > option to reload object files... -r > > checking for arm-linux-androideabi-objdump... > > arm-linux-androideabi-objdump > > checking how to recognize dependent libraries... pass_all > > checking for arm-linux-androideabi-dlltool... no > > checking for dlltool... no > > checking how to associate runtime and link libraries... printf %s\n > > checking for arm-linux-androideabi-ar... (cached) > > arm-linux-androideabi-ar > > checking for archiver @FILE support... @ > > checking for arm-linux-androideabi-strip... (cached) > > arm-linux-androideabi-strip > > checking for arm-linux-androideabi-ranlib... > > arm-linux-androideabi-ranlib > > checking command to parse > > > /Users/mark.simpson/built_software/libuv/android-toolchain/bin/arm-linux-androideabi-nm > > > > -B output from arm-linux-androideabi-gcc object... ok > > checking for sysroot... > > > /Users/mark.simpson/Development/android-ndk-r10d/platforms/android-9/arch-arm > > > checking for a working dd... /bin/dd > > checking how to truncate binary pipes... /bin/dd bs=4096 count=1 > > checking for arm-linux-androideabi-mt... no > > checking for mt... no > > checking if : is a manifest tool... no > > checking how to run the C preprocessor... arm-linux-androideabi-gcc > -E > > checking for ANSI C header files... yes > > checking for sys/types.h... yes > > checking for sys/stat.h... yes > > checking for stdlib.h... yes > > checking for string.h... yes > > checking for memory.h... yes > > checking for strings.h... yes > > checking for inttypes.h... yes > > checking for stdint.h... yes > > checking for unistd.h... yes > > checking for dlfcn.h... yes > > checking for objdir... .libs > > checking if arm-linux-androideabi-gcc supports -fno-rtti > > -fno-exceptions... no > > checking for arm-linux-androideabi-gcc option to produce PIC... > > -fPIC -DPIC > > checking if arm-linux-androideabi-gcc PIC flag -fPIC -DPIC works... > yes > > checking if arm-linux-androideabi-gcc static flag -static works... > yes > > checking if arm-linux-androideabi-gcc supports -c -o file.o... yes > > checking if arm-linux-androideabi-gcc supports -c -o file.o... > > (cached) yes > > checking whether the arm-linux-androideabi-gcc linker > > > (/Users/mark.simpson/built_software/libuv/android-toolchain/arm-linux-androideabi/bin/ld) > > > > supports shared libraries... yes > > checking whether -lc should be explicitly linked in... no > > checking dynamic linker characteristics... Android linker > > checking how to hardcode library paths into programs... immediate > > checking whether stripping libraries is possible... yes > > checking if libtool supports shared libraries... yes > > checking whether to build shared libraries... yes > > checking whether to build static libraries... yes > > checking whether make supports nested variables... (cached) yes > > checking for dlopen in -ldl... yes > > checking for kstat_lookup in -lkstat... no > > checking for kvm_open in -lkvm... no > > checking for gethostbyname in -lnsl... no > > checking for perfstat_cpu in -lperfstat... no > > checking for pthread_mutex_init in -lpthread... no > > checking for clock_gettime in -lrt... no > > checking for sendfile in -lsendfile... no > > checking for socket in -lsocket... no > > checking for special C compiler options needed for large files... no > > checking for _FILE_OFFSET_BITS value needed for large files... > unknown > > checking for _LARGE_FILES value needed for large files... unknown > > checking for pkg-config... no > > checking that generated files are newer than configure... done > > configure: creating ./config.status > > config.status: creating Makefile > > config.status: executing depfiles commands > > config.status: executing libtool commands > > > > > > *$ make* > > CC src/libuv_la-fs-poll.lo > > CC src/libuv_la-inet.lo > > CC src/libuv_la-threadpool.lo > > CC src/libuv_la-uv-common.lo > > CC src/libuv_la-version.lo > > CC src/unix/libuv_la-async.lo > > CC src/unix/libuv_la-core.lo > > CC src/unix/libuv_la-dl.lo > > CC src/unix/libuv_la-fs.lo > > CC src/unix/libuv_la-getaddrinfo.lo > > CC src/unix/libuv_la-getnameinfo.lo > > CC src/unix/libuv_la-loop-watcher.lo > > CC src/unix/libuv_la-loop.lo > > CC src/unix/libuv_la-pipe.lo > > src/unix/pipe.c: In function 'uv__pipe_getsockpeername': > > src/unix/pipe.c:237:15: warning: comparison between signed and > > unsigned integer expressions [-Wsign-compare] > > if (addrlen > *size) { > > ^ > > CC src/unix/libuv_la-poll.lo > > CC src/unix/libuv_la-process.lo > > CC src/unix/libuv_la-signal.lo > > CC src/unix/libuv_la-stream.lo > > CC src/unix/libuv_la-tcp.lo > > CC src/unix/libuv_la-thread.lo > > CC src/unix/libuv_la-timer.lo > > CC src/unix/libuv_la-tty.lo > > CC src/unix/libuv_la-udp.lo > > CC src/unix/libuv_la-android-ifaddrs.lo > > src/unix/android-ifaddrs.c: In function 'getNetlinkResponse': > > src/unix/android-ifaddrs.c:139:9: warning: implicit declaration of > > function 'uv__free' [-Wimplicit-function-declaration] > > uv__free(l_buffer); > > ^ > > I submitted https://github.com/libuv/libuv/pull/285 to fix these > warnings. > > > src/unix/android-ifaddrs.c:140:9: warning: implicit declaration of > > function 'uv__malloc' [-Wimplicit-function-declaration] > > l_buffer = uv__malloc(l_size); > > ^ > > src/unix/android-ifaddrs.c:140:18: warning: assignment makes pointer > > from integer without a cast [enabled by default] > > l_buffer = uv__malloc(l_size); > > ^ > > src/unix/android-ifaddrs.c: In function 'newListItem': > > src/unix/android-ifaddrs.c:185:27: warning: initialization makes > > pointer from integer without a cast [enabled by default] > > NetlinkList *l_item = uv__malloc(sizeof(NetlinkList)); > > ^ > > src/unix/android-ifaddrs.c: In function 'interpretLink': > > src/unix/android-ifaddrs.c:351:13: warning: assignment makes pointer > > from integer without a cast [enabled by default] > > l_entry = uv__malloc(sizeof(struct ifaddrs) + sizeof(int) + > > l_nameSize + l_addrSize + l_dataSize); > > ^ > > src/unix/android-ifaddrs.c: In function 'interpretAddr': > > src/unix/android-ifaddrs.c:480:13: warning: assignment makes pointer > > from integer without a cast [enabled by default] > > l_entry = uv__malloc(sizeof(struct ifaddrs) + l_nameSize + > > l_addrSize); > > ^ > > CC src/unix/libuv_la-pthread-fixes.lo > > CC src/unix/libuv_la-linux-core.lo > > CC src/unix/libuv_la-linux-inotify.lo > > CC src/unix/libuv_la-linux-syscalls.lo > > CC src/unix/libuv_la-proctitle.lo > > CCLD libuv.la > > > > > > *$ make check* > > lots of warnings like: > > test/task.h:80:13: warning: anonymous variadic macros were introduced in > > C99 [-Wvariadic-macros] (should I be specifying C99 somewhere?) > > > > then... > > > > *test/test-signal-multiple-loops.c:248: error: undefined reference to > > 'uv__pthread_sigmask'* > > collect2: error: ld returned 1 exit status > > make[1]: *** [test/run-tests] Error 1 > > make: *** [check-am] Error 2 > > > > A quick search shows that pthread_sigmask might not be supported > proberly on Andoird. We might need to skip the test there. > > > So basically, I'm a bit stumped now. Hopefully I'm just making some sort > > of newbie CC error. Any help appreciated. > > > > Well, the fact that tests don't run doesn't mean that libuv doesn't > work. Have you tried using the resulting library from the autoconf > build? Any problems there? > > > Cheers, > > -- > Saúl Ibarra Corretgé > bettercallsaghul.com > > > -- You received this message because you are subscribed to the Google Groups "libuv" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/libuv. For more options, visit https://groups.google.com/d/optout.
