# # Makefile.fpc for Free Pascal Linux RTL # [package] main=rtl [target] loaders=$(LOADERS) units=$(SYSTEMUNIT) fpintres $(SYSINIT_UNITS) \ uuchar $(UNIXTYPEUNIT) $(CTYPESUNIT) $(BASEUNIXUNIT) $(STRINGSUNIT) objpas macpas $(ISO7185UNIT) $(EXTPASUNIT) $(SYSCALLUNIT) $(UNIXUTILUNIT) \ heaptrc $(LINEINFOUNIT) $(LNFODWRFUNIT) \ $(TERMIOUNIT) $(UNIXUNIT) $(LINUXUNIT) $(INITCUNIT) $(CMEMUNIT) $(CPU_UNITS) \ $(LINUXVCSUNIT) \ $(SYSUTILSUNIT) $(TYPINFOUNIT) $(MATHUNIT) \ $(CHARSETUNIT) $(CPALLUNIT) $(CHARACTERUNIT) $(UNIXCPUNIT) $(GETOPTSUNIT) \ $(ERRORSUNIT) $(DLUNIT) $(DYNLIBSUNIT) \ $(TYPESUNIT) $(SYSCONSTUNIT) $(FPWIDESTRINGUNIT) \ $(CTHREADSUNIT) $(SORTBASEUNIT) $(CLASSESUNIT) $(FGLUNIT) $(RTLCONSTSUNIT) $(DOSUNIT) $(CWSTRINGUNIT) $(FPCYLIXUNIT) \ $(SOFTFPUUNIT) $(SFPUX80UNIT) $(UFLOATX80UNIT) $(SFPU128UNIT) $(UFLOAT128UNIT) implicitunits=$(EXEINFOUNIT) \ $(CP1250UNIT) $(CP1251UNIT) $(CP1252UNIT) $(CP1253UNIT) $(CP1254UNIT) $(CP1255UNIT) $(CP1256UNIT) $(CP1257UNIT) $(CP1258UNIT) \ $(CP437UNIT) $(CP646UNIT) $(CP737UNIT) $(CP775UNIT) $(CP850UNIT) $(CP852UNIT) $(CP855UNIT) $(CP856UNIT) $(CP857UNIT) $(CP860UNIT) $(CP861UNIT) $(CP862UNIT) \ $(CP863UNIT) $(CP864UNIT) $(CP865UNIT) $(CP866UNIT) $(CP869UNIT) $(CP874UNIT) $(CP3021UNIT) $(CP8859_1UNIT) $(CP8859_2UNIT) $(CP8859_3UNIT) $(CP8859_4UNIT) \ $(CP8859_5UNIT) $(CP8859_6UNIT) $(CP8859_7UNIT) $(CP8859_8UNIT) $(CP8859_9UNIT) $(CP8859_10UNIT) $(CP8859_11UNIT) \ $(CP8859_13UNIT) $(CP8859_14UNIT) $(CP8859_15UNIT) $(CP8859_16UNIT) $(CPKOI8_RUNIT) $(CPKOI8_UUNIT) \ $(UNICODEDATAUNIT) rsts=math typinfo sysconst rtlconsts [require] nortl=y [clean] units=syslinux linux [install] fpcpackage=y [default] target=linux [compiler] includedir=$(INC) $(PROCINC) $(UNIXINC) $(ARCH) sourcedir=$(INC) $(PROCINC) $(UNIXINC) $(ARCH) $(COMMON) targetdir=. [shared] libunits=$(SYSTEMUNIT) objpas $(STRINGSUNIT) $(DOSUNIT) \ $(UNIXUNIT) $(BASEUNIXUNIT) $(UNIXTYPEUNIT) $(UNIXUTILUNIT) \ $(SYSUTILSUNIT) $(TYPINFOUNIT) $(MATHUNIT) \ $(CPU_UNITS) $(GETOPTSUNIT) \ $(ERRORSUNIT) \ $(CLASSESUNIT) $(FGLUNIT) $(SYSCONSTUNIT) $(SYSCALLUNIT) $(RTLCONSTSUNIT) $(TYPESUNIT) \ $(LINUXUNIT) $(SORTBASEUNIT) [prerules] RTL=.. INC=$(RTL)/inc COMMON=$(RTL)/common PROCINC=$(RTL)/$(ARCH) UNIXINC=$(RTL)/unix PORTSDIR=$(RTL)/unix EXEINFO_DEPS_OS=$(DLUNIT)$(PPUEXT) $(CTYPESUNIT)$(PPUEXT) $(BASEUNIXUNIT)$(PPUEXT) SYSUTILS_DEPS_OS=$(SYSUTILS_UNIX_DEPS) $(LINUXUNIT)$(PPUEXT) UNITPREFIX=rtl NSOSDIR=$(NSDIR)/linux CTYPES_DEPS_OS=$(UNIXTYPEUNIT)$(PPUEXT) DOS_DEPS_OS=$(BASEUNIXUNIT)$(PPUEXT) $(UNIXUTILUNIT)$(PPUEXT) $(UNIXUNIT)$(PPUEXT) $(SYSCALLUNIT)$(PPUEXT) $(INITCUNIT)$(PPUEXT) DYNLIBS_DEPS_OS=$(DLUNIT)$(PPUEXT) CTHREADS_DEPS_OS=$(LINUXUNIT)$(PPUEXT) UNIX_DEPS_OS=$(SYSCALLUNIT)$(PPUEXT) CPU_UNITS= SYSINIT_UNITS= LOADERS=prt0 dllprt0 cprt0 gprt0 ifeq ($(ARCH),i386) override LOADERS= CPU_UNITS=$(X86UNIT) $(PORTSUNIT) $(CPUUNIT) SYSINIT_UNITS=si_prc si_c21g si_c21 si_c si_dll si_uc endif ifeq ($(ARCH),x86_64) CPU_UNITS=$(X86UNIT) $(PORTSUNIT) $(CPUUNIT) SYSINIT_UNITS=si_prc si_c si_g si_dll override LOADERS=abitag endif ifeq ($(ARCH),powerpc64) override LOADERS= SYSINIT_UNITS=si_prc si_c si_g si_dll endif ifeq ($(ARCH),sparc64) override LOADERS= SYSINIT_UNITS=si_prc si_c si_g si_dll endif ifeq ($(ARCH),riscv32) override LOADERS= SYSINIT_UNITS=si_prc si_dll si_c endif ifeq ($(ARCH),riscv64) override LOADERS= SYSINIT_UNITS=si_prc si_dll si_c si_g endif ifeq ($(ARCH),mips64) override LOADERS= SYSINIT_UNITS=si_prc si_dll si_c si_g endif ifeq ($(ARCH),mips64el) override LOADERS= SYSINIT_UNITS=si_prc si_dll si_c si_g endif # mipsel reuses mips files by including so some file names exist # twice, this causes the compiler to find sometimes wrong files and it tries # to recompile rtl units. To prevent this, compile always as release PPUs, this # should not harm. ifeq ($(ARCH),mipsel) override FPCOPT+=-Ur endif ifeq ($(ARCH),arm) override LOADERS+=ucprt0 CPU_UNITS=cpu endif ifeq ($(ARCH),sparc) override FPCOPT+=-Fisparcgen endif ifeq ($(ARCH),sparc64) override FPCOPT+=-Fisparcgen endif ifeq ($(ARCH),xtensa) override LOADERS= SYSINIT_UNITS=si_prc si_dll si_c si_uc endif ifeq ($(ARCH),loongarch64) override LOADERS= SYSINIT_UNITS=si_prc si_dll si_c si_g endif SYSTEMUNIT=system # Causes release PPU files not to be recompiled ifdef RELEASE override FPCOPT+=-Ur endif # Paths OBJPASDIR=$(RTL)/objpas [rules] # Get the $(SYSTEMUNIT) independent include file names. # This will set the following variables : # SYSINCNAMES include $(INC)/makefile.inc SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES)) # Get the processor dependent include file names. # This will set the following variables : # CPUINCNAMES include $(PROCINC)/makefile.cpu SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES)) # Put $(SYSTEMUNIT) unit dependencies together. SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS) SYSNRINC=$(ARCH)/sysnr.inc # Set PIC_OPT to 1 if -Cg or -fPIC is used ifneq ($(findstring -Cg ,$(COMPILER)),) PIC_OPT=1 endif ifneq ($(findstring -fPIC ,$(COMPILER)),) PIC_OPT=1 endif # Select 32/64 mode ifeq ($(ARCH),i386) ASTARGET=--32 endif ifeq ($(ARCH),x86_64) ASTARGET=--64 endif ifeq ($(ARCH),powerpc) ASTARGET=-a32 endif ifeq ($(ARCH),powerpc64) ASTARGET=-a64 endif # Select 32/64 mode ifeq ($(ARCH),mips) ASTARGET=-32 -mabi=32 -mips2 -EB ifeq ($(PIC_OPT),1) ASTARGET+= -KPIC endif ifneq (,$(findstring -ao-xgot, $(FPC_OPT))) ASTARGET+= -xgot endif ASSHAREDOPT=-KPIC endif ifeq ($(ARCH),mipsel) ASTARGET=-32 -mabi=32 -mips2 -EL ifeq ($(PIC_OPT),1) ASTARGET+= -KPIC endif ifneq (,$(findstring -ao-xgot, $(FPC_OPT))) ASTARGET+= -xgot endif ASSHAREDOPT=-KPIC endif ifeq ($(ARCH),sparc) ifeq ($(PIC_OPT),1) ASTARGET+=-K PIC --defsym PIC=1 endif ASTARGET+=-32 SYSNRINC=sparcgen/sysnr.inc ASSHAREDOPT=-KPIC endif ifeq ($(ARCH),sparc64) ifeq ($(PIC_OPT),1) ASTARGET+=-K PIC --defsym PIC=1 endif ASTARGET+=-64 SYSNRINC=sparcgen/sysnr.inc ASSHAREDOPT=-KPIC endif ifeq ($(ARCH),riscv32) ASTARGET=-march=rv32imafdc endif ifeq ($(ARCH),riscv64) ASTARGET=-march=rv64imafdc endif ifeq ($(ARCH),arm) ifeq ($(SUBARCH),armv6m) ASTARGET+=-mthumb --def __thumb__=1 ARMTHUMB=1 endif ASTARGET+= -meabi=5 endif # # Loaders # prt0$(OEXT) : $(ARCH)/prt0.as $(MAKE) $(COMPILER_UNITTARGETDIR) $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)prt0$(OEXT) $(ARCH)/prt0.as abitag$(OEXT) : $(ARCH)/abitag.as $(MAKE) $(COMPILER_UNITTARGETDIR) $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)abitag$(OEXT) $(ARCH)/abitag.as # ASSHAREDOPT adds -KPIC mandatoy for mips/mipsel objects in shared libs # # the following startup files do not support thumb yet # dllprt0$(OEXT) : $(ARCH)/dllprt0.as $(MAKE) $(COMPILER_UNITTARGETDIR) ifndef ARMTHUMB $(AS) $(ASTARGET) $(ASSHAREDOPT) -o $(UNITTARGETDIRPREFIX)dllprt0$(OEXT) $(ARCH)/dllprt0.as endif gprt0$(OEXT) : $(ARCH)/gprt0.as ifndef ARMTHUMB $(MAKE) $(COMPILER_UNITTARGETDIR) $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)gprt0$(OEXT) $(ARCH)/gprt0.as endif cprt0$(OEXT) : $(ARCH)/cprt0.as ifndef ARMTHUMB $(MAKE) $(COMPILER_UNITTARGETDIR) $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)cprt0$(OEXT) $(ARCH)/cprt0.as endif cprt21$(OEXT) : $(ARCH)/cprt21.as ifndef ARMTHUMB $(MAKE) $(COMPILER_UNITTARGETDIR) $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)cprt21$(OEXT) $(ARCH)/cprt21.as endif gprt21$(OEXT) : $(ARCH)/gprt21.as ifndef ARMTHUMB $(MAKE) $(COMPILER_UNITTARGETDIR) $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)gprt21$(OEXT) $(ARCH)/gprt21.as endif ucprt0$(OEXT) : $(ARCH)/ucprt0.as ifndef ARMTHUMB $(MAKE) $(COMPILER_UNITTARGETDIR) $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)$@ $< endif # # $(SYSINIT_UNITS) Units # SI_PRC_DEPS=si_prc.pp si_intf.inc $(SYSNRINC) $(ARCH)/si_prc.inc $(SYSTEMUNIT)$(PPUEXT) \ $(SI_PRC_DEPS_OS) $(SI_PRC_DEPS_CPU) si_prc$(PPUEXT) : $(SI_PRC_DEPS) $(COMPILER) $< SI_C21G_DEPS=si_c21g.pp si_intf.inc $(SYSNRINC) $(ARCH)/si_c21.inc $(SYSTEMUNIT)$(PPUEXT) \ $(SI_C21G_DEPS_OS) $(SI_C21G_DEPS_CPU) si_c21g$(PPUEXT) : $(SI_C21G_DEPS) $(COMPILER) $< SI_C21_DEPS=si_c21.pp si_intf.inc $(SYSNRINC) $(ARCH)/si_c21.inc $(SYSTEMUNIT)$(PPUEXT) \ $(SI_C21_DEPS_OS) $(SI_C21_DEPS_CPU) si_c21$(PPUEXT) : $(SI_C21_DEPS) $(COMPILER) $< SI_C_DEPS=si_c.pp si_intf.inc $(SYSNRINC) $(ARCH)/si_c.inc $(SYSTEMUNIT)$(PPUEXT) \ $(SI_C_DEPS_OS) $(SI_C_DEPS_CPU) si_c$(PPUEXT) : $(SI_C_DEPS) $(COMPILER) $< SI_DLL_DEPS=si_dll.pp si_intf.inc $(SYSNRINC) $(ARCH)/si_dll.inc $(SYSTEMUNIT)$(PPUEXT) \ $(SI_DLL_DEPS_OS) $(SI_DLL_DEPS_CPU) si_dll$(PPUEXT) : $(SI_DLL_DEPS) $(COMPILER) $< SI_UC_DEPS=si_uc.pp si_intf.inc $(SYSNRINC) $(ARCH)/si_uc.inc $(SYSTEMUNIT)$(PPUEXT) \ $(SI_UC_DEPS_OS) $(SI_UC_DEPS_CPU) si_uc$(PPUEXT) : $(SI_UC_DEPS) $(COMPILER) $< SI_G_DEPS=si_g.pp si_intf.inc $(SYSNRINC) $(ARCH)/si_g.inc $(SYSTEMUNIT)$(PPUEXT) \ $(SI_G_DEPS_OS) $(SI_G_DEPS_CPU) si_g$(PPUEXT) : $(SI_G_DEPS) $(COMPILER) $<