diff --git a/.gitattributes b/.gitattributes index 62312278f0..66769d50d0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3344,6 +3344,7 @@ rtl/emx/sysosh.inc svneol=native#text/plain rtl/emx/system.pas svneol=native#text/plain rtl/emx/systhrd.inc svneol=native#text/plain rtl/emx/sysutils.pp svneol=native#text/plain +rtl/fpmake.inc svneol=native#text/plain rtl/fpmake.pp svneol=native#text/plain rtl/freebsd/Makefile svneol=native#text/plain rtl/freebsd/Makefile.fpc svneol=native#text/plain diff --git a/rtl/fpmake.inc b/rtl/fpmake.inc new file mode 100644 index 0000000000..f6ad6348b7 --- /dev/null +++ b/rtl/fpmake.inc @@ -0,0 +1,321 @@ + +Const + GraphDir = 'inc/graph/'; + SysUtilsDir = 'objpas/sysutils/'; + Unixes = [darwin,freebsd,linux,netbsd,openbsd]; + + +Var + FAllOS : TOses; + FAllCPUs : TCPUs; + +Function AllOS : TOSes; + +Var + O : TOS; + +begin + If (FAllOS=[]) then + For O:=Low(TOS) to High(TOS) do + Include(FallOS,O); + Result:=FAllOS; +end; + +Function AllCPUs : TCPUs; + +Var + C : TCPU; + +begin + If (FAllCPUs=[]) then + For C:=Low(TCPU) to High(TCPU) do + Include(FallCPUs,C); + Result:=FAllCPUs; +end; + +Function CurrentOS : String; + +begin + Result:=OSToString(Defaults.OS); +end; + +Function CurrentCPU : String; + +begin + Result:=CPUToString(Defaults.CPU); +end; + +Function OSDir(CorrectUnix : Boolean = True) : String; + +begin + If CorrectUnix and (Defaults.OS in Unixes) then + Result:='unix/' + else + Result:=IncludeTrailingPathDelimiter(CurrentOS); +end; + + +Function CPUDir : String; + +begin + Result:=IncludeTrailingPathDelimiter(CurrentCPU); +end; + +Procedure InitRTL(Installer : TInstaller); + +Var + O : String; + + +begin + With Installer Do + begin + StartPackage('rtl'); + Version:={$i %FPCVERSION%}; + Author:='The FPC team'; + O:='-Fi'+OSDir(false)+' -Fiinc -Fi'+CurrentCPU; + If Defaults.OS in Unixes then + O:=O+' -Fiunix'; + DefaultPackage.Options:=O; + end; +end; + +Procedure AddSystemDependencies(Targets : TTargets); + +Var + I : Integer; + +begin + With Targets do + For I:=0 to Count-1 do + if (TargetItems[i].Name<>'system') then + TargetItems[i].Dependencies.Add('system'); +end; + +Procedure AddCurrentOS(T : TTarget = Nil); + +Var + I : Integer; + O : TOSes; + +begin + If (T<>Nil) then + begin + O:=T.OS; + If (O<>[]) then + Include(O,Defaults.OS) + else + // Don't do anything. If empty, all will be compiled. + T.OS:=O; + end + else + With Installer.Targets do + For I:=0 to Count-1 do + AddCurrentOS(TargetItems[i]); +end; + +Procedure ExcludeCurrentOS(T : TTarget = Nil); + +Var + I : Integer; + O : TOSes; + +begin + If (T<>Nil) then + begin + O:=T.OS; + If (O=[]) then + O:=AllOS; + Exclude(O,Defaults.OS); + T.OS:=O; + end + else + With Installer.Targets do + For I:=0 to Count-1 do + AddCurrentOS(TargetItems[i]); +end; + +Procedure AddDefaultTargets(Installer : TInstaller); + +Var + T : TTarget; + +begin + With Installer.Targets do + begin + DefaultOS:=AllOS; + DefaultCPU:=AllCPUs; + { System unit. For all platforms. } + T:=AddUnit(OSDIR(False)+'system.pp'); + With T.Dependencies do + begin + // Headers + Add(CPUDir+'setjumph.inc'); + Add('inc/systemh.inc'); + Add('inc/objpash.inc'); + Add('inc/dynarrh.inc'); + Add('inc/compproc.inc'); + Add('inc/heaph.inc'); + Add('inc/threadh.inc'); + Add('inc/varianth.inc'); + // Implementations + Add(CPUDir+CurrentCPU+'.inc'); + Add(CPUDir+'set.inc'); + Add(CPUDir+'math.inc'); + Add(CPUDir+'int64p.inc'); + Add(CPUDir+'setjump.inc'); + Add(OSDir+'systhrd.inc'); + Add(OSDir(False)+'sysos.inc'); + Add(OSDir+'sysheap.inc'); + Add(OSDir+'sysdir.inc'); + Add('inc/filerec.inc'); + Add('inc/textrec.inc'); + Add('inc/generic.inc'); + Add('inc/genset.inc'); + Add('inc/genmath.inc'); + Add('inc/sstrings.inc'); + Add('inc/int64.inc'); + Add('inc/astrings.inc'); + Add('inc/wstrings.inc'); + Add('inc/aliases.inc'); + Add('inc/dynarr.inc'); + Add('inc/objpas.inc'); + Add('inc/variant.inc'); + Add('inc/rtti.inc'); + Add('inc/heap.inc'); + Add('inc/thread.inc'); + Add('inc/text.inc'); + Add('inc/file.inc'); + Add('inc/typefile.inc'); + end; + T:=AddUnit('objpas/objpas.pp'); + T:=AddUnit('inc/macpas.pp'); + + { Turbo Pascal RTL units } + T:=AddUnit(OSDir+'dos.pp'); + T.Dependencies.Add('inc/dosh.inc'); + T:=AddUnit(OSDir+'crt.pp'); + T.Directory:=OSDir; + T.Dependencies.Add('inc/crth.inc'); + T:=AddUnit(OSDir+'graph.pp'); + T.IncludePath.Add(GraphDir); + With T.Dependencies do + begin + Add(GraphDir+'clip.inc'); + Add(GraphDir+'fontdata.inc'); + Add(GraphDir+'graph.inc'); + Add(GraphDir+'gtext.inc'); + Add(GraphDir+'modes.inc'); + Add(GraphDir+'fills.inc'); + Add(GraphDir+'graphh.inc'); + Add(GraphDir+'palette.inc'); + end; + T:=AddUnit('inc/strings.pp'); + With T.Dependencies do + begin + Add(CPUDir+'strings.inc'); + Add(CPUDir+'stringss.inc'); + Add('inc/genstr.inc'); + Add('inc/genstrs.inc'); + Add('inc/stringsi.inc'); + end; + { Delphi RTL units } + T:=AddUnit('objpas/rtlconsts.pp'); + T.Resourcestrings:=True; + T.Dependencies.Add('objpas/rtlconst.inc'); + T:=AddUnit(OSDir+'sysutils.pp'); + T.IncludePath.Add(SysUtilsDir); + With T.Dependencies do + begin + Add(SysUtilsDir+'datih.inc'); + Add(SysUtilsDir+'finah.inc'); + Add(SysUtilsDir+'osutilsh.inc'); + Add(SysUtilsDir+'sysansi.inc'); + Add(SysUtilsDir+'syspchh.inc'); + Add(SysUtilsDir+'systhrdh.inc'); + Add(SysUtilsDir+'syswideh.inc'); + Add(SysUtilsDir+'dati.inc'); + Add(SysUtilsDir+'fina.inc'); + Add(SysUtilsDir+'stre.inc'); + Add(SysUtilsDir+'sysformt.inc'); + Add(SysUtilsDir+'syspch.inc'); + Add(SysUtilsDir+'sysuintf.inc'); + Add(SysUtilsDir+'syswide.inc'); + Add(SysUtilsDir+'diskh.inc'); + Add(SysUtilsDir+'intfh.inc'); + Add(SysUtilsDir+'strg.inc'); + Add(SysUtilsDir+'sysinth.inc'); + Add(SysUtilsDir+'sysstrh.inc'); + Add(SysUtilsDir+'sysutilh.inc'); + Add(SysUtilsDir+'filutilh.inc'); + Add(SysUtilsDir+'osutil.inc'); + Add(SysUtilsDir+'sysansih.inc'); + Add(SysUtilsDir+'sysint.inc'); + Add(SysUtilsDir+'sysstr.inc'); + Add(SysUtilsDir+'sysutils.inc'); + end; + T:=AddUnit(OSDIR+'varutils.pp'); + T.ResourceStrings:=True; + T.IncludePath.Add('objpas'); + T:=AddUnit('inc/variants.pp'); + With T.Dependencies do + begin + Add('math'); + Add('varutils'); + end; + T.ResourceStrings:=True; + T:=AddUnit('objpas/convutils.pp'); + T.Dependencies.Add('objpas/convutil.inc'); + T.ResourceStrings:=True; + T:=AddUnit('objpas/dateutils.pp'); + T.Dependencies.Add('objpas/dateutil.inc'); + T:=AddUnit('objpas/strutils.pp'); + T.Dependencies.Add('sysutils'); + T:=AddUnit('objpas/math.pp'); + T.Dependencies.Add('sysutils'); + T.Dependencies.Add(CPUDir+'mathuh.inc'); + T.Dependencies.Add(CPUDir+'mathu.inc'); + T.ResourceStrings:=True; + T:=AddUnit('objpas/sysconst.pp'); + T.Resourcestrings:=true; + T:=AddUnit('objpas/types.pp'); + T:=AddUnit('objpas/typinfo.pp'); + T.Dependencies.Add('sysutils'); + T.Dependencies.Add('rtlconsts'); + T:=AddUnit('objpas/utf8bidi.pp'); + { Free Pascal additions} + T:=AddUnit(OSDir+'keyboard.pp'); + With T.Dependencies do + begin + Add('inc/keybrdh.inc'); + Add('inc/keyboard.inc'); + Add('inc/keyscan.inc'); + end; + T:=AddUnit(OSDir+'mouse.pp'); + With T.Dependencies do + begin + Add('inc/mouseh.inc'); + Add('inc/mouse.inc'); + end; + T:=AddUnit(OSDir+'video.pp'); + With T.Dependencies do + begin + Add('inc/video.inc'); + Add('inc/videoh.inc'); + end; + T:=AddUnit('inc/matrix.pp'); + T.Dependencies.Add('inc/mmatimp.inc'); + T:=AddUnit('inc/dynlibs.pp'); + T.Dependencies.Add(OSDir+'dynlibs.inc'); + T:=AddUnit('inc/getopts.pp'); + T:=AddUnit('inc/cmem.pp'); + T:=AddUnit('inc/ctypes.pp'); + T:=AddUnit('inc/softfpu.pp'); + T:=AddUnit('inc/ucomplex.pp'); + T:=AddUnit('inc/heaptrc.pp'); + T:=AddUnit('inc/lineinfo.pp'); + T:=AddUnit('inc/charset.pp'); + // T:=AddUnit('inc/pagemem.pp'); + end; + AddSystemDependencies(Installer.Targets); +end; \ No newline at end of file