1 #
2 # LibFFI Makefile
3 #
4 CC = cl.exe
5 AR = lib.exe
6
7 OBJBASE_DIR = $(BUILD_DIR)/obj/$(THIRD_PARTY_DIR)/libffi
8 SRCBASE_DIR = ../../../$(THIRD_PARTY_DIR)/libffi
9
10 DIRLIST = src src/x86
11
12 DEP_DIRS = $(BUILD_DIR) $(addprefix $(OBJBASE_DIR)/,$(DIRLIST))
13
14 C_SOURCES = src/closures.c \
15 src/java_raw_api.c \
16 src/prep_cif.c \
17 src/raw_api.c \
18 src/types.c
19
20 COMPILER_FLAGS = -nologo -W3 -WX- -EHsc -GS -fp:precise -Gm- \
21 -Zc:wchar_t -Zc:forScope -Gd -wd"4430" -analyze- -errorReport:queue
22
23 INCLUDES = -I$(SRCBASE_DIR)/include
24
25 CFLAGS = -DFFI_BUILDING \
26 -DGSTREAMER_LITE \
27 $(INCLUDES) \
28 $(COMPILER_FLAGS)
29
30 LIBFLAGS = -out:$(shell cygpath -ma $(TARGET)) -nologo
31
32 ifeq ($(BUILD_TYPE), Release)
33 CFLAGS += -O1 -Oy -MD -Gy -GF
34 else # debug
35 CFLAGS += -Od -Oy- -RTC1 -MDd -Zi -Fd$(PDB)
36 endif
37
38 ifeq ($(ARCH), x32)
39 INCLUDES += -I$(SRCBASE_DIR)/include/x86
40 CFLAGS += -DX86_WIN32
41 LIBFLAGS += -MACHINE:x86
42
43 C_SOURCES += src/x86/ffi.c
44 ASM_SOURCES = src/x86/win32.S
45 ASM_FLAGS = -DX86_WIN32
46
47 ML = ml.exe
48 MLFLAGS = -safeseh
49 else
50 INCLUDES += -I$(SRCBASE_DIR)/include/x64
51 CFLAGS += -DX86_WIN64
52 LIBFLAGS += -MACHINE:x64
53
54 C_SOURCES += src/x86/ffi.c
55 ASM_SOURCES = src/x86/win64.S
56 ASM_FLAGS = -DX86_WIN64
57
58 ML = ml64.exe
59 MLFLAGS =
60 endif
61
62 OBJECTS = $(patsubst %.c,$(OBJBASE_DIR)/%.obj,$(C_SOURCES)) \
63 $(patsubst %.S,$(OBJBASE_DIR)/%.obj,$(ASM_SOURCES))
64
65 .PHONY: default list
66
67 default: $(TARGET)
68
69 $(TARGET): $(OBJECTS)
70 $(AR) $(LIBFLAGS) $(foreach object,$(OBJECTS),$(shell cygpath -ma $(object)))
71
72 $(OBJECTS): | $(DEP_DIRS)
73
74 $(DEP_DIRS):
75 @mkdir -p $(DEP_DIRS)
76
77 $(OBJBASE_DIR)/%.obj: $(SRCBASE_DIR)/%.c
78 $(CC) $(CFLAGS) -TC -c -Fo$(shell cygpath -ma $@) $<
79
80 $(OBJBASE_DIR)/%.obj: $(SRCBASE_DIR)/%.S
81 $(CC) -EP $(INCLUDES) $(CFLAGS) $(shell cygpath -ma $(SRCBASE_DIR)/$(ASM_SOURCES)) > $(shell cygpath -ma $@.asm)
82 $(ML) $(MLFLAGS) -c -Fo$(shell cygpath -ma $@) $(shell cygpath -ma $@.asm)