Makefile 25 KB

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