aboutsummaryrefslogtreecommitdiff
path: root/03_hello_dynld/Makefile
diff options
context:
space:
mode:
Diffstat (limited to '03_hello_dynld/Makefile')
-rw-r--r--03_hello_dynld/Makefile33
1 files changed, 33 insertions, 0 deletions
diff --git a/03_hello_dynld/Makefile b/03_hello_dynld/Makefile
new file mode 100644
index 0000000..5764166
--- /dev/null
+++ b/03_hello_dynld/Makefile
@@ -0,0 +1,33 @@
+# Copyright (c) 2021 Johannes Stoelp
+
+COMMON_CFLAGS := -g -O0 -Wall -Wextra \
+ -I../lib/include -nostdlib
+
+run: main
+ ./$<
+
+main: dynld.so main.c ../lib/libcommon.a
+ gcc -o $@ \
+ $(COMMON_CFLAGS) \
+ -Wl,--dynamic-linker=$(CURDIR)/dynld.so \
+ $(filter %.c %.a, $^)
+
+ readelf -W --dynamic $@
+ readelf -W --string-dump .interp $@
+ readelf -W --program-headers $@
+
+dynld.so: dynld.S dynld.c ../lib/libcommon.a
+ gcc -o $@ \
+ $(COMMON_CFLAGS) \
+ -fPIC \
+ -fvisibility=hidden \
+ -Wl,--entry=dl_start \
+ -Wl,--no-allow-shlib-undefined \
+ $^
+
+../lib/libcommon.a:
+ make -C ../lib
+
+clean:
+ rm -f main
+ rm -f dynld.so