@@ -13,7 +13,7 @@ BINDIR ?= $(PREFIX)/bin
1313
1414# platform specific settings:
1515ifeq ($(PLATFORM ) , Linux)
16- LDFLAGS = -lm -ldl
16+ LDFLAGS = -lm -ldl $(LIBFFI_LD)
1717 RANLIB = ar -crs
1818 LIBEXT = so
1919 DYNAMIC_CFLAGS_EXTRA = -shared -fvisibility=hidden
@@ -29,17 +29,28 @@ else ifneq ($(findstring MINGW64_NT,$(PLATFORM)),)
2929 DYNAMIC_CFLAGS_EXTRA = -shared -fvisibility=hidden
3030endif
3131
32- LIBS = -L../libffi/build/.libs \
33- -lffi
34- INCLUDE = -I../libffi/build/include
32+ ifeq ($(UMKA_LIBFFI ) ,)
33+ LIBFFI_LIBS =
34+ LIBFFI_LIB =
35+ LIBFFI_LD =
36+ LIBFFI_STATIC =
37+ LIBFFI_INCLUDE =
38+ else
39+ LIBFFI_LIBS = ./libffi/build/.libs
40+ LIBFFI_LIB = libffi.a
41+ LIBFFI_LD = -L$(LIBFFI_LIBS) -l:$(LIBFFI_LIB)
42+ LIBFFI_STATIC = $(LIBFFI_LIBS)/$(LIBFFI_LIB)
43+ LIBFFI_INCLUDE = ./libffi/build/include
44+ LIBFFI_CFLAGS = -I$(LIBFFI_INCLUDE) -DUMKA_FFI
45+ endif
3546
3647# identical for all platforms:
3748UMKA_LIB_STATIC = $(BUILD_PATH ) /libumka.a
3849UMKA_LIB_DYNAMIC = $(BUILD_PATH ) /libumka.$(LIBEXT )
3950UMKA_EXE = $(BUILD_PATH ) /umka
4051
4152# CFLAGS = -s -fPIC -O3 -Wall -Wno-format-security -malign-double -fno-strict-aliasing -DUMKA_EXT_LIBS
42- CFLAGS = -fPIC -ggdb -Wall -Wno-format-security -malign-double -fno-strict-aliasing -DUMKA_EXT_LIBS -DUMKA_FFI $( LIBS ) $( INCLUDE )
53+ CFLAGS = -fPIC -ggdb -Wall -Wno-format-security -malign-double -fno-strict-aliasing -DUMKA_EXT_LIBS $( LIBFFI_CFLAGS )
4354STATIC_CFLAGS = $(CFLAGS ) -DUMKA_STATIC
4455DYNAMIC_CFLAGS = $(CFLAGS ) -DUMKA_BUILD $(DYNAMIC_CFLAGS_EXTRA )
4556
@@ -85,29 +96,48 @@ uninstall:
8596 @rm -f -- $(DESTDIR )$(INCLUDEDIR ) /umka_api.h
8697 @echo " Uninstallation complete!"
8798
88- $(UMKA_LIB_STATIC ) : $(OBJS_STATIC )
99+ $(UMKA_LIB_STATIC ) : $(OBJS_STATIC ) $( LIBFFI_STATIC )
89100 @echo AR $@
90101 @mkdir -p -- $(BUILD_PATH ) /include/
91102 @$(RANLIB ) $(UMKA_LIB_STATIC ) $^
92103 @cp $(APIS ) $(BUILD_PATH ) /include/
93104
94- $(UMKA_LIB_DYNAMIC ) : $(OBJS_DYNAMIC )
105+ $(UMKA_LIB_DYNAMIC ) : $(OBJS_DYNAMIC ) $( LIBFFI_STATIC )
95106 @echo LD $@
96107 @mkdir -p -- $(BUILD_PATH ) /include/
97108 @$(CC ) $(DYNAMIC_CFLAGS ) -o $(UMKA_LIB_DYNAMIC ) $^ $(LDFLAGS )
98109 @cp $(APIS ) $(BUILD_PATH ) /include/
99110
100- $(UMKA_EXE ) : $(OBJS_EXE ) $(UMKA_LIB_STATIC )
111+ $(UMKA_EXE ) : $(OBJS_EXE ) $(UMKA_LIB_STATIC ) $( LIBFFI_STATIC )
101112 @echo LD $@
102113 @mkdir -p -- $(dir $@ )
103114 @$(CC ) $(STATIC_CFLAGS ) -o $(UMKA_EXE ) $^ $(LDFLAGS )
104115
105- $(OBJ_PATH ) /% _static.o : src/% .c
116+ $(OBJ_PATH ) /% _static.o : src/% .c $( LIBFFI_INCLUDE )
106117 @echo CC $@
107118 @mkdir -p -- $(dir $@ )
108119 @$(CC ) $(STATIC_CFLAGS ) -o $@ -c $^
109120
110- $(OBJ_PATH ) /% _dynamic.o : src/% .c
121+ $(OBJ_PATH ) /% _dynamic.o : src/% .c $( LIBFFI_INCLUDE )
111122 @echo CC $@
112123 @mkdir -p -- $(dir $@ )
113124 @$(CC ) $(DYNAMIC_CFLAGS ) -o $@ -c $^
125+
126+ .PHONY : libffi/clean
127+ libffi/clean :
128+ rm -rf libffi/build
129+
130+ libffi/build/.libs/libffi.a : libffi/build/Makefile
131+ @cd libffi/build && make
132+
133+ libffi/build/include : libffi/build/Makefile
134+ libffi/build/Makefile : libffi/configure
135+ @mkdir -p -- libffi/build/
136+ @cd libffi/build && CC=-fPIC ../configure --enable-pic
137+
138+ libffi/configure : libffi/autogen.sh
139+ @cd libffi && ./autogen.sh
140+
141+ libffi/autogen.sh :
142+ @git submodule init
143+ @git submodule update
0 commit comments