1#
2#   Makefile.fpc for Free Pascal OpenBSD RTL
3#
4
5[package]
6main=rtl
7
8[install]
9fpcpackage=y
10
11[target]
12loaders=$(LOADERS)
13units=$(SYSTEMUNIT) $(SYSINIT_UNITS) initc uuchar objpas macpas iso7185 extpas strings syscall baseunix \
14      $(LINUXUNIT) unixtype unixutil unix ctypes bsd \
15      $(CPU_UNITS) dos rtlconsts \
16      sysutils fgl classes typinfo math \
17      charset cpall character getopts heaptrc lineinfo lnfodwrf \
18      errors \
19      types sysctl sysconst \
20      fpintres dynlibs cwstring cmem dl termio \
21      cthreads unixcp fpwidestring
22
23rsts=math typinfo classes sysconst
24implicitunits=exeinfo \
25      cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 \
26      cp437 cp646 cp737 cp775 cp850 cp852 cp855 cp856 cp857 cp860 cp861 cp862 \
27      cp863 cp864 cp865 cp866 cp869 cp874 cp3021 cp8859_1 cp8859_2 cp8859_3 cp8859_4 \
28      cp8859_5 cp8859_6 cp8859_7 cp8859_8 cp8859_9 cp8859_10 cp8859_11 \
29      cp8859_13 cp8859_14 cp8859_15 cp8859_16 cpkoi8_r cpkoi8_u \
30      unicodedata  unicodenumtable
31
32[require]
33nortl=y
34
35[install]
36fpcpackage=y
37
38[default]
39fpcdir=../..
40target=openbsd
41
42[compiler]
43includedir=$(INC) $(PROCINC) $(UNIXINC) $(BSDINC) $(BSDPROCINC) $(TARGETPROCINC)
44sourcedir=$(INC) $(PROCINC) $(UNIXINC) $(BSDINC)
45
46
47[lib]
48libname=libfprtl.so
49libversion=2.0.0
50libunits=$(SYSTEMUNIT) objpas strings \
51      unix  \
52      dos  \
53      sysutils typinfo math \
54      cpu mmx getopts heaptrc \
55      errors
56
57[prerules]
58RTL=..
59INC=$(RTL)/inc
60PROCINC=$(RTL)/$(CPU_TARGET)
61BSDINC=$(RTL)/bsd
62BSDPROCINC=$(BSDINC)/$(CPU_TARGET)
63UNIXINC=$(RTL)/unix
64UNITPREFIX=rtl
65TARGETPROCINC=$(RTL)/openbsd/$(CPU_TARGET)
66
67SYSTEMUNIT=system
68LINUXUNIT=
69PRT0=prt0
70
71# Use new feature from 1.0.5 version
72# that generates release PPU files
73# which will not be recompiled
74ifdef RELEASE
75override FPCOPT+=-Ur
76endif
77
78# OpenBSD defaults to libc, no syscalls
79ifeq ($(FPC_USE_SYSCALL),)
80override FPCOPT+=-dFPC_USE_LIBC
81endif
82
83CPU_UNITS=
84SYSINIT_UNITS=si_prc si_c si_dll si_g
85
86LOADERS=prt0
87
88ifeq ($(ARCH),x86_64)
89CPU_UNITS=x86 ports cpu
90endif
91ifeq ($(ARCH),i386)
92CPU_UNITS=x86 ports cpu mmx
93endif
94
95# Paths
96OBJPASDIR=$(RTL)/objpas
97GRAPHDIR=$(INC)/graph
98
99# Use new graph unit ?
100# NEWGRAPH=YES
101# Use LibGGI ?
102# Use
103#
104ifndef USELIBGGI
105USELIBGGI=NO
106endif
107
108
109[rules]
110.NOTPARALLEL:
111# Get the system independent include file names.
112# This will set the following variables :
113# SYSINCNAMES
114include $(INC)/makefile.inc
115SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES))
116
117# Get the processor dependent include file names.
118# This will set the following variables :
119# CPUINCNAMES
120include $(PROCINC)/makefile.cpu
121SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES))
122
123# Put system unit dependencies together.
124SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS)
125
126
127#
128# Loaders
129#
130
131prt0$(OEXT) : $(CPU_TARGET)/$(PRT0).as
132        $(AS) -o $(UNITTARGETDIRPREFIX)prt0$(OEXT) $(CPU_TARGET)/$(PRT0).as
133
134
135#
136# $(SYSINIT_UNITS) Units
137#
138si_prc$(PPUEXT) : si_prc.pp si_intf.inc si_impl.inc $(ARCH)/openbsd_ident.inc $(ARCH)/si_prc.inc $(SYSTEMUNIT)$(PPUEXT)
139	$(COMPILER) $<
140
141si_c$(PPUEXT) : si_c.pp si_intf.inc si_impl.inc $(ARCH)/openbsd_ident.inc $(ARCH)/si_c.inc $(SYSTEMUNIT)$(PPUEXT)
142	$(COMPILER) $<
143
144si_dll$(PPUEXT) : si_dll.pp si_intf.inc si_impl.inc $(ARCH)/openbsd_ident.inc $(ARCH)/si_dll.inc $(SYSTEMUNIT)$(PPUEXT)
145	$(COMPILER) $<
146
147si_g$(PPUEXT) : si_g.pp si_intf.inc si_impl.inc $(ARCH)/openbsd_ident.inc $(ARCH)/si_g.inc $(SYSTEMUNIT)$(PPUEXT)
148	$(COMPILER) $<
149
150
151#
152# System Units (System, Objpas, Strings)
153#
154
155$(SYSTEMUNIT)$(PPUEXT) : $(BSDINC)/$(SYSTEMUNIT).pp sysconst.inc systypes.inc syscalls.inc $(SYSDEPS)
156        $(COMPILER) $(FPC_SYSTEM_OPT) -Us -Sg $(BSDINC)/$(SYSTEMUNIT).pp
157
158uuchar$(PPUEXT): $(INC)/uuchar.pp $(SYSTEMUNIT)$(PPUEXT)
159        $(COMPILER) $<
160
161objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT)
162        $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp
163
164strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc\
165                   $(PROCINC)/strings.inc $(PROCINC)/stringss.inc\
166                   $(SYSTEMUNIT)$(PPUEXT)
167	$(COMPILER) $(INC)/strings.pp
168
169fpintres$(PPUEXT): $(INC)/fpintres.pp $(SYSTEMUNIT)$(PPUEXT)
170        $(COMPILER) $<
171
172#
173# System Dependent Units
174#
175
176unixtype$(PPUEXT): $(UNIXINC)/unixtype.pp $(UNIXINC)/ctypes.inc ptypes.inc $(SYSTEMUNIT)$(PPUEXT)
177        $(COMPILER) $<
178
179baseunix$(PPUEXT) : errno.inc ptypes.inc $(UNIXINC)/ctypes.inc \
180  signal.inc $(UNIXINC)/bunxh.inc \
181  $(BSDINC)/bunxsysc.inc $(BSDPROCINC)/syscallh.inc sysnr.inc \
182  $(BSDINC)/ostypes.inc $(BSDINC)/osmacro.inc $(UNIXINC)/gensigset.inc \
183  $(UNIXINC)/genfuncs.inc $(SYSTEMUNIT)$(PPUEXT)
184        $(COMPILER) -Fu../unix -Fu../bsd ../unix/baseunix.pp
185
186
187unix$(PPUEXT) : $(UNIXINC)/unix.pp strings$(PPUEXT) $(INC)/textrec.inc $(INC)/filerec.inc \
188                 unxconst.inc $(UNIXINC)/timezone.inc \
189                 unxfunc.inc baseunix$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
190        $(COMPILER) $<
191
192linux$(PPUEXT) : baseunix$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
193        $(COMPILER) $<
194
195unixcp$(PPUEXT) : $(UNIXINC)/unixcp.pp $(SYSTEMUNIT)$(PPUEXT) objpas$(PPUEXT) baseunix$(PPUEXT)
196        $(COMPILER) $(UNIXINC)/unixcp.pp
197
198unixutil$(PPUEXT) : $(UNIXINC)/unixutil.pp $(SYSTEMUNIT)$(PPUEXT)
199        $(COMPILER) $<
200
201#
202# TP7 Compatible RTL Units
203#
204
205dos$(PPUEXT) : $(UNIXINC)/dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \
206               unix$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
207	$(COMPILER) $(UNIXINC)/dos.pp
208
209#
210# Graph
211#
212
213#
214# Delphi Compatible Units
215#
216
217sysutils$(PPUEXT) : $(UNIXINC)/sysutils.pp $(wildcard $(OBJPASDIR)/sysutils/*.inc) \
218                    objpas$(PPUEXT) unix$(PPUEXT) errors$(PPUEXT) sysconst$(PPUEXT)
219        $(COMPILER) -Fi$(OBJPASDIR)/sysutils $(UNIXINC)/sysutils.pp
220
221classes$(PPUEXT) : $(UNIXINC)/classes.pp $(wildcard $(OBJPASDIR)/classes/*.inc) \
222                   sysutils$(PPUEXT) typinfo$(PPUEXT) fgl$(PPUEXT)
223        $(COMPILER) -Fi$(OBJPASDIR)/classes $(UNIXINC)/classes.pp
224
225fgl$(PPUEXT) : $(OBJPASDIR)/fgl.pp objpas$(PPUEXT) types$(PPUEXT) system$(PPUEXT) sysutils$(PPUEXT)
226        $(COMPILER) $(OBJPASDIR)/fgl.pp
227
228rtlconsts$(PPUEXT) : $(OBJPASDIR)/rtlconsts.pp
229	$(COMPILER) $(OBJPASDIR)/rtlconsts.pp
230
231typinfo$(PPUEXT): $(OBJPASDIR)/typinfo.pp objpas$(PPUEXT)
232        $(COMPILER) -Sg $(OBJPASDIR)/typinfo.pp
233
234math$(PPUEXT): $(OBJPASDIR)/math.pp objpas$(PPUEXT) sysutils$(PPUEXT)
235        $(COMPILER) $(OBJPASDIR)/math.pp
236
237types$(PPUEXT) : $(OBJPASDIR)/types.pp objpas$(PPUEXT) math$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
238        $(COMPILER) $(OBJPASDIR)/types.pp
239
240ctypes$(PPUEXT) :  $(INC)/ctypes.pp unixtype$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
241        $(COMPILER) $<
242
243dl$(PPUEXT) : $(UNIXINC)/dl.pp ctypes$(PPUEXT) objpas$(PPUEXT)
244        $(COMPILER) $<
245
246dynlibs$(PPUEXT) : $(INC)/dynlibs.pas $(UNIXINC)/dynlibs.inc dl$(PPUEXT) objpas$(PPUEXT)
247        $(COMPILER) $<
248
249cwstring$(PPUEXT) : $(UNIXINC)/cwstring.pp $(SYSTEMUNIT)$(PPUEXT) sysutils$(PPUEXT) baseunix$(PPUEXT) unix$(PPUEXT) unixtype$(PPUEXT) ctypes$(PPUEXT) dynlibs$(PPUEXT)
250        $(COMPILER) $<
251
252# let it depend on buildcollations to prevent simultaneous building of unicodedata
253character$(PPUEXT): sysutils$(PPUEXT) $(OBJPASDIR)/character.pas objpas$(PPUEXT) rtlconsts$(PPUEXT)
254	$(COMPILER) $(OBJPASDIR)/character.pas
255
256#
257# Mac Pascal Model
258#
259
260macpas$(PPUEXT) : $(INC)/macpas.pp objpas$(PPUEXT) math$(PPUEXT)
261        $(COMPILER) $(INC)/macpas.pp
262
263#
264# ISO-Pascal Model
265#
266
267iso7185$(PPUEXT) : $(INC)/iso7185.pp $(SYSTEMUNIT)$(PPUEXT)
268        $(COMPILER) $(INC)/iso7185.pp
269
270#
271# Extended Pascal Model
272#
273
274extpas$(PPUEXT) : $(INC)/extpas.pp dos$(PPUEXT)
275        $(COMPILER) $(INC)/extpas.pp
276
277#
278# Other system-independent RTL Units
279#
280
281x86$(PPUEXT) : $(UNIXINC)/x86.pp $(SYSTEMUNIT)$(PPUEXT)
282        $(COMPILER) $<
283
284ports$(PPUEXT) : $(UNIXINC)/ports.pp $(SYSTEMUNIT)$(PPUEXT)
285        $(COMPILER) $<
286
287ifneq ($(findstring $(ARCH),x86_64 i386),)
288cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMUNIT)$(PPUEXT) sysutils$(PPUEXT)
289        $(COMPILER) $<
290else
291cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMUNIT)$(PPUEXT)
292        $(COMPILER) $<
293endif
294
295mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
296        $(COMPILER) $<
297
298getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
299        $(COMPILER) $<
300
301heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
302        $(COMPILER) -Sg $(INC)/heaptrc.pp
303
304lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT) sysutils$(PPUEXT)
305        $(COMPILER) $<
306
307lnfodwrf$(PPUEXT) : $(INC)/lnfodwrf.pp $(SYSTEMUNIT)$(PPUEXT) sysutils$(PPUEXT) lineinfo$(PPUEXT)
308        $(COMPILER) $<
309
310charset$(PPUEXT) : $(INC)/charset.pp $(SYSTEMUNIT)$(PPUEXT)
311        $(COMPILER) $<
312
313cpall$(PPUEXT): $(RTL)/charmaps/cpall.pas system$(PPUEXT) charset$(PPUEXT)
314        $(COMPILER) -Fu$(INC) -Fi$(RTL)/charmaps $(RTL)/charmaps/cpall.pas
315
316fpwidestring$(PPUEXT): $(OBJPASDIR)/fpwidestring.pp character$(PPUEXT) unixcp$(PPUEXT)
317        $(COMPILER) $<
318
319bsd$(PPUEXT) : $(BSDINC)/bsd.pas unix$(PPUEXT) syscall$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
320        $(COMPILER) $<
321
322initc$(PPUEXT) : $(UNIXINC)/initc.pp ctypes$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
323        $(COMPILER) $<
324
325#
326# Other system-dependent RTL Units
327#
328
329
330cmem$(PPUEXT) : $(INC)/cmem.pp $(SYSTEMUNIT)$(PPUEXT)
331        $(COMPILER) $<
332
333errors$(PPUEXT) : $(UNIXINC)/errors.pp strings$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
334        $(COMPILER) $<
335
336callspec$(PPUEXT) : $(INC)/callspec.pp $(SYSTEMUNIT)$(PPUEXT)
337        $(COMPILER) $<
338
339syscall$(PPUEXT) : $(UNIXINC)/syscall.pp baseunix$(PPUEXT)
340        $(COMPILER) $<
341
342# sysctl needs to also compile baseunix and syscall units, which
343# are respectively located in ../
344sysctl$(PPUEXT) : $(BSDINC)/sysctl.pp $(SYSTEMUNIT)$(PPUEXT) syscall$(PPUEXT) unixtype$(PPUEXT)
345	$(COMPILER) -Fu$(UNIXINC) -Fu$(BSDINC) $(BSDINC)/sysctl.pp
346
347sysconst$(PPUEXT) : $(OBJPASDIR)/sysconst.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
348        $(COMPILER) $(OBJPASDIR)/sysconst.pp
349
350cthreads$(PPUEXT) : $(UNIXINC)/cthreads.pp
351        $(COMPILER) $<
352
353rtlconst$(PPUEXT) : $(OBJPASDIR)/rtlconst.pp
354        $(COMPILER) $(OBJPASDIR)/rtlconst.pp
355
356