fpcmake.ini 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353
  1. ;
  2. ; Templates used by fpcmake to create a Makefile from Makefile.fpc
  3. ;
  4. [osdetect]
  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 searched separated by spaces
  48. ifdef inlinux
  49. SEARCHPATH=$(subst :, ,$(PATH))
  50. else
  51. SEARCHPATH=$(subst ;, ,$(PATH))
  52. endif
  53. # Base dir
  54. ifdef PWD
  55. BASEDIR:=$(shell $(PWD))
  56. else
  57. BASEDIR=.
  58. endif
  59. [defaulttarget]
  60. #####################################################################
  61. # Default target
  62. #####################################################################
  63. [fpcdetect]
  64. #####################################################################
  65. # FPC version/target Detection
  66. #####################################################################
  67. # What compiler to use ?
  68. ifndef FPC
  69. # Compatibility with old makefiles
  70. ifdef PP
  71. FPC=$(PP)
  72. else
  73. ifdef inOS2
  74. FPC=ppos2$(EXEEXT)
  75. else
  76. FPC=ppc386$(EXEEXT)
  77. endif
  78. endif
  79. endif
  80. override FPC:=$(subst \,/,$(FPC))
  81. # Target OS
  82. ifndef OS_TARGET
  83. OS_TARGET:=$(shell $(FPC) -iTO)
  84. endif
  85. # Source OS
  86. ifndef OS_SOURCE
  87. OS_SOURCE:=$(shell $(FPC) -iSO)
  88. endif
  89. # Target CPU
  90. ifndef CPU_TARGET
  91. CPU_TARGET:=$(shell $(FPC) -iTP)
  92. endif
  93. # Source CPU
  94. ifndef CPU_SOURCE
  95. CPU_SOURCE:=$(shell $(FPC) -iSP)
  96. endif
  97. # FPC version
  98. ifndef FPC_VERSION
  99. FPC_VERSION:=$(shell $(FPC) -iV)
  100. endif
  101. export FPC OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FPC_VERSION
  102. [fpcdircheckenv]
  103. #####################################################################
  104. # FPCDIR Setting
  105. #####################################################################
  106. # Test FPCDIR to look if the RTL dir exists
  107. ifdef FPCDIR
  108. override FPCDIR:=$(subst \,/,$(FPCDIR))
  109. ifeq ($(wildcard $(FPCDIR)/rtl),)
  110. override FPCDIR=wrong
  111. endif
  112. else
  113. override FPCDIR=wrong
  114. endif
  115. [fpcdirdetect]
  116. # Detect FPCDIR
  117. ifeq ($(FPCDIR),wrong)
  118. ifdef inlinux
  119. override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
  120. else
  121. override FPCDIR:=$(subst /$(FPC)$(EXEEXT),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC)$(EXEEXT),$(SEARCHPATH))))))
  122. endif
  123. endif
  124. [fpcdirsubs]
  125. # Create units dir
  126. ifneq ($(FPCDIR),.)
  127. UNITSDIR=$(FPCDIR)/units/$(OS_TARGET)
  128. endif
  129. [checkfpcdirsubs]
  130. # Check if the dirs really exists, else turn it off
  131. ifeq ($(wildcard $(UNITSDIR)),)
  132. UNITSDIR=
  133. endif
  134. ifeq ($(wildcard $(TOOLKITSDIR)),)
  135. TOOLKITSDIR=
  136. endif
  137. ifeq ($(wildcard $(PACKAGESDIR)),)
  138. PACKAGESDIR=
  139. endif
  140. ifeq ($(wildcard $(COMPONENTSDIR)),)
  141. COMPONENTSDIR=
  142. endif
  143. [presettings]
  144. #####################################################################
  145. # Pre Settings
  146. #####################################################################
  147. [usersettings]
  148. #####################################################################
  149. # User Settings
  150. #####################################################################
  151. [postsettings]
  152. #####################################################################
  153. # Post Settings
  154. #####################################################################
  155. [shelltools]
  156. #####################################################################
  157. # Shell tools
  158. #####################################################################
  159. # echo
  160. ifndef ECHO
  161. ECHO:=$(strip $(wildcard $(addsuffix /gecho$(EXEEXT),$(SEARCHPATH))))
  162. ifeq ($(ECHO),)
  163. ECHO:=$(strip $(wildcard $(addsuffix /echo$(EXEEXT),$(SEARCHPATH))))
  164. ifeq ($(ECHO),)
  165. ECHO:=echo
  166. ECHOE:=echo
  167. else
  168. ECHO:=$(firstword $(ECHO))
  169. ECHOE=$(ECHO) -E
  170. endif
  171. else
  172. ECHO:=$(firstword $(ECHO))
  173. ECHOE=$(ECHO) -E
  174. endif
  175. endif
  176. # To copy pograms
  177. ifndef COPY
  178. COPY:=cp -fp
  179. endif
  180. # Copy a whole tree
  181. ifndef COPYTREE
  182. COPYTREE:=cp -rfp
  183. endif
  184. # To move pograms
  185. ifndef MOVE
  186. MOVE:=mv -f
  187. endif
  188. # Check delete program
  189. ifndef DEL
  190. DEL:=rm -f
  191. endif
  192. # Check deltree program
  193. ifndef DELTREE
  194. DELTREE:=rm -rf
  195. endif
  196. # To install files
  197. ifndef INSTALL
  198. ifdef inlinux
  199. INSTALL:=install -m 644
  200. else
  201. INSTALL:=$(COPY)
  202. endif
  203. endif
  204. # To install programs
  205. ifndef INSTALLEXE
  206. ifdef inlinux
  207. INSTALLEXE:=install -m 755
  208. else
  209. INSTALLEXE:=$(COPY)
  210. endif
  211. endif
  212. # To make a directory.
  213. ifndef MKDIR
  214. ifdef inlinux
  215. MKDIR:=install -m 755 -d
  216. else
  217. MKDIR:=ginstall -m 755 -d
  218. endif
  219. endif
  220. export ECHO ECHOE COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
  221. [tool_default]
  222. #####################################################################
  223. # Default Tools
  224. #####################################################################
  225. # assembler, redefine it if cross compiling
  226. ifndef AS
  227. AS=as
  228. endif
  229. # linker, but probably not used
  230. ifndef LD
  231. LD=ld
  232. endif
  233. # ppas.bat / ppas.sh
  234. ifdef inlinux
  235. PPAS=ppas.sh
  236. else
  237. ifdef inOS2
  238. PPAS=ppas.cmd
  239. else
  240. PPAS=ppas.bat
  241. endif
  242. endif
  243. # ldconfig to rebuild .so cache
  244. ifdef inlinux
  245. LDCONFIG=ldconfig
  246. else
  247. LDCONFIG=
  248. endif
  249. [tool_ppdep]
  250. # ppdep
  251. ifndef PPDEP
  252. PPDEP:=$(strip $(wildcard $(addsuffix /ppdep$(EXEEXT),$(SEARCHPATH))))
  253. ifeq ($(PPDEP),)
  254. PPDEP=
  255. else
  256. PPDEP:=$(firstword $(PPDEP))
  257. endif
  258. endif
  259. export PPDEP
  260. [tool_ppumove]
  261. # ppumove
  262. ifndef PPUMOVE
  263. PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(EXEEXT),$(SEARCHPATH))))
  264. ifeq ($(PPUMOVE),)
  265. PPUMOVE=
  266. else
  267. PPUMOVE:=$(firstword $(PPUMOVE))
  268. endif
  269. endif
  270. export PPUMOVE
  271. [tool_ppufiles]
  272. # ppufiles
  273. ifndef PPUFILES
  274. PPUFILES:=$(strip $(wildcard $(addsuffix /ppufiles$(EXEEXT),$(SEARCHPATH))))
  275. ifeq ($(PPUFILES),)
  276. PPUFILES=
  277. else
  278. PPUFILES:=$(firstword $(PPUFILES))
  279. endif
  280. endif
  281. export PPUFILES
  282. [tool_data2inc]
  283. # data2inc
  284. ifndef DATA2INC
  285. DATA2INC:=$(strip $(wildcard $(addsuffix /data2inc$(EXEEXT),$(SEARCHPATH))))
  286. ifeq ($(DATA2INC),)
  287. DATA2INC=
  288. else
  289. DATA2INC:=$(firstword $(DATA2INC))
  290. endif
  291. endif
  292. export DATA2INC
  293. [tool_diff]
  294. # diff
  295. ifndef DIFF
  296. DIFF:=$(strip $(wildcard $(addsuffix /diff$(EXEEXT),$(SEARCHPATH))))
  297. ifeq ($(DIFF),)
  298. DIFF=
  299. else
  300. DIFF:=$(firstword $(DIFF))
  301. endif
  302. endif
  303. export DIFF
  304. [tool_cmp]
  305. # cmp
  306. ifndef CMP
  307. CMP:=$(strip $(wildcard $(addsuffix /cmp$(EXEEXT),$(SEARCHPATH))))
  308. ifeq ($(CMP),)
  309. CMP=
  310. else
  311. CMP:=$(firstword $(CMP))
  312. endif
  313. endif
  314. export CMP
  315. [tool_sed]
  316. # Sed
  317. ifndef SED
  318. SED:=$(strip $(wildcard $(addsuffix /sed$(EXEEXT),$(SEARCHPATH))))
  319. ifeq ($(SED),)
  320. SED=
  321. else
  322. SED:=$(firstword $(SED))
  323. endif
  324. endif
  325. export SED
  326. [tool_upx]
  327. # Look if UPX is found for go32v2 and win32. We can't use $UPX becuase
  328. # upx uses that one itself (PFV)
  329. ifndef UPXPROG
  330. ifeq ($(OS_TARGET),go32v2)
  331. UPXPROG:=1
  332. endif
  333. ifeq ($(OS_TARGET),win32)
  334. UPXPROG:=1
  335. endif
  336. ifdef UPXPROG
  337. UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(EXEEXT),$(SEARCHPATH))))
  338. ifeq ($(UPXPROG),)
  339. UPXPROG=
  340. else
  341. UPXPROG:=$(firstword $(UPXPROG))
  342. endif
  343. else
  344. UPXPROG=
  345. endif
  346. endif
  347. export UPXPROG
  348. [tool_date]
  349. # gdate/date
  350. ifndef DATE
  351. DATE:=$(strip $(wildcard $(addsuffix /date$(EXEEXT),$(SEARCHPATH))))
  352. ifeq ($(DATE),)
  353. DATE:=$(strip $(wildcard $(addsuffix /gdate$(EXEEXT),$(SEACHPATH))))
  354. ifeq ($(DATE),)
  355. DATE=
  356. else
  357. DATE:=$(firstword $(DATE))
  358. endif
  359. else
  360. DATE:=$(firstword $(DATE))
  361. endif
  362. endif
  363. export DATE
  364. ifdef DATE
  365. DATESTR:=$(shell $(DATE) +%Y%m%d)
  366. else
  367. DATESTR=
  368. endif
  369. [tool_zip]
  370. # ZipProg, you can't use Zip as the var name (PFV)
  371. ifndef ZIPPROG
  372. ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(EXEEXT),$(SEARCHPATH))))
  373. ifeq ($(ZIPPROG),)
  374. ZIPPROG=
  375. else
  376. ZIPPROG:=$(firstword $(ZIPPROG))
  377. endif
  378. endif
  379. export ZIPPROG
  380. ZIPOPT=-9
  381. ZIPEXT=.zip
  382. [tool_tar]
  383. # Tar
  384. ifndef TARPROG
  385. TARPROG:=$(strip $(wildcard $(addsuffix /tar$(EXEEXT),$(SEARCHPATH))))
  386. ifeq ($(TARPROG),)
  387. TARPROG=
  388. else
  389. TARPROG:=$(firstword $(TARPROG))
  390. endif
  391. endif
  392. export TARPROG
  393. ifeq ($(USETAR),bz2)
  394. TAROPT=vI
  395. TAREXT=.tar.bz2
  396. else
  397. TAROPT=vz
  398. TAREXT=.tar.gz
  399. endif
  400. [extensions]
  401. #####################################################################
  402. # Default extensions
  403. #####################################################################
  404. # Default needed extensions (Go32v2,Linux)
  405. LOADEREXT=.as
  406. PPLEXT=.ppl
  407. PPUEXT=.ppu
  408. OEXT=.o
  409. ASMEXT=.s
  410. SMARTEXT=.sl
  411. STATICLIBEXT=.a
  412. SHAREDLIBEXT=.so
  413. RSTEXT=.rst
  414. FPCMADE=fpcmade
  415. # Go32v1
  416. ifeq ($(OS_TARGET),go32v1)
  417. PPUEXT=.pp1
  418. OEXT=.o1
  419. ASMEXT=.s1
  420. SMARTEXT=.sl1
  421. STATICLIBEXT=.a1
  422. SHAREDLIBEXT=.so1
  423. FPCMADE=fpcmade.v1
  424. endif
  425. # Go32v2
  426. ifeq ($(OS_TARGET),go32v2)
  427. FPCMADE=fpcmade.dos
  428. endif
  429. # Linux
  430. ifeq ($(OS_TARGET),linux)
  431. FPCMADE=fpcmade.lnx
  432. endif
  433. # Win32
  434. ifeq ($(OS_TARGET),win32)
  435. PPUEXT=.ppw
  436. OEXT=.ow
  437. ASMEXT=.sw
  438. SMARTEXT=.slw
  439. STATICLIBEXT=.aw
  440. SHAREDLIBEXT=.dll
  441. FPCMADE=fpcmade.w32
  442. endif
  443. # OS/2
  444. ifeq ($(OS_TARGET),os2)
  445. PPUEXT=.ppo
  446. ASMEXT=.so2
  447. OEXT=.oo2
  448. SMARTEXT=.so
  449. STATICLIBEXT=.ao2
  450. SHAREDLIBEXT=.dll
  451. FPCMADE=fpcmade.os2
  452. endif
  453. # library prefix
  454. LIBPREFIX=lib
  455. ifeq ($(OS_TARGET),go32v2)
  456. LIBPREFIX=
  457. endif
  458. ifeq ($(OS_TARGET),go32v1)
  459. LIBPREFIX=
  460. endif
  461. # determine which .pas extension is used
  462. ifndef PASEXT
  463. ifdef EXEOBJECTS
  464. override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(EXEOBJECTS)))))
  465. else
  466. override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(UNITOBJECTS)))))
  467. endif
  468. ifeq ($(TESTPAS),)
  469. PASEXT=.pp
  470. else
  471. PASEXT=.pas
  472. endif
  473. endif
  474. [dir_default]
  475. #####################################################################
  476. # Default Directories
  477. #####################################################################
  478. # set the prefix directory where to install everything
  479. ifndef PREFIXINSTALLDIR
  480. ifdef inlinux
  481. PREFIXINSTALLDIR=/usr
  482. else
  483. PREFIXINSTALLDIR=/pp
  484. endif
  485. endif
  486. export PREFIXINSTALLDIR
  487. # Where to place the resulting zip files
  488. ifndef DESTZIPDIR
  489. DESTZIPDIR:=$(BASEDIR)
  490. endif
  491. export DESTZIPDIR
  492. [dir_install]
  493. #####################################################################
  494. # Install Directories
  495. #####################################################################
  496. # set the base directory where to install everything
  497. ifndef BASEINSTALLDIR
  498. ifdef inlinux
  499. BASEINSTALLDIR=$(PREFIXINSTALLDIR)/lib/fpc/$(FPC_VERSION)
  500. else
  501. BASEINSTALLDIR=$(PREFIXINSTALLDIR)
  502. endif
  503. endif
  504. # set the directory where to install the binaries
  505. ifndef BININSTALLDIR
  506. ifdef inlinux
  507. BININSTALLDIR=$(PREFIXINSTALLDIR)/bin
  508. else
  509. BININSTALLDIR=$(BASEINSTALLDIR)/bin/$(OS_TARGET)
  510. endif
  511. endif
  512. # set the directory where to install the units.
  513. ifndef UNITINSTALLDIR
  514. UNITINSTALLDIR=$(BASEINSTALLDIR)/units/$(OS_TARGET)
  515. ifdef UNITSUBDIR
  516. UNITINSTALLDIR:=$(UNITINSTALLDIR)/$(UNITSUBDIR)
  517. endif
  518. endif
  519. # Where to install shared libraries
  520. ifndef LIBINSTALLDIR
  521. ifdef inlinux
  522. LIBINSTALLDIR=$(PREFIXINSTALLDIR)/lib
  523. else
  524. LIBINSTALLDIR=$(UNITINSTALLDIR)
  525. endif
  526. endif
  527. # Where the source files will be stored
  528. ifndef SOURCEINSTALLDIR
  529. ifdef inlinux
  530. SOURCEINSTALLDIR=$(PREFIXINSTALLDIR)/src/fpc-$(FPC_VERSION)
  531. else
  532. SOURCEINSTALLDIR=$(BASEINSTALLDIR)/source
  533. endif
  534. ifdef SOURCESUBDIR
  535. SOURCEINSTALLDIR:=$(SOURCEINSTALLDIR)/$(SOURCESUBDIR)
  536. endif
  537. endif
  538. # Where the doc files will be stored
  539. ifndef DOCINSTALLDIR
  540. ifdef inlinux
  541. DOCINSTALLDIR=$(PREFIXINSTALLDIR)/doc/fpc-$(FPC_VERSION)
  542. else
  543. DOCINSTALLDIR=$(BASEINSTALLDIR)/doc
  544. endif
  545. endif
  546. # Where the some extra (data)files will be stored
  547. ifndef DATAINSTALLDIR
  548. DATAINSTALLDIR=$(BASEINSTALLDIR)
  549. endif
  550. [dir_gcclib]
  551. # On linux, try to find where libgcc.a is.
  552. ifdef inlinux
  553. ifndef GCCLIBDIR
  554. GCCLIBDIR:=$(shell dirname `(gcc -v 2>&1)| head -n 1| awk '{ print $$4 } '`)
  555. endif
  556. endif
  557. export GCCLIBDIR
  558. [dir_otherlib]
  559. # Where to find other libraries
  560. ifdef inlinux
  561. ifndef OTHERLIBDIR
  562. OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }')
  563. endif
  564. endif
  565. export OTHERLIBDIR
  566. [redir]
  567. #####################################################################
  568. # Redirection
  569. #####################################################################
  570. ifndef REDIRFILE
  571. REDIRFILE=log
  572. endif
  573. ifdef REDIR
  574. ifndef inlinux
  575. override FPC=redir -eo $(FPC)
  576. endif
  577. # set the verbosity to max
  578. override FPCOPT+=-va
  579. override REDIR:= >> $(REDIRFILE)
  580. endif
  581. [command_begin]
  582. #####################################################################
  583. # Compiler Command Line
  584. #####################################################################
  585. # Load commandline OPTDEF and add FPC_CPU define
  586. override FPCOPTDEF:=-d$(CPU_TARGET)
  587. # Load commandline OPT and add target and unit dir to be sure
  588. ifneq ($(OS_TARGET),$(OS_SOURCE))
  589. override FPCOPT+=-T$(OS_TARGET)
  590. endif
  591. [command_needopt]
  592. ifdef NEEDOPT
  593. override FPCOPT+=$(NEEDOPT)
  594. endif
  595. [command_needunit]
  596. ifdef NEEDUNITDIR
  597. override FPCOPT+=$(addprefix -Fu,$(NEEDUNITDIR))
  598. endif
  599. [command_unitsdir]
  600. ifdef UNITSDIR
  601. override FPCOPT+=-Fu$(UNITSDIR)
  602. endif
  603. [command_needlib]
  604. ifdef NEEDLIBDIR
  605. override FPCOPT+=$(addprefix -Fl,$(NEEDLIBDIR))
  606. endif
  607. [command_needobj]
  608. ifdef NEEDOBJDIR
  609. override FPCOPT+=$(addprefix -Fo,$(NEEDOBJDIR))
  610. endif
  611. [command_needinc]
  612. ifdef NEEDINCDIR
  613. override FPCOPT+=$(addprefix -Fi,$(NEEDINCDIR))
  614. endif
  615. [command_gcclib]
  616. # Add GCC lib path if asked
  617. ifdef GCCLIBDIR
  618. override FPCOPT+=-Fl$(GCCLIBDIR)
  619. endif
  620. [command_otherlib]
  621. # Add Other dirs path if asked
  622. ifdef OTHERLIBDIR
  623. override FPCOPT+=$(addprefix -Fl,$(OTHERLIBDIR))
  624. endif
  625. [command_target]
  626. # Target dirs
  627. ifdef TARGETDIR
  628. override FPCOPT+=-FE$(TARGETDIR)
  629. endif
  630. [command_unittarget]
  631. ifdef UNITTARGETDIR
  632. override FPCOPT+=-FU$(UNITTARGETDIR)
  633. endif
  634. [command_end]
  635. # Smartlinking
  636. ifdef SMARTLINK
  637. override FPCOPT+=-CX
  638. endif
  639. # Debug
  640. ifdef DEBUG
  641. override FPCOPT+=-g -dDEBUG
  642. endif
  643. # Release mode (strip, optimize and don't load ppc386.cfg)
  644. # 0.99.12b has a bug in the optimizer so don't use it by default
  645. ifdef RELEASE
  646. ifeq ($(FPC_VERSION),0.99.12)
  647. override FPCOPT+=-Xs -OGp3 -n
  648. else
  649. override FPCOPT+=-Xs -OG2p3 -n
  650. endif
  651. endif
  652. # Verbose settings (warning,note,info)
  653. ifdef VERBOSE
  654. override FPCOPT+=-vwni
  655. endif
  656. # Add commandline options
  657. ifdef OPT
  658. override FPCOPT+=$(OPT)
  659. endif
  660. ifdef UNITDIR
  661. override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
  662. endif
  663. ifdef LIBDIR
  664. override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
  665. endif
  666. ifdef OBJDIR
  667. override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
  668. endif
  669. ifdef INCDIR
  670. override FPCOPT+=$(addprefix -Fi,$(INCDIR))
  671. endif
  672. # Add defines from FPCOPTDEF to FPCOPT
  673. ifdef FPCOPTDEF
  674. override FPCOPT+=$(FPCOPTDEF)
  675. endif
  676. # Error file ?
  677. ifdef ERRORFILE
  678. override FPCOPT+=-Fr$(ERRORFILE)
  679. endif
  680. # Was a config file specified ?
  681. ifdef CFGFILE
  682. override FPCOPT+=@$(CFGFILE)
  683. endif
  684. [command_win32file]
  685. # For win32 the options are passed using the file fpcext.cmd
  686. ifndef FPCEXTFILE
  687. FPCEXTFILE=fpcext.cmd
  688. endif
  689. ifeq ($(OS_SOURCE),win32)
  690. override TMPVAR:=$(shell "$(DEL) $(FPCEXTFILE)")
  691. override TMPVAR:=$(foreach A,$(FPCOPT),$(shell "$(ECHOE) "$(A)" >> $(FPCEXTFILE)"))
  692. override FPCOPT:=@$(FPCEXTFILE)
  693. endif
  694. [command_win32env]
  695. # For win32 the options are passed using the environment FPCEXTCMD
  696. ifeq ($(OS_SOURCE),win32)
  697. override FPCEXTCMD:=$(FPCOPT)
  698. override FPCOPT:=!FPCEXTCMD
  699. export FPCEXTCMD
  700. endif
  701. [command_compiler]
  702. # Compiler commandline
  703. override COMPILER:=$(FPC) $(FPCOPT)
  704. # also call ppas if with command option -s
  705. ifeq (,$(findstring -s ,$(COMPILER)))
  706. EXECPPAS=
  707. else
  708. EXECPPAS:=@$(PPAS)
  709. endif
  710. [standardrules]
  711. #####################################################################
  712. # Standard rules
  713. #####################################################################
  714. [packagedependrules]
  715. #####################################################################
  716. # Package depends
  717. #####################################################################
  718. [loaderrules]
  719. #####################################################################
  720. # Loaders
  721. #####################################################################
  722. .PHONY: fpc_loaders
  723. %$(OEXT): %$(LOADEREXT)
  724. $(AS) -o $*$(OEXT) $<
  725. override ALLTARGET+=fpc_loaders
  726. override CLEANTARGET+=fpc_loaders_clean
  727. override SHOWINSTALLTARGET+=fpc_loaders_showinstall
  728. override INSTALLTARGET+=fpc_loaders_install
  729. override LOADEROFILES:=$(addsuffix $(OEXT),$(LOADEROBJECTS))
  730. fpc_loaders: $(LOADEROFILES)
  731. fpc_loaders_clean:
  732. -$(DEL) $(LOADEROFILES)
  733. fpc_loaders_showinstall:
  734. @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(LOADEROFILES))
  735. fpc_loaders_install:
  736. $(MKDIR) $(UNITINSTALLDIR)
  737. $(INSTALL) $(LOADEROFILES) $(UNITINSTALLDIR)
  738. [unitrules]
  739. #####################################################################
  740. # Units
  741. #####################################################################
  742. .PHONY: fpc_units
  743. override ALLTARGET+=fpc_units
  744. override UNITPPUFILES=$(addsuffix $(PPUEXT),$(UNITOBJECTS))
  745. override INSTALLPPUFILES+=$(UNITPPUFILES)
  746. override CLEANPPUFILES+=$(UNITPPUFILES)
  747. fpc_units: $(UNITPPUFILES)
  748. [exerules]
  749. #####################################################################
  750. # Exes
  751. #####################################################################
  752. .PHONY: fpc_exes
  753. override EXEFILES=$(addsuffix $(EXEEXT),$(EXEOBJECTS))
  754. override EXEOFILES=$(addsuffix $(OEXT),$(EXEOBJECTS))
  755. override ALLTARGET+=fpc_exes
  756. override INSTALLEXEFILES+=$(EXEFILES)
  757. override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
  758. fpc_exes: $(EXEFILES)
  759. [rstrules]
  760. #####################################################################
  761. # Resource strings
  762. #####################################################################
  763. override RSTFILES=$(addsuffix $(RSTEXT),$(RSTOBJECTS))
  764. override CLEANRSTFILES+=$(RSTFILES)
  765. [examplerules]
  766. #####################################################################
  767. # Examples
  768. #####################################################################
  769. .PHONY: fpc_examples fpc_test
  770. override EXAMPLEFILES:=$(addsuffix $(EXEEXT),$(EXAMPLEOBJECTS))
  771. override EXAMPLEOFILES:=$(addsuffix $(OEXT),$(EXAMPLEOBJECTS))
  772. override CLEANEXEFILES+=$(EXAMPLEFILES) $(EXAMPLEOFILES)
  773. fpc_examples: all $(EXAMPLEFILES)
  774. fpc_test: examples
  775. [compilerules]
  776. #####################################################################
  777. # General compile rules
  778. #####################################################################
  779. .PHONY: fpc_packages fpc_all fpc_debug
  780. $(FPCMADE): $(ALLTARGET)
  781. @$(ECHO) Compiled > $(FPCMADE)
  782. fpc_packages: $(COMPILEPACKAGES)
  783. fpc_all: fpc_packages $(FPCMADE)
  784. fpc_debug:
  785. $(MAKE) all DEBUG=1
  786. # General compile rules, available for both possible PASEXT
  787. .SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp
  788. %$(PPUEXT): %.pp
  789. $(COMPILER) $< $(REDIR)
  790. $(EXECPPAS)
  791. %$(PPUEXT): %.pas
  792. $(COMPILER) $< $(REDIR)
  793. $(EXECPPAS)
  794. %$(EXEEXT): %.pp
  795. $(COMPILER) $< $(REDIR)
  796. $(EXECPPAS)
  797. %$(EXEEXT): %.pas
  798. $(COMPILER) $< $(REDIR)
  799. $(EXECPPAS)
  800. [libraryrules]
  801. #####################################################################
  802. # Library
  803. #####################################################################
  804. .PHONY: fpc_smart fpc_shared
  805. # Default sharedlib units are all unit objects
  806. ifndef SHAREDLIBUNITOBJECTS
  807. SHAREDLIBUNITOBJECTS:=$(UNITOBJECTS)
  808. endif
  809. fpc_smart:
  810. $(MAKE) all SMARTLINK=1
  811. fpc_shared: all
  812. ifdef inlinux
  813. ifndef LIBNAME
  814. @$(ECHO) "LIBNAME not set"
  815. else
  816. $(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBNAME)
  817. endif
  818. else
  819. @$(ECHO) "Shared Libraries not supported"
  820. endif
  821. [installrules]
  822. #####################################################################
  823. # Install rules
  824. #####################################################################
  825. .PHONY: fpc_showinstall fpc_install
  826. ifdef EXTRAINSTALLUNITS
  827. override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS))
  828. endif
  829. ifdef INSTALLPPUFILES
  830. ifdef PPUFILES
  831. ifdef inlinux
  832. INSTALLPPULINKFILES:=$(shell $(PPUFILES) -S -O $(INSTALLPPUFILES))
  833. INSTALLPPULIBFILES:=$(shell $(PPUFILES) -L $(INSTALLPPUFILES))
  834. else
  835. INSTALLPPULINKFILES:=$(shell $(PPUFILES) $(INSTALLPPUFILES))
  836. endif
  837. else
  838. INSTALLPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)))
  839. endif
  840. endif
  841. fpc_showinstall: $(SHOWINSTALLTARGET)
  842. ifdef INSTALLEXEFILES
  843. @$(ECHO) -e $(addprefix "\n"$(BININSTALLDIR)/,$(INSTALLEXEFILES))
  844. endif
  845. ifdef INSTALLPPUFILES
  846. @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPUFILES))
  847. ifneq ($(INSTALLPPULINKFILES),)
  848. @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPULINKFILES))
  849. endif
  850. ifneq ($(INSTALLPPULIBFILES),)
  851. @$(ECHO) -e $(addprefix "\n"$(LIBINSTALLDIR)/,$(INSTALLPPULIBFILES))
  852. endif
  853. endif
  854. ifdef EXTRAINSTALLFILES
  855. @$(ECHO) -e $(addprefix "\n"$(DATAINSTALLDIR)/,$(EXTRAINSTALLFILES))
  856. endif
  857. fpc_install: $(INSTALLTARGET)
  858. # Create UnitInstallFiles
  859. ifdef INSTALLEXEFILES
  860. $(MKDIR) $(BININSTALLDIR)
  861. # Compress the exes if upx is defined
  862. ifdef UPXPROG
  863. -$(UPXPROG) $(INSTALLEXEFILES)
  864. endif
  865. $(INSTALLEXE) $(INSTALLEXEFILES) $(BININSTALLDIR)
  866. endif
  867. ifdef INSTALLPPUFILES
  868. $(MKDIR) $(UNITINSTALLDIR)
  869. $(INSTALL) $(INSTALLPPUFILES) $(UNITINSTALLDIR)
  870. ifneq ($(INSTALLPPULINKFILES),)
  871. $(INSTALL) $(INSTALLPPULINKFILES) $(UNITINSTALLDIR)
  872. endif
  873. ifneq ($(INSTALLPPULIBFILES),)
  874. $(MKDIR) $(LIBINSTALLDIR)
  875. $(INSTALL) $(INSTALLPPULIBFILES) $(LIBINSTALLDIR)
  876. endif
  877. endif
  878. ifdef EXTRAINSTALLFILES
  879. $(MKDIR) $(DATAINSTALLDIR)
  880. $(INSTALL) $(EXTRAINSTALLFILES) $(DATAINSTALLDIR)
  881. endif
  882. [sourceinstallrules]
  883. #####################################################################
  884. # SourceInstall rules
  885. #####################################################################
  886. .PHONY: fpc_sourceinstall
  887. ifndef SOURCETOPDIR
  888. SOURCETOPDIR=$(BASEDIR)
  889. endif
  890. fpc_sourceinstall: clean
  891. $(MKDIR) $(SOURCEINSTALLDIR)
  892. $(COPYTREE) $(SOURCETOPDIR) $(SOURCEINSTALLDIR)
  893. [zipinstallrules]
  894. #####################################################################
  895. # Zip
  896. #####################################################################
  897. .PHONY: fpc_zipinstall
  898. # Create suffix to add
  899. ifndef PACKAGESUFFIX
  900. PACKAGESUFFIX=$(OS_TARGET)
  901. ifeq ($(OS_TARGET),go32v2)
  902. PACKAGESUFFIX=go32
  903. endif
  904. ifeq ($(OS_TARGET),win32)
  905. PACKAGESUFFIX=w32
  906. endif
  907. endif
  908. # Temporary path to pack a file
  909. ifndef PACKDIR
  910. ifndef inlinux
  911. PACKDIR=$(BASEDIR)/pack_tmp
  912. else
  913. PACKDIR=/tmp/fpc-pack
  914. endif
  915. endif
  916. # Maybe create default zipname from packagename
  917. ifndef ZIPNAME
  918. ifdef PACKAGENAME
  919. ZIPNAME=$(PACKAGEPREFIX)$(PACKAGENAME)$(PACKAGESUFFIX)
  920. endif
  921. endif
  922. # Use tar by default under linux
  923. ifndef USEZIP
  924. ifdef inlinux
  925. USETAR=1
  926. endif
  927. endif
  928. fpc_zipinstall:
  929. ifndef ZIPNAME
  930. @$(ECHO) "Please specify ZIPNAME!"
  931. @exit 1
  932. else
  933. $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR)
  934. ifdef USETAR
  935. $(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT)
  936. cd $(PACKDIR) ; $(TARPROG) c$(TAROPT) --file $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT) * ; cd $(BASEDIR)
  937. else
  938. $(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT)
  939. cd $(PACKDIR) ; $(ZIPPROG) -Dr $(ZIPOPT) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT) * ; cd $(BASEDIR)
  940. endif
  941. $(DELTREE) $(PACKDIR)
  942. endif
  943. [zipsourceinstallrules]
  944. .PHONY: fpc_zipsourceinstall
  945. fpc_zipsourceinstall:
  946. $(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall PACKAGESUFFIX=src
  947. [cleanrules]
  948. #####################################################################
  949. # Clean rules
  950. #####################################################################
  951. .PHONY: fpc_clean fpc_cleanall
  952. ifdef EXTRACLEANUNITS
  953. override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRACLEANUNITS))
  954. endif
  955. ifdef CLEANPPUFILES
  956. ifdef PPUFILES
  957. CLEANPPULINKFILES:=$(shell $(PPUFILES) $(CLEANPPUFILES))
  958. else
  959. CLEANPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)))
  960. endif
  961. endif
  962. fpc_clean: $(CLEANTARGET)
  963. ifdef CLEANEXEFILES
  964. -$(DEL) $(CLEANEXEFILES)
  965. endif
  966. ifdef CLEANPPUFILES
  967. -$(DEL) $(CLEANPPUFILES)
  968. endif
  969. ifneq ($(CLEANPPULINKFILES),)
  970. -$(DEL) $(CLEANPPULINKFILES)
  971. endif
  972. ifdef CLEANRSTFILES
  973. -$(DEL) $(CLEANRSTFILES)
  974. endif
  975. ifdef EXTRACLEANFILES
  976. -$(DEL) $(EXTRACLEANFILES)
  977. endif
  978. -$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE)
  979. fpc_cleanall: $(CLEANTARGET)
  980. ifdef CLEANEXEFILES
  981. -$(DEL) $(CLEANEXEFILES)
  982. endif
  983. -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
  984. -$(DELTREE) *$(SMARTEXT)
  985. -$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE)
  986. [dependrules]
  987. #####################################################################
  988. # Depend rules
  989. #####################################################################
  990. .PHONY: fpc_depend
  991. fpc_depend:
  992. $(PPDEP) $(UNITOBJECTS)
  993. [inforules]
  994. #####################################################################
  995. # Info rules
  996. #####################################################################
  997. .PHONY: fpc_info fpc_cfginfo fpc_objectinfo fpc_toolsinfo fpc_installinfo \
  998. fpc_dirinfo
  999. fpc_info: $(INFOTARGET)
  1000. [info_cfg]
  1001. fpc_infocfg:
  1002. @$(ECHO)
  1003. @$(ECHO) == Configuration info ==
  1004. @$(ECHO)
  1005. @$(ECHO) FPC....... $(FPC)
  1006. @$(ECHO) Version... $(FPC_VERSION)
  1007. @$(ECHO) CPU....... $(CPU_TARGET)
  1008. @$(ECHO) Source.... $(OS_SOURCE)
  1009. @$(ECHO) Target.... $(OS_TARGET)
  1010. @$(ECHO)
  1011. [info_dirs]
  1012. fpc_infodirs:
  1013. ifdef inlinux
  1014. @$(ECHO)
  1015. @$(ECHO) == Directory info ==
  1016. @$(ECHO)
  1017. ifdef NEEDGCCLIB
  1018. @$(ECHO) GCC library is needed.
  1019. endif
  1020. ifdef NEEDOTHERLIB
  1021. @$(ECHO) Other library is needed.
  1022. endif
  1023. @$(ECHO) Basedir......... $(BASEDIR)
  1024. @$(ECHO)
  1025. @$(ECHO) GCC library..... $(GCCLIBDIR)
  1026. @$(ECHO) Other library... $(OTHERLIBDIR)
  1027. @$(ECHO)
  1028. endif
  1029. [info_tools]
  1030. fpc_infotools:
  1031. @$(ECHO)
  1032. @$(ECHO) == Tools info ==
  1033. @$(ECHO)
  1034. @$(ECHO) Pwd....... $(PWD)
  1035. @$(ECHO) Echo...... $(ECHO)
  1036. ifdef PPDEP
  1037. @$(ECHO) PPDep..... $(PPDEP)
  1038. endif
  1039. ifdef PPUMOVE
  1040. @$(ECHO) PPUMove... $(PPUMOVE)
  1041. endif
  1042. ifdef PPUFILES
  1043. @$(ECHO) PPUFiles.. $(PPUFILES)
  1044. endif
  1045. ifdef DATA2INC
  1046. @$(ECHO) Data2Inc.. $(DATA2INC)
  1047. endif
  1048. ifdef SED
  1049. @$(ECHO) Sed....... $(SED)
  1050. endif
  1051. ifdef DATE
  1052. @$(ECHO) Date...... $(DATE)
  1053. endif
  1054. ifdef DIFF
  1055. @$(ECHO) Diff...... $(DIFF)
  1056. endif
  1057. ifdef CMP
  1058. @$(ECHO) Cmp....... $(CMP)
  1059. endif
  1060. ifdef UPXPROG
  1061. @$(ECHO) Upx....... $(UPXPROG)
  1062. endif
  1063. ifdef ZIPPROG
  1064. @$(ECHO) Zip....... $(ZIPPROG)
  1065. endif
  1066. @$(ECHO)
  1067. [info_objects]
  1068. fpc_infoobjects:
  1069. @$(ECHO)
  1070. @$(ECHO) == Object info ==
  1071. @$(ECHO)
  1072. @$(ECHO) LoaderObjects..... $(LOADEROBJECTS)
  1073. @$(ECHO) UnitObjects....... $(UNITOBJECTS)
  1074. @$(ECHO) ExeObjects........ $(EXEOBJECTS)
  1075. @$(ECHO)
  1076. @$(ECHO) ExtraCleanUnits... $(EXTRACLEANUNITS)
  1077. @$(ECHO) ExtraCleanFiles... $(EXTRACLEANFILES)
  1078. @$(ECHO)
  1079. @$(ECHO) ExtraInstallUnits. $(EXTRAINSTALLUNITS)
  1080. @$(ECHO) ExtraInstallFiles. $(EXTRAINSTALLFILES)
  1081. @$(ECHO)
  1082. [info_install]
  1083. fpc_infoinstall:
  1084. @$(ECHO)
  1085. @$(ECHO) == Install info ==
  1086. @$(ECHO)
  1087. ifdef DATE
  1088. @$(ECHO) DateStr.............. $(DATESTR)
  1089. endif
  1090. ifdef PACKAGEPREFIX
  1091. @$(ECHO) PackagePrefix........ $(PACKAGEPREFIX)
  1092. endif
  1093. ifdef PACKAGENAME
  1094. @$(ECHO) PackageName.......... $(PACKAGENAME)
  1095. endif
  1096. @$(ECHO) PackageSuffix........ $(PACKAGESUFFIX)
  1097. @$(ECHO)
  1098. @$(ECHO) BaseInstallDir....... $(BASEINSTALLDIR)
  1099. @$(ECHO) BinInstallDir........ $(BININSTALLDIR)
  1100. @$(ECHO) LibInstallDir........ $(LIBINSTALLDIR)
  1101. @$(ECHO) UnitInstallDir....... $(UNITINSTALLDIR)
  1102. @$(ECHO) SourceInstallDir..... $(SOURCEINSTALLDIR)
  1103. @$(ECHO) DocInstallDir........ $(DOCINSTALLDIR)
  1104. @$(ECHO) DataInstallDir....... $(DATAINSTALLDIR)
  1105. @$(ECHO)
  1106. @$(ECHO) DestZipDir........... $(DESTZIPDIR)
  1107. @$(ECHO) ZipName.............. $(ZIPNAME)
  1108. @$(ECHO)
  1109. [directorytargets]
  1110. #####################################################################
  1111. # Directories
  1112. #####################################################################
  1113. [localmakefile]
  1114. #####################################################################
  1115. # Local Makefile
  1116. #####################################################################
  1117. ifneq ($(wildcard fpcmake.loc),)
  1118. include fpcmake.loc
  1119. endif
  1120. [userrules]
  1121. #####################################################################
  1122. # Users rules
  1123. #####################################################################
  1124. [end]