Makefile.fpc 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. #
  2. # Makefile.fpc for Free Pascal units, which participates in the tests
  3. #
  4. [target]
  5. [install]
  6. fpcpackage=y
  7. [clean]
  8. units = erroru popuperr ptest
  9. [compiler]
  10. targetdir=$(TARGETSUFFIX)
  11. [default]
  12. fpcdir=../..
  13. [rules]
  14. .NOTPARALLEL:
  15. .PHONY: rtl extra fpcunit packages all clean distclean clean_ctest
  16. .PHONY: cleanrtl distcleanrtl
  17. .PHONY: cleanfpcunit distcleanfpcunit
  18. .PHONY: cleanpackages distcleanpackages
  19. TESTOPT:=-n -FE$(COMPILER_TARGETDIR) -T$(OS_TARGET) $(OPT)
  20. ifeq ($(CPU_TARGET),armeb)
  21. override TESTOPT+=-Cb
  22. endif
  23. ifneq ($(BINUTILSPREFIX),)
  24. override TESTOPT+=-XP$(BINUTILSPREFIX) -Xc
  25. endif
  26. ifeq ($(OS_TARGET),msdos)
  27. override TESTOPT+=-CX
  28. endif
  29. TESTCOMPILER:=$(FPC) $(TESTOPT)
  30. FPCFPMAKE=$(NATIVE_FPC)
  31. ifdef CROSSCOMPILE
  32. override CROSSOPT:=$(OPT)
  33. override OPT=
  34. override BUILDFULLNATIVE=
  35. # Check if there is a native compiler (ppc) which is built during building a cross-compiler.
  36. DEV_FPC=$(wildcard $(CURDIR)/../../compiler/ppc$(SRCEXEEXT))
  37. ifneq ($(DEV_FPC), )
  38. # Use this native compiler to build fpmake, since RTL is already compiled by this compiler
  39. # and using an other native compiler may produce PPU incompatibility errors.
  40. FPCFPMAKE=$(DEV_FPC)
  41. endif
  42. endif
  43. export FPCFPMAKE
  44. #############################
  45. # RTL
  46. #
  47. DUMMYINSTALLDIR=$(BASEDIR)/tmp
  48. INSTALLOPT=INSTALL_PREFIX=$(DUMMYINSTALLDIR) INSTALL_UNITDIR=$(BASEDIR)/$(COMPILER_TARGETDIR)
  49. rtl-stamp.$(FULL_TARGET):
  50. ifneq ($(inOS2),)
  51. $(MAKE) -C ../../rtl all "OPT=$(OPT) -n" "CROSSOPT=$(CROSSOPT)" FPC=$(FPC)
  52. else
  53. $(MAKE) -C ../../rtl all 'OPT=$(OPT) -n' 'CROSSOPT=$(CROSSOPT)' FPC=$(FPC)
  54. endif
  55. $(MAKE) -C ../../rtl install $(INSTALLOPT) OPT= CROSSOPT= FPC=$(FPC)
  56. $(ECHO) Compiled > rtl-stamp.$(FULL_TARGET)
  57. cleanrtl:
  58. $(DELTREE) $(COMPILER_TARGETDIR)
  59. $(DELTREE) $(DUMMYINSTALLDIR)
  60. -$(DEL) rtl-stamp.$(FULL_TARGET)
  61. distcleanrtl: cleanrtl
  62. rtl : rtl-stamp.$(FULL_TARGET)
  63. #############################
  64. # FPCUnit
  65. #
  66. DUMMYINSTALLDIR=$(BASEDIR)/tmp
  67. INSTALLOPT=INSTALL_PREFIX=$(DUMMYINSTALLDIR) INSTALL_UNITDIR=$(BASEDIR)/$(COMPILER_TARGETDIR)
  68. FPCUNITDIR=$(FPCDIR)/packages/fcl-fpcunit/src
  69. fpcunit-stamp.$(FULL_TARGET):
  70. ifneq ($(OS_TARGET),msdos)
  71. ifneq ($(CPU_TARGET),avr)
  72. ifneq ($(CPU_TARGET),jvm)
  73. $(TESTCOMPILER) -Fu$(BASEDIR)/$(COMPILER_TARGETDIR) $(FPCUNITDIR)/testutils
  74. $(TESTCOMPILER) -Fu$(BASEDIR)/$(COMPILER_TARGETDIR) $(FPCUNITDIR)/fpcunit
  75. endif
  76. endif
  77. endif
  78. $(ECHO) Compiled > fpcunit-stamp.$(FULL_TARGET)
  79. cleanfpcunit:
  80. $(DELTREE) $(COMPILER_TARGETDIR)
  81. $(DELTREE) $(DUMMYINSTALLDIR)
  82. -$(DEL) fpcunit-stamp.$(FULL_TARGET)
  83. distcleanfpcunit: cleanfpcunit
  84. $(MAKE) -C $(FPCUNITDIR)/.. clean
  85. fpcunit : fpcunit-stamp.$(FULL_TARGET)
  86. #############################
  87. # Packages
  88. #
  89. DUMMYINSTALLDIR=$(BASEDIR)/tmp
  90. INSTALLOPT=INSTALL_PREFIX=$(DUMMYINSTALLDIR) INSTALL_UNITDIR=$(BASEDIR)/$(COMPILER_TARGETDIR)
  91. PACKAGESDIR=$(FPCDIR)/packages
  92. packages-stamp.$(FULL_TARGET):
  93. ifneq ($(inOS2),)
  94. $(MAKE) -C ../../packages all "OPT=$(OPT) -n" "CROSSOPT=$(CROSSOPT)" FPC=$(FPC)
  95. else
  96. $(MAKE) -C ../../packages all 'OPT=$(OPT) -n' 'CROSSOPT=$(CROSSOPT)' FPC=$(FPC)
  97. endif
  98. $(MAKE) -C ../../packages install $(INSTALLOPT) OPT= CROSSOPT= FPC=$(FPC)
  99. $(ECHO) Compiled > packages-stamp.$(FULL_TARGET)
  100. cleanpackages:
  101. $(DELTREE) $(COMPILER_TARGETDIR)
  102. $(DELTREE) $(DUMMYINSTALLDIR)
  103. -$(DEL) packages-stamp.$(FULL_TARGET)
  104. distcleanpackages: cleanpackages
  105. packages : packages-stamp.$(FULL_TARGET)
  106. #############################
  107. # Extra units
  108. #
  109. erroru$(PPUEXT) : erroru.pp
  110. $(TESTCOMPILER) erroru.pp
  111. ptest$(PPUEXT) : ../test/cg/ptest.pp
  112. ifneq ($(OS_TARGET),msdos)
  113. $(TESTCOMPILER) ../test/cg/ptest.pp
  114. endif
  115. popuperr$(PPUEXT) : popuperr.pp
  116. $(TESTCOMPILER) popuperr.pp
  117. ifdef CCOMPILER
  118. ctest: ../test/cg/obj/ctest.c
  119. $(CCOMPILER) -c -o ../test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o ../test/cg/obj/ctest.c
  120. else
  121. ctest:
  122. @$(ECHO) "No C compiler found"
  123. @exit 1
  124. endif
  125. ifneq ($(findstring dosbox_wrapper,$(EMULATOR)),)
  126. MSDOS_EXITCODE_SRC=../utils/dosbox/exitcode.pas
  127. MSDOS_EXITCODE_PROG=../utils/dosbox/exitcode.exe
  128. else
  129. MSDOS_EXITCODE_SRC=
  130. MSDOS_EXITCODE_PROG=
  131. endif
  132. ifdef MSDOS_EXITCODE_PROG
  133. $(MSDOS_EXITCODE_PROG): $(MSDOS_EXITCODE_SRC)
  134. $(TESTCOMPILER) -Fu$(BASEDIR)/$(COMPILER_TARGETDIR) -o$(MSDOS_EXITCODE_PROG) $(MSDOS_EXITCODE_SRC)
  135. endif
  136. extra : erroru$(PPUEXT) ptest$(PPUEXT) popuperr$(PPUEXT) $(MSDOS_EXITCODE_PROG)
  137. #####################################################################
  138. # PPU testing targets
  139. #####################################################################
  140. PPULIST:=$(wildcard */*.ppu) $(wildcard units/*/*.ppu)
  141. PPULOGLIST:=$(subst .ppu,.log-ppu,$(PPULIST))
  142. RMPPULOGLIST:=$(subst .ppu,.rm-log-ppu,$(PPULIST))
  143. ALLPPUDIRS:=$(wildcard units/*) $(wildcard */units/*)
  144. .PHONY : ppulogs cleanppulogs testppudump $(RMPPULOGLIST)
  145. ppulogs : $(PPULOGLIST)
  146. %.log-ppu : %.ppu ../../compiler/utils/ppudump$(EXEEXT)
  147. ..$(PATHSEP)..$(PATHSEP)compiler$(PATHSEP)utils$(PATHSEP)ppudump -VA -M $< > $@
  148. %.rm-log-ppu : %.ppu ../../compiler/utils/ppudump$(EXEEXT)
  149. -$(RMPROG) $<
  150. ../../compiler/utils/ppudump$(EXEEXT):
  151. $(MAKE) -C $(COMPILERDIR)/utils ppudump$(EXEEXT)
  152. ppuinfo :
  153. echo list of PPU directories is "$(ALLPPUDIRS)"
  154. echo PPU list is "$(PPULIST)"
  155. echo PPULOG list is "$(PPULOGLIST)"
  156. cleanppulogs : $(RMPPULOGLIST)
  157. testppudump :
  158. $(MAKE) cleanppulogs ppulogs
  159. #############################
  160. # Main rules
  161. #
  162. ifdef QUICKTEST
  163. all : rtl fpcunit extra
  164. else
  165. all : rtl fpcunit packages extra
  166. endif
  167. STAMPFILES=$(wildcard *stamp*)
  168. TEMPDIRS=$(wildcard $(MAKEFILETARGETS) tmp)
  169. clean : cleanrtl cleanall cleanfpcunit cleanpackages
  170. distclean : clean distcleanrtl distcleanfpcunit distcleanpackages
  171. -$(DELTREE) $(TEMPDIRS)
  172. -$(DELTREE) $(BASEDIR)/units
  173. -$(DEL) $(STAMPFILES)
  174. clean_ctest :
  175. -$(DEL) ../test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o