diff --git a/compiler/src/main/pascal/blaise.codegen.driver.pas b/compiler/src/main/pascal/blaise.codegen.driver.pas index 09418a8..87c8bf7 100644 --- a/compiler/src/main/pascal/blaise.codegen.driver.pas +++ b/compiler/src/main/pascal/blaise.codegen.driver.pas @@ -81,10 +81,12 @@ type OPDFEnabled: Boolean; { OPDF code shaping } OPDFAsmFile: string; { OPDF sidecar path, if any } UseInternalAsm: Boolean; { --assembler internal (native backend) } + AssemblerExplicit: Boolean; { True when user passed --assembler } AssemblerChoiceBad: Boolean; { a --assembler value was given that is neither 'internal' nor 'external'; the native driver's ValidateOptions rejects it } UseInternalLinker: Boolean; { --linker internal (native backend) } + LinkerExplicit: Boolean; { True when user passed --linker } LinkerChoiceBad: Boolean; { --linker value not 'internal' or 'external' } end; diff --git a/compiler/src/main/pascal/blaise.codegen.native.driver.pas b/compiler/src/main/pascal/blaise.codegen.native.driver.pas index 326f805..1c59ca2 100644 --- a/compiler/src/main/pascal/blaise.codegen.native.driver.pas +++ b/compiler/src/main/pascal/blaise.codegen.native.driver.pas @@ -291,6 +291,7 @@ begin if AFlag = '--assembler' then begin AOpts.UseInternalAsm := (ANextArg = 'internal'); + AOpts.AssemblerExplicit := True; AOpts.AssemblerChoiceBad := (ANextArg <> 'internal') and (ANextArg <> 'external'); Result := oaConsumedValue; @@ -298,6 +299,7 @@ begin else if AFlag = '--linker' then begin AOpts.UseInternalLinker := (ANextArg = 'internal'); + AOpts.LinkerExplicit := True; AOpts.LinkerChoiceBad := (ANextArg <> 'internal') and (ANextArg <> 'external'); Result := oaConsumedValue; @@ -309,9 +311,9 @@ end; procedure TNativeBackendDriver.DescribeOptions(ALines: TStringList); begin ALines.Add(FormatFlagLine('--assembler ', - 'internal | external (default: external)')); + 'internal | external (default: internal)')); ALines.Add(FormatFlagLine('--linker ', - 'internal | external (default: external)')); + 'internal | external (default: internal)')); end; function TNativeBackendDriver.ValidateOptions(AOpts: TBackendOpts): string; @@ -321,6 +323,11 @@ begin Result := '--assembler must be ''internal'' or ''external''' else if AOpts.LinkerChoiceBad then Result := '--linker must be ''internal'' or ''external'''; + + if not AOpts.AssemblerExplicit then + AOpts.UseInternalAsm := True; + if not AOpts.LinkerExplicit then + AOpts.UseInternalLinker := True; end; initialization diff --git a/compiler/src/main/pascal/blaise.linker.elf.pas b/compiler/src/main/pascal/blaise.linker.elf.pas index d1b2040..cfbca0d 100644 --- a/compiler/src/main/pascal/blaise.linker.elf.pas +++ b/compiler/src/main/pascal/blaise.linker.elf.pas @@ -2369,6 +2369,8 @@ var FOut: TFileOutputStream; begin Bytes := Self.LinkToBytes(AEntryName); + if FileExists(AOutputPath) then + DeleteFile(AOutputPath); FOut := TFileOutputStream.Create(AOutputPath); try FOut.Write(PChar(Bytes), Length(Bytes));