Skip to content

Commit ebdae87

Browse files
committed
Add libffi as submodule & integrate in make file
1 parent 5a4adfd commit ebdae87

File tree

5 files changed

+49
-12
lines changed

5 files changed

+49
-12
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[submodule "libffi"]
2+
path = libffi
3+
url = https://github.com/libffi/libffi

Makefile

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ BINDIR ?= $(PREFIX)/bin
1313

1414
# platform specific settings:
1515
ifeq ($(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
3030
endif
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:
3748
UMKA_LIB_STATIC = $(BUILD_PATH)/libumka.a
3849
UMKA_LIB_DYNAMIC = $(BUILD_PATH)/libumka.$(LIBEXT)
3950
UMKA_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)
4354
STATIC_CFLAGS = $(CFLAGS) -DUMKA_STATIC
4455
DYNAMIC_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

libffi

Submodule libffi added at e2eda0c

src/umka_ffi.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
#ifdef UMKA_FFI
2+
13
#include "umka_ffi.h"
24
#include "umka_common.h"
35
#include "umka_compiler.h"
46
#include "umka_types.h"
5-
#include <ffi.h>
67

78

89
static FfiStructs ffiStructs = {0};
@@ -148,3 +149,5 @@ int assignFfiTypes(Umka *umka, ffi_type **types, const Signature *sig)
148149
}
149150
return numArgs;
150151
}
152+
153+
#endif // UMKA_FFI

src/umka_ffi.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#ifndef UMKA_FFI_H_
22
#define UMKA_FFI_H_
33

4-
#include <ffi.h>
4+
#include "ffi.h"
55

66
#include "umka_common.h"
77
#include "umka_types.h"

0 commit comments

Comments
 (0)