Makefile 22 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094
  1. #
  2. # Makefile generated by fpcmake v0.99.13 on 1999-12-19 16:02
  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. # Compatibility with old makefiles
  59. ifdef PP
  60. export FPC=$(PP)
  61. else
  62. ifdef inOS2
  63. export FPC=ppos2$(EXEEXT)
  64. else
  65. export FPC=ppc386$(EXEEXT)
  66. endif
  67. endif
  68. endif
  69. # Target OS
  70. ifndef OS_TARGET
  71. export OS_TARGET:=$(shell $(FPC) -iTO)
  72. endif
  73. # Source OS
  74. ifndef OS_SOURCE
  75. export OS_SOURCE:=$(shell $(FPC) -iSO)
  76. endif
  77. # Target CPU
  78. ifndef CPU_TARGET
  79. export CPU_TARGET:=$(shell $(FPC) -iTP)
  80. endif
  81. # Source CPU
  82. ifndef CPU_SOURCE
  83. export CPU_SOURCE:=$(shell $(FPC) -iSP)
  84. endif
  85. # FPC version
  86. ifndef FPC_VERSION
  87. export FPC_VERSION:=$(shell $(FPC) -iV)
  88. endif
  89. #####################################################################
  90. # Default Settings
  91. #####################################################################
  92. # Release ? Then force OPT and don't use extra opts via commandline
  93. ifndef REDIRFILE
  94. REDIRFILE=log
  95. endif
  96. ifdef RELEASE
  97. override OPT:=-Xs -OG2p3 -n
  98. endif
  99. # Verbose settings (warning,note,info)
  100. ifdef VERBOSE
  101. override OPT+=-vwni
  102. endif
  103. ifdef REDIR
  104. ifndef inlinux
  105. override FPC=redir -eo $(FPC)
  106. endif
  107. # set the verbosity to max
  108. override OPT+=-va
  109. override REDIR:= >> $(REDIRFILE)
  110. endif
  111. #####################################################################
  112. # User Settings
  113. #####################################################################
  114. # Pre Settings
  115. # when making a full version include the compiler
  116. ifeq ($(FULL),1)
  117. override COMPUNITDIR+=../../compiler
  118. else
  119. override COMPUNITDIR+=../fake/compiler
  120. endif
  121. # when including debugger include the gdbinterface
  122. ifndef GDBINT
  123. GDBINT=gdbint
  124. endif
  125. ifeq ($(GDB),1)
  126. GDBUNITDIR+=$(PACKAGEDIR)/$(GDBINT)
  127. GDBLIBDIR+=$(PACKAGEDIR)/$(GDBINT)/libgdb/$(OS_TARGET)
  128. GDBOBJDIR+=$(PACKAGEDIR)/$(GDBINT)/libgdb/$(OS_TARGET)
  129. ifeq ($(OS_TARGET),go32v2)
  130. ifneq ($(DJDIR),)
  131. GDBLIBDIR+=$(DJDIR)/lib
  132. endif
  133. endif
  134. else
  135. override GDBUNITDIR+=../fake/gdb
  136. endif
  137. # Targets
  138. override EXEOBJECTS+=fp
  139. # Clean
  140. # Install
  141. ZIPTARGET=install
  142. # Defaults
  143. override NEEDOPT=-Sg
  144. # Directories
  145. ifndef FPCDIR
  146. FPCDIR=../..
  147. endif
  148. ifndef PACKAGEDIR
  149. PACKAGEDIR=$(FPCDIR)/packages
  150. endif
  151. ifndef COMPONENTDIR
  152. COMPONENTDIR=$(FPCDIR)/components
  153. endif
  154. override NEEDUNITDIR=$(COMPUNITDIR) $(GDBUNITDIR)
  155. override NEEDLIBDIR=$(GDBLIBDIR)
  156. override NEEDOBJDIR=$(GDBOBJDIR)
  157. # Packages
  158. override PACKAGES+=api fv gdbint
  159. override NEEDUNITDIR+=$(addprefix $(PACKAGEDIR)/,$(PACKAGES))
  160. # Libraries
  161. override NEEDGCCLIB=1
  162. # Info
  163. INFOTARGET=fpc_infocfg fpc_infoobjects fpc_infoinstall
  164. # Post Settings
  165. ifeq ($(FULL),1)
  166. override NEEDOPT+=-dBrowserCol -dGDB -Sg
  167. endif
  168. #####################################################################
  169. # Default Directories
  170. #####################################################################
  171. # Base dir
  172. ifdef PWD
  173. BASEDIR:=$(shell $(PWD))
  174. else
  175. BASEDIR=.
  176. endif
  177. # this can be set to 'rtl' when the RTL units are installed
  178. ifndef UNITPREFIX
  179. UNITPREFIX=units
  180. endif
  181. # set the prefix directory where to install everything
  182. ifndef PREFIXINSTALLDIR
  183. ifdef inlinux
  184. export PREFIXINSTALLDIR=/usr
  185. else
  186. export PREFIXINSTALLDIR=/pp
  187. endif
  188. endif
  189. # create fcldir,rtldir,unitdir
  190. ifdef FPCDIR
  191. override FPCDIR:=$(subst \,/,$(FPCDIR))
  192. ifneq ($(FPCDIR),.)
  193. override RTLDIR=$(FPCDIR)/rtl/$(OS_TARGET)
  194. override FCLDIR=$(FPCDIR)/fcl/$(OS_TARGET)
  195. override UNITSDIR=$(FPCDIR)/units/$(OS_TARGET)
  196. endif
  197. endif
  198. # On linux, try to find where libgcc.a is.
  199. ifdef inlinux
  200. ifndef GCCLIBDIR
  201. export GCCLIBDIR:=$(shell dirname `(gcc -v 2>&1)| head -n 1| awk '{ print $$4 } '`)
  202. endif
  203. endif
  204. #####################################################################
  205. # Install Directories
  206. #####################################################################
  207. # set the base directory where to install everything
  208. ifndef BASEINSTALLDIR
  209. ifdef inlinux
  210. BASEINSTALLDIR=$(PREFIXINSTALLDIR)/lib/fpc/$(FPC_VERSION)
  211. else
  212. BASEINSTALLDIR=$(PREFIXINSTALLDIR)
  213. endif
  214. endif
  215. # set the directory where to install the binaries
  216. ifndef BININSTALLDIR
  217. ifdef inlinux
  218. BININSTALLDIR=$(PREFIXINSTALLDIR)/bin
  219. else
  220. BININSTALLDIR=$(BASEINSTALLDIR)/bin/$(OS_TARGET)
  221. endif
  222. endif
  223. # set the directory where to install the units.
  224. ifndef UNITINSTALLDIR
  225. UNITINSTALLDIR=$(BASEINSTALLDIR)/$(UNITPREFIX)/$(OS_TARGET)
  226. endif
  227. # Where to install shared libraries
  228. ifndef LIBINSTALLDIR
  229. ifdef inlinux
  230. LIBINSTALLDIR=$(PREFIXINSTALLDIR)/lib
  231. else
  232. LIBINSTALLDIR=$(UNITINSTALLDIR)
  233. endif
  234. endif
  235. # Where the source files will be stored
  236. ifndef SOURCEINSTALLDIR
  237. ifdef inlinux
  238. SOURCEINSTALLDIR=$(PREFIXINSTALLDIR)/src/fpc-$(FPC_VERSION)
  239. else
  240. SOURCEINSTALLDIR=$(BASEINSTALLDIR)/source
  241. endif
  242. endif
  243. # Where the doc files will be stored
  244. ifndef DOCINSTALLDIR
  245. ifdef inlinux
  246. DOCINSTALLDIR=$(PREFIXINSTALLDIR)/doc/fpc/$(FPC_VERSION)
  247. else
  248. DOCINSTALLDIR=$(BASEINSTALLDIR)/doc
  249. endif
  250. endif
  251. # Where the some extra (data)files will be stored
  252. ifndef EXTRAINSTALLDIR
  253. EXTRAINSTALLDIR=$(BASEINSTALLDIR)
  254. endif
  255. #####################################################################
  256. # Compiler Command Line
  257. #####################################################################
  258. # Load commandline OPTDEF and add FPC_CPU define
  259. override FPCOPTDEF:=-d$(CPU_TARGET)
  260. # Load commandline OPT and add target and unit dir to be sure
  261. ifneq ($(OS_TARGET),$(OS_SOURCE))
  262. override FPCOPT+=-T$(OS_TARGET)
  263. endif
  264. ifdef NEEDOPT
  265. override FPCOPT+=$(NEEDOPT)
  266. endif
  267. ifdef RTLDIR
  268. override FPCOPT+=-Fu$(RTLDIR)
  269. endif
  270. ifdef UNITSDIR
  271. override FPCOPT+=-Fu$(UNITSDIR)
  272. endif
  273. ifdef NEEDUNITDIR
  274. override FPCOPT+=$(addprefix -Fu,$(NEEDUNITDIR))
  275. endif
  276. ifdef NEEDLIBDIR
  277. override FPCOPT+=$(addprefix -Fl,$(NEEDLIBDIR))
  278. endif
  279. ifdef NEEDOBJDIR
  280. override FPCOPT+=$(addprefix -Fo,$(NEEDOBJDIR))
  281. endif
  282. # Add GCC lib path if asked
  283. ifdef GCCLIBDIR
  284. override FPCOPT+=-Fl$(GCCLIBDIR)
  285. endif
  286. # Smartlinking
  287. ifdef SMARTLINK
  288. override FPCOPT+=-CX
  289. endif
  290. # Debug
  291. ifdef DEBUG
  292. override FPCOPT+=-g
  293. endif
  294. # Add commandline options
  295. ifdef OPT
  296. override FPCOPT+=$(OPT)
  297. endif
  298. ifdef UNITDIR
  299. override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
  300. endif
  301. ifdef LIBDIR
  302. override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
  303. endif
  304. ifdef OBJDIR
  305. override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
  306. endif
  307. ifdef INCDIR
  308. override FPCOPT+=$(addprefix -Fi,$(INCDIR))
  309. endif
  310. # Add defines from FPCOPTDEF to FPCOPT
  311. ifdef FPCOPTDEF
  312. override FPCOPT+=$(FPCOPTDEF)
  313. endif
  314. # Error file ?
  315. ifdef ERRORFILE
  316. override FPCOPT+=-Fr$(ERRORFILE)
  317. endif
  318. # Was a config file specified ?
  319. ifdef CFGFILE
  320. override FPCOPT+=@$(CFGFILE)
  321. endif
  322. # For win32 the options are passed using the environment variable FPCEXTCMD
  323. ifeq ($(OS_SOURCE),win32)
  324. override FPCEXTCMD:=$(FPCOPT)
  325. override FPCOPT:=!FPCEXTCMD
  326. export FPCEXTCMD
  327. endif
  328. # Compiler commandline
  329. override COMPILER:=$(FPC) $(FPCOPT)
  330. #####################################################################
  331. # Shell tools
  332. #####################################################################
  333. # To copy pograms
  334. ifndef COPY
  335. export COPY:=cp -fp
  336. endif
  337. # Copy a whole tree
  338. ifndef COPYTREE
  339. export COPYTREE:=cp -rfp
  340. endif
  341. # To move pograms
  342. ifndef MOVE
  343. export MOVE:=mv -f
  344. endif
  345. # Check delete program
  346. ifndef DEL
  347. export DEL:=rm -f
  348. endif
  349. # Check deltree program
  350. ifndef DELTREE
  351. export DELTREE:=rm -rf
  352. endif
  353. # To install files
  354. ifndef INSTALL
  355. ifdef inlinux
  356. export INSTALL:=install -m 644
  357. else
  358. export INSTALL:=$(COPY)
  359. endif
  360. endif
  361. # To install programs
  362. ifndef INSTALLEXE
  363. ifdef inlinux
  364. export INSTALLEXE:=install -m 755
  365. else
  366. export INSTALLEXE:=$(COPY)
  367. endif
  368. endif
  369. # To make a directory.
  370. ifndef MKDIR
  371. ifdef inlinux
  372. export MKDIR:=install -m 755 -d
  373. else
  374. export MKDIR:=ginstall -m 755 -d
  375. endif
  376. endif
  377. #####################################################################
  378. # Default Tools
  379. #####################################################################
  380. # assembler, redefine it if cross compiling
  381. ifndef AS
  382. AS=as
  383. endif
  384. # linker, but probably not used
  385. ifndef LD
  386. LD=ld
  387. endif
  388. # ppas.bat / ppas.sh
  389. ifdef inlinux
  390. PPAS=ppas.sh
  391. else
  392. ifdef inOS2
  393. PPAS=ppas.cmd
  394. else
  395. PPAS=ppas.bat
  396. endif
  397. endif
  398. # also call ppas if with command option -s
  399. ifeq (,$(findstring -s ,$(COMPILER)))
  400. EXECPPAS=
  401. else
  402. EXECPPAS:=@$(PPAS)
  403. endif
  404. # ldconfig to rebuild .so cache
  405. ifdef inlinux
  406. LDCONFIG=ldconfig
  407. else
  408. LDCONFIG=
  409. endif
  410. # echo
  411. ifndef ECHO
  412. ECHO:=$(strip $(wildcard $(addsuffix /echo$(EXEEXT),$(SEARCHPATH))))
  413. ifeq ($(ECHO),)
  414. export ECHO:=echo
  415. else
  416. export ECHO:=$(firstword $(ECHO))
  417. endif
  418. endif
  419. # ppdep
  420. ifndef PPDEP
  421. PPDEP:=$(strip $(wildcard $(addsuffix /ppdep$(EXEEXT),$(SEARCHPATH))))
  422. ifeq ($(PPDEP),)
  423. PPDEP=
  424. else
  425. export PPDEP:=$(firstword $(PPDEP))
  426. endif
  427. endif
  428. # ppumove
  429. ifndef PPUMOVE
  430. PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(EXEEXT),$(SEARCHPATH))))
  431. ifeq ($(PPUMOVE),)
  432. PPUMOVE=
  433. else
  434. export PPUMOVE:=$(firstword $(PPUMOVE))
  435. endif
  436. endif
  437. # ppufiles
  438. ifndef PPUFILES
  439. PPUFILES:=$(strip $(wildcard $(addsuffix /ppufiles$(EXEEXT),$(SEARCHPATH))))
  440. ifeq ($(PPUFILES),)
  441. PPUFILES=
  442. else
  443. export PPUFILES:=$(firstword $(PPUFILES))
  444. endif
  445. endif
  446. # Look if UPX is found for go32v2 and win32. We can't use $UPX becuase
  447. # upx uses that one itself (PFV)
  448. ifndef UPXPROG
  449. ifeq ($(OS_TARGET),go32v2)
  450. UPXPROG:=1
  451. endif
  452. ifeq ($(OS_TARGET),win32)
  453. UPXPROG:=1
  454. endif
  455. ifdef UPXPROG
  456. UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(EXEEXT),$(SEARCHPATH))))
  457. ifeq ($(UPXPROG),)
  458. UPXPROG=
  459. else
  460. export UPXPROG:=$(firstword $(UPXPROG))
  461. endif
  462. else
  463. UPXPROG=
  464. endif
  465. endif
  466. # gdate/date
  467. ifndef DATE
  468. DATE:=$(strip $(wildcard $(addsuffix /date$(EXEEXT),$(SEARCHPATH))))
  469. ifeq ($(DATE),)
  470. DATE:=$(strip $(wildcard $(addsuffix /gdate$(EXEEXT),$(SEACHPATH))))
  471. ifeq ($(DATE),)
  472. DATE=
  473. else
  474. export DATE:=$(firstword $(DATE))
  475. endif
  476. else
  477. export DATE:=$(firstword $(DATE))
  478. endif
  479. endif
  480. ifdef DATE
  481. DATESTR:=$(shell $(DATE) +%Y%m%d)
  482. else
  483. DATESTR=
  484. endif
  485. # ZipProg, you can't use Zip as the var name (PFV)
  486. ifndef ZIPPROG
  487. ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(EXEEXT),$(SEARCHPATH))))
  488. ifeq ($(ZIPPROG),)
  489. ZIPPROG=
  490. else
  491. export ZIPPROG:=$(firstword $(ZIPPROG)) -D9 -r
  492. endif
  493. endif
  494. ifndef ZIPEXT
  495. ZIPEXT=.zip
  496. endif
  497. #####################################################################
  498. # Default extensions
  499. #####################################################################
  500. # Default needed extensions (Go32v2,Linux)
  501. LOADEREXT=.as
  502. PPLEXT=.ppl
  503. PPUEXT=.ppu
  504. OEXT=.o
  505. ASMEXT=.s
  506. SMARTEXT=.sl
  507. STATICLIBEXT=.a
  508. SHAREDLIBEXT=.so
  509. PACKAGESUFFIX=
  510. FPCMADE=fpcmade
  511. # Go32v1
  512. ifeq ($(OS_TARGET),go32v1)
  513. PPUEXT=.pp1
  514. OEXT=.o1
  515. ASMEXT=.s1
  516. SMARTEXT=.sl1
  517. STATICLIBEXT=.a1
  518. SHAREDLIBEXT=.so1
  519. PACKAGESUFFIX=v1
  520. FPCMADE=fpcmade.v1
  521. endif
  522. # Go32v2
  523. ifeq ($(OS_TARGET),go32v2)
  524. PACKAGESUFFIX=go32
  525. FPCMADE=fpcmade.dos
  526. endif
  527. # Linux
  528. ifeq ($(OS_TARGET),linux)
  529. PACKAGESUFFIX=linux
  530. FPCMADE=fpcmade.lnx
  531. endif
  532. # Win32
  533. ifeq ($(OS_TARGET),win32)
  534. PPUEXT=.ppw
  535. OEXT=.ow
  536. ASMEXT=.sw
  537. SMARTEXT=.slw
  538. STATICLIBEXT=.aw
  539. SHAREDLIBEXT=.dll
  540. PACKAGESUFFIX=win32
  541. FPCMADE=fpcmade.w32
  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. FPCMADE=fpcmade.os2
  553. endif
  554. # library prefix
  555. LIBPREFIX=lib
  556. ifeq ($(OS_TARGET),go32v2)
  557. LIBPREFIX=
  558. endif
  559. ifeq ($(OS_TARGET),go32v1)
  560. LIBPREFIX=
  561. endif
  562. # determine which .pas extension is used
  563. ifndef PASEXT
  564. ifdef EXEOBJECTS
  565. override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(EXEOBJECTS)))))
  566. else
  567. override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(UNITOBJECTS)))))
  568. endif
  569. ifeq ($(TESTPAS),)
  570. PASEXT=.pp
  571. else
  572. PASEXT=.pas
  573. endif
  574. endif
  575. #####################################################################
  576. # Standard rules
  577. #####################################################################
  578. all: fpc_all
  579. debug: fpc_debug
  580. smart: fpc_smart
  581. shared: fpc_shared
  582. showinstall: fpc_showinstall
  583. sourceinstall: fpc_sourceinstall
  584. zipinstall: fpc_zipinstall
  585. zipinstalladd: fpc_zipinstalladd
  586. cleanall: fpc_cleanall
  587. info: fpc_info
  588. .PHONY: all debug smart shared showinstall sourceinstall zipinstall zipinstalladd cleanall info
  589. #####################################################################
  590. # Package depends
  591. #####################################################################
  592. ifneq ($(wildcard $(RTLDIR)),)
  593. ifeq ($(wildcard $(RTLDIR)/$(FPCMADE)),)
  594. override COMPILEPACKAGES+=rtl
  595. rtl_package:
  596. $(MAKE) -C $(RTLDIR) all
  597. endif
  598. endif
  599. PACKAGEAPI=1
  600. PACKAGEFV=1
  601. PACKAGEGDBINT=1
  602. ifdef PACKAGEAPI
  603. ifneq ($(wildcard $(PACKAGEDIR)/api),)
  604. ifeq ($(wildcard $(PACKAGEDIR)/api/$(FPCMADE)),)
  605. override COMPILEPACKAGES+=api
  606. api_package:
  607. $(MAKE) -C $(PACKAGEDIR)/api all
  608. endif
  609. endif
  610. endif
  611. ifdef PACKAGEFV
  612. ifneq ($(wildcard $(PACKAGEDIR)/fv),)
  613. ifeq ($(wildcard $(PACKAGEDIR)/fv/$(FPCMADE)),)
  614. override COMPILEPACKAGES+=fv
  615. fv_package:
  616. $(MAKE) -C $(PACKAGEDIR)/fv all
  617. endif
  618. endif
  619. endif
  620. ifdef PACKAGEGDBINT
  621. ifneq ($(wildcard $(PACKAGEDIR)/gdbint),)
  622. ifeq ($(wildcard $(PACKAGEDIR)/gdbint/$(FPCMADE)),)
  623. override COMPILEPACKAGES+=gdbint
  624. gdbint_package:
  625. $(MAKE) -C $(PACKAGEDIR)/gdbint all
  626. endif
  627. endif
  628. endif
  629. .PHONY: rtl_package api_package fv_package gdbint_package
  630. #####################################################################
  631. # Exes
  632. #####################################################################
  633. .PHONY: fpc_exes
  634. override EXEFILES=$(addsuffix $(EXEEXT),$(EXEOBJECTS))
  635. override EXEOFILES=$(addsuffix $(OEXT),$(EXEOBJECTS))
  636. override ALLTARGET+=fpc_exes
  637. override INSTALLEXEFILES+=$(EXEFILES)
  638. override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
  639. fpc_exes: $(EXEFILES)
  640. #####################################################################
  641. # General compile rules
  642. #####################################################################
  643. .PHONY: fpc_all fpc_debug
  644. $(FPCMADE):
  645. @$(ECHO) Compiled > $(FPCMADE)
  646. fpc_all: $(addsuffix _package,$(COMPILEPACKAGES)) \
  647. $(addsuffix _component,$(COMPILECOMPONENTS)) \
  648. $(ALLTARGET) $(FPCMADE)
  649. fpc_debug:
  650. $(MAKE) all DEBUG=1
  651. # General compile rules, available for both possible PASEXT
  652. .SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp
  653. %$(PPUEXT): %.pp
  654. $(COMPILER) $< $(REDIR)
  655. $(EXECPASS)
  656. %$(PPUEXT): %.pas
  657. $(COMPILER) $< $(REDIR)
  658. $(EXECPASS)
  659. %$(EXEEXT): %.pp
  660. $(COMPILER) $< $(REDIR)
  661. $(EXECPASS)
  662. %$(EXEEXT): %.pas
  663. $(COMPILER) $< $(REDIR)
  664. $(EXECPASS)
  665. #####################################################################
  666. # Library
  667. #####################################################################
  668. .PHONY: fpc_smart fpc_shared
  669. # Default sharedlib units are all unit objects
  670. ifndef SHAREDLIBUNITOBJECTS
  671. SHAREDLIBUNITOBJECTS:=$(UNITOBJECTS)
  672. endif
  673. fpc_smart:
  674. $(MAKE) all SMARTLINK=1
  675. fpc_shared: all
  676. ifdef inlinux
  677. ifndef LIBNAME
  678. @$(ECHO) LIBNAME not set
  679. else
  680. $(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBNAME)
  681. endif
  682. else
  683. @$(ECHO) Shared Libraries not supported
  684. endif
  685. #####################################################################
  686. # Install rules
  687. #####################################################################
  688. .PHONY: fpc_showinstall fpc_install
  689. ifdef EXTRAINSTALLUNITS
  690. override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS))
  691. endif
  692. ifdef INSTALLPPUFILES
  693. ifdef PPUFILES
  694. ifdef inlinux
  695. INSTALLPPULINKFILES:=$(shell $(PPUFILES) -S -O $(INSTALLPPUFILES))
  696. INSTALLPPULIBFILES:=$(shell $(PPUFILES) -L $(INSTALLPPUFILES))
  697. else
  698. INSTALLPPULINKFILES:=$(shell $(PPUFILES) $(INSTALLPPUFILES))
  699. endif
  700. else
  701. INSTALLPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)))
  702. endif
  703. endif
  704. fpc_showinstall: $(SHOWINSTALLTARGET)
  705. ifdef INSTALLEXEFILES
  706. @$(ECHO) $(addprefix "\n"$(BININSTALLDIR)/,$(INSTALLEXEFILES))
  707. endif
  708. ifdef INSTALLPPUFILES
  709. @$(ECHO) $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPUFILES))
  710. ifneq ($(INSTALLPPULINKFILES),)
  711. @$(ECHO) $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPULINKFILES))
  712. endif
  713. ifneq ($(INSTALLPPULIBFILES),)
  714. @$(ECHO) $(addprefix "\n"$(LIBINSTALLDIR)/,$(INSTALLPPULIBFILES))
  715. endif
  716. endif
  717. ifdef EXTRAINSTALLFILES
  718. @$(ECHO) $(addprefix "\n"$(EXTRAINSTALLDIR)/,$(EXTRAINSTALLFILES))
  719. endif
  720. fpc_install: $(INSTALLTARGET)
  721. # Create UnitInstallFiles
  722. ifdef INSTALLEXEFILES
  723. $(MKDIR) $(BININSTALLDIR)
  724. # Compress the exes if upx is defined
  725. ifdef UPXPROG
  726. -$(UPXPROG) $(INSTALLEXEFILES)
  727. endif
  728. $(INSTALLEXE) $(INSTALLEXEFILES) $(BININSTALLDIR)
  729. endif
  730. ifdef INSTALLPPUFILES
  731. $(MKDIR) $(UNITINSTALLDIR)
  732. $(INSTALL) $(INSTALLPPUFILES) $(UNITINSTALLDIR)
  733. ifneq ($(INSTALLPPULINKFILES),)
  734. $(INSTALL) $(INSTALLPPULINKFILES) $(UNITINSTALLDIR)
  735. endif
  736. ifneq ($(INSTALLPPULIBFILES),)
  737. $(MKDIR) $(LIBINSTALLDIR)
  738. $(INSTALL) $(INSTALLPPULIBFILES) $(LIBINSTALLDIR)
  739. endif
  740. endif
  741. ifdef EXTRAINSTALLFILES
  742. $(MKDIR) $(EXTRAINSTALLDIR)
  743. $(INSTALL) $(EXTRAINSTALLFILES) $(EXTRAINSTALLDIR)
  744. endif
  745. #####################################################################
  746. # Source install rules
  747. #####################################################################
  748. .PHONY: fpc_sourceinstall
  749. fpc_sourceinstall: clean
  750. $(MKDIR) $(SOURCEINSTALLDIR)
  751. $(COPYTREE) $(BASEDIR) $(SOURCEINSTALLDIR)
  752. #####################################################################
  753. # Zip
  754. #####################################################################
  755. .PHONY: fpc_zipinstall fpc_zipinstalladd
  756. # Temporary path to pack a file
  757. ifndef PACKDIR
  758. ifndef inlinux
  759. PACKDIR=pack_tmp
  760. else
  761. PACKDIR=/tmp/fpc-pack
  762. endif
  763. endif
  764. # Test dir if none specified
  765. ifndef DESTZIPDIR
  766. DESTZIPDIR:=$(BASEDIR)
  767. endif
  768. # Add .zip/.tar.gz extension
  769. ifdef ZIPNAME
  770. ifndef inlinux
  771. override ZIPNAME:=$(ZIPNAME)$(ZIPEXT)
  772. endif
  773. endif
  774. # Note: This will not remove the zipfile first
  775. fpc_zipinstalladd:
  776. ifndef ZIPNAME
  777. @$(ECHO) Please specify ZIPNAME!
  778. @exit
  779. else
  780. $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR)
  781. ifdef inlinux
  782. gzip -d $(DESTZIPDIR)/$(ZIPNAME).tar.gz
  783. cd $(PACKDIR) ; tar rv --file $(DESTZIPDIR)/$(ZIPNAME).tar * ; cd $(BASEDIR)
  784. gzip $(DESTZIPDIR)/$(ZIPNAME).tar
  785. else
  786. cd $(PACKDIR) ; $(ZIPPROG) $(DESTZIPDIR)/$(ZIPNAME) * ; cd $(BASEDIR)
  787. endif
  788. $(DELTREE) $(PACKDIR)
  789. endif
  790. # First remove the zip and then install
  791. fpc_zipinstall:
  792. ifndef ZIPNAME
  793. @$(ECHO) Please specify ZIPNAME!
  794. @exit
  795. else
  796. $(DEL) $(DESTZIPDIR)/$(ZIPNAME)
  797. $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR)
  798. ifdef inlinux
  799. cd $(PACKDIR) ; tar cvz --file $(DESTZIPDIR)/$(ZIPNAME).tar.gz * ; cd $(BASEDIR)
  800. else
  801. cd $(PACKDIR) ; $(ZIPPROG) $(DESTZIPDIR)/$(ZIPNAME) * ; cd $(BASEDIR)
  802. endif
  803. $(DELTREE) $(PACKDIR)
  804. endif
  805. #####################################################################
  806. # Clean rules
  807. #####################################################################
  808. .PHONY: fpc_clean fpc_cleanall
  809. ifdef EXTRACLEANUNITS
  810. override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRACLEANUNITS))
  811. endif
  812. ifdef CLEANPPUFILES
  813. ifdef PPUFILES
  814. CLEANPPULINKFILES:=$(shell $(PPUFILES) $(CLEANPPUFILES))
  815. else
  816. CLEANPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)))
  817. endif
  818. endif
  819. fpc_clean: $(CLEANTARGET)
  820. ifdef CLEANEXEFILES
  821. -$(DEL) $(CLEANEXEFILES)
  822. endif
  823. ifdef CLEANPPUFILES
  824. -$(DEL) $(CLEANPPUFILES)
  825. endif
  826. ifneq ($(CLEANPPULINKFILES),)
  827. -$(DEL) $(CLEANPPULINKFILES)
  828. endif
  829. ifdef EXTRACLEANFILES
  830. -$(DEL) $(EXTRACLEANFILES)
  831. endif
  832. -$(DEL) $(FPCMADE) $(PPAS) link.res $(REDIRFILE)
  833. fpc_cleanall: $(CLEANTARGET)
  834. ifdef CLEANEXEFILES
  835. -$(DEL) $(CLEANEXEFILES)
  836. endif
  837. -$(DEL) *$(OEXT) *$(PPUEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
  838. -$(DELTREE) *$(SMARTEXT)
  839. -$(DEL) $(FPCMADE) $(PPAS) link.res $(REDIRFILE)
  840. #####################################################################
  841. # Info rules
  842. #####################################################################
  843. .PHONY: fpc_info fpc_cfginfo fpc_objectinfo fpc_toolsinfo fpc_installinfo \
  844. fpc_dirinfo
  845. fpc_info: $(INFOTARGET)
  846. fpc_infocfg:
  847. @$(ECHO)
  848. @$(ECHO) == Configuration info ==
  849. @$(ECHO)
  850. @$(ECHO) FPC....... $(FPC)
  851. @$(ECHO) Version... $(FPC_VERSION)
  852. @$(ECHO) CPU....... $(CPU_TARGET)
  853. @$(ECHO) Source.... $(OS_SOURCE)
  854. @$(ECHO) Target.... $(OS_TARGET)
  855. @$(ECHO)
  856. fpc_infoobjects:
  857. @$(ECHO)
  858. @$(ECHO) == Object info ==
  859. @$(ECHO)
  860. @$(ECHO) LoaderObjects..... $(LOADEROBJECTS)
  861. @$(ECHO) UnitObjects....... $(UNITOBJECTS)
  862. @$(ECHO) ExeObjects........ $(EXEOBJECTS)
  863. @$(ECHO)
  864. @$(ECHO) ExtraCleanUnits... $(EXTRACLEANUNITS)
  865. @$(ECHO) ExtraCleanFiles... $(EXTRACLEANFILES)
  866. @$(ECHO)
  867. @$(ECHO) ExtraInstallUnits. $(EXTRAINSTALLUNITS)
  868. @$(ECHO) ExtraInstallFiles. $(EXTRAINSTALLFILES)
  869. @$(ECHO)
  870. fpc_infoinstall:
  871. @$(ECHO)
  872. @$(ECHO) == Install info ==
  873. @$(ECHO)
  874. ifdef DATE
  875. @$(ECHO) DateStr.............. $(DATESTR)
  876. endif
  877. @$(ECHO) PackageSuffix........ $(PACKAGESUFFIX)
  878. @$(ECHO)
  879. @$(ECHO) BaseInstallDir....... $(BASEINSTALLDIR)
  880. @$(ECHO) BinInstallDir........ $(BININSTALLDIR)
  881. @$(ECHO) LibInstallDir........ $(LIBINSTALLDIR)
  882. @$(ECHO) UnitInstallDir....... $(UNITINSTALLDIR)
  883. @$(ECHO) SourceInstallDir..... $(SOURCEINSTALLDIR)
  884. @$(ECHO) DocInstallDir........ $(DOCINSTALLDIR)
  885. @$(ECHO) ExtraInstallDir...... $(EXTRAINSTALLDIR)
  886. @$(ECHO)
  887. #####################################################################
  888. # Users rules
  889. #####################################################################
  890. .PHONY: gdb full fullgdb clean_compiler
  891. fp$(EXEEXT): $(wildcard *.pas) $(wildcard *.inc)
  892. gdb:
  893. $(MAKE) all GDB=1
  894. full:
  895. $(MAKE) all FULL=1
  896. fullgdb:
  897. $(MAKE) all FULL=1 GDB=1
  898. # This is necessary because we don't have all units separate in the
  899. # units targets
  900. clean: fpc_cleanall
  901. #
  902. # Installation
  903. #
  904. install: fpc_install
  905. $(INSTALL) $(wildcard *.pt) $(wildcard *.tdf) readme.txt $(BININSTALLDIR)
  906. #
  907. # Misc
  908. #
  909. clean_compiler:
  910. $(MAKE) -C ../../compiler clean