summaryrefslogtreecommitdiff
path: root/Objective-C/GNUmakefile
blob: bbd0df84c0c9682b9ae114b3702ce5a6769bcec4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
## Objective-CL, an Objective-C bridge for Common Lisp.
## Copyright (C) 2007  Matthias Andreas Benkard.
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or (at
## your option) any later version.
##
## This program is distributed in the hope that it will be useful, but
## WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
## General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program.  If not, see <http://www.gnu.org/licenses/>.


-include $(GNUSTEP_MAKEFILES)/common.make

include ../version.make
-include ../config.make

.PHONY: all clean distclean install

ifeq ($(CONFIG_MAKE_INCLUDED_P),)
all clean install:
	@echo "Please run ./configure before running make."
else # CONFIG_MAKE_INCLUDED_P
USE_LIBFFI = 1

LIBRARY_NAME = libobjcl

RPM_DISABLE_RELOCATABLE = YES
ADDITIONAL_OBJCFLAGS = -Wall -g -DVERSION=\"$(VERSION)\" -I/usr/local/include

libobjcl_OBJC_FILES = JIGS/ObjcRuntimeUtilities2.m libobjcl.m PyObjC/objc_support.m PyObjC/objc-runtime-apple.m PyObjC/objc-runtime-gnu.m PyObjC/objc-runtime-compat.m
libobjcl_C_FILES = JIGS/ObjcRuntimeUtilities.c
LIBRARIES_DEPEND_UPON = $(FND_LIBS) $(GUI_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS) $(CONFIG_SYSTEM_LIBS)

ADDITIONAL_LDFLAGS = $(LIBS)

ifdef USE_LIBFFI
# FIXME: For now, we statically link against libffi.  We are not certain
# that this is a good idea.  Linking dynamically, on the other hand, is
# hard in general (that's one of the reasons libtool exists, after all).
ADDITIONAL_OBJCFLAGS += -DUSE_LIBFFI
ifneq ($(HAVE_ANY_FFI_H),1)
ADDITIONAL_LDFLAGS += ../libffi-3.0.4/.libs/libffi.a
ADDITIONAL_OBJCFLAGS += -I../libffi-3.0.4/include
FFI_DEPS += ../libffi-3.0.4/.libs/libffi.a
FFI_CLEAN += libffi_clean
endif
libobjcl_OBJC_FILES += PyObjC/libffi_support.m
endif

ifneq ($(COMMON_MAKE_LOADED),)  # GNUstep
-include $(GNUSTEP_MAKEFILES)/library.make

before-all:: $(FFI_DEPS)
	mkdir -p $(GNUSTEP_OBJ_DIR)/PyObjC
	mkdir -p $(GNUSTEP_OBJ_DIR)/JIGS

after-clean:: $(FFI_CLEAN)

else  # Mac OS X
libobjcl_OBJ_FILES = $(patsubst %.m,obj/%.o,$(libobjcl_OBJC_FILES))

all: obj/libobjcl.dylib

clean: $(FFI_CLEAN)
	rm -f obj/libobjcl.dylib obj/libobjcl.dylib.$(VERSION) $(libobjcl_OBJ_FILES)

distclean: clean

obj/libobjcl.dylib: $(FFI_DEPS) obj/libobjcl.dylib.$(VERSION)
	ln -s -f libobjcl.dylib.$(VERSION) $@

obj/libobjcl.dylib.$(VERSION): $(libobjcl_OBJ_FILES)
	make -p obj
	gcc -dynamiclib -current_version $(VERSION) -flat_namespace -undefined warning -install_name $(CURDIR)/obj/libobjcl.dylib.$(VERSION) -o $@ $(libobjcl_OBJ_FILES) -fnext-runtime -framework AppKit -framework Foundation -lm $(ADDITIONAL_LDFLAGS) $(ADDITIONAL_OBJCFLAGS)

obj/%.o: %.m
	mkdir -p $(dir $@)
	gcc -o $@ -c $< -MMD -MP -DNeXT_Foundation_LIBRARY=1 -DNeXT_GUI_LIBRARY=1 -DNeXT_RUNTIME=1 -dynamic -fno-common -fno-omit-frame-pointer -Wno-import -fno-strict-aliasing -fnext-runtime -I. $(ADDITIONAL_OBJCFLAGS)
endif

../libffi-3.0.4/.libs/libffi.a:
	(cd ../libffi-3.0.4 && chmod +x ltconfig && sh ./configure && make)

libffi_clean:
	-make -C ../libffi-3.0.4 distclean
endif # CONFIG_MAKE_INCLUDED_P