123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- {$ifndef ALLPACKAGES}
- {$mode objfpc}{$H+}
- program fpmake;
- uses
- fpmkunit,
- sysutils;
- {$endif ALLPACKAGES}
- procedure ide_check_gdb_availability(Sender: TObject);
- function DetectLibGDBDir: string;
- var
- SearchPath: string;
- const
- LibGDBName = 'libgdb.a';
- begin
- result:='';
- // First look for the GDBLIBDIR environment variable
- SearchPath := GetEnvironmentVariable('GDBLIBDIR');
- if (SearchPath<>'') and DirectoryExists(SearchPath) and FileExists(IncludeTrailingPathDelimiter(SearchPath)+LibGDBName) then
- begin
- result:=IncludeTrailingPathDelimiter(SearchPath);
- exit;
- end;
- // Search in the default locations
- SearchPath := '..'+PathDelim+'libgdb'+PathDelim+OSToString(Defaults.OS)+PathDelim+CPUToString(Defaults.CPU)+PathDelim;
- if DirectoryExists(SearchPath) and FileExists(SearchPath+LibGDBName) then
- begin
- result := SearchPath;
- exit;
- end;
- SearchPath := '..'+PathDelim+'libgdb'+PathDelim+OSToString(Defaults.OS)+PathDelim;
- if DirectoryExists(SearchPath) and FileExists(SearchPath+LibGDBName) then
- begin
- result := SearchPath;
- exit;
- end;
- // No custom libgdb.a found, try using system default library if available
- SearchPath := '..'+PathDelim+'lib'+PathDelim;
- if DirectoryExists(SearchPath) and FileExists(SearchPath+LibGDBName) then
- begin
- result := SearchPath;
- installer.BuildEngine.Log(vlWarning, 'Using system default libgdb file located in '+Result);
- exit;
- end;
- SearchPath := '..'+PathDelim+'usr'+PathDelim+'lib'+PathDelim;
- if DirectoryExists(SearchPath) and FileExists(SearchPath+LibGDBName) then
- begin
- result := SearchPath;
- installer.BuildEngine.Log(vlWarning, 'Using system default libgdb file located in '+Result);
- exit;
- end;
- SearchPath := '..'+PathDelim+'usr'+PathDelim+'local'+PathDelim+'lib'+PathDelim;
- if DirectoryExists(SearchPath) and FileExists(SearchPath+LibGDBName) then
- begin
- result := SearchPath;
- installer.BuildEngine.Log(vlWarning, 'Using system default libgdb file located in '+Result);
- exit;
- end;
- end;
- var
- s: string;
- GDBLibDir: string;
- P: TPackage;
- begin
- P := sender as TPackage;
- with installer do
- begin
- s := GetCustomFpmakeCommandlineOptionValue('NoGDB');
- if not ((s='1') or (s='Y')) then
- begin
- // Detection of GDB.
- GDBLibDir := DetectLibGDBDir;
- if GDBLibDir<>'' then
- begin
- // Include GDB
- BuildEngine.log(vlCommand, 'LibGDB was found, build IDE with debugger support');
- if FileExists(GDBLibDir+'gdblib.inc') then
- begin
- P.Options.Add('-dUSE_GDBLIBINC');
- P.Options.Add('-I'+GDBLibDir);
- end;
- P.Options.Add('-Fl'+GDBLibDir);
- case Defaults.OS of
- win32,
- win64 : begin
- P.Options.Add('-Xe');
- P.Options.Add('-k--allow-multiple-definition');
- end;
- freebsd : begin
- P.Options.Add('-Fl/usr/local/lib');
- P.Options.Add('Xd');
- end;
- openbsd : P.Options.Add('-Fl/usr/local/lib');
- netbsd : P.Options.Add('Xd');
- end; {case}
- P.NeedLibc := true;
- end
- else
- begin
- BuildEngine.log(vlCommand, 'LibGDB was not found, IDE has no debugger support');
- P.Options.Add('-dNODEBUG');
- end;
- end
- else
- begin
- BuildEngine.log(vlCommand, 'Debugger support disabled');
- P.Options.Add('-dNODEBUG');
- end;
- end;
- end;
- procedure add_ide(const ADirectory: string);
- Var
- P : TPackage;
- T : TTarget;
- CompilerTarget : TCpu;
- s: string;
- begin
- AddCustomFpmakeCommandlineOption('CompilerTarget','Target CPU for the IDE''s compiler');
- AddCustomFpmakeCommandlineOption('NoGDB','If value=1 or ''Y'', no GDB support');
- With Installer do
- begin
- s :=GetCustomFpmakeCommandlineOptionValue('CompilerTarget');
- if s <> '' then
- CompilerTarget:=StringToCPU(s)
- else
- CompilerTarget:=Defaults.CPU;
- P:=AddPackage('ide');
- P.Version:='2.7.1';
- {$ifdef ALLPACKAGES}
- P.Directory:=ADirectory;
- {$endif ALLPACKAGES}
- P.Dependencies.Add('rtl');
- P.Dependencies.Add('fv');
- P.Dependencies.Add('chm');
- P.Dependencies.Add('gdbint',AllOSes-[morphos]);
- P.Dependencies.Add('graph',[go32v2]);
- P.SupportBuildModes:=[bmOneByOne];
- P.Options.Add('-Ur');
- P.Options.Add('-dNOCATCH');
- P.Options.Add('-dBrowserCol');
- P.Options.Add('-dGDB');
- P.Options.Add('-d'+CPUToString(CompilerTarget));
- P.Options.Add('-Fu../compiler');
- P.Options.Add('-Fu../compiler/'+CPUToString(CompilerTarget));
- P.Options.Add('-Fu../compiler/targets');
- P.Options.Add('-Fu../compiler/systems');
- P.Options.Add('-Fi../compiler/'+CPUToString(CompilerTarget));
- P.Options.Add('-Fi../compiler');
- if CompilerTarget in [x86_64, i386] then
- P.Options.Add('-Fu../compiler/x86');
- if CompilerTarget in [powerpc, powerpc64] then
- P.Options.Add('-Fu../compiler/ppcgen');
- if CompilerTarget = x86_64 then
- P.Options.Add('-dNOOPT');
- if CompilerTarget = mipsel then
- P.Options.Add('-Fu../compiler/mips');
- P.Options.Add('-Sg');
- T:=P.Targets.AddProgram('fp.pas');
- T.Dependencies.AddUnit('compunit');
- T:=P.Targets.AddUnit('compunit.pas');
- T.Directory:='compiler';
- T.Install:=false;
- P.InstallFiles.Add('fp.ans','$(BASEINSTALLDIR)/ide');
- P.InstallFiles.Add('gplprog.pt','$(BASEINSTALLDIR)/ide');
- P.InstallFiles.Add('gplunit.pt','$(BASEINSTALLDIR)/ide');
- P.InstallFiles.Add('program.pt','$(BASEINSTALLDIR)/ide');
- P.InstallFiles.Add('unit.pt','$(BASEINSTALLDIR)/ide');
- P.InstallFiles.Add('cvsco.tdf','$(BASEINSTALLDIR)/ide');
- P.InstallFiles.Add('cvsdiff.tdf','$(BASEINSTALLDIR)/ide');
- P.InstallFiles.Add('cvsup.tdf','$(BASEINSTALLDIR)/ide');
- P.InstallFiles.Add('grep.tdf','$(BASEINSTALLDIR)/ide');
- P.InstallFiles.Add('tpgrep.tdf','$(BASEINSTALLDIR)/ide');
- P.InstallFiles.Add('fp32.ico', [win32, win64], '$(BASEINSTALLDIR)/ide');
- P.Sources.AddDoc('readme.ide');
- P.CleanFiles.Add('$(UNITSOUTPUTDIR)ppheap.ppu');
- P.CleanFiles.Add('$(UNITSOUTPUTDIR)compiler.ppu');
- P.CleanFiles.Add('$(UNITSOUTPUTDIR)comphook.ppu');
- P.CleanFiles.Add('$(UNITSOUTPUTDIR)cpuinfo.ppu');
- P.CleanFiles.Add('$(UNITSOUTPUTDIR)browcol.ppu');
- P.CleanFiles.Add('$(UNITSOUTPUTDIR)ppheap.o');
- P.CleanFiles.Add('$(UNITSOUTPUTDIR)compiler.o');
- P.CleanFiles.Add('$(UNITSOUTPUTDIR)comphook.o');
- P.CleanFiles.Add('$(UNITSOUTPUTDIR)cpuinfo.o');
- P.CleanFiles.Add('$(UNITSOUTPUTDIR)browcol.o');
- P.BeforeCompileProc:=@ide_check_gdb_availability;
- end;
- end;
- {$ifndef ALLPACKAGES}
- begin
- add_ide('');
- Installer.Run;
- end.
- {$endif ALLPACKAGES}
|