aboutsummaryrefslogtreecommitdiff
path: root/lib/Makefile.dll-lib
blob: 3ea520d470c0b04cfc017a7446dc0d490d55107e (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
93
94
95
96
97
98
99
100
101
#
# This is a Makefile stub which handles the creation of Linux DLL-style shared
# libraries.
#
# In order to use this stub, the following makefile variables must be defined.
# 
# DLL_ADDRESS = 0x80000000
# DLL_JUMPSIZE = 0x1000
# DLL_GOTSIZE  = 0x1000
# DLL_VERSION = 1.0
# DLL_IMAGE = libce
# DLL_STUB = libcom_err
# DLL_MYDIR = et
# DLL_INSTALL_DIR = $(SHLIBDIR)
#

all:: jump image stubs

subdirs:: jump jump/jump.funcs jump/jump.ignore jump/jump.import \
	jump/jump.params jump/jump.undefs jump/jump.vars

jump:
	mkdir jump

jump/jump.funcs: dll/jump.funcs
	$(CP) $< $@

jump/jump.ignore: dll/jump.ignore
	$(CP) $< $@

jump/jump.import: dll/jump.import
	$(CP) $< $@

jump/jump.params: dll/jump.params
	$(CP) $< $@

jump/jump.undefs: dll/jump.undefs
	$(CP) $< $@

jump/jump.vars: dll/jump.vars
	$(CP) $< $@

#
# This is a horrible hack to try to find libgcc.a  --- the DLL documentation
# states that you should just be able to do -lgcc, but modern gcc 
# installation packages don't install /usr/lib/libgcc.a --- as well they 
# shouldn't since libgcc.a can be gcc version dependent.  
# If this hack doesn't work, try replacing it with a hardcoded path to 
# libgcc.a, or -lgcc.  
#
#DLL_LIBGCC ="`$(CC) -v 2>&1 | head -n 1 | \
#		sed -e 's;[^/]*;;' -e 's/specs/libgcc.a/'`"
DLL_LIBGCC ="`$(CC) --print-libgcc-file-name`"

image:		$(DLL_IMAGE).so.$(DLL_VERSION)

stubs:		$(DLL_STUB).sa $(OBJS)

$(DLL_IMAGE).so.$(DLL_VERSION): $(OBJS)
	(cd jump; export JUMP_DIR=`pwd`; \
		$(DLL_BIN)/mkimage -l $(DLL_IMAGE) -v $(DLL_VERSION) \
		-a $(DLL_ADDRESS) -j $(DLL_JUMPSIZE) -g $(DLL_GOTSIZE) -- \
		$(OBJS) -lc $(DLL_LIBS) $(DLL_LIBGCC) -lc)
	$(MV) jump/$(DLL_IMAGE).so.$(DLL_VERSION) .
	$(LN) -f $(DLL_IMAGE).so.$(DLL_VERSION) \
		`echo ../$(DLL_IMAGE).so.$(DLL_VERSION) | \
		sed -e 's/\.[0-9]*\$$//'`

$(DLL_STUB).sa:
	(cd jump; export JUMP_DIR=`pwd`; \
		$(DLL_BIN)/mkstubs -l $(DLL_IMAGE) -v $(DLL_VERSION) \
		-a $(DLL_ADDRESS) -j $(DLL_JUMPSIZE) -g $(DLL_GOTSIZE) \
		-- $(DLL_STUB))
	$(MV) jump/$(DLL_STUB).sa .
	$(RM) -f ../$@
	$(LN) $@ ../$@

installdirs::
	$(top_srcdir)/mkinstalldirs $(DESTDIR)$(DLL_INSTALL_DIR)

install-shlibs install:: $(DLL_IMAGE).so.$(DLL_VERSION) installdirs
	$(INSTALL_PROGRAM) $(DLL_IMAGE).so.$(DLL_VERSION) \
		$(DESTDIR)$(DLL_INSTALL_DIR)/$(DLL_IMAGE).so.$(DLL_VERSION)
	$(STRIP) $(DESTDIR)$(DLL_INSTALL_DIR)/$(DLL_IMAGE).so.$(DLL_VERSION)
	-$(LDCONFIG)

uninstall-shlibs unistall::
	$(RM) $(DESTDIR)$(DLL_INSTALL_DIR)/$(DLL_IMAGE).so.$(DLL_VERSION)

install:: $(DLL_STUB).sa
	$(INSTALL_DATA) $(DLL_STUB).sa $(DESTDIR)$(libdir)/$(DLL_STUB).sa
	$(CHMOD) 644 $(DESTDIR)$(libdir)/$(DLL_STUB).sa
	$(RANLIB) $(DESTDIR)$(libdir)/$(DLL_STUB).sa
	$(CHMOD) $(LIBMODE) $(DESTDIR)$(libdir)/$(DLL_STUB).sa

clean::
	$(RM) -f ../$(DLL_STUB).sa $(DLL_STUB).sa \
		$(DLL_IMAGE).so.$(DLL_VERSION) ../$(DLL_IMAGE).so.*
	$(RM) -rf jump