Initial revision
[AROS-Contrib.git] / development / compilers / freepascal / rtl / freebsd / Makefile
blob72dccafeec8a79ae02b9799b7a1ce79be9693d17
2 # Makefile generated by fpcmake v1.00 [2000/12/19]
5 defaultrule: all
7 #####################################################################
8 # Autodetect OS (Linux or Dos or Windows NT or OS/2)
9 # define inUnix when running under Unix (Linux,FreeBSD)
10 # define inWinNT when running under WinNT
11 # define inOS2 when running under OS/2
12 #####################################################################
14 # We need only / in the path
15 override PATH:=$(subst \,/,$(PATH))
17 # Search for PWD and determine also if we are under linux
18 PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(subst ;, ,$(PATH)))))
19 ifeq ($(PWD),)
20 PWD:=$(strip $(wildcard $(addsuffix /pwd,$(subst :, ,$(PATH)))))
21 ifeq ($(PWD),)
22 nopwd:
23 @echo You need the GNU utils package to use this Makefile!
24 @echo Get ftp://ftp.freepascal.org/pub/fpc/dist/go32v2/utilgo32.zip
25 @exit
26 else
27 inUnix=1
28 PWD:=$(firstword $(PWD))
29 endif
30 else
31 PWD:=$(firstword $(PWD))
32 endif
34 # Detect NT - NT sets OS to Windows_NT
35 # Detect OS/2 - OS/2 has OS2_SHELL defined
36 ifndef inUnix
37 ifeq ($(OS),Windows_NT)
38 inWinNT=1
39 else
40 ifdef OS2_SHELL
41 inOS2=1
42 endif
43 endif
44 endif
46 # The extension of executables
47 ifdef inUnix
48 SRCEXEEXT=
49 else
50 SRCEXEEXT=.exe
51 endif
53 # The path which is searched separated by spaces
54 ifdef inUnix
55 SEARCHPATH=$(subst :, ,$(PATH))
56 else
57 SEARCHPATH=$(subst ;, ,$(PATH))
58 endif
60 # Base dir
61 ifdef PWD
62 BASEDIR:=$(shell $(PWD))
63 else
64 BASEDIR=.
65 endif
67 #####################################################################
68 # Default target
69 #####################################################################
71 override OS_TARGET:=freebsd
72 override CPU_TARGET:=i386
74 #####################################################################
75 # FPC version/target Detection
76 #####################################################################
78 # What compiler to use ?
79 ifndef FPC
80 # Compatibility with old makefiles
81 ifdef PP
82 FPC=$(PP)
83 else
84 FPC=ppc386
85 endif
86 endif
87 override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
88 override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
90 # Target OS
91 ifndef OS_TARGET
92 OS_TARGET:=$(shell $(FPC) -iTO)
93 endif
95 # Source OS
96 ifndef OS_SOURCE
97 OS_SOURCE:=$(shell $(FPC) -iSO)
98 endif
100 # Target CPU
101 ifndef CPU_TARGET
102 CPU_TARGET:=$(shell $(FPC) -iTP)
103 endif
105 # Source CPU
106 ifndef CPU_SOURCE
107 CPU_SOURCE:=$(shell $(FPC) -iSP)
108 endif
110 # FPC version
111 ifndef FPC_VERSION
112 FPC_VERSION:=$(shell $(FPC) -iV)
113 endif
115 export FPC OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FPC_VERSION
117 #####################################################################
118 # Pre Settings
119 #####################################################################
121 RTL=..
122 INC=$(RTL)/inc
123 PROCINC=$(RTL)/$(CPU_TARGET)
124 UNIXINC=$(RTL)/unix
125 UNITPREFIX=rtl
127 # Paths
128 OBJPASDIR=$(RTL)/objpas
129 GRAPHDIR=$(INC)/graph
131 # Define Go32v2 Units
132 SYSTEMUNIT=sysbsd
134 # Use new graph unit ?
135 # NEWGRAPH=YES
136 # Use LibGGI ?
137 # Use
139 ifndef USELIBGGI
140 USELIBGGI=NO
141 endif
142 #####################################################################
143 # FPCDIR Setting
144 #####################################################################
146 # Test FPCDIR to look if the RTL dir exists
147 ifdef FPCDIR
148 override FPCDIR:=$(subst \,/,$(FPCDIR))
149 ifeq ($(wildcard $(FPCDIR)/rtl),)
150 ifeq ($(wildcard $(FPCDIR)/units),)
151 override FPCDIR=wrong
152 endif
153 endif
154 else
155 override FPCDIR=wrong
156 endif
158 # Default FPCDIR
159 ifeq ($(FPCDIR),wrong)
160 override FPCDIR=.
161 ifeq ($(wildcard $(FPCDIR)/rtl),)
162 ifeq ($(wildcard $(FPCDIR)/units),)
163 override FPCDIR=wrong
164 endif
165 endif
166 endif
168 # Detect FPCDIR
169 ifeq ($(FPCDIR),wrong)
170 ifdef inUnix
171 override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
172 ifeq ($(wildcard $(FPCDIR)/units),)
173 override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
174 endif
175 else
176 override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
177 override FPCDIR:=$(FPCDIR)/..
178 ifeq ($(wildcard $(FPCDIR)/rtl),)
179 ifeq ($(wildcard $(FPCDIR)/units),)
180 override FPCDIR:=$(FPCDIR)/..
181 ifeq ($(wildcard $(FPCDIR)/rtl),)
182 ifeq ($(wildcard $(FPCDIR)/units),)
183 override FPCDIR=c:/pp
184 endif
185 endif
186 endif
187 endif
188 endif
189 endif
191 #####################################################################
192 # User Settings
193 #####################################################################
196 # Targets
198 override LOADEROBJECTS+=prt0 cprt0
199 override UNITOBJECTS+=$(SYSTEMUNIT) objpas strings linux initc dos crt objects printer sysutils typinfo math cpu mmx getopts heaptrc lineinfo errors sockets gpm ipc
200 override RSTOBJECTS+=math
202 # Clean
205 # Install
207 UNITSUBDIR=rtl
208 ZIPTARGET=install
210 # Defaults
213 # Directories
215 override NEEDINCDIR=$(INC) $(PROCINC) $(UNIXINC)
216 ifndef TARGETDIR
217 TARGETDIR=.
218 endif
220 # Packages
223 # Libraries
225 LIBNAME=libfprtl.so
226 LIBVERSION=1.0
227 SHAREDLIBUNITOBJECTS=$(SYSTEMUNIT) objpas strings linux dos crt objects printer sysutils typinfo math cpu mmx getopts heaptrc errors sockets ipc
229 # Info
231 INFOTARGET=fpc_infocfg fpc_infoobjects fpc_infoinstall
233 #####################################################################
234 # Post Settings
235 #####################################################################
237 SYSTEMPPU=$(addsuffix $(PPUEXT),$(SYSTEMUNIT))
239 # Get the system independent include file names.
240 # This will set the following variables :
241 # SYSINCNAMES
242 include $(INC)/makefile.inc
243 SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES))
245 # Get the processor dependent include file names.
246 # This will set the following variables :
247 # CPUINCNAMES
248 include $(PROCINC)/makefile.cpu
249 SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES))
251 # Put system unit dependencies together.
252 SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS)
254 #####################################################################
255 # Shell tools
256 #####################################################################
258 # echo
259 ifndef ECHO
260 ECHO:=$(strip $(wildcard $(addsuffix /gecho$(EXEEXT),$(SEARCHPATH))))
261 ifeq ($(ECHO),)
262 ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
263 ifeq ($(ECHO),)
264 ECHO:=echo
265 ECHOE:=echo
266 else
267 ECHO:=$(firstword $(ECHO))
268 ECHOE=$(ECHO) -E
269 endif
270 else
271 ECHO:=$(firstword $(ECHO))
272 ECHOE=$(ECHO) -E
273 endif
274 endif
276 # To copy pograms
277 ifndef COPY
278 COPY:=cp -fp
279 endif
281 # Copy a whole tree
282 ifndef COPYTREE
283 COPYTREE:=cp -rfp
284 endif
286 # To move pograms
287 ifndef MOVE
288 MOVE:=mv -f
289 endif
291 # Check delete program
292 ifndef DEL
293 DEL:=rm -f
294 endif
296 # Check deltree program
297 ifndef DELTREE
298 DELTREE:=rm -rf
299 endif
301 # To install files
302 ifndef INSTALL
303 ifdef inUnix
304 INSTALL:=install -c -m 644
305 else
306 INSTALL:=$(COPY)
307 endif
308 endif
310 # To install programs
311 ifndef INSTALLEXE
312 ifdef inUnix
313 INSTALLEXE:=install -c -m 755
314 else
315 INSTALLEXE:=$(COPY)
316 endif
317 endif
319 # To make a directory.
320 ifndef MKDIR
321 ifdef inUnix
322 MKDIR:=install -m 755 -d
323 else
324 MKDIR:=ginstall -m 755 -d
325 endif
326 endif
328 export ECHO ECHOE COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
330 #####################################################################
331 # Default Tools
332 #####################################################################
334 # assembler, redefine it if cross compiling
335 ifndef AS
336 AS=as
337 endif
339 # linker, but probably not used
340 ifndef LD
341 LD=ld
342 endif
344 # ppas.bat / ppas.sh
345 ifdef inUnix
346 PPAS=ppas.sh
347 else
348 ifdef inOS2
349 PPAS=ppas.cmd
350 else
351 PPAS=ppas.bat
352 endif
353 endif
355 # ldconfig to rebuild .so cache
356 ifdef inUnix
357 LDCONFIG=ldconfig
358 else
359 LDCONFIG=
360 endif
362 # ppumove
363 ifndef PPUMOVE
364 PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
365 ifeq ($(PPUMOVE),)
366 PPUMOVE=
367 else
368 PPUMOVE:=$(firstword $(PPUMOVE))
369 endif
370 endif
371 export PPUMOVE
373 # ppufiles
374 ifndef PPUFILES
375 PPUFILES:=$(strip $(wildcard $(addsuffix /ppufiles$(SRCEXEEXT),$(SEARCHPATH))))
376 ifeq ($(PPUFILES),)
377 PPUFILES=
378 else
379 PPUFILES:=$(firstword $(PPUFILES))
380 endif
381 endif
382 export PPUFILES
384 # Look if UPX is found for go32v2 and win32. We can't use $UPX becuase
385 # upx uses that one itself (PFV)
386 ifndef UPXPROG
387 ifeq ($(OS_TARGET),go32v2)
388 UPXPROG:=1
389 endif
390 ifeq ($(OS_TARGET),win32)
391 UPXPROG:=1
392 endif
393 ifdef UPXPROG
394 UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
395 ifeq ($(UPXPROG),)
396 UPXPROG=
397 else
398 UPXPROG:=$(firstword $(UPXPROG))
399 endif
400 else
401 UPXPROG=
402 endif
403 endif
404 export UPXPROG
406 # ZipProg, you can't use Zip as the var name (PFV)
407 ifndef ZIPPROG
408 ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
409 ifeq ($(ZIPPROG),)
410 ZIPPROG=
411 else
412 ZIPPROG:=$(firstword $(ZIPPROG))
413 endif
414 endif
415 export ZIPPROG
417 ZIPOPT=-9
418 ZIPEXT=.zip
420 # Tar
421 ifndef TARPROG
422 TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
423 ifeq ($(TARPROG),)
424 TARPROG=
425 else
426 TARPROG:=$(firstword $(TARPROG))
427 endif
428 endif
429 export TARPROG
431 ifeq ($(USETAR),bz2)
432 TAROPT=vI
433 TAREXT=.tar.bz2
434 else
435 TAROPT=vz
436 TAREXT=.tar.gz
437 endif
439 #####################################################################
440 # Default extensions
441 #####################################################################
443 # Default needed extensions (Go32v2,Linux)
444 LOADEREXT=.as
445 EXEEXT=.exe
446 PPLEXT=.ppl
447 PPUEXT=.ppu
448 OEXT=.o
449 ASMEXT=.s
450 SMARTEXT=.sl
451 STATICLIBEXT=.a
452 SHAREDLIBEXT=.so
453 RSTEXT=.rst
454 FPCMADE=fpcmade
456 # Go32v1
457 ifeq ($(OS_TARGET),go32v1)
458 PPUEXT=.pp1
459 OEXT=.o1
460 ASMEXT=.s1
461 SMARTEXT=.sl1
462 STATICLIBEXT=.a1
463 SHAREDLIBEXT=.so1
464 FPCMADE=fpcmade.v1
465 endif
467 # Go32v2
468 ifeq ($(OS_TARGET),go32v2)
469 FPCMADE=fpcmade.dos
470 endif
472 # Linux
473 ifeq ($(OS_TARGET),linux)
474 EXEEXT=
475 HASSHAREDLIB=1
476 FPCMADE=fpcmade.lnx
477 endif
479 # Linux
480 ifeq ($(OS_TARGET),freebsd)
481 EXEEXT=
482 HASSHAREDLIB=1
483 FPCMADE=fpcmade.freebsd
484 endif
486 # Win32
487 ifeq ($(OS_TARGET),win32)
488 PPUEXT=.ppw
489 OEXT=.ow
490 ASMEXT=.sw
491 SMARTEXT=.slw
492 STATICLIBEXT=.aw
493 SHAREDLIBEXT=.dll
494 FPCMADE=fpcmade.w32
495 endif
497 # OS/2
498 ifeq ($(OS_TARGET),os2)
499 PPUEXT=.ppo
500 ASMEXT=.so2
501 OEXT=.oo2
502 SMARTEXT=.so
503 STATICLIBEXT=.ao2
504 SHAREDLIBEXT=.dll
505 FPCMADE=fpcmade.os2
506 endif
508 # library prefix
509 LIBPREFIX=lib
510 ifeq ($(OS_TARGET),go32v2)
511 LIBPREFIX=
512 endif
513 ifeq ($(OS_TARGET),go32v1)
514 LIBPREFIX=
515 endif
517 # determine which .pas extension is used
518 ifndef PASEXT
519 ifdef EXEOBJECTS
520 override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(EXEOBJECTS)))))
521 else
522 override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(UNITOBJECTS)))))
523 endif
524 ifeq ($(TESTPAS),)
525 PASEXT=.pp
526 else
527 PASEXT=.pas
528 endif
529 endif
533 #####################################################################
534 # Default Directories
535 #####################################################################
537 # Linux and freebsd use unix dirs with /usr/bin, /usr/lib
538 # When zipping use the target as default, when normal install then
539 # use the source os as default
540 ifdef ZIPNAME
541 # Zipinstall
542 ifeq ($(OS_TARGET),linux)
543 UNIXINSTALLDIR=1
544 endif
545 ifeq ($(OS_TARGET),freebsd)
546 UNIXINSTALLDIR=1
547 endif
548 else
549 # Normal install
550 ifeq ($(OS_SOURCE),linux)
551 UNIXINSTALLDIR=1
552 endif
553 ifeq ($(OS_SOURCE),freebsd)
554 UNIXINSTALLDIR=1
555 endif
556 endif
558 # set the prefix directory where to install everything
559 ifndef PREFIXINSTALLDIR
560 ifdef UNIXINSTALLDIR
561 PREFIXINSTALLDIR=/usr
562 else
563 PREFIXINSTALLDIR=/pp
564 endif
565 endif
566 export PREFIXINSTALLDIR
568 # Where to place the resulting zip files
569 ifndef DESTZIPDIR
570 DESTZIPDIR:=$(BASEDIR)
571 endif
572 export DESTZIPDIR
574 #####################################################################
575 # Install Directories
576 #####################################################################
578 # set the base directory where to install everything
579 ifndef BASEINSTALLDIR
580 ifdef UNIXINSTALLDIR
581 BASEINSTALLDIR=$(PREFIXINSTALLDIR)/lib/fpc/$(FPC_VERSION)
582 else
583 BASEINSTALLDIR=$(PREFIXINSTALLDIR)
584 endif
585 endif
587 # set the directory where to install the binaries
588 ifndef BININSTALLDIR
589 ifdef UNIXINSTALLDIR
590 BININSTALLDIR=$(PREFIXINSTALLDIR)/bin
591 else
592 BININSTALLDIR=$(BASEINSTALLDIR)/bin/$(OS_TARGET)
593 endif
594 endif
596 # set the directory where to install the units.
597 ifndef UNITINSTALLDIR
598 UNITINSTALLDIR=$(BASEINSTALLDIR)/units/$(OS_TARGET)
599 ifdef UNITSUBDIR
600 UNITINSTALLDIR:=$(UNITINSTALLDIR)/$(UNITSUBDIR)
601 endif
602 endif
604 # Where to install shared libraries
605 ifndef LIBINSTALLDIR
606 ifdef UNIXINSTALLDIR
607 LIBINSTALLDIR=$(PREFIXINSTALLDIR)/lib
608 else
609 LIBINSTALLDIR=$(UNITINSTALLDIR)
610 endif
611 endif
613 # Where the source files will be stored
614 ifndef SOURCEINSTALLDIR
615 ifdef UNIXINSTALLDIR
616 SOURCEINSTALLDIR=$(PREFIXINSTALLDIR)/src/fpc-$(FPC_VERSION)
617 else
618 SOURCEINSTALLDIR=$(BASEINSTALLDIR)/source
619 endif
620 ifdef SOURCESUBDIR
621 SOURCEINSTALLDIR:=$(SOURCEINSTALLDIR)/$(SOURCESUBDIR)
622 endif
623 endif
625 # Where the doc files will be stored
626 ifndef DOCINSTALLDIR
627 ifdef UNIXINSTALLDIR
628 DOCINSTALLDIR=$(PREFIXINSTALLDIR)/doc/fpc-$(FPC_VERSION)
629 else
630 DOCINSTALLDIR=$(BASEINSTALLDIR)/doc
631 endif
632 endif
634 # Where to install the examples, under linux we use the doc dir
635 # because the copytree command will create a subdir itself
636 ifndef EXAMPLEINSTALLDIR
637 ifdef UNIXINSTALLDIR
638 EXAMPLEINSTALLDIR=$(DOCINSTALLDIR)/examples
639 else
640 EXAMPLEINSTALLDIR=$(BASEINSTALLDIR)/examples
641 endif
642 ifdef EXAMPLESUBDIR
643 EXAMPLEINSTALLDIR:=$(EXAMPLEINSTALLDIR)/$(EXAMPLESUBDIR)
644 endif
645 endif
647 # Where the some extra (data)files will be stored
648 ifndef DATAINSTALLDIR
649 DATAINSTALLDIR=$(BASEINSTALLDIR)
650 endif
652 #####################################################################
653 # Redirection
654 #####################################################################
656 ifndef REDIRFILE
657 REDIRFILE=log
658 endif
660 ifdef REDIR
661 ifndef inUnix
662 override FPC=redir -eo $(FPC)
663 endif
664 # set the verbosity to max
665 override FPCOPT+=-va
666 override REDIR:= >> $(REDIRFILE)
667 endif
670 #####################################################################
671 # Compiler Command Line
672 #####################################################################
674 # Load commandline OPTDEF and add FPC_CPU define
675 override FPCOPTDEF:=-d$(CPU_TARGET)
677 # Load commandline OPT and add target and unit dir to be sure
678 ifneq ($(OS_TARGET),$(OS_SOURCE))
679 override FPCOPT+=-T$(OS_TARGET)
680 endif
682 # User dirs should be first, so they are looked at first
683 ifdef UNITDIR
684 override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
685 endif
686 ifdef LIBDIR
687 override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
688 endif
689 ifdef OBJDIR
690 override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
691 endif
692 ifdef INCDIR
693 override FPCOPT+=$(addprefix -Fi,$(INCDIR))
694 endif
696 # Smartlinking
697 ifdef LINKSMART
698 override FPCOPT+=-XX
699 endif
701 # Smartlinking creation
702 ifdef CREATESMART
703 override FPCOPT+=-CX
704 endif
706 # Debug
707 ifdef DEBUG
708 override FPCOPT+=-gl -dDEBUG
709 endif
711 # Release mode (strip, optimize and don't load ppc386.cfg)
712 # 0.99.12b has a bug in the optimizer so don't use it by default
713 ifdef RELEASE
714 ifeq ($(FPC_VERSION),0.99.12)
715 override FPCOPT+=-Xs -OGp3 -n
716 else
717 override FPCOPT+=-Xs -OG2p3 -n
718 endif
719 endif
721 # Strip
722 ifdef STRIP
723 override FPCOPT+=-Xs
724 endif
726 # Optimizer
727 ifdef OPTIMIZE
728 override FPCOPT+=-OG2p3
729 endif
731 # Verbose settings (warning,note,info)
732 ifdef VERBOSE
733 override FPCOPT+=-vwni
734 endif
736 ifdef UNITSDIR
737 override FPCOPT+=-Fu$(UNITSDIR)
738 endif
740 ifdef NEEDINCDIR
741 override FPCOPT+=$(addprefix -Fi,$(NEEDINCDIR))
742 endif
745 # Target dirs and the prefix to use for clean/install
746 ifdef TARGETDIR
747 override FPCOPT+=-FE$(TARGETDIR)
748 ifeq ($(TARGETDIR),.)
749 override TARGETDIRPREFIX=
750 else
751 override TARGETDIRPREFIX=$(TARGETDIR)/
752 endif
753 endif
754 ifdef UNITTARGETDIR
755 override FPCOPT+=-FU$(UNITTARGETDIR)
756 ifeq ($(UNITTARGETDIR),.)
757 override UNITTARGETDIRPREFIX=
758 else
759 override UNITTARGETDIRPREFIX=$(TARGETDIR)/
760 endif
761 else
762 ifdef TARGETDIR
763 override UNITTARGETDIR=$(TARGETDIR)
764 override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
765 endif
766 endif
768 # Add commandline options last so they can override
769 ifdef OPT
770 override FPCOPT+=$(OPT)
771 endif
773 # Add defines from FPCOPTDEF to FPCOPT
774 ifdef FPCOPTDEF
775 override FPCOPT+=$(FPCOPTDEF)
776 endif
778 # Error file ?
779 ifdef ERRORFILE
780 override FPCOPT+=-Fr$(ERRORFILE)
781 endif
783 # Was a config file specified ?
784 ifdef CFGFILE
785 override FPCOPT+=@$(CFGFILE)
786 endif
788 # For win32 the options are passed using the environment FPCEXTCMD
789 ifeq ($(OS_SOURCE),win32)
790 override FPCEXTCMD:=$(FPCOPT)
791 override FPCOPT:=!FPCEXTCMD
792 export FPCEXTCMD
793 endif
795 # Compiler commandline
796 override COMPILER:=$(FPC) $(FPCOPT)
798 # also call ppas if with command option -s
799 # but only if the OS_SOURCE and OS_TARGE are equal
800 ifeq (,$(findstring -s ,$(COMPILER)))
801 EXECPPAS=
802 else
803 ifeq ($(OS_SOURCE),$(OS_TARGET))
804 EXECPPAS:=@$(PPAS)
805 endif
806 endif
808 #####################################################################
809 # Standard rules
810 #####################################################################
812 all: fpc_all
814 debug: fpc_debug
816 smart: fpc_smart
818 shared: fpc_shared
820 showinstall: fpc_showinstall
822 install: fpc_install
824 sourceinstall: fpc_sourceinstall
826 exampleinstall: fpc_exampleinstall
828 zipinstall: fpc_zipinstall
830 zipsourceinstall: fpc_zipsourceinstall
832 zipexampleinstall: fpc_zipexampleinstall
834 clean: fpc_clean
836 distclean: fpc_distclean
838 cleanall: fpc_cleanall
840 info: fpc_info
842 .PHONY: all debug smart shared showinstall install sourceinstall exampleinstall zipinstall zipsourceinstall zipexampleinstall clean distclean cleanall info
844 #####################################################################
845 # Loaders
846 #####################################################################
848 .PHONY: fpc_loaders
850 %$(OEXT): %$(LOADEREXT)
851 $(AS) -o $*$(OEXT) $<
853 override ALLTARGET+=fpc_loaders
854 override CLEANTARGET+=fpc_loaders_clean
855 override SHOWINSTALLTARGET+=fpc_loaders_showinstall
856 override INSTALLTARGET+=fpc_loaders_install
858 override LOADEROFILES:=$(addsuffix $(OEXT),$(LOADEROBJECTS))
860 fpc_loaders: $(LOADEROFILES)
862 fpc_loaders_clean:
863 -$(DEL) $(LOADEROFILES)
865 fpc_loaders_showinstall:
866 @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(LOADEROFILES))
868 fpc_loaders_install:
869 $(MKDIR) $(UNITINSTALLDIR)
870 $(INSTALL) $(LOADEROFILES) $(UNITINSTALLDIR)
872 #####################################################################
873 # Units
874 #####################################################################
876 .PHONY: fpc_units
878 override ALLTARGET+=fpc_units
880 override UNITPPUFILES=$(addsuffix $(PPUEXT),$(UNITOBJECTS))
881 override INSTALLPPUFILES+=$(UNITPPUFILES)
882 override CLEANPPUFILES+=$(UNITPPUFILES)
884 fpc_units: $(UNITPPUFILES)
886 #####################################################################
887 # Resource strings
888 #####################################################################
890 ifdef RSTOBJECTS
891 override RSTFILES=$(addsuffix $(RSTEXT),$(RSTOBJECTS))
893 override CLEANRSTFILES+=$(RSTFILES)
894 endif
896 #####################################################################
897 # General compile rules
898 #####################################################################
900 .PHONY: fpc_packages fpc_all fpc_debug
902 $(FPCMADE): $(ALLTARGET)
903 @$(ECHO) Compiled > $(FPCMADE)
905 fpc_packages: $(COMPILEPACKAGES)
907 fpc_all: fpc_packages $(FPCMADE)
909 fpc_debug:
910 $(MAKE) all DEBUG=1
912 # Search paths for .ppu if targetdir is set
913 ifdef UNITTARGETDIR
914 vpath %$(PPUEXT) $(UNITTARGETDIR)
915 endif
917 # General compile rules, available for both possible PASEXT
919 .SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp
921 %$(PPUEXT): %.pp
922 $(COMPILER) $< $(REDIR)
923 $(EXECPPAS)
925 %$(PPUEXT): %.pas
926 $(COMPILER) $< $(REDIR)
927 $(EXECPPAS)
929 %$(EXEEXT): %.pp
930 $(COMPILER) $< $(REDIR)
931 $(EXECPPAS)
933 %$(EXEEXT): %.pas
934 $(COMPILER) $< $(REDIR)
935 $(EXECPPAS)
937 #####################################################################
938 # Library
939 #####################################################################
941 .PHONY: fpc_smart fpc_shared
943 ifdef LIBVERSION
944 LIBFULLNAME=$(LIBNAME).$(LIBVERSION)
945 else
946 LIBFULLNAME=$(LIBNAME)
947 endif
949 # Default sharedlib units are all unit objects
950 ifndef SHAREDLIBUNITOBJECTS
951 SHAREDLIBUNITOBJECTS:=$(UNITOBJECTS)
952 endif
954 fpc_smart:
955 $(MAKE) all LINKSMART=1 CREATESMART=1
957 fpc_shared: all
958 ifdef HASSHAREDLIB
959 ifndef LIBNAME
960 @$(ECHO) "LIBNAME not set"
961 else
962 $(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBFULLNAME)
963 endif
964 else
965 @$(ECHO) "Shared Libraries not supported"
966 endif
968 #####################################################################
969 # Install rules
970 #####################################################################
972 .PHONY: fpc_showinstall fpc_install
974 ifdef EXTRAINSTALLUNITS
975 override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS))
976 endif
978 ifdef INSTALLPPUFILES
979 override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPUFILES))
980 ifdef PPUFILES
981 INSTALLPPULINKFILES:=$(shell $(PPUFILES) -S -O $(INSTALLPPUFILES))
982 else
983 INSTALLPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(LIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))))
984 endif
985 override INSTALLPPULINKFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPULINKFILES))
986 endif
988 ifdef INSTALLEXEFILES
989 override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(INSTALLEXEFILES))
990 endif
992 fpc_showinstall: $(SHOWINSTALLTARGET)
993 ifdef INSTALLEXEFILES
994 @$(ECHO) -e $(addprefix "\n"$(BININSTALLDIR)/,$(INSTALLEXEFILES))
995 endif
996 ifdef INSTALLPPUFILES
997 @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPUFILES))
998 ifneq ($(INSTALLPPULINKFILES),)
999 @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPULINKFILES))
1000 endif
1001 ifneq ($(wildcard $(LIBFULLNAME)),)
1002 @$(ECHO) $(LIBINSTALLDIR)/$(LIBFULLNAME)
1003 ifdef HASSHAREDLIB
1004 @$(ECHO) $(LIBINSTALLDIR)/$(LIBNAME)
1005 endif
1006 endif
1007 endif
1008 ifdef EXTRAINSTALLFILES
1009 @$(ECHO) -e $(addprefix "\n"$(DATAINSTALLDIR)/,$(EXTRAINSTALLFILES))
1010 endif
1012 fpc_install: $(INSTALLTARGET)
1013 # Create UnitInstallFiles
1014 ifdef INSTALLEXEFILES
1015 $(MKDIR) $(BININSTALLDIR)
1016 # Compress the exes if upx is defined
1017 ifdef UPXPROG
1018 -$(UPXPROG) $(INSTALLEXEFILES)
1019 endif
1020 $(INSTALLEXE) $(INSTALLEXEFILES) $(BININSTALLDIR)
1021 endif
1022 ifdef INSTALLPPUFILES
1023 $(MKDIR) $(UNITINSTALLDIR)
1024 $(INSTALL) $(INSTALLPPUFILES) $(UNITINSTALLDIR)
1025 ifneq ($(INSTALLPPULINKFILES),)
1026 $(INSTALL) $(INSTALLPPULINKFILES) $(UNITINSTALLDIR)
1027 endif
1028 ifneq ($(wildcard $(LIBFULLNAME)),)
1029 $(MKDIR) $(LIBINSTALLDIR)
1030 $(INSTALL) $(LIBFULLNAME) $(LIBINSTALLDIR)
1031 ifdef inUnix
1032 ln -sf $(LIBFULLNAME) $(LIBINSTALLDIR)/$(LIBNAME)
1033 endif
1034 endif
1035 endif
1036 ifdef EXTRAINSTALLFILES
1037 $(MKDIR) $(DATAINSTALLDIR)
1038 $(INSTALL) $(EXTRAINSTALLFILES) $(DATAINSTALLDIR)
1039 endif
1041 #####################################################################
1042 # SourceInstall rules
1043 #####################################################################
1045 .PHONY: fpc_sourceinstall
1047 ifndef SOURCETOPDIR
1048 SOURCETOPDIR=$(BASEDIR)
1049 endif
1051 fpc_sourceinstall: clean
1052 $(MKDIR) $(SOURCEINSTALLDIR)
1053 $(COPYTREE) $(SOURCETOPDIR) $(SOURCEINSTALLDIR)
1055 #####################################################################
1056 # exampleinstall rules
1057 #####################################################################
1059 .PHONY: fpc_exampleinstall
1061 fpc_exampleinstall: $(addsuffix _clean,$(EXAMPLEDIROBJECTS))
1062 ifdef EXAMPLESOURCEFILES
1063 $(MKDIR) $(EXAMPLEINSTALLDIR)
1064 $(COPY) $(EXAMPLESOURCEFILES) $(EXAMPLEINSTALLDIR)
1065 endif
1066 ifdef EXAMPLEDIROBJECTS
1067 ifndef EXAMPLESOURCEFILES
1068 $(MKDIR) $(EXAMPLEINSTALLDIR)
1069 endif
1070 $(COPYTREE) $(addsuffix /*,$(EXAMPLEDIROBJECTS)) $(EXAMPLEINSTALLDIR)
1071 endif
1073 #####################################################################
1074 # Zip
1075 #####################################################################
1077 .PHONY: fpc_zipinstall
1079 # Create suffix to add
1080 ifndef PACKAGESUFFIX
1081 PACKAGESUFFIX=$(OS_TARGET)
1082 ifeq ($(OS_TARGET),go32v2)
1083 PACKAGESUFFIX=go32
1084 endif
1085 ifeq ($(OS_TARGET),win32)
1086 PACKAGESUFFIX=w32
1087 endif
1088 ifeq ($(OS_TARGET),os2)
1089 PACKAGESUFFIX=emx
1090 endif
1091 endif
1093 # Temporary path to pack a file
1094 ifndef PACKDIR
1095 ifndef inUnix
1096 PACKDIR=$(BASEDIR)/pack_tmp
1097 else
1098 PACKDIR=/tmp/fpc-pack
1099 endif
1100 endif
1102 # Maybe create default zipname from packagename
1103 ifndef ZIPNAME
1104 ifdef PACKAGENAME
1105 ZIPNAME=$(PACKAGEPREFIX)$(PACKAGENAME)$(PACKAGESUFFIX)
1106 endif
1107 endif
1109 # Use tar by default under linux
1110 ifndef USEZIP
1111 ifdef inUnix
1112 USETAR=1
1113 endif
1114 endif
1116 fpc_zipinstall:
1117 ifndef ZIPNAME
1118 @$(ECHO) "Please specify ZIPNAME!"
1119 @exit 1
1120 else
1121 $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR)
1122 ifdef USETAR
1123 $(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT)
1124 cd $(PACKDIR) ; $(TARPROG) cf$(TAROPT) $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT) * ; cd $(BASEDIR)
1125 else
1126 $(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT)
1127 cd $(PACKDIR) ; $(ZIPPROG) -Dr $(ZIPOPT) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT) * ; cd $(BASEDIR)
1128 endif
1129 $(DELTREE) $(PACKDIR)
1130 endif
1132 .PHONY: fpc_zipsourceinstall
1134 fpc_zipsourceinstall:
1135 $(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall PACKAGESUFFIX=src
1137 .PHONY: fpc_zipexampleinstall
1139 fpc_zipexampleinstall:
1140 $(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall PACKAGESUFFIX=exm
1142 #####################################################################
1143 # Clean rules
1144 #####################################################################
1146 .PHONY: fpc_clean fpc_cleanall fpc_distclean
1148 ifdef EXEFILES
1149 override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
1150 endif
1152 ifdef EXTRACLEANUNITS
1153 override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRACLEANUNITS))
1154 endif
1156 ifdef CLEANPPUFILES
1157 override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
1158 # Get the .o and .a files created for the units
1159 ifdef PPUFILES
1160 CLEANPPULINKFILES:=$(shell $(PPUFILES) $(CLEANPPUFILES))
1161 else
1162 CLEANPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(LIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))))
1163 endif
1164 override CLEANPPULINKFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES))
1165 endif
1167 fpc_clean: $(CLEANTARGET)
1168 ifdef CLEANEXEFILES
1169 -$(DEL) $(CLEANEXEFILES)
1170 endif
1171 ifdef CLEANPPUFILES
1172 -$(DEL) $(CLEANPPUFILES)
1173 endif
1174 ifneq ($(CLEANPPULINKFILES),)
1175 -$(DEL) $(CLEANPPULINKFILES)
1176 endif
1177 ifdef CLEANRSTFILES
1178 -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
1179 endif
1180 ifdef EXTRACLEANFILES
1181 -$(DEL) $(EXTRACLEANFILES)
1182 endif
1183 ifdef LIBNAME
1184 -$(DEL) $(LIBNAME) $(LIBFULLNAME)
1185 endif
1186 -$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE)
1188 fpc_distclean: fpc_clean
1190 # Also run clean first if targetdir is set. Unittargetdir is always
1191 # set if targetdir or unittargetdir is specified
1192 ifdef UNITTARGETDIR
1193 TARGETDIRCLEAN=fpc_clean
1194 endif
1196 fpc_cleanall: $(CLEANTARGET) $(TARGETDIRCLEAN)
1197 ifdef CLEANEXEFILES
1198 -$(DEL) $(CLEANEXEFILES)
1199 endif
1200 -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
1201 -$(DELTREE) *$(SMARTEXT)
1202 -$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE)
1204 #####################################################################
1205 # Info rules
1206 #####################################################################
1208 .PHONY: fpc_info fpc_cfginfo fpc_objectinfo fpc_toolsinfo fpc_installinfo \
1209 fpc_dirinfo
1211 fpc_info: $(INFOTARGET)
1213 fpc_infocfg:
1214 @$(ECHO)
1215 @$(ECHO) == Configuration info ==
1216 @$(ECHO)
1217 @$(ECHO) FPC....... $(FPC)
1218 @$(ECHO) Version... $(FPC_VERSION)
1219 @$(ECHO) CPU....... $(CPU_TARGET)
1220 @$(ECHO) Source.... $(OS_SOURCE)
1221 @$(ECHO) Target.... $(OS_TARGET)
1222 @$(ECHO)
1224 fpc_infoobjects:
1225 @$(ECHO)
1226 @$(ECHO) == Object info ==
1227 @$(ECHO)
1228 @$(ECHO) LoaderObjects..... $(LOADEROBJECTS)
1229 @$(ECHO) UnitObjects....... $(UNITOBJECTS)
1230 @$(ECHO) ExeObjects........ $(EXEOBJECTS)
1231 @$(ECHO)
1232 @$(ECHO) ExtraCleanUnits... $(EXTRACLEANUNITS)
1233 @$(ECHO) ExtraCleanFiles... $(EXTRACLEANFILES)
1234 @$(ECHO)
1235 @$(ECHO) ExtraInstallUnits. $(EXTRAINSTALLUNITS)
1236 @$(ECHO) ExtraInstallFiles. $(EXTRAINSTALLFILES)
1237 @$(ECHO)
1239 fpc_infoinstall:
1240 @$(ECHO)
1241 @$(ECHO) == Install info ==
1242 @$(ECHO)
1243 ifdef DATE
1244 @$(ECHO) DateStr.............. $(DATESTR)
1245 endif
1246 ifdef PACKAGEPREFIX
1247 @$(ECHO) PackagePrefix........ $(PACKAGEPREFIX)
1248 endif
1249 ifdef PACKAGENAME
1250 @$(ECHO) PackageName.......... $(PACKAGENAME)
1251 endif
1252 @$(ECHO) PackageSuffix........ $(PACKAGESUFFIX)
1253 @$(ECHO)
1254 @$(ECHO) BaseInstallDir....... $(BASEINSTALLDIR)
1255 @$(ECHO) BinInstallDir........ $(BININSTALLDIR)
1256 @$(ECHO) LibInstallDir........ $(LIBINSTALLDIR)
1257 @$(ECHO) UnitInstallDir....... $(UNITINSTALLDIR)
1258 @$(ECHO) SourceInstallDir..... $(SOURCEINSTALLDIR)
1259 @$(ECHO) DocInstallDir........ $(DOCINSTALLDIR)
1260 @$(ECHO) DataInstallDir....... $(DATAINSTALLDIR)
1261 @$(ECHO)
1262 @$(ECHO) DestZipDir........... $(DESTZIPDIR)
1263 @$(ECHO) ZipName.............. $(ZIPNAME)
1264 @$(ECHO)
1266 #####################################################################
1267 # Local Makefile
1268 #####################################################################
1270 ifneq ($(wildcard fpcmake.loc),)
1271 include fpcmake.loc
1272 endif
1274 #####################################################################
1275 # Users rules
1276 #####################################################################
1278 vpath %$(PASEXT) $(INC) $(PROCINC) $(UNIXINC)
1281 # Loaders
1284 prt0$(OEXT) : $(CPU_TARGET)/prt0.as
1285 $(AS) -o prt0$(OEXT) $(CPU_TARGET)/prt0.as
1287 cprt0$(OEXT) : $(CPU_TARGET)/cprt0.as
1288 $(AS) -o cprt0$(OEXT) $(CPU_TARGET)/cprt0.as
1294 # System Units (System, Objpas, Strings)
1297 $(SYSTEMPPU) : sysbsd.pp sysconst.inc systypes.inc syscalls.inc $(SYSDEPS)
1298 $(COMPILER) -Us -Sg sysbsd.pp $(REDIR)
1300 objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMPPU)
1301 $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR)
1303 strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc\
1304 $(PROCINC)/strings.inc $(PROCINC)/stringss.inc\
1305 $(SYSTEMPPU)
1308 # System Dependent Units
1311 linux$(PPUEXT) : $(UNIXINC)/linux.pp strings$(PPUEXT) $(INC)/textrec.inc $(INC)/filerec.inc \
1312 syscalls.inc systypes.inc sysconst.inc $(UNIXINC)/timezone.inc $(SYSTEMPPU) \
1313 $(UNIXINC)/linsysca.inc
1317 # TP7 Compatible RTL Units
1320 dos$(PPUEXT) : $(UNIXINC)/dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \
1321 linux$(PPUEXT) $(SYSTEMPPU)
1323 crt$(PPUEXT) : $(UNIXINC)/crt.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMPPU)
1325 objects$(PPUEXT) : $(INC)/objects.pp $(UNIXINC)/objinc.inc $(SYSTEMPPU)
1327 printer$(PPUEXT) : $(UNIXINC)/printer.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMPPU)
1330 # Graph
1334 # Delphi Compatible Units
1337 sysutils$(PPUEXT) : $(UNIXINC)/sysutils.pp $(wildcard $(OBJPASDIR)/*.inc) \
1338 objpas$(PPUEXT) linux$(PPUEXT) errors$(PPUEXT)
1339 $(COMPILER) -I$(OBJPASDIR) $(UNIXINC)/sysutils.pp $(REDIR)
1341 typinfo$(PPUEXT): $(OBJPASDIR)/typinfo.pp objpas$(PPUEXT)
1342 $(COMPILER) -Sg $(OBJPASDIR)/typinfo.pp $(REDIR)
1344 math$(PPUEXT): $(OBJPASDIR)/math.pp objpas$(PPUEXT) sysutils$(PPUEXT)
1345 $(COMPILER) $(OBJPASDIR)/math.pp $(REDIR)
1347 gettext$(PPUEXT): $(OBJPASDIR)/gettext.pp objpas$(PPUEXT) sysutils$(PPUEXT)
1348 $(COMPILER) $(OBJPASDIR)/gettext.pp $(REDIR)
1351 # Other system-independent RTL Units
1354 cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMPPU)
1356 mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMPPU)
1358 getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMPPU)
1360 heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMPPU)
1361 $(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
1363 lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMPPU)
1366 # Other system-dependent RTL Units
1369 sockets$(PPUEXT) : $(UNIXINC)/sockets.pp $(INC)/textrec.inc $(INC)/filerec.inc \
1370 linux$(PPUEXT) $(SYSTEMPPU)
1372 errors$(PPUEXT) : $(UNIXINC)/errors.pp strings$(PPUEXT) $(SYSTEMPPU)
1374 ipc$(PPUEXT) : $(UNIXINC)/ipc.pp linux$(PPUEXT) $(SYSTEMPPU)