Initial revision
[AROS-Contrib.git] / development / compilers / freepascal / rtl / os2 / Makefile
bloba780a0427b0784afca87a58598dcb3eba1935c92
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:=os2
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)
125 UNITPREFIX=rtl
127 # Paths
128 OBJPASDIR=$(RTL)/objpas
129 GRAPHDIR=$(INC)/graph
131 # Define Go32v2 Units
132 SYSTEMUNIT=sysos2
133 #####################################################################
134 # FPCDIR Setting
135 #####################################################################
137 # Test FPCDIR to look if the RTL dir exists
138 ifdef FPCDIR
139 override FPCDIR:=$(subst \,/,$(FPCDIR))
140 ifeq ($(wildcard $(FPCDIR)/rtl),)
141 ifeq ($(wildcard $(FPCDIR)/units),)
142 override FPCDIR=wrong
143 endif
144 endif
145 else
146 override FPCDIR=wrong
147 endif
149 # Default FPCDIR
150 ifeq ($(FPCDIR),wrong)
151 override FPCDIR=.
152 ifeq ($(wildcard $(FPCDIR)/rtl),)
153 ifeq ($(wildcard $(FPCDIR)/units),)
154 override FPCDIR=wrong
155 endif
156 endif
157 endif
159 # Detect FPCDIR
160 ifeq ($(FPCDIR),wrong)
161 ifdef inUnix
162 override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
163 ifeq ($(wildcard $(FPCDIR)/units),)
164 override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
165 endif
166 else
167 override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
168 override FPCDIR:=$(FPCDIR)/..
169 ifeq ($(wildcard $(FPCDIR)/rtl),)
170 ifeq ($(wildcard $(FPCDIR)/units),)
171 override FPCDIR:=$(FPCDIR)/..
172 ifeq ($(wildcard $(FPCDIR)/rtl),)
173 ifeq ($(wildcard $(FPCDIR)/units),)
174 override FPCDIR=c:/pp
175 endif
176 endif
177 endif
178 endif
179 endif
180 endif
182 #####################################################################
183 # User Settings
184 #####################################################################
187 # Targets
189 override LOADEROBJECTS+=prt0 prt1 code2 code3
190 override UNITOBJECTS+=$(SYSTEMUNIT) objpas strings ports os2def doscalls moncalls kbdcalls moucalls viocalls pmbitmap pmwin pmgpi dive dos crt objects printer sysutils math typinfo ucomplex cpu mmx getopts heaptrc lineinfo
191 override RSTOBJECTS+=math
193 # Clean
196 # Install
198 UNITSUBDIR=rtl
199 ZIPTARGET=install
201 # Defaults
204 # Directories
206 override NEEDINCDIR=$(INC) $(PROCINC)
207 ifndef TARGETDIR
208 TARGETDIR=.
209 endif
211 # Packages
214 # Libraries
217 # Info
219 INFOTARGET=fpc_infocfg fpc_infoobjects fpc_infoinstall
221 #####################################################################
222 # Post Settings
223 #####################################################################
225 SYSTEMPPU=$(addsuffix $(PPUEXT),$(SYSTEMUNIT))
227 # Get the system independent include file names.
228 # This will set the following variables :
229 # SYSINCNAMES
230 include $(INC)/makefile.inc
231 SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES))
233 # Get the processor dependent include file names.
234 # This will set the following variables :
235 # CPUINCNAMES
236 include $(PROCINC)/makefile.cpu
237 SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES))
239 # Put system unit dependencies together.
240 SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS)
242 #####################################################################
243 # Shell tools
244 #####################################################################
246 # echo
247 ifndef ECHO
248 ECHO:=$(strip $(wildcard $(addsuffix /gecho$(EXEEXT),$(SEARCHPATH))))
249 ifeq ($(ECHO),)
250 ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
251 ifeq ($(ECHO),)
252 ECHO:=echo
253 ECHOE:=echo
254 else
255 ECHO:=$(firstword $(ECHO))
256 ECHOE=$(ECHO) -E
257 endif
258 else
259 ECHO:=$(firstword $(ECHO))
260 ECHOE=$(ECHO) -E
261 endif
262 endif
264 # To copy pograms
265 ifndef COPY
266 COPY:=cp -fp
267 endif
269 # Copy a whole tree
270 ifndef COPYTREE
271 COPYTREE:=cp -rfp
272 endif
274 # To move pograms
275 ifndef MOVE
276 MOVE:=mv -f
277 endif
279 # Check delete program
280 ifndef DEL
281 DEL:=rm -f
282 endif
284 # Check deltree program
285 ifndef DELTREE
286 DELTREE:=rm -rf
287 endif
289 # To install files
290 ifndef INSTALL
291 ifdef inUnix
292 INSTALL:=install -c -m 644
293 else
294 INSTALL:=$(COPY)
295 endif
296 endif
298 # To install programs
299 ifndef INSTALLEXE
300 ifdef inUnix
301 INSTALLEXE:=install -c -m 755
302 else
303 INSTALLEXE:=$(COPY)
304 endif
305 endif
307 # To make a directory.
308 ifndef MKDIR
309 ifdef inUnix
310 MKDIR:=install -m 755 -d
311 else
312 MKDIR:=ginstall -m 755 -d
313 endif
314 endif
316 export ECHO ECHOE COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
318 #####################################################################
319 # Default Tools
320 #####################################################################
322 # assembler, redefine it if cross compiling
323 ifndef AS
324 AS=as
325 endif
327 # linker, but probably not used
328 ifndef LD
329 LD=ld
330 endif
332 # ppas.bat / ppas.sh
333 ifdef inUnix
334 PPAS=ppas.sh
335 else
336 ifdef inOS2
337 PPAS=ppas.cmd
338 else
339 PPAS=ppas.bat
340 endif
341 endif
343 # ldconfig to rebuild .so cache
344 ifdef inUnix
345 LDCONFIG=ldconfig
346 else
347 LDCONFIG=
348 endif
350 # ppumove
351 ifndef PPUMOVE
352 PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
353 ifeq ($(PPUMOVE),)
354 PPUMOVE=
355 else
356 PPUMOVE:=$(firstword $(PPUMOVE))
357 endif
358 endif
359 export PPUMOVE
361 # ppufiles
362 ifndef PPUFILES
363 PPUFILES:=$(strip $(wildcard $(addsuffix /ppufiles$(SRCEXEEXT),$(SEARCHPATH))))
364 ifeq ($(PPUFILES),)
365 PPUFILES=
366 else
367 PPUFILES:=$(firstword $(PPUFILES))
368 endif
369 endif
370 export PPUFILES
372 # Look if UPX is found for go32v2 and win32. We can't use $UPX becuase
373 # upx uses that one itself (PFV)
374 ifndef UPXPROG
375 ifeq ($(OS_TARGET),go32v2)
376 UPXPROG:=1
377 endif
378 ifeq ($(OS_TARGET),win32)
379 UPXPROG:=1
380 endif
381 ifdef UPXPROG
382 UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
383 ifeq ($(UPXPROG),)
384 UPXPROG=
385 else
386 UPXPROG:=$(firstword $(UPXPROG))
387 endif
388 else
389 UPXPROG=
390 endif
391 endif
392 export UPXPROG
394 # ZipProg, you can't use Zip as the var name (PFV)
395 ifndef ZIPPROG
396 ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
397 ifeq ($(ZIPPROG),)
398 ZIPPROG=
399 else
400 ZIPPROG:=$(firstword $(ZIPPROG))
401 endif
402 endif
403 export ZIPPROG
405 ZIPOPT=-9
406 ZIPEXT=.zip
408 # Tar
409 ifndef TARPROG
410 TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
411 ifeq ($(TARPROG),)
412 TARPROG=
413 else
414 TARPROG:=$(firstword $(TARPROG))
415 endif
416 endif
417 export TARPROG
419 ifeq ($(USETAR),bz2)
420 TAROPT=vI
421 TAREXT=.tar.bz2
422 else
423 TAROPT=vz
424 TAREXT=.tar.gz
425 endif
427 #####################################################################
428 # Default extensions
429 #####################################################################
431 # Default needed extensions (Go32v2,Linux)
432 LOADEREXT=.as
433 EXEEXT=.exe
434 PPLEXT=.ppl
435 PPUEXT=.ppu
436 OEXT=.o
437 ASMEXT=.s
438 SMARTEXT=.sl
439 STATICLIBEXT=.a
440 SHAREDLIBEXT=.so
441 RSTEXT=.rst
442 FPCMADE=fpcmade
444 # Go32v1
445 ifeq ($(OS_TARGET),go32v1)
446 PPUEXT=.pp1
447 OEXT=.o1
448 ASMEXT=.s1
449 SMARTEXT=.sl1
450 STATICLIBEXT=.a1
451 SHAREDLIBEXT=.so1
452 FPCMADE=fpcmade.v1
453 endif
455 # Go32v2
456 ifeq ($(OS_TARGET),go32v2)
457 FPCMADE=fpcmade.dos
458 endif
460 # Linux
461 ifeq ($(OS_TARGET),linux)
462 EXEEXT=
463 HASSHAREDLIB=1
464 FPCMADE=fpcmade.lnx
465 endif
467 # Linux
468 ifeq ($(OS_TARGET),freebsd)
469 EXEEXT=
470 HASSHAREDLIB=1
471 FPCMADE=fpcmade.freebsd
472 endif
474 # Win32
475 ifeq ($(OS_TARGET),win32)
476 PPUEXT=.ppw
477 OEXT=.ow
478 ASMEXT=.sw
479 SMARTEXT=.slw
480 STATICLIBEXT=.aw
481 SHAREDLIBEXT=.dll
482 FPCMADE=fpcmade.w32
483 endif
485 # OS/2
486 ifeq ($(OS_TARGET),os2)
487 PPUEXT=.ppo
488 ASMEXT=.so2
489 OEXT=.oo2
490 SMARTEXT=.so
491 STATICLIBEXT=.ao2
492 SHAREDLIBEXT=.dll
493 FPCMADE=fpcmade.os2
494 endif
496 # library prefix
497 LIBPREFIX=lib
498 ifeq ($(OS_TARGET),go32v2)
499 LIBPREFIX=
500 endif
501 ifeq ($(OS_TARGET),go32v1)
502 LIBPREFIX=
503 endif
505 # determine which .pas extension is used
506 ifndef PASEXT
507 ifdef EXEOBJECTS
508 override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(EXEOBJECTS)))))
509 else
510 override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(UNITOBJECTS)))))
511 endif
512 ifeq ($(TESTPAS),)
513 PASEXT=.pp
514 else
515 PASEXT=.pas
516 endif
517 endif
521 #####################################################################
522 # Default Directories
523 #####################################################################
525 # Linux and freebsd use unix dirs with /usr/bin, /usr/lib
526 # When zipping use the target as default, when normal install then
527 # use the source os as default
528 ifdef ZIPNAME
529 # Zipinstall
530 ifeq ($(OS_TARGET),linux)
531 UNIXINSTALLDIR=1
532 endif
533 ifeq ($(OS_TARGET),freebsd)
534 UNIXINSTALLDIR=1
535 endif
536 else
537 # Normal install
538 ifeq ($(OS_SOURCE),linux)
539 UNIXINSTALLDIR=1
540 endif
541 ifeq ($(OS_SOURCE),freebsd)
542 UNIXINSTALLDIR=1
543 endif
544 endif
546 # set the prefix directory where to install everything
547 ifndef PREFIXINSTALLDIR
548 ifdef UNIXINSTALLDIR
549 PREFIXINSTALLDIR=/usr
550 else
551 PREFIXINSTALLDIR=/pp
552 endif
553 endif
554 export PREFIXINSTALLDIR
556 # Where to place the resulting zip files
557 ifndef DESTZIPDIR
558 DESTZIPDIR:=$(BASEDIR)
559 endif
560 export DESTZIPDIR
562 #####################################################################
563 # Install Directories
564 #####################################################################
566 # set the base directory where to install everything
567 ifndef BASEINSTALLDIR
568 ifdef UNIXINSTALLDIR
569 BASEINSTALLDIR=$(PREFIXINSTALLDIR)/lib/fpc/$(FPC_VERSION)
570 else
571 BASEINSTALLDIR=$(PREFIXINSTALLDIR)
572 endif
573 endif
575 # set the directory where to install the binaries
576 ifndef BININSTALLDIR
577 ifdef UNIXINSTALLDIR
578 BININSTALLDIR=$(PREFIXINSTALLDIR)/bin
579 else
580 BININSTALLDIR=$(BASEINSTALLDIR)/bin/$(OS_TARGET)
581 endif
582 endif
584 # set the directory where to install the units.
585 ifndef UNITINSTALLDIR
586 UNITINSTALLDIR=$(BASEINSTALLDIR)/units/$(OS_TARGET)
587 ifdef UNITSUBDIR
588 UNITINSTALLDIR:=$(UNITINSTALLDIR)/$(UNITSUBDIR)
589 endif
590 endif
592 # Where to install shared libraries
593 ifndef LIBINSTALLDIR
594 ifdef UNIXINSTALLDIR
595 LIBINSTALLDIR=$(PREFIXINSTALLDIR)/lib
596 else
597 LIBINSTALLDIR=$(UNITINSTALLDIR)
598 endif
599 endif
601 # Where the source files will be stored
602 ifndef SOURCEINSTALLDIR
603 ifdef UNIXINSTALLDIR
604 SOURCEINSTALLDIR=$(PREFIXINSTALLDIR)/src/fpc-$(FPC_VERSION)
605 else
606 SOURCEINSTALLDIR=$(BASEINSTALLDIR)/source
607 endif
608 ifdef SOURCESUBDIR
609 SOURCEINSTALLDIR:=$(SOURCEINSTALLDIR)/$(SOURCESUBDIR)
610 endif
611 endif
613 # Where the doc files will be stored
614 ifndef DOCINSTALLDIR
615 ifdef UNIXINSTALLDIR
616 DOCINSTALLDIR=$(PREFIXINSTALLDIR)/doc/fpc-$(FPC_VERSION)
617 else
618 DOCINSTALLDIR=$(BASEINSTALLDIR)/doc
619 endif
620 endif
622 # Where to install the examples, under linux we use the doc dir
623 # because the copytree command will create a subdir itself
624 ifndef EXAMPLEINSTALLDIR
625 ifdef UNIXINSTALLDIR
626 EXAMPLEINSTALLDIR=$(DOCINSTALLDIR)/examples
627 else
628 EXAMPLEINSTALLDIR=$(BASEINSTALLDIR)/examples
629 endif
630 ifdef EXAMPLESUBDIR
631 EXAMPLEINSTALLDIR:=$(EXAMPLEINSTALLDIR)/$(EXAMPLESUBDIR)
632 endif
633 endif
635 # Where the some extra (data)files will be stored
636 ifndef DATAINSTALLDIR
637 DATAINSTALLDIR=$(BASEINSTALLDIR)
638 endif
640 #####################################################################
641 # Redirection
642 #####################################################################
644 ifndef REDIRFILE
645 REDIRFILE=log
646 endif
648 ifdef REDIR
649 ifndef inUnix
650 override FPC=redir -eo $(FPC)
651 endif
652 # set the verbosity to max
653 override FPCOPT+=-va
654 override REDIR:= >> $(REDIRFILE)
655 endif
658 #####################################################################
659 # Compiler Command Line
660 #####################################################################
662 # Load commandline OPTDEF and add FPC_CPU define
663 override FPCOPTDEF:=-d$(CPU_TARGET)
665 # Load commandline OPT and add target and unit dir to be sure
666 ifneq ($(OS_TARGET),$(OS_SOURCE))
667 override FPCOPT+=-T$(OS_TARGET)
668 endif
670 # User dirs should be first, so they are looked at first
671 ifdef UNITDIR
672 override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
673 endif
674 ifdef LIBDIR
675 override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
676 endif
677 ifdef OBJDIR
678 override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
679 endif
680 ifdef INCDIR
681 override FPCOPT+=$(addprefix -Fi,$(INCDIR))
682 endif
684 # Smartlinking
685 ifdef LINKSMART
686 override FPCOPT+=-XX
687 endif
689 # Smartlinking creation
690 ifdef CREATESMART
691 override FPCOPT+=-CX
692 endif
694 # Debug
695 ifdef DEBUG
696 override FPCOPT+=-gl -dDEBUG
697 endif
699 # Release mode (strip, optimize and don't load ppc386.cfg)
700 # 0.99.12b has a bug in the optimizer so don't use it by default
701 ifdef RELEASE
702 ifeq ($(FPC_VERSION),0.99.12)
703 override FPCOPT+=-Xs -OGp3 -n
704 else
705 override FPCOPT+=-Xs -OG2p3 -n
706 endif
707 endif
709 # Strip
710 ifdef STRIP
711 override FPCOPT+=-Xs
712 endif
714 # Optimizer
715 ifdef OPTIMIZE
716 override FPCOPT+=-OG2p3
717 endif
719 # Verbose settings (warning,note,info)
720 ifdef VERBOSE
721 override FPCOPT+=-vwni
722 endif
724 ifdef UNITSDIR
725 override FPCOPT+=-Fu$(UNITSDIR)
726 endif
728 ifdef NEEDINCDIR
729 override FPCOPT+=$(addprefix -Fi,$(NEEDINCDIR))
730 endif
733 # Target dirs and the prefix to use for clean/install
734 ifdef TARGETDIR
735 override FPCOPT+=-FE$(TARGETDIR)
736 ifeq ($(TARGETDIR),.)
737 override TARGETDIRPREFIX=
738 else
739 override TARGETDIRPREFIX=$(TARGETDIR)/
740 endif
741 endif
742 ifdef UNITTARGETDIR
743 override FPCOPT+=-FU$(UNITTARGETDIR)
744 ifeq ($(UNITTARGETDIR),.)
745 override UNITTARGETDIRPREFIX=
746 else
747 override UNITTARGETDIRPREFIX=$(TARGETDIR)/
748 endif
749 else
750 ifdef TARGETDIR
751 override UNITTARGETDIR=$(TARGETDIR)
752 override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
753 endif
754 endif
756 # Add commandline options last so they can override
757 ifdef OPT
758 override FPCOPT+=$(OPT)
759 endif
761 # Add defines from FPCOPTDEF to FPCOPT
762 ifdef FPCOPTDEF
763 override FPCOPT+=$(FPCOPTDEF)
764 endif
766 # Error file ?
767 ifdef ERRORFILE
768 override FPCOPT+=-Fr$(ERRORFILE)
769 endif
771 # Was a config file specified ?
772 ifdef CFGFILE
773 override FPCOPT+=@$(CFGFILE)
774 endif
776 # For win32 the options are passed using the environment FPCEXTCMD
777 ifeq ($(OS_SOURCE),win32)
778 override FPCEXTCMD:=$(FPCOPT)
779 override FPCOPT:=!FPCEXTCMD
780 export FPCEXTCMD
781 endif
783 # Compiler commandline
784 override COMPILER:=$(FPC) $(FPCOPT)
786 # also call ppas if with command option -s
787 # but only if the OS_SOURCE and OS_TARGE are equal
788 ifeq (,$(findstring -s ,$(COMPILER)))
789 EXECPPAS=
790 else
791 ifeq ($(OS_SOURCE),$(OS_TARGET))
792 EXECPPAS:=@$(PPAS)
793 endif
794 endif
796 #####################################################################
797 # Standard rules
798 #####################################################################
800 all: fpc_all
802 debug: fpc_debug
804 smart: fpc_smart
806 shared: fpc_shared
808 showinstall: fpc_showinstall
810 install: fpc_install
812 sourceinstall: fpc_sourceinstall
814 exampleinstall: fpc_exampleinstall
816 zipinstall: fpc_zipinstall
818 zipsourceinstall: fpc_zipsourceinstall
820 zipexampleinstall: fpc_zipexampleinstall
822 clean: fpc_clean
824 distclean: fpc_distclean
826 cleanall: fpc_cleanall
828 info: fpc_info
830 .PHONY: all debug smart shared showinstall install sourceinstall exampleinstall zipinstall zipsourceinstall zipexampleinstall clean distclean cleanall info
832 #####################################################################
833 # Loaders
834 #####################################################################
836 .PHONY: fpc_loaders
838 %$(OEXT): %$(LOADEREXT)
839 $(AS) -o $*$(OEXT) $<
841 override ALLTARGET+=fpc_loaders
842 override CLEANTARGET+=fpc_loaders_clean
843 override SHOWINSTALLTARGET+=fpc_loaders_showinstall
844 override INSTALLTARGET+=fpc_loaders_install
846 override LOADEROFILES:=$(addsuffix $(OEXT),$(LOADEROBJECTS))
848 fpc_loaders: $(LOADEROFILES)
850 fpc_loaders_clean:
851 -$(DEL) $(LOADEROFILES)
853 fpc_loaders_showinstall:
854 @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(LOADEROFILES))
856 fpc_loaders_install:
857 $(MKDIR) $(UNITINSTALLDIR)
858 $(INSTALL) $(LOADEROFILES) $(UNITINSTALLDIR)
860 #####################################################################
861 # Units
862 #####################################################################
864 .PHONY: fpc_units
866 override ALLTARGET+=fpc_units
868 override UNITPPUFILES=$(addsuffix $(PPUEXT),$(UNITOBJECTS))
869 override INSTALLPPUFILES+=$(UNITPPUFILES)
870 override CLEANPPUFILES+=$(UNITPPUFILES)
872 fpc_units: $(UNITPPUFILES)
874 #####################################################################
875 # Resource strings
876 #####################################################################
878 ifdef RSTOBJECTS
879 override RSTFILES=$(addsuffix $(RSTEXT),$(RSTOBJECTS))
881 override CLEANRSTFILES+=$(RSTFILES)
882 endif
884 #####################################################################
885 # General compile rules
886 #####################################################################
888 .PHONY: fpc_packages fpc_all fpc_debug
890 $(FPCMADE): $(ALLTARGET)
891 @$(ECHO) Compiled > $(FPCMADE)
893 fpc_packages: $(COMPILEPACKAGES)
895 fpc_all: fpc_packages $(FPCMADE)
897 fpc_debug:
898 $(MAKE) all DEBUG=1
900 # Search paths for .ppu if targetdir is set
901 ifdef UNITTARGETDIR
902 vpath %$(PPUEXT) $(UNITTARGETDIR)
903 endif
905 # General compile rules, available for both possible PASEXT
907 .SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp
909 %$(PPUEXT): %.pp
910 $(COMPILER) $< $(REDIR)
911 $(EXECPPAS)
913 %$(PPUEXT): %.pas
914 $(COMPILER) $< $(REDIR)
915 $(EXECPPAS)
917 %$(EXEEXT): %.pp
918 $(COMPILER) $< $(REDIR)
919 $(EXECPPAS)
921 %$(EXEEXT): %.pas
922 $(COMPILER) $< $(REDIR)
923 $(EXECPPAS)
925 #####################################################################
926 # Library
927 #####################################################################
929 .PHONY: fpc_smart fpc_shared
931 ifdef LIBVERSION
932 LIBFULLNAME=$(LIBNAME).$(LIBVERSION)
933 else
934 LIBFULLNAME=$(LIBNAME)
935 endif
937 # Default sharedlib units are all unit objects
938 ifndef SHAREDLIBUNITOBJECTS
939 SHAREDLIBUNITOBJECTS:=$(UNITOBJECTS)
940 endif
942 fpc_smart:
943 $(MAKE) all LINKSMART=1 CREATESMART=1
945 fpc_shared: all
946 ifdef HASSHAREDLIB
947 ifndef LIBNAME
948 @$(ECHO) "LIBNAME not set"
949 else
950 $(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBFULLNAME)
951 endif
952 else
953 @$(ECHO) "Shared Libraries not supported"
954 endif
956 #####################################################################
957 # Install rules
958 #####################################################################
960 .PHONY: fpc_showinstall fpc_install
962 ifdef EXTRAINSTALLUNITS
963 override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS))
964 endif
966 ifdef INSTALLPPUFILES
967 override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPUFILES))
968 ifdef PPUFILES
969 INSTALLPPULINKFILES:=$(shell $(PPUFILES) -S -O $(INSTALLPPUFILES))
970 else
971 INSTALLPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(LIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))))
972 endif
973 override INSTALLPPULINKFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPULINKFILES))
974 endif
976 ifdef INSTALLEXEFILES
977 override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(INSTALLEXEFILES))
978 endif
980 fpc_showinstall: $(SHOWINSTALLTARGET)
981 ifdef INSTALLEXEFILES
982 @$(ECHO) -e $(addprefix "\n"$(BININSTALLDIR)/,$(INSTALLEXEFILES))
983 endif
984 ifdef INSTALLPPUFILES
985 @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPUFILES))
986 ifneq ($(INSTALLPPULINKFILES),)
987 @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPULINKFILES))
988 endif
989 ifneq ($(wildcard $(LIBFULLNAME)),)
990 @$(ECHO) $(LIBINSTALLDIR)/$(LIBFULLNAME)
991 ifdef HASSHAREDLIB
992 @$(ECHO) $(LIBINSTALLDIR)/$(LIBNAME)
993 endif
994 endif
995 endif
996 ifdef EXTRAINSTALLFILES
997 @$(ECHO) -e $(addprefix "\n"$(DATAINSTALLDIR)/,$(EXTRAINSTALLFILES))
998 endif
1000 fpc_install: $(INSTALLTARGET)
1001 # Create UnitInstallFiles
1002 ifdef INSTALLEXEFILES
1003 $(MKDIR) $(BININSTALLDIR)
1004 # Compress the exes if upx is defined
1005 ifdef UPXPROG
1006 -$(UPXPROG) $(INSTALLEXEFILES)
1007 endif
1008 $(INSTALLEXE) $(INSTALLEXEFILES) $(BININSTALLDIR)
1009 endif
1010 ifdef INSTALLPPUFILES
1011 $(MKDIR) $(UNITINSTALLDIR)
1012 $(INSTALL) $(INSTALLPPUFILES) $(UNITINSTALLDIR)
1013 ifneq ($(INSTALLPPULINKFILES),)
1014 $(INSTALL) $(INSTALLPPULINKFILES) $(UNITINSTALLDIR)
1015 endif
1016 ifneq ($(wildcard $(LIBFULLNAME)),)
1017 $(MKDIR) $(LIBINSTALLDIR)
1018 $(INSTALL) $(LIBFULLNAME) $(LIBINSTALLDIR)
1019 ifdef inUnix
1020 ln -sf $(LIBFULLNAME) $(LIBINSTALLDIR)/$(LIBNAME)
1021 endif
1022 endif
1023 endif
1024 ifdef EXTRAINSTALLFILES
1025 $(MKDIR) $(DATAINSTALLDIR)
1026 $(INSTALL) $(EXTRAINSTALLFILES) $(DATAINSTALLDIR)
1027 endif
1029 #####################################################################
1030 # SourceInstall rules
1031 #####################################################################
1033 .PHONY: fpc_sourceinstall
1035 ifndef SOURCETOPDIR
1036 SOURCETOPDIR=$(BASEDIR)
1037 endif
1039 fpc_sourceinstall: clean
1040 $(MKDIR) $(SOURCEINSTALLDIR)
1041 $(COPYTREE) $(SOURCETOPDIR) $(SOURCEINSTALLDIR)
1043 #####################################################################
1044 # exampleinstall rules
1045 #####################################################################
1047 .PHONY: fpc_exampleinstall
1049 fpc_exampleinstall: $(addsuffix _clean,$(EXAMPLEDIROBJECTS))
1050 ifdef EXAMPLESOURCEFILES
1051 $(MKDIR) $(EXAMPLEINSTALLDIR)
1052 $(COPY) $(EXAMPLESOURCEFILES) $(EXAMPLEINSTALLDIR)
1053 endif
1054 ifdef EXAMPLEDIROBJECTS
1055 ifndef EXAMPLESOURCEFILES
1056 $(MKDIR) $(EXAMPLEINSTALLDIR)
1057 endif
1058 $(COPYTREE) $(addsuffix /*,$(EXAMPLEDIROBJECTS)) $(EXAMPLEINSTALLDIR)
1059 endif
1061 #####################################################################
1062 # Zip
1063 #####################################################################
1065 .PHONY: fpc_zipinstall
1067 # Create suffix to add
1068 ifndef PACKAGESUFFIX
1069 PACKAGESUFFIX=$(OS_TARGET)
1070 ifeq ($(OS_TARGET),go32v2)
1071 PACKAGESUFFIX=go32
1072 endif
1073 ifeq ($(OS_TARGET),win32)
1074 PACKAGESUFFIX=w32
1075 endif
1076 ifeq ($(OS_TARGET),os2)
1077 PACKAGESUFFIX=emx
1078 endif
1079 endif
1081 # Temporary path to pack a file
1082 ifndef PACKDIR
1083 ifndef inUnix
1084 PACKDIR=$(BASEDIR)/pack_tmp
1085 else
1086 PACKDIR=/tmp/fpc-pack
1087 endif
1088 endif
1090 # Maybe create default zipname from packagename
1091 ifndef ZIPNAME
1092 ifdef PACKAGENAME
1093 ZIPNAME=$(PACKAGEPREFIX)$(PACKAGENAME)$(PACKAGESUFFIX)
1094 endif
1095 endif
1097 # Use tar by default under linux
1098 ifndef USEZIP
1099 ifdef inUnix
1100 USETAR=1
1101 endif
1102 endif
1104 fpc_zipinstall:
1105 ifndef ZIPNAME
1106 @$(ECHO) "Please specify ZIPNAME!"
1107 @exit 1
1108 else
1109 $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR)
1110 ifdef USETAR
1111 $(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT)
1112 cd $(PACKDIR) ; $(TARPROG) cf$(TAROPT) $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT) * ; cd $(BASEDIR)
1113 else
1114 $(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT)
1115 cd $(PACKDIR) ; $(ZIPPROG) -Dr $(ZIPOPT) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT) * ; cd $(BASEDIR)
1116 endif
1117 $(DELTREE) $(PACKDIR)
1118 endif
1120 .PHONY: fpc_zipsourceinstall
1122 fpc_zipsourceinstall:
1123 $(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall PACKAGESUFFIX=src
1125 .PHONY: fpc_zipexampleinstall
1127 fpc_zipexampleinstall:
1128 $(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall PACKAGESUFFIX=exm
1130 #####################################################################
1131 # Clean rules
1132 #####################################################################
1134 .PHONY: fpc_clean fpc_cleanall fpc_distclean
1136 ifdef EXEFILES
1137 override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
1138 endif
1140 ifdef EXTRACLEANUNITS
1141 override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRACLEANUNITS))
1142 endif
1144 ifdef CLEANPPUFILES
1145 override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
1146 # Get the .o and .a files created for the units
1147 ifdef PPUFILES
1148 CLEANPPULINKFILES:=$(shell $(PPUFILES) $(CLEANPPUFILES))
1149 else
1150 CLEANPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(LIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))))
1151 endif
1152 override CLEANPPULINKFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES))
1153 endif
1155 fpc_clean: $(CLEANTARGET)
1156 ifdef CLEANEXEFILES
1157 -$(DEL) $(CLEANEXEFILES)
1158 endif
1159 ifdef CLEANPPUFILES
1160 -$(DEL) $(CLEANPPUFILES)
1161 endif
1162 ifneq ($(CLEANPPULINKFILES),)
1163 -$(DEL) $(CLEANPPULINKFILES)
1164 endif
1165 ifdef CLEANRSTFILES
1166 -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
1167 endif
1168 ifdef EXTRACLEANFILES
1169 -$(DEL) $(EXTRACLEANFILES)
1170 endif
1171 ifdef LIBNAME
1172 -$(DEL) $(LIBNAME) $(LIBFULLNAME)
1173 endif
1174 -$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE)
1176 fpc_distclean: fpc_clean
1178 # Also run clean first if targetdir is set. Unittargetdir is always
1179 # set if targetdir or unittargetdir is specified
1180 ifdef UNITTARGETDIR
1181 TARGETDIRCLEAN=fpc_clean
1182 endif
1184 fpc_cleanall: $(CLEANTARGET) $(TARGETDIRCLEAN)
1185 ifdef CLEANEXEFILES
1186 -$(DEL) $(CLEANEXEFILES)
1187 endif
1188 -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
1189 -$(DELTREE) *$(SMARTEXT)
1190 -$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE)
1192 #####################################################################
1193 # Info rules
1194 #####################################################################
1196 .PHONY: fpc_info fpc_cfginfo fpc_objectinfo fpc_toolsinfo fpc_installinfo \
1197 fpc_dirinfo
1199 fpc_info: $(INFOTARGET)
1201 fpc_infocfg:
1202 @$(ECHO)
1203 @$(ECHO) == Configuration info ==
1204 @$(ECHO)
1205 @$(ECHO) FPC....... $(FPC)
1206 @$(ECHO) Version... $(FPC_VERSION)
1207 @$(ECHO) CPU....... $(CPU_TARGET)
1208 @$(ECHO) Source.... $(OS_SOURCE)
1209 @$(ECHO) Target.... $(OS_TARGET)
1210 @$(ECHO)
1212 fpc_infoobjects:
1213 @$(ECHO)
1214 @$(ECHO) == Object info ==
1215 @$(ECHO)
1216 @$(ECHO) LoaderObjects..... $(LOADEROBJECTS)
1217 @$(ECHO) UnitObjects....... $(UNITOBJECTS)
1218 @$(ECHO) ExeObjects........ $(EXEOBJECTS)
1219 @$(ECHO)
1220 @$(ECHO) ExtraCleanUnits... $(EXTRACLEANUNITS)
1221 @$(ECHO) ExtraCleanFiles... $(EXTRACLEANFILES)
1222 @$(ECHO)
1223 @$(ECHO) ExtraInstallUnits. $(EXTRAINSTALLUNITS)
1224 @$(ECHO) ExtraInstallFiles. $(EXTRAINSTALLFILES)
1225 @$(ECHO)
1227 fpc_infoinstall:
1228 @$(ECHO)
1229 @$(ECHO) == Install info ==
1230 @$(ECHO)
1231 ifdef DATE
1232 @$(ECHO) DateStr.............. $(DATESTR)
1233 endif
1234 ifdef PACKAGEPREFIX
1235 @$(ECHO) PackagePrefix........ $(PACKAGEPREFIX)
1236 endif
1237 ifdef PACKAGENAME
1238 @$(ECHO) PackageName.......... $(PACKAGENAME)
1239 endif
1240 @$(ECHO) PackageSuffix........ $(PACKAGESUFFIX)
1241 @$(ECHO)
1242 @$(ECHO) BaseInstallDir....... $(BASEINSTALLDIR)
1243 @$(ECHO) BinInstallDir........ $(BININSTALLDIR)
1244 @$(ECHO) LibInstallDir........ $(LIBINSTALLDIR)
1245 @$(ECHO) UnitInstallDir....... $(UNITINSTALLDIR)
1246 @$(ECHO) SourceInstallDir..... $(SOURCEINSTALLDIR)
1247 @$(ECHO) DocInstallDir........ $(DOCINSTALLDIR)
1248 @$(ECHO) DataInstallDir....... $(DATAINSTALLDIR)
1249 @$(ECHO)
1250 @$(ECHO) DestZipDir........... $(DESTZIPDIR)
1251 @$(ECHO) ZipName.............. $(ZIPNAME)
1252 @$(ECHO)
1254 #####################################################################
1255 # Local Makefile
1256 #####################################################################
1258 ifneq ($(wildcard fpcmake.loc),)
1259 include fpcmake.loc
1260 endif
1262 #####################################################################
1263 # Users rules
1264 #####################################################################
1266 vpath %.pas $(INC) $(PROCINC)
1267 vpath %.pp $(INC) $(PROCINC)
1270 # Loaders
1273 %$(OEXT) : %.as
1274 $(AS) -o $*$(OEXT) $*.as
1278 # Base Units (System, strings, os-dependent-base-unit)
1281 $(SYSTEMPPU) : sysos2.pas $(SYSDEPS)
1282 $(COMPILER) -Us -Sg sysos2.pas $(REDIR)
1284 objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMPPU)
1285 $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR)
1287 strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc \
1288 $(PROCINC)/strings.inc $(PROCINC)/stringss.inc \
1289 $(SYSTEMPPU)
1292 # System Dependent Units
1295 ports$(PPUEXT) : ports.pas objpas$(PPUEXT) $(SYSTEMPPU)
1297 doscalls$(PPUEXT) : doscalls.pas strings$(PPUEXT) objects$(PPUEXT) $(SYSTEMPPU)
1299 kbdcalls$(PPUEXT) : kbdcalls.pas $(SYSTEMPPU)
1301 moucalls$(PPUEXT) : moucalls.pas $(SYSTEMPPU)
1303 moncalls$(PPUEXT) : moncalls.pas strings$(PPUEXT) $(SYSTEMPPU)
1305 os2def$(PPUEXT) : os2def.pas $(SYSTEMPPU)
1307 pmwin$(PPUEXT) : pmwin.pas os2def$(PPUEXT) $(SYSTEMPPU)
1309 pmbitmap$(PPUEXT) : pmbitmap.pas $(SYSTEMPPU)
1311 pmgpi$(PPUEXT) : pmgpi.pas pmbitmap$(PPUEXT) $(SYSTEMPPU)
1313 dive$(PPUEXT) : dive.pas os2def$(PPUEXT) pmwin$(PPUEXT) $(SYSTEMPPU)
1316 # TP7 Compatible RTL Units
1319 dos$(PPUEXT) : dos.pas $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \
1320 doscalls$(PPUEXT) $(SYSTEMPPU)
1322 crt$(PPUEXT) : crt.pas $(INC)/textrec.inc $(SYSTEMPPU)
1324 objects$(PPUEXT) : $(INC)/objects.pp objinc.inc $(SYSTEMPPU)
1326 printer$(PPUEXT) : printer.pas $(INC)/textrec.inc $(SYSTEMPPU)
1328 #graph$(PPUEXT) : graph.pp
1331 # Delphi Compatible Units
1334 sysutils$(PPUEXT) : sysutils.pp $(wildcard $(OBJPASDIR)/*.inc) \
1335 objpas$(PPUEXT) dos$(PPUEXT) doscalls$(PPUEXT)
1336 $(COMPILER) -I$(OBJPASDIR) sysutils.pp $(REDIR)
1338 typinfo$(PPUEXT): $(OBJPASDIR)/typinfo.pp objpas$(PPUEXT)
1339 $(COMPILER) -Sg $(OBJPASDIR)/typinfo.pp $(REDIR)
1341 math$(PPUEXT): $(OBJPASDIR)/math.pp objpas$(PPUEXT) sysutils$(PPUEXT)
1342 $(COMPILER) $(OBJPASDIR)/math.pp $(REDIR)
1345 # Other system-independent RTL Units
1348 ucomplex$(PPUEXT): $(INC)/ucomplex.pp math$(PPUEXT) $(SYSTEMPPU)
1350 cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMPPU)
1352 mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMPPU)
1354 getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMPPU)
1356 heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMPPU)
1357 $(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
1359 lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMPPU)
1362 # Other system-dependent RTL Units