lazarus/ide/frames/compiler_codegen_options.pas
2024-04-08 02:22:35 +03:00

180 lines
5.0 KiB
ObjectPascal

unit compiler_codegen_options;
{$mode objfpc}{$H+}
interface
uses
SysUtils,
// LCL
StdCtrls,
// IdeIntf
IDEOptionsIntf, IDEOptEditorIntf,
// IdeConfig
CompilerOptions,
// IDE
LazarusIDEStrConsts;
type
{ TCompilerCodegenOptionsFrame }
TCompilerCodegenOptionsFrame = class(TAbstractIDEOptionsEditor)
chkOptSmaller: TCheckBox;
chkLinkSmart: TCheckBox;
chkOptionsLinkOpt: TCheckBox;
chkSmartLinkUnit: TCheckBox;
chkRelocatableUnit: TCheckBox;
edtHeapSize: TEdit;
edtOptionsLinkOpt: TEdit;
edtStackSize: TEdit;
grpOptimizations: TGroupBox;
grpLinking: TGroupBox;
grpHeapStackSize: TGroupBox;
grpOptimizationLevels: TGroupBox;
grpUnitStyle: TGroupBox;
lbHeapSize: TLabel;
lbStackSize: TLabel;
radOptLevel1: TRadioButton;
radOptLevel2: TRadioButton;
radOptLevel3: TRadioButton;
radOptLevel4: TRadioButton;
radOptLevelNone: TRadioButton;
public
function GetTitle: string; override;
procedure Setup({%H-}ADialog: TAbstractOptionsEditorDialog); override;
procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
end;
implementation
{$R *.lfm}
{ TCompilerCodegenOptionsFrame }
function TCompilerCodegenOptionsFrame.GetTitle: string;
begin
Result := dlgCompilationAndLinking;
end;
procedure TCompilerCodegenOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
begin
grpUnitStyle.Caption := dlgCOUnitStyle;
chkSmartLinkUnit.Caption := dlgCOSmartLinkable + ' (-CX)';
chkRelocatableUnit.Caption := dlgCORelocatable + ' (-WR)';
grpHeapStackSize.Caption := dlgHeapAndStackSize;
lbHeapSize.Caption := dlgHeapSize + ' (-Ch)';
lbStackSize.Caption := dlgStackSize + ' (-Cs)';
edtHeapSize.Text := '';
edtStackSize.Text := '';
grpOptimizationLevels.Caption := dlgOptimizationLevels;
radOptLevelNone.Caption := dlgLevelNoneOpt;
radOptLevel1.Caption := dlgLevel1Opt + ' (-O1)';
radOptLevel2.Caption := dlgLevel2Opt + ' (-O2)';
radOptLevel3.Caption := dlgLevel3Opt + ' (-O3)';
radOptLevel4.Caption := dlgLevel4Opt + ' (-O4)';
grpOptimizations.Caption := dlgOtherOptimizations;
chkOptSmaller.Caption := lisSmallerRatherThanFaster + ' (-Os)';
grpLinking.Caption := dlgCOLinking;
chkLinkSmart.Caption := dlgLinkSmart + ' (-XX)';
chkOptionsLinkOpt.Caption := dlgPassOptsLinker;
edtOptionsLinkOpt.Text := '';
end;
procedure TCompilerCodegenOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
begin
with AOptions as TBaseCompilerOptions do
begin
chkSmartLinkUnit.Checked := SmartLinkUnit;
chkRelocatableUnit.Checked := RelocatableUnit;
grpHeapStackSize.Visible := NeedsLinkerOpts;
edtHeapSize.Text := IntToStr(HeapSize);
edtStackSize.Text := IntToStr(StackSize);
//chkOptVarsInReg.Checked := VariablesInRegisters;
//chkOptUncertain.Checked := UncertainOptimizations;
chkOptSmaller.Checked := SmallerCode;
case OptimizationLevel of
1: radOptLevel1.Checked := True;
2: radOptLevel2.Checked := True;
3: radOptLevel3.Checked := True;
4: radOptLevel4.Checked := True;
else
radOptLevelNone.Checked := True;
end;
grpLinking.Visible := NeedsLinkerOpts;
chkLinkSmart.Checked := LinkSmart;
chkLinkSmart.Enabled := NeedsLinkerOpts;
chkOptionsLinkOpt.Checked := PassLinkerOptions;
chkOptionsLinkOpt.Enabled := NeedsLinkerOpts;
edtOptionsLinkOpt.Text := LinkerOptions;
end;
end;
procedure TCompilerCodegenOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
var
hs, code: integer;
begin
with AOptions as TBaseCompilerOptions do
begin
SmartLinkUnit := chkSmartLinkUnit.Checked;
RelocatableUnit := chkRelocatableUnit.Checked;
Val(edtHeapSize.Text, hs, code);
if (code <> 0) then
HeapSize := 0
else
HeapSize := hs;
Val(edtStackSize.Text, hs, code);
if (code <> 0) then
StackSize := 0
else
StackSize := hs;
//VariablesInRegisters := chkOptVarsInReg.Checked;
//UncertainOptimizations := chkOptUncertain.Checked;
SmallerCode := chkOptSmaller.Checked;
if (radOptLevel1.Checked) then
OptimizationLevel := 1
else
if (radOptLevel2.Checked) then
OptimizationLevel := 2
else
if (radOptLevel3.Checked) then
OptimizationLevel := 3
else
if (radOptLevel4.Checked) then
OptimizationLevel := 4
else
OptimizationLevel := 0;
LinkSmart := chkLinkSmart.Checked;
PassLinkerOptions := chkOptionsLinkOpt.Checked;
LinkerOptions := edtOptionsLinkOpt.Text;
end;
end;
class function TCompilerCodegenOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TBaseCompilerOptions;
end;
initialization
RegisterIDEOptionsEditor(GroupCompiler, TCompilerCodegenOptionsFrame,
CompilerOptionsCodeGeneration);
RegisterIDEOptionsEditor(GroupPkgCompiler, TCompilerCodegenOptionsFrame,
CompilerOptionsCodeGeneration);
end.