summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorA. Wilcox <awilcox@wilcox-tech.com>2018-02-01 22:05:36 +0000
committerA. Wilcox <awilcox@wilcox-tech.com>2018-02-01 22:05:36 +0000
commit88815225fdabe7fa862f1c07abfcc971fdf5b04e (patch)
tree7aaae7c04fcf06aea85505fc028f476a131b9c50 /Makefile
parentc545f7393f0a10c182c2c085a36d7099b9c07a7f (diff)
parent78722ef403ffadcb78917e93e1859d43b9bf9df5 (diff)
downloadgcompat-88815225fdabe7fa862f1c07abfcc971fdf5b04e.tar.gz
gcompat-88815225fdabe7fa862f1c07abfcc971fdf5b04e.tar.bz2
gcompat-88815225fdabe7fa862f1c07abfcc971fdf5b04e.tar.xz
gcompat-88815225fdabe7fa862f1c07abfcc971fdf5b04e.zip
Merge branch 'patch-1' into 'master'
Clean up everything and add lots of new functions I hope everything here is okay. I fixed some bugs in existing functions (mostly wrong prototypes or off-by-one errors) and formatted everything to a consistent style. If you'd like me to adjust the style, that's no problem. It wasn't very consistent to start with (within the code, and compared to the documentation). *I added specific notes you may want to comment on to some of the commit messages.* Major features: * Pass correct `argv[0]` in loader * Intercept `readlink("/proc/self/exe")` to allow re-exec * Add almost all reasonable-to-implement functions in LSB 5.0.0 core generic libc. Remaining functions are: - Impossible-to-implement: sigreturn - Not useful: reentrant random (`*rand48_r`, etc.), argz, envz, pmap, rpc (clnt_*, svc*, xdr*), bindresvport - Got tired of it: checked wchar * Add additional functions used by android and its NDK tools (clang, cmake, lldb, ninja, etc.). At this point, I am able to run Android Studio with the bundled prebuilt JDK, and compile, install, and run an android application (including one with native libraries) on a real device, with only a few minor issues: * must export `LD_LIBRARY_PATH=/opt/android-studio/jre/jre/lib/amd64/server` because musl and glibc interpret the variable differently with regards to `dlopen`. This is something that has to be patched in musl builds of openjdk, so it's not a gcompat issue. * ld.bfd fails to parse the argument `--sysroot=/path`, but can parse `--sysroot /path`. So there's some difference with `getopt_long_only` (or getopt in general). May be a bug, may be just an API difference. May be it can be patched up. * LLDB fails to connect to the android phone for native debugging -- I haven't tried it on glibc yet, so it may not be a gcompat issue at all (may be a phone or the app issue). I'd be happy to send some documentation later. See merge request !1
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile34
1 files changed, 27 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index c595290..b6bee29 100644
--- a/Makefile
+++ b/Makefile
@@ -1,21 +1,33 @@
+LIBGCOMPAT_INCLUDE = \
+ libgcompat/alias.h
LIBGCOMPAT_SRC = \
- libgcompat/backtrace.c \
- libgcompat/dlmopen.c \
- libgcompat/dlvsym.c \
+ libgcompat/dlfcn.c \
+ libgcompat/error.c \
+ libgcompat/execinfo.c \
libgcompat/gnulib.c \
+ libgcompat/grp.c \
libgcompat/malloc.c \
libgcompat/math.c \
+ libgcompat/misc.c \
+ libgcompat/netdb.c \
libgcompat/pthread.c \
libgcompat/pwd.c \
+ libgcompat/readlink.c \
libgcompat/resolv.c \
libgcompat/resource.c \
libgcompat/setjmp.c \
+ libgcompat/signal.c \
+ libgcompat/socket.c \
libgcompat/stdio.c \
libgcompat/stdlib.c \
libgcompat/string.c \
libgcompat/sysctl.c \
+ libgcompat/syslog.c \
libgcompat/ucontext.c \
- libgcompat/version.c
+ libgcompat/unistd.c \
+ libgcompat/utmp.c \
+ libgcompat/version.c \
+ libgcompat/wchar.c
LIBGCOMPAT_OBJ = ${LIBGCOMPAT_SRC:.c=.o}
LIBGCOMPAT_SOVERSION = 0
LIBGCOMPAT_NAME = libgcompat.so.${LIBGCOMPAT_SOVERSION}
@@ -33,17 +45,25 @@ ${LIBGCOMPAT_NAME}: ${LIBGCOMPAT_OBJ}
$(CC) -o ${LIBGCOMPAT_NAME} -Wl,-soname,${LIBGCOMPAT_NAME} \
-shared ${LIBGCOMPAT_OBJ}
+${LIBGCOMPAT_OBJ}: ${LIBGCOMPAT_INCLUDE}
+
${LOADER_NAME}: ${LOADER_OBJ}
$(CC) -o ${LOADER_NAME} -fPIE -static ${LOADER_OBJ}
.c.o:
- $(CC) -std=c99 -D_BSD_SOURCE -fPIC -DPIC -DLINKER=\"${LINKER_PATH}\" \
- -DLIBGCOMPAT=\"${LIBGCOMPAT_PATH}\" ${CFLAGS} ${CPPFLAGS} \
- -c -o $@ $<
+ $(CC) -c -D_BSD_SOURCE -DLIBGCOMPAT=\"${LIBGCOMPAT_PATH}\" \
+ -DLINKER=\"${LINKER_PATH}\" -DLOADER=\"${LOADER_NAME}\" \
+ -fPIC -std=c99 -Wall -Wextra -Wno-frame-address \
+ -Wno-unused-parameter ${CFLAGS} ${CPPFLAGS} -o $@ $<
clean:
rm -f libgcompat/*.o loader/*.o ${LIBGCOMPAT_NAME} ${LOADER_NAME}
+format:
+ clang-format -i ${LIBGCOMPAT_SRC} ${LOADER_SRC}
+
install: all
install -D -m755 ${LIBGCOMPAT_NAME} ${DESTDIR}/${LIBGCOMPAT_PATH}
install -D -m755 ${LOADER_NAME} ${DESTDIR}/${LOADER_PATH}
+
+.PHONY: all clean format install