Makefile 25 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259
  1. #
  2. # Makefile generated by fpcmake v0.99.13 on 1999-11-24 23:15
  3. #
  4. defaultrule: all
  5. #####################################################################
  6. # Autodetect OS (Linux or Dos or Windows NT)
  7. # define inlinux when running under linux
  8. # define inWinNT when running under WinNT
  9. #####################################################################
  10. # We need only / in the path
  11. override PATH:=$(subst \,/,$(PATH))
  12. # Search for PWD and determine also if we are under linux
  13. PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(subst ;, ,$(PATH)))))
  14. ifeq ($(PWD),)
  15. PWD:=$(strip $(wildcard $(addsuffix /pwd,$(subst :, ,$(PATH)))))
  16. ifeq ($(PWD),)
  17. nopwd:
  18. @echo You need the GNU utils package to use this Makefile!
  19. @echo Get ftp://ftp.freepascal.org/pub/fpc/dist/go32v2/utilgo32.zip
  20. @exit
  21. else
  22. inlinux=1
  23. endif
  24. else
  25. PWD:=$(firstword $(PWD))
  26. endif
  27. # Detect NT - NT sets OS to Windows_NT
  28. ifndef inlinux
  29. ifeq ($(OS),Windows_NT)
  30. inWinNT=1
  31. endif
  32. endif
  33. # Detect OS/2 - OS/2 has OS2_SHELL defined
  34. ifndef inlinux
  35. ifndef inWinNT
  36. ifdef OS2_SHELL
  37. inOS2=1
  38. endif
  39. endif
  40. endif
  41. # The extension of executables
  42. ifdef inlinux
  43. EXEEXT=
  44. else
  45. EXEEXT=.exe
  46. endif
  47. # The path which is search separated by spaces
  48. ifdef inlinux
  49. SEARCHPATH=$(subst :, ,$(PATH))
  50. else
  51. SEARCHPATH=$(subst ;, ,$(PATH))
  52. endif
  53. #####################################################################
  54. # FPC version/target Detection
  55. #####################################################################
  56. # What compiler to use ?
  57. ifndef FPC
  58. ifdef inOS2
  59. export FPC=ppos2$(EXEEXT)
  60. else
  61. export FPC=ppc386$(EXEEXT)
  62. endif
  63. endif
  64. # Target OS
  65. ifndef OS_TARGET
  66. export OS_TARGET:=$(shell $(FPC) -iTO)
  67. endif
  68. # Source OS
  69. ifndef OS_SOURCE
  70. export OS_SOURCE:=$(shell $(FPC) -iSO)
  71. endif
  72. # Target CPU
  73. ifndef CPU_TARGET
  74. export CPU_TARGET:=$(shell $(FPC) -iTP)
  75. endif
  76. # Source CPU
  77. ifndef CPU_SOURCE
  78. export CPU_SOURCE:=$(shell $(FPC) -iSP)
  79. endif
  80. # FPC version
  81. ifndef FPC_VERSION
  82. export FPC_VERSION:=$(shell $(FPC) -iV)
  83. endif
  84. #####################################################################
  85. # Default Settings
  86. #####################################################################
  87. # Release ? Then force OPT and don't use extra opts via commandline
  88. ifdef RELEASE
  89. override OPT:=-Xs -OG2p3 -n
  90. endif
  91. # Verbose settings (warning,note,info)
  92. ifdef VERBOSE
  93. override OPT+=-vwni
  94. endif
  95. #####################################################################
  96. # User Settings
  97. #####################################################################
  98. # Pre Settings
  99. # Allow ALPHA, POWERPC, M68K, I386 defines for target cpu
  100. ifdef ALPHA
  101. CPU_TARGET=alpha
  102. endif
  103. ifdef POWERPC
  104. CPU_TARGET=powerpc
  105. endif
  106. ifdef M68K
  107. CPU_TARGET=m68k
  108. endif
  109. ifdef I386
  110. CPU_TARGET=i386
  111. endif
  112. # Where is the 'old' compiler located
  113. OLDDIR=..
  114. # RTL
  115. RTL=$(OLDDIR)/../rtl
  116. UTILS=$(OLDDIR)/../utils
  117. # Utils used by compiler development/installation
  118. COMPILERUTILS=$(OLDDIR)/utils
  119. # Default language for the compiler
  120. ifndef FPCLANG
  121. FPCLANG=e
  122. endif
  123. # Local defines for the compiler only
  124. ifndef LOCALDEF
  125. LOCALDEF=
  126. endif
  127. # Local options for the compiler only
  128. ifndef LOCALOPT
  129. LOCALOPT=
  130. endif
  131. # Options for the RTL only when cycling
  132. ifndef RTLOPTS
  133. RTLOPTS=
  134. endif
  135. # Message files
  136. MSGFILES=$(wildcard $(OLDDIR)/error*.msg)
  137. # ppcSUFFIX
  138. ifeq ($(CPU_TARGET),i386)
  139. CPUSUF=386
  140. endif
  141. ifeq ($(CPU_TARGET),alpha)
  142. CPUSUF=axp
  143. endif
  144. ifeq ($(CPU_TARGET),m68k)
  145. CPUSUF=68k
  146. endif
  147. ifeq ($(CPU_TARGET),powerpc)
  148. CPUSUF=ppc
  149. endif
  150. # Targets
  151. # Clean
  152. # Install
  153. # Defaults
  154. override NEEDOPT=-Sg
  155. # Directories
  156. ifndef FPCDIR
  157. FPCDIR=../..
  158. endif
  159. ifndef PACKAGEDIR
  160. PACKAGEDIR=$(FPCDIR)/packages
  161. endif
  162. override NEEDUNITDIR=$(CPU_TARGET) . $(OLDDIR)
  163. override NEEDINCDIR=$(OLDDIR)
  164. ifndef TARGETDIR
  165. TARGETDIR=.
  166. endif
  167. # Packages
  168. # Libraries
  169. # Info
  170. FPCINFO=fpc_infocfg fpc_infoobjects fpc_infoinstall
  171. # Post Settings
  172. # Default message file
  173. MSGFILE=$(OLDDIR)/error$(FPCLANG).msg
  174. # set correct defines (-d$(CPU_TARGET) is automaticly added in makefile.fpc)
  175. override LOCALDEF+=-dGDB -dBROWSERLOG -dNEWCG
  176. # i386 specific
  177. ifeq ($(CPU_TARGET),i386)
  178. # also insert MMX support
  179. override LOCALDEF+=-dSUPPORT_MMX
  180. # We don't need the intel and binary writer on linux...
  181. ifdef inlinux
  182. override LOCALDEF+=-dNOAG386INT -dNOAG386BIN
  183. endif
  184. endif
  185. override LOCALOPT+=$(LOCALDEF)
  186. override FPCOPT+=$(LOCALOPT)
  187. #####################################################################
  188. # Default Directories
  189. #####################################################################
  190. # Base dir
  191. ifdef PWD
  192. BASEDIR:=$(shell $(PWD))
  193. else
  194. BASEDIR=.
  195. endif
  196. # this can be set to 'rtl' when the RTL units are installed
  197. ifndef UNITPREFIX
  198. UNITPREFIX=units
  199. endif
  200. # set the prefix directory where to install everything
  201. ifndef PREFIXINSTALLDIR
  202. ifdef inlinux
  203. export PREFIXINSTALLDIR=/usr
  204. else
  205. export PREFIXINSTALLDIR=/pp
  206. endif
  207. endif
  208. #####################################################################
  209. # Install Directories
  210. #####################################################################
  211. # set the base directory where to install everything
  212. ifndef BASEINSTALLDIR
  213. ifdef inlinux
  214. BASEINSTALLDIR=$(PREFIXINSTALLDIR)/lib/fpc/$(FPC_VERSION)
  215. else
  216. BASEINSTALLDIR=$(PREFIXINSTALLDIR)
  217. endif
  218. endif
  219. # set the directory where to install the binaries
  220. ifndef BININSTALLDIR
  221. ifdef inlinux
  222. BININSTALLDIR=$(PREFIXINSTALLDIR)/bin
  223. else
  224. BININSTALLDIR=$(BASEINSTALLDIR)/bin/$(OS_TARGET)
  225. endif
  226. endif
  227. # set the directory where to install the units.
  228. ifndef UNITINSTALLDIR
  229. UNITINSTALLDIR=$(BASEINSTALLDIR)/$(UNITPREFIX)/$(OS_TARGET)
  230. endif
  231. # Where to install shared libraries
  232. ifndef LIBINSTALLDIR
  233. ifdef inlinux
  234. LIBINSTALLDIR=$(PREFIXINSTALLDIR)/lib
  235. else
  236. LIBINSTALLDIR=$(UNITINSTALLDIR)
  237. endif
  238. endif
  239. # Where the source files will be stored
  240. ifndef SOURCEINSTALLDIR
  241. ifdef inlinux
  242. SOURCEINSTALLDIR=$(PREFIXINSTALLDIR)/src/fpc-$(FPC_VERSION)
  243. else
  244. SOURCEINSTALLDIR=$(BASEINSTALLDIR)/source
  245. endif
  246. endif
  247. # Where the doc files will be stored
  248. ifndef DOCINSTALLDIR
  249. ifdef inlinux
  250. DOCINSTALLDIR=$(PREFIXINSTALLDIR)/doc/fpc/$(FPC_VERSION)
  251. else
  252. DOCINSTALLDIR=$(BASEINSTALLDIR)/doc
  253. endif
  254. endif
  255. # Where the some extra (data)files will be stored
  256. ifndef EXTRAINSTALLDIR
  257. EXTRAINSTALLDIR=$(BASEINSTALLDIR)
  258. endif
  259. #####################################################################
  260. # Compiler Command Line
  261. #####################################################################
  262. # Load commandline OPTDEF and add FPC_CPU define
  263. override FPCOPTDEF:=-d$(CPU_TARGET)
  264. # Load commandline OPT and add target and unit dir to be sure
  265. ifneq ($(OS_TARGET),$(OS_SOURCE))
  266. override FPCOPT+=-T$(OS_TARGET)
  267. endif
  268. ifdef NEEDOPT
  269. override FPCOPT+=$(NEEDOPT)
  270. endif
  271. # RTL first and then Unit dir (a unit can override RTLunit). Don't add the
  272. # dirs if fpcdir=. which can be used for the rtl makefiles
  273. ifdef FPCDIR
  274. ifneq ($(FPCDIR),.)
  275. override FPCOPT+=-Fu$(FPCDIR)/rtl/$(OS_TARGET) -Fu$(FPCDIR)/units/$(OS_TARGET)
  276. endif
  277. endif
  278. ifdef NEEDUNITDIR
  279. override FPCOPT+=$(addprefix -Fu,$(NEEDUNITDIR))
  280. endif
  281. ifdef NEEDINCDIR
  282. override FPCOPT+=$(addprefix -Fi,$(NEEDINCDIR))
  283. endif
  284. # Target dirs
  285. ifdef TARGETDIR
  286. override FPCOPT+=-FE$(TARGETDIR)
  287. endif
  288. # Smartlinking
  289. ifdef SMARTLINK
  290. override FPCOPT+=-CX
  291. endif
  292. # Debug
  293. ifdef DEBUG
  294. override FPCOPT+=-g
  295. endif
  296. # Add commandline options
  297. ifdef OPT
  298. override FPCOPT+=$(OPT)
  299. endif
  300. ifdef UNITDIR
  301. override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
  302. endif
  303. ifdef LIBDIR
  304. override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
  305. endif
  306. ifdef OBJDIR
  307. override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
  308. endif
  309. ifdef INCDIR
  310. override FPCOPT+=$(addprefix -Fi,$(INCDIR))
  311. endif
  312. # Add defines from FPCOPTDEF to FPCOPT
  313. ifdef FPCOPTDEF
  314. override FPCOPT+=$(FPCOPTDEF)
  315. endif
  316. # Was a config file specified ?
  317. ifdef CFGFILE
  318. override FPCOPT+=@$(CFGFILE)
  319. endif
  320. override COMPILER=$(FPC) $(FPCOPT)
  321. #####################################################################
  322. # Shell tools
  323. #####################################################################
  324. # To copy pograms
  325. ifndef COPY
  326. export COPY:=cp -fp
  327. endif
  328. # To move pograms
  329. ifndef MOVE
  330. export MOVE:=mv -f
  331. endif
  332. # Check delete program
  333. ifndef DEL
  334. export DEL:=rm -f
  335. endif
  336. # Check deltree program
  337. ifndef DELTREE
  338. export DELTREE:=rm -rf
  339. endif
  340. # To install files
  341. ifndef INSTALL
  342. ifdef inlinux
  343. export INSTALL:=install -m 644
  344. else
  345. export INSTALL:=$(COPY)
  346. endif
  347. endif
  348. # To install programs
  349. ifndef INSTALLEXE
  350. ifdef inlinux
  351. export INSTALLEXE:=install -m 755
  352. else
  353. export INSTALLEXE:=$(COPY)
  354. endif
  355. endif
  356. # To make a directory.
  357. ifndef MKDIR
  358. ifdef inlinux
  359. export MKDIR:=install -m 755 -d
  360. else
  361. export MKDIR:=ginstall -m 755 -d
  362. endif
  363. endif
  364. #####################################################################
  365. # Default Tools
  366. #####################################################################
  367. # assembler, redefine it if cross compiling
  368. ifndef AS
  369. AS=as
  370. endif
  371. # linker, but probably not used
  372. ifndef LD
  373. LD=ld
  374. endif
  375. # ppas.bat / ppas.sh
  376. ifdef inlinux
  377. PPAS=ppas.sh
  378. else
  379. ifdef inOS2
  380. PPAS=ppas.cmd
  381. else
  382. PPAS=ppas.bat
  383. endif
  384. endif
  385. # also call ppas if with command option -s
  386. ifeq (,$(findstring -s ,$(COMPILER)))
  387. EXECPPAS=
  388. else
  389. EXECPPAS=@$(PPAS)
  390. endif
  391. # ldconfig to rebuild .so cache
  392. ifdef inlinux
  393. LDCONFIG=ldconfig
  394. else
  395. LDCONFIG=
  396. endif
  397. # echo
  398. ifndef ECHO
  399. ECHO:=$(strip $(wildcard $(addsuffix /echo$(EXEEXT),$(SEARCHPATH))))
  400. ifeq ($(ECHO),)
  401. export ECHO:=echo
  402. else
  403. export ECHO:=$(firstword $(ECHO))
  404. endif
  405. endif
  406. # ppdep
  407. ifndef PPDEP
  408. PPDEP:=$(strip $(wildcard $(addsuffix /ppdep$(EXEEXT),$(SEARCHPATH))))
  409. ifeq ($(PPDEP),)
  410. PPDEP=
  411. else
  412. export PPDEP:=$(firstword $(PPDEP))
  413. endif
  414. endif
  415. # ppumove
  416. ifndef PPUMOVE
  417. PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(EXEEXT),$(SEARCHPATH))))
  418. ifeq ($(PPUMOVE),)
  419. PPUMOVE=
  420. else
  421. export PPUMOVE:=$(firstword $(PPUMOVE))
  422. endif
  423. endif
  424. # ppufiles
  425. ifndef PPUFILES
  426. PPUFILES:=$(strip $(wildcard $(addsuffix /ppufiles$(EXEEXT),$(SEARCHPATH))))
  427. ifeq ($(PPUFILES),)
  428. PPUFILES=
  429. else
  430. export PPUFILES:=$(firstword $(PPUFILES))
  431. endif
  432. endif
  433. # Look if UPX is found for go32v2 and win32. We can't use $UPX becuase
  434. # upx uses that one itself (PFV)
  435. ifndef UPXPROG
  436. ifeq ($(OS_TARGET),go32v2)
  437. UPXPROG:=1
  438. endif
  439. ifeq ($(OS_TARGET),win32)
  440. UPXPROG:=1
  441. endif
  442. ifdef UPXPROG
  443. UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(EXEEXT),$(SEARCHPATH))))
  444. ifeq ($(UPXPROG),)
  445. UPXPROG=
  446. else
  447. export UPXPROG:=$(firstword $(UPXPROG))
  448. endif
  449. else
  450. UPXPROG=
  451. endif
  452. endif
  453. # gdate/date
  454. ifndef DATE
  455. DATE:=$(strip $(wildcard $(addsuffix /date$(EXEEXT),$(SEARCHPATH))))
  456. ifeq ($(DATE),)
  457. DATE:=$(strip $(wildcard $(addsuffix /gdate$(EXEEXT),$(SEACHPATH))))
  458. ifeq ($(DATE),)
  459. DATE=
  460. else
  461. export DATE:=$(firstword $(DATE))
  462. endif
  463. else
  464. export DATE:=$(firstword $(DATE))
  465. endif
  466. endif
  467. ifdef DATE
  468. DATESTR:=$(shell $(DATE) +%Y%m%d)
  469. else
  470. DATESTR=
  471. endif
  472. # ZipProg, you can't use Zip as the var name (PFV)
  473. ifndef ZIPPROG
  474. ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(EXEEXT),$(SEARCHPATH))))
  475. ifeq ($(ZIPPROG),)
  476. ZIPPROG=
  477. else
  478. export ZIPPROG:=$(firstword $(ZIPPROG)) -D9 -r
  479. endif
  480. endif
  481. ifndef ZIPEXT
  482. ZIPEXT=.zip
  483. endif
  484. # cmp
  485. ifndef CMP
  486. CMP:=$(strip $(wildcard $(addsuffix /cmp$(EXEEXT),$(SEARCHPATH))))
  487. ifeq ($(CMP),)
  488. CMP=
  489. else
  490. export CMP:=$(firstword $(CMP))
  491. endif
  492. endif
  493. # diff
  494. ifndef DIFF
  495. DIFF:=$(strip $(wildcard $(addsuffix /diff$(EXEEXT),$(SEARCHPATH))))
  496. ifeq ($(DIFF),)
  497. DIFF=
  498. else
  499. export DIFF:=$(firstword $(DIFF))
  500. endif
  501. endif
  502. #####################################################################
  503. # Default extensions
  504. #####################################################################
  505. # Default needed extensions (Go32v2,Linux)
  506. LOADEREXT=.as
  507. PPLEXT=.ppl
  508. PPUEXT=.ppu
  509. OEXT=.o
  510. ASMEXT=.s
  511. SMARTEXT=.sl
  512. STATICLIBEXT=.a
  513. SHAREDLIBEXT=.so
  514. PACKAGESUFFIX=
  515. # Go32v1
  516. ifeq ($(OS_TARGET),go32v1)
  517. PPUEXT=.pp1
  518. OEXT=.o1
  519. ASMEXT=.s1
  520. SMARTEXT=.sl1
  521. STATICLIBEXT=.a1
  522. SHAREDLIBEXT=.so1
  523. PACKAGESUFFIX=v1
  524. endif
  525. # Go32v2
  526. ifeq ($(OS_TARGET),go32v2)
  527. PACKAGESUFFIX=go32
  528. endif
  529. # Linux
  530. ifeq ($(OS_TARGET),linux)
  531. PACKAGESUFFIX=linux
  532. endif
  533. # Win32
  534. ifeq ($(OS_TARGET),win32)
  535. PPUEXT=.ppw
  536. OEXT=.ow
  537. ASMEXT=.sw
  538. SMARTEXT=.slw
  539. STATICLIBEXT=.aw
  540. SHAREDLIBEXT=.dll
  541. PACKAGESUFFIX=win32
  542. endif
  543. # OS/2
  544. ifeq ($(OS_TARGET),os2)
  545. PPUEXT=.ppo
  546. ASMEXT=.so2
  547. OEXT=.oo2
  548. SMARTEXT=.so
  549. STATICLIBEXT=.ao2
  550. SHAREDLIBEXT=.dll
  551. PACKAGESUFFIX=os2
  552. endif
  553. # library prefix
  554. LIBPREFIX=lib
  555. ifeq ($(OS_TARGET),go32v2)
  556. LIBPREFIX=
  557. endif
  558. ifeq ($(OS_TARGET),go32v1)
  559. LIBPREFIX=
  560. endif
  561. # determine which .pas extension is used
  562. ifndef PASEXT
  563. ifdef EXEOBJECTS
  564. override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(EXEOBJECTS)))))
  565. else
  566. override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(UNITOBJECTS)))))
  567. endif
  568. ifeq ($(TESTPAS),)
  569. PASEXT=.pp
  570. else
  571. PASEXT=.pas
  572. endif
  573. endif
  574. #####################################################################
  575. # Default rules
  576. #####################################################################
  577. .PHONY: defaultrule all debug examples test smart shared \
  578. showinstall install zipinstall zipinstalladd \
  579. clean cleanall depend info
  580. debug: fpc_debug
  581. smart: fpc_smart
  582. shared: fpc_shared
  583. showinstall: fpc_showinstall
  584. zipinstall: fpc_zipinstall
  585. zipinstalladd: fpc_zipinstalladd
  586. cleanall: fpc_cleanall
  587. info: fpc_info
  588. #####################################################################
  589. # General compile rules
  590. #####################################################################
  591. .PHONY: fpc_all fpc_debug
  592. fpc_all: $(ALLTARGET)
  593. fpc_debug:
  594. $(MAKE) all DEBUG=1
  595. # General compile rules, available for both possible PASEXT
  596. .SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp
  597. %$(PPUEXT): %.pp
  598. $(COMPILER) $< $(REDIR)
  599. $(EXECPASS)
  600. %$(PPUEXT): %.pas
  601. $(COMPILER) $< $(REDIR)
  602. $(EXECPASS)
  603. %$(EXEEXT): %.pp
  604. $(COMPILER) $< $(REDIR)
  605. $(EXECPASS)
  606. %$(EXEEXT): %.pas
  607. $(COMPILER) $< $(REDIR)
  608. $(EXECPASS)
  609. #####################################################################
  610. # Library
  611. #####################################################################
  612. .PHONY: fpc_smart fpc_shared
  613. # Default sharedlib units are all unit objects
  614. ifndef SHAREDLIBUNITOBJECTS
  615. SHAREDLIBUNITOBJECTS=$(UNITOBJECTS)
  616. endif
  617. fpc_smart:
  618. $(MAKE) all SMARTLINK=1
  619. fpc_shared: all
  620. ifdef inlinux
  621. ifndef LIBNAME
  622. @$(ECHO) LIBNAME not set
  623. else
  624. $(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBNAME)
  625. endif
  626. else
  627. @$(ECHO) Shared Libraries not supported
  628. endif
  629. #####################################################################
  630. # Install rules
  631. #####################################################################
  632. .PHONY: fpc_showinstall fpc_install
  633. ifdef EXTRAINSTALLUNITS
  634. override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS))
  635. endif
  636. ifdef INSTALLPPUFILES
  637. ifdef PPUFILES
  638. ifdef inlinux
  639. INSTALLPPULINKFILES=$(shell $(PPUFILES) -S -O $(INSTALLPPUFILES))
  640. INSTALLPPULIBFILES=$(shell $(PPUFILES) -L $(INSTALLPPUFILES))
  641. else
  642. INSTALLPPULINKFILES=$(shell $(PPUFILES) $(INSTALLPPUFILES))
  643. endif
  644. endif
  645. endif
  646. fpc_showinstall: $(SHOWINSTALLTARGET)
  647. ifdef INSTALLEXEFILES
  648. @$(ECHO) $(addprefix "\n"$(BININSTALLDIR)/,$(INSTALLEXEFILES))
  649. endif
  650. ifdef INSTALLPPUFILES
  651. @$(ECHO) $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPUFILES))
  652. ifneq ($(INSTALLPPULINKFILES),)
  653. @$(ECHO) $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPULINKFILES))
  654. endif
  655. ifneq ($(INSTALLPPULIBFILES),)
  656. @$(ECHO) $(addprefix "\n"$(LIBINSTALLDIR)/,$(INSTALLPPULIBFILES))
  657. endif
  658. endif
  659. ifdef EXTRAINSTALLFILES
  660. @$(ECHO) $(addprefix "\n"$(EXTRAINSTALLDIR)/,$(EXTRAINSTALLFILES))
  661. endif
  662. fpc_install: $(INSTALLTARGET)
  663. # Create UnitInstallFiles
  664. ifdef INSTALLEXEFILES
  665. $(MKDIR) $(BININSTALLDIR)
  666. # Compress the exes if upx is defined
  667. ifdef UPXPROG
  668. -$(UPXPROG) $(INSTALLEXEFILES)
  669. endif
  670. $(INSTALLEXE) $(INSTALLEXEFILES) $(BININSTALLDIR)
  671. endif
  672. ifdef INSTALLPPUFILES
  673. $(MKDIR) $(UNITINSTALLDIR)
  674. $(INSTALL) $(INSTALLPPUFILES) $(UNITINSTALLDIR)
  675. ifneq ($(INSTALLPPULINKFILES),)
  676. $(INSTALL) $(INSTALLPPULINKFILES) $(UNITINSTALLDIR)
  677. endif
  678. ifneq ($(INSTALLPPULIBFILES),)
  679. $(MKDIR) $(LIBINSTALLDIR)
  680. $(INSTALL) $(INSTALLPPULIBFILES) $(LIBINSTALLDIR)
  681. endif
  682. endif
  683. ifdef EXTRAINSTALLFILES
  684. $(MKDIR) $(EXTRAINSTALLDIR)
  685. $(INSTALL) $(EXTRAINSTALLFILES) $(EXTRAINSTALLDIR)
  686. endif
  687. #####################################################################
  688. # Zip
  689. #####################################################################
  690. .PHONY: fpc_zipinstall fpc_zipinstalladd
  691. # Temporary path to pack a file
  692. ifndef PACKDIR
  693. ifndef inlinux
  694. PACKDIR=pack_tmp
  695. else
  696. PACKDIR=/tmp/fpc-pack
  697. endif
  698. endif
  699. # Test dir if none specified
  700. ifndef PACKAGEDIR
  701. PACKAGEDIR=$(BASEDIR)
  702. endif
  703. # Add .zip/.tar.gz extension
  704. ifdef ZIPNAME
  705. ifndef inlinux
  706. override ZIPNAME:=$(ZIPNAME)$(ZIPEXT)
  707. endif
  708. endif
  709. # Default target which is call before zipping
  710. ifndef ZIPTARGET
  711. ZIPTARGET=install
  712. endif
  713. # Note: This will not remove the zipfile first
  714. fpc_zipinstalladd:
  715. ifndef ZIPNAME
  716. @$(ECHO) Please specify ZIPNAME!
  717. @exit
  718. else
  719. $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR)
  720. ifdef inlinux
  721. gzip -d $(PACKAGEDIR)/$(ZIPNAME).tar.gz
  722. cd $(PACKDIR) ; tar rv --file $(PACKAGEDIR)/$(ZIPNAME).tar * ; cd $(BASEDIR)
  723. gzip $(PACKAGEDIR)/$(ZIPNAME).tar
  724. else
  725. cd $(PACKDIR) ; $(ZIPPROG) $(PACKAGEDIR)/$(ZIPNAME) * ; cd $(BASEDIR)
  726. endif
  727. $(DELTREE) $(PACKDIR)
  728. endif
  729. # First remove the zip and then install
  730. fpc_zipinstall:
  731. ifndef ZIPNAME
  732. @$(ECHO) Please specify ZIPNAME!
  733. @exit
  734. else
  735. $(DEL) $(PACKAGEDIR)/$(ZIPNAME)
  736. $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR)
  737. ifdef inlinux
  738. cd $(PACKDIR) ; tar cvz --file $(PACKAGEDIR)/$(ZIPNAME).tar.gz * ; cd $(BASEDIR)
  739. else
  740. cd $(PACKDIR) ; $(ZIPPROG) $(PACKAGEDIR)/$(ZIPNAME) * ; cd $(BASEDIR)
  741. endif
  742. $(DELTREE) $(PACKDIR)
  743. endif
  744. #####################################################################
  745. # Clean rules
  746. #####################################################################
  747. .PHONY: fpc_clean fpc_cleanall
  748. ifdef EXTRACLEANUNITS
  749. override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRACLEANUNITS))
  750. endif
  751. ifdef CLEANPPUFILES
  752. ifdef PPUFILES
  753. CLEANPPULINKFILES=$(shell $(PPUFILES) $(CLEANPPUFILES))
  754. endif
  755. endif
  756. fpc_clean: $(CLEANTARGET)
  757. ifdef CLEANEXEFILES
  758. -$(DEL) $(CLEANEXEFILES)
  759. endif
  760. ifdef CLEANPPUFILES
  761. -$(DEL) $(CLEANPPUFILES)
  762. endif
  763. ifneq ($(CLEANPPULINKFILES),)
  764. -$(DEL) $(CLEANPPULINKFILES)
  765. endif
  766. ifdef EXTRACLEANFILES
  767. -$(DEL) $(EXTRACLEANFILES)
  768. endif
  769. -$(DEL) $(PPAS) link.res log
  770. fpc_cleanall:
  771. ifdef CLEANEXEFILES
  772. -$(DEL) $(CLEANEXEFILES)
  773. endif
  774. -$(DEL) *$(OEXT) *$(PPUEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
  775. -$(DELTREE) *$(SMARTEXT)
  776. -$(DEL) $(PPAS) link.res log
  777. #####################################################################
  778. # Info rules
  779. #####################################################################
  780. .PHONY: fpc_info fpc_cfginfo fpc_objectinfo fpc_toolsinfo fpc_installinfo \
  781. fpc_dirinfo
  782. fpc_info: $(FPCINFO)
  783. fpc_infocfg:
  784. @$(ECHO)
  785. @$(ECHO) == Configuration info ==
  786. @$(ECHO)
  787. @$(ECHO) FPC....... $(FPC)
  788. @$(ECHO) Version... $(FPC_VERSION)
  789. @$(ECHO) CPU....... $(CPU_TARGET)
  790. @$(ECHO) Source.... $(OS_SOURCE)
  791. @$(ECHO) Target.... $(OS_TARGET)
  792. @$(ECHO)
  793. fpc_infoobjects:
  794. @$(ECHO)
  795. @$(ECHO) == Object info ==
  796. @$(ECHO)
  797. @$(ECHO) LoaderObjects..... $(LOADEROBJECTS)
  798. @$(ECHO) UnitObjects....... $(UNITOBJECTS)
  799. @$(ECHO) ExeObjects........ $(EXEOBJECTS)
  800. @$(ECHO)
  801. @$(ECHO) ExtraCleanUnits... $(EXTRACLEANUNITS)
  802. @$(ECHO) ExtraCleanFiles... $(EXTRACLEANFILES)
  803. @$(ECHO)
  804. @$(ECHO) ExtraInstallUnits. $(EXTRAINSTALLUNITS)
  805. @$(ECHO) ExtraInstallFiles. $(EXTRAINSTALLFILES)
  806. @$(ECHO)
  807. fpc_infoinstall:
  808. @$(ECHO)
  809. @$(ECHO) == Install info ==
  810. @$(ECHO)
  811. ifdef DATE
  812. @$(ECHO) DateStr.............. $(DATESTR)
  813. endif
  814. @$(ECHO) PackageSuffix........ $(PACKAGESUFFIX)
  815. @$(ECHO)
  816. @$(ECHO) BaseInstallDir....... $(BASEINSTALLDIR)
  817. @$(ECHO) BinInstallDir........ $(BININSTALLDIR)
  818. @$(ECHO) LibInstallDir........ $(LIBINSTALLDIR)
  819. @$(ECHO) UnitInstallDir....... $(UNITINSTALLDIR)
  820. @$(ECHO) SourceInstallDir..... $(SOURCEINSTALLDIR)
  821. @$(ECHO) DocInstallDir........ $(DOCINSTALLDIR)
  822. @$(ECHO) ExtraInstallDir...... $(EXTRAINSTALLDIR)
  823. @$(ECHO)
  824. #####################################################################
  825. # Users rules
  826. #####################################################################
  827. #####################################################################
  828. # Setup Targets
  829. #####################################################################
  830. ifeq ($(OS_TARGET),win32)
  831. ifdef CMP
  832. override DIFF:=$(CMP) -i138
  833. endif
  834. endif
  835. # Used to avoid unnecessary steps in remake3
  836. ifdef DIFF
  837. ifdef OLDFPC
  838. DIFFRESULT:=$(shell $(DIFF) $(OLDFPC) $(FPC))
  839. else
  840. DIFFRESULT=Not equal
  841. endif
  842. else
  843. DIFFRESULT=No diff program
  844. endif
  845. #####################################################################
  846. # Setup os-independent filenames
  847. #####################################################################
  848. FPCEXENAME=pp$(EXEEXT)
  849. EXENAME=ppc$(CPUSUF)$(EXEEXT)
  850. TEMPNAME=ppc$(EXEEXT)
  851. TEMPNAME1=ppc1$(EXEEXT)
  852. TEMPNAME2=ppc2$(EXEEXT)
  853. TEMPNAME3=ppc3$(EXEEXT)
  854. MAKEDEP=ppdep$(EXEEXT)
  855. MSG2INC=msg2inc$(EXEEXT)
  856. #####################################################################
  857. # CPU targets
  858. #####################################################################
  859. alpha:
  860. $(MAKE) ALPHA=1 all
  861. i386:
  862. $(MAKE) I386=1 all
  863. m68k:
  864. $(MAKE) M68K=1 all
  865. powerpc:
  866. $(MAKE) POWERPC=1 all
  867. #####################################################################
  868. # Default makefile
  869. #####################################################################
  870. all: $(EXENAME)
  871. $(MAKE) echotime
  872. ifeq ($(MAKELEVEL),0)
  873. ifndef STARTTIME
  874. ifdef DATE
  875. STARTTIME:=$(shell $(DATE) +%T)
  876. else
  877. STARTTIME:=unknown
  878. endif
  879. endif
  880. endif
  881. export STARTTIME
  882. ifdef DATE
  883. ENDTIME=$(shell $(DATE) +%T)
  884. else
  885. ENDTIME:=unknown
  886. endif
  887. echotime:
  888. @echo Start $(STARTTIME) now $(ENDTIME)
  889. ifndef DIFFRESULT
  890. next :
  891. @echo $(OLDFPC) and $(FPC) are equal
  892. $(COPY) $(FPC) $(EXENAME)
  893. else
  894. next :
  895. $(MAKE) execlean
  896. $(MAKE) -C $(RTLDIR) clean
  897. $(MAKE) -C $(RTLDIR) 'FPC=$(FPC)' 'OPT=$(RTLOPTS)' all
  898. $(MAKE) clean
  899. $(MAKE) all
  900. endif
  901. clean : execlean fpc_cleanall
  902. execlean :
  903. -$(DEL) ppc386$(EXEEXT) ppcaxp$(EXEEXT) ppc68k$(EXEEXT) ppcppc$(EXEEXT)
  904. distclean: clean
  905. -$(DEL) $(TEMPNAME) $(TEMPNAME1) $(TEMPNAME2) $(TEMPNAME3) $(MSG2INC)
  906. #####################################################################
  907. # Include depencies
  908. #####################################################################
  909. $(MAKEDEP): $(UTILS)/ppdep.pp
  910. $(COMPILER) $(UTILS)/ppdep.pp
  911. $(COPY) $(UTILS)/$(MAKEDEP) $(MAKEDEP)
  912. dependencies : $(MAKEDEP)
  913. $(MAKEDEP) pp.pas $(FPCOPTDEF) $(LOCALDEF) '-F$$(COMPILER) $$(LOCALOPT)' > depend
  914. ifdef USEDEPEND
  915. include depend
  916. endif
  917. #####################################################################
  918. # Make targets
  919. #####################################################################
  920. $(MSG2INC): $(COMPILERUTILS)/msg2inc.pp
  921. $(COMPILER) -FE. $(COMPILERUTILS)/msg2inc.pp
  922. # The msgtxt.inc only depends on the error?.msg file, not on msg2inc,
  923. # because that one will be new almost everytime
  924. msgtxt.inc: $(MSGFILE)
  925. $(MAKE) $(MSG2INC)
  926. $(MSG2INC) $(MSGFILE) msg msg
  927. msg: msgtxt.inc
  928. # Make only the compiler
  929. ifndef COMPLETE
  930. $(EXENAME) : $(wildcard *.pas) $(wildcard *.inc) msg
  931. $(COMPILER) pp.pas
  932. $(EXECPPAS)
  933. $(MOVE) $(FPCEXENAME) $(EXENAME)
  934. else
  935. $(EXENAME) : $(wildcard *.pas) $(wildcard *.inc) msg
  936. $(COMPILER) pp.pas
  937. $(EXECPPAS)
  938. $(COMPILER) pp.pas
  939. $(EXECPPAS)
  940. $(COMPILER) pp.pas
  941. $(EXECPPAS)
  942. $(MOVE) $(FPCEXENAME) $(EXENAME)
  943. endif
  944. tokens.dat : $(wildcard *.pas) $(wildcard *.inc)
  945. $(COMPILER) tokendat.pas
  946. ./tokendat
  947. # This target remakes the units with the currently made version
  948. remake: $(EXENAME)
  949. $(MOVE) $(EXENAME) $(TEMPNAME)
  950. $(MAKE) execlean
  951. $(MAKE) -C $(RTLDIR) clean
  952. $(MAKE) clean
  953. $(MAKE) 'FPC=$(BASEDIR)/$(TEMPNAME)' all
  954. remake3: $(TEMPNAME3)
  955. $(MAKE) 'FPC=$(BASEDIR)/$(TEMPNAME3)' 'OLDFPC=$(BASEDIR)/$(TEMPNAME2)' next
  956. $(DIFF) $(TEMPNAME3) $(EXENAME)
  957. $(TEMPNAME1) : $(EXENAME)
  958. -$(DEL) $(TEMPNAME1)
  959. $(MOVE) $(EXENAME) $(TEMPNAME1)
  960. $(TEMPNAME2) : $(TEMPNAME1)
  961. $(MAKE) 'FPC=$(BASEDIR)/$(TEMPNAME1)' 'OLDFPC=' next
  962. -$(DEL) $(TEMPNAME2)
  963. $(MOVE) $(EXENAME) $(TEMPNAME2)
  964. $(TEMPNAME3) : $(TEMPNAME2)
  965. $(MAKE) 'FPC=$(BASEDIR)/$(TEMPNAME2)' 'OLDFPC=$(BASEDIR)/$(TEMPNAME1)' next
  966. -$(DEL) $(TEMPNAME3)
  967. $(MOVE) $(EXENAME) $(TEMPNAME3)
  968. cycle:
  969. $(MAKE) clean
  970. $(MAKE) -C $(RTLDIR) clean
  971. $(MAKE) -C $(RTLDIR) 'OPT=$(RTLOPTS)' all
  972. $(MAKE) remake3
  973. $(MAKE) echotime
  974. cycledep:
  975. $(MAKE) cycle USEDEPEND=1
  976. cvstest:
  977. $(MAKE) cycle 'LOCALOPT=-n -Se' 'RTLOPTS=-n -Se'
  978. #####################################################################
  979. # Installation
  980. #####################################################################
  981. # This will only install the ppc386.exe, not the message files etc.
  982. quickinstall:
  983. ifdef inlinux
  984. $(MKDIR) $(LIBINSTALLDIR)
  985. $(INSTALLEXE) $(EXENAME) $(LIBINSTALLDIR)
  986. else
  987. $(MKDIR) $(BININSTALLDIR)
  988. ifdef UPXPROG
  989. -$(UPXPROG) $(EXENAME)
  990. endif
  991. $(INSTALLEXE) $(EXENAME) $(BININSTALLDIR)
  992. endif
  993. installlib: quickinstall
  994. ifdef inlinux
  995. $(INSTALLEXE) $(COMPILERUTILS)/samplecfg $(LIBINSTALLDIR)/samplecfg
  996. endif
  997. $(MKDIR) $(MSGINSTALLDIR)
  998. $(INSTALL) $(MSGFILES) $(MSGINSTALLDIR)
  999. # this also installs the link /usr/bin/ppc386. The .deb does that later
  1000. install: installlib
  1001. ifdef inlinux
  1002. $(MKDIR) $(BININSTALLDIR)
  1003. ln -sf $(LIBINSTALLDIR)/ppc386 $(BININSTALLDIR)/ppc386
  1004. endif
  1005. #####################################################################
  1006. # Misc
  1007. #####################################################################
  1008. rtl :
  1009. $(MAKE) -C $(RTLDIR) all
  1010. rtlclean :
  1011. $(MAKE) -C $(RTLDIR) clean
  1012. rtlinstall:
  1013. $(MAKE) -C $(RTLDIR) install
  1014. #####################################################################
  1015. # local user configurable file
  1016. # in makefile.loc you can add any desired target
  1017. #####################################################################
  1018. localmake:=$(strip $(wildcard makefile.loc))
  1019. ifdef localmake
  1020. include ./$(localmake)
  1021. endif
  1022. #####################################################################
  1023. # M68k test targets
  1024. #####################################################################
  1025. # just a quick way to get ppc68k
  1026. # needs to be after makefile.def for PASFILES INCFILES
  1027. $(M68KEXENAME): $(PASFILES) $(INCFILES)
  1028. $(MAKE) clean
  1029. $(FPC) -uI386 -uSUPPORT_MMX -dm68k -o$(M68KEXENAME) pp
  1030. $(MAKE) clean