mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-20 05:04:05 +02:00
+ Enabling of x86_64-hziku target in fixes_3_2 compiler branch by merging of commits #40753 and 40756.
------------------------------------------------------------------------ r40753 | karoly | 2019-01-04 02:16:24 +0000 (Fri, 04 Jan 2019) | 1 line haiku-x86_64: add target to the compiler and ppudump, enable it in fpmake and fpcmake ------------------------------------------------------------------------ --- Merging r40753 into '.': U compiler/options.pas U compiler/systems/i_haiku.pas U compiler/systems/t_haiku.pas U compiler/systems.inc U compiler/utils/ppuutils/ppudump.pp U compiler/x86/agx86att.pas U compiler/x86_64/cpuelf.pas U compiler/x86_64/cputarg.pas U utils/fpcm/fpcmmain.pp --- Recording mergeinfo for merge of r40753 into '.': U . ------------------------------------------------------------------------ r40756 | karoly | 2019-01-04 03:00:03 +0000 (Fri, 04 Jan 2019) | 1 line haiku: linker support code for internal sysinit and make the x86_64 port use it ------------------------------------------------------------------------ --- Merging r40756 into '.': G compiler/systems/t_haiku.pas U compiler/systems.pas --- Recording mergeinfo for merge of r40756 into '.': G . git-svn-id: branches/fixes_3_2@42133 -
This commit is contained in:
parent
46406e1a81
commit
17d0f31119
@ -138,7 +138,7 @@ const
|
|||||||
+ [system_i386_wdosx];
|
+ [system_i386_wdosx];
|
||||||
|
|
||||||
suppported_targets_x_smallr = systems_linux + systems_solaris + systems_android
|
suppported_targets_x_smallr = systems_linux + systems_solaris + systems_android
|
||||||
+ [system_i386_haiku]
|
+ [system_i386_haiku,system_x86_64_haiku]
|
||||||
+ [system_i386_beos]
|
+ [system_i386_beos]
|
||||||
+ [system_m68k_amiga];
|
+ [system_m68k_amiga];
|
||||||
|
|
||||||
|
@ -185,7 +185,8 @@
|
|||||||
system_riscv64_embedded, { 98 }
|
system_riscv64_embedded, { 98 }
|
||||||
system_riscv32_embedded, { 99 }
|
system_riscv32_embedded, { 99 }
|
||||||
system_aarch64_android, { 100 }
|
system_aarch64_android, { 100 }
|
||||||
system_x86_64_android { 101 }
|
system_x86_64_android, { 101 }
|
||||||
|
system_x86_64_haiku { 102 }
|
||||||
);
|
);
|
||||||
|
|
||||||
type
|
type
|
||||||
|
@ -105,6 +105,73 @@ unit i_haiku;
|
|||||||
llvmdatalayout : 'e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32-S32';
|
llvmdatalayout : 'e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32-S32';
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const
|
||||||
|
system_x86_64_haiku_info : tsysteminfo =
|
||||||
|
(
|
||||||
|
system : system_x86_64_Haiku;
|
||||||
|
name : 'Haiku for x86_64';
|
||||||
|
shortname : 'Haiku';
|
||||||
|
flags : [tf_under_development,tf_needs_symbol_size,tf_files_case_sensitive,
|
||||||
|
tf_pic_default,tf_library_needs_pic,tf_smartlink_sections,
|
||||||
|
tf_has_winlike_resources];
|
||||||
|
cpu : cpu_x86_64;
|
||||||
|
unit_env : 'HAIKUUNITS';
|
||||||
|
extradefines : 'BEOS;UNIX;HASUNIX';
|
||||||
|
exeext : '';
|
||||||
|
defext : '.def';
|
||||||
|
scriptext : '.sh';
|
||||||
|
smartext : '.sl';
|
||||||
|
unitext : '.ppu';
|
||||||
|
unitlibext : '.ppl';
|
||||||
|
asmext : '.s';
|
||||||
|
objext : '.o';
|
||||||
|
resext : '.res';
|
||||||
|
resobjext : '.or';
|
||||||
|
sharedlibext : '.so';
|
||||||
|
staticlibext : '.a';
|
||||||
|
staticlibprefix : 'libp';
|
||||||
|
sharedlibprefix : 'lib';
|
||||||
|
sharedClibext : '.so';
|
||||||
|
staticClibext : '.a';
|
||||||
|
staticClibprefix : 'lib';
|
||||||
|
sharedClibprefix : 'lib';
|
||||||
|
importlibprefix : 'libimp';
|
||||||
|
importlibext : '.a';
|
||||||
|
Cprefix : '';
|
||||||
|
newline : #10;
|
||||||
|
dirsep : '/';
|
||||||
|
assem : as_x86_64_elf64;
|
||||||
|
assemextern : as_gas;
|
||||||
|
link : ld_none;
|
||||||
|
linkextern : ld_haiku;
|
||||||
|
ar : ar_gnu_ar;
|
||||||
|
res : res_elf;
|
||||||
|
dbg : dbg_stabs;
|
||||||
|
script : script_unix;
|
||||||
|
endian : endian_little;
|
||||||
|
{ FIXME: stuff below is copied from Linux/x64 now, could be incorrect for Haiku (KB) }
|
||||||
|
alignment :
|
||||||
|
(
|
||||||
|
procalign : 16;
|
||||||
|
loopalign : 8;
|
||||||
|
jumpalign : 16;
|
||||||
|
constalignmin : 0;
|
||||||
|
constalignmax : 16;
|
||||||
|
varalignmin : 0;
|
||||||
|
varalignmax : 16;
|
||||||
|
localalignmin : 4;
|
||||||
|
localalignmax : 16;
|
||||||
|
recordalignmin : 0;
|
||||||
|
recordalignmax : 16;
|
||||||
|
maxCrecordalign : 16
|
||||||
|
);
|
||||||
|
first_parm_offset : 16;
|
||||||
|
stacksize : 16 * 1024 * 1024;
|
||||||
|
stackalign : 16;
|
||||||
|
abi : abi_default;
|
||||||
|
llvmdatalayout : 'e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128';
|
||||||
|
);
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
@ -113,4 +180,9 @@ initialization
|
|||||||
set_source_info(system_i386_haiku_info);
|
set_source_info(system_i386_haiku_info);
|
||||||
{$endif haiku}
|
{$endif haiku}
|
||||||
{$endif cpui386}
|
{$endif cpui386}
|
||||||
|
{$ifdef cpux86_64}
|
||||||
|
{$ifdef haiku}
|
||||||
|
set_source_info(system_x86_64_haiku_info);
|
||||||
|
{$endif haiku}
|
||||||
|
{$endif cpux86_64}
|
||||||
end.
|
end.
|
||||||
|
@ -49,6 +49,7 @@ interface
|
|||||||
public
|
public
|
||||||
constructor Create;override;
|
constructor Create;override;
|
||||||
procedure SetDefaultInfo;override;
|
procedure SetDefaultInfo;override;
|
||||||
|
procedure InitSysInitUnitName;override;
|
||||||
function MakeExecutable:boolean;override;
|
function MakeExecutable:boolean;override;
|
||||||
function MakeSharedLibrary:boolean;override;
|
function MakeSharedLibrary:boolean;override;
|
||||||
end;
|
end;
|
||||||
@ -224,6 +225,14 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TLinkerHaiku.InitSysInitUnitName;
|
||||||
|
const
|
||||||
|
SysInitUnitNames: array[boolean] of string[15] = ( 'si_c', 'si_dllc' );
|
||||||
|
begin
|
||||||
|
sysinitunit:=SysInitUnitNames[current_module.islibrary];
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TLinkerHaiku.WriteResponseFile(isdll:boolean;makelib:boolean) : Boolean;
|
function TLinkerHaiku.WriteResponseFile(isdll:boolean;makelib:boolean) : Boolean;
|
||||||
Var
|
Var
|
||||||
linkres : TLinkRes;
|
linkres : TLinkRes;
|
||||||
@ -238,8 +247,6 @@ begin
|
|||||||
{ set special options for some targets }
|
{ set special options for some targets }
|
||||||
linklibc:=(SharedLibFiles.Find('root')<>nil);
|
linklibc:=(SharedLibFiles.Find('root')<>nil);
|
||||||
|
|
||||||
prtobj:='prt0';
|
|
||||||
cprtobj:='cprt0';
|
|
||||||
if (cs_profile in current_settings.moduleswitches) or
|
if (cs_profile in current_settings.moduleswitches) or
|
||||||
(not SharedLibFiles.Empty) then
|
(not SharedLibFiles.Empty) then
|
||||||
begin
|
begin
|
||||||
@ -247,20 +254,27 @@ begin
|
|||||||
linklibc:=true;
|
linklibc:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if (not linklibc) and makelib then
|
prtobj:='';
|
||||||
begin
|
cprtobj:='';
|
||||||
linklibc:=true;
|
if not (target_info.system in systems_internal_sysinit) then
|
||||||
cprtobj:='dllprt.o';
|
begin
|
||||||
end
|
prtobj:='prt0';
|
||||||
else if makelib then
|
cprtobj:='cprt0';
|
||||||
begin
|
|
||||||
// Making a dll with libc linking. Should be always the case under Haiku.
|
if (not linklibc) and makelib then
|
||||||
cprtobj:='dllcprt0';
|
begin
|
||||||
end;
|
linklibc:=true;
|
||||||
|
cprtobj:='dllprt.o';
|
||||||
|
end
|
||||||
|
else if makelib then
|
||||||
|
begin
|
||||||
|
// Making a dll with libc linking. Should be always the case under Haiku.
|
||||||
|
cprtobj:='dllcprt0';
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
if linklibc then
|
if linklibc then
|
||||||
prtobj:=cprtobj;
|
prtobj:=cprtobj;
|
||||||
|
|
||||||
{ Open link.res file }
|
{ Open link.res file }
|
||||||
LinkRes:=TLinkRes.Create(outputexedir+Info.ResName,false);
|
LinkRes:=TLinkRes.Create(outputexedir+Info.ResName,false);
|
||||||
@ -271,7 +285,11 @@ begin
|
|||||||
LinkRes.Add('ld -o $1 -e 0 $2 $3 $4 $5 $6 $7 $8 $9\');
|
LinkRes.Add('ld -o $1 -e 0 $2 $3 $4 $5 $6 $7 $8 $9\');
|
||||||
}
|
}
|
||||||
LinkRes.Add('-m');
|
LinkRes.Add('-m');
|
||||||
|
{$ifdef i386}
|
||||||
LinkRes.Add('elf_i386_haiku');
|
LinkRes.Add('elf_i386_haiku');
|
||||||
|
{$else i386}
|
||||||
|
LinkRes.Add('elf_x86_64_haiku');
|
||||||
|
{$endif i386}
|
||||||
LinkRes.Add('-shared');
|
LinkRes.Add('-shared');
|
||||||
LinkRes.Add('-Bsymbolic');
|
LinkRes.Add('-Bsymbolic');
|
||||||
|
|
||||||
@ -519,4 +537,9 @@ initialization
|
|||||||
RegisterExport(system_i386_haiku,texportlibhaiku);
|
RegisterExport(system_i386_haiku,texportlibhaiku);
|
||||||
RegisterTarget(system_i386_haiku_info);
|
RegisterTarget(system_i386_haiku_info);
|
||||||
{$endif i386}
|
{$endif i386}
|
||||||
|
{$ifdef x86_64}
|
||||||
|
RegisterImport(system_x86_64_haiku,timportlibhaiku);
|
||||||
|
RegisterExport(system_x86_64_haiku,texportlibhaiku);
|
||||||
|
RegisterTarget(system_x86_64_haiku_info);
|
||||||
|
{$endif x86_64}
|
||||||
end.
|
end.
|
||||||
|
@ -187,7 +187,8 @@ const
|
|||||||
{ 98 } 'Embedded-RiscV32',
|
{ 98 } 'Embedded-RiscV32',
|
||||||
{ 99 } 'Embedded-RiscV64',
|
{ 99 } 'Embedded-RiscV64',
|
||||||
{ 100 } 'Android-AArch64',
|
{ 100 } 'Android-AArch64',
|
||||||
{ 101 } 'Android-x86-64'
|
{ 101 } 'Android-x86-64',
|
||||||
|
{ 102 } 'Haiku-x86-64'
|
||||||
);
|
);
|
||||||
|
|
||||||
const
|
const
|
||||||
|
@ -383,7 +383,7 @@ interface
|
|||||||
system_x86_64_win64,system_x86_64_embedded,
|
system_x86_64_win64,system_x86_64_embedded,
|
||||||
system_x86_64_openbsd,system_x86_64_netbsd,
|
system_x86_64_openbsd,system_x86_64_netbsd,
|
||||||
system_x86_64_dragonfly,system_x86_64_aros,
|
system_x86_64_dragonfly,system_x86_64_aros,
|
||||||
system_x86_64_android];
|
system_x86_64_android,system_x86_64_haiku];
|
||||||
flags : [af_needar,af_smartlink_sections,af_supports_dwarf];
|
flags : [af_needar,af_smartlink_sections,af_supports_dwarf];
|
||||||
labelprefix : '.L';
|
labelprefix : '.L';
|
||||||
comment : '# ';
|
comment : '# ';
|
||||||
|
@ -677,7 +677,8 @@ implementation
|
|||||||
supported_targets : [system_x86_64_linux,system_x86_64_freebsd,
|
supported_targets : [system_x86_64_linux,system_x86_64_freebsd,
|
||||||
system_x86_64_openbsd,system_x86_64_netbsd,
|
system_x86_64_openbsd,system_x86_64_netbsd,
|
||||||
system_x86_64_dragonfly,system_x86_64_solaris,
|
system_x86_64_dragonfly,system_x86_64_solaris,
|
||||||
system_x86_64_aros,system_x86_64_android];
|
system_x86_64_aros,system_x86_64_android,
|
||||||
|
system_x86_64_haiku];
|
||||||
flags : [af_outputbinary,af_smartlink_sections,af_supports_dwarf];
|
flags : [af_outputbinary,af_smartlink_sections,af_supports_dwarf];
|
||||||
labelprefix : '.L';
|
labelprefix : '.L';
|
||||||
comment : '';
|
comment : '';
|
||||||
|
@ -54,6 +54,9 @@ implementation
|
|||||||
{$ifndef NOTARGETAROS}
|
{$ifndef NOTARGETAROS}
|
||||||
,t_aros
|
,t_aros
|
||||||
{$endif}
|
{$endif}
|
||||||
|
{$ifndef NOTARGETHAIKU}
|
||||||
|
,t_haiku
|
||||||
|
{$endif}
|
||||||
{$ifndef NOTARGETEMBEDDED}
|
{$ifndef NOTARGETEMBEDDED}
|
||||||
,t_embed
|
,t_embed
|
||||||
{$endif}
|
{$endif}
|
||||||
|
@ -215,7 +215,7 @@ Const
|
|||||||
{ nds } ( false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false),
|
{ nds } ( false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false),
|
||||||
{ embedded }( false, true, true, true, true, true, true, true, true, true , false, true , false, true , false, false),
|
{ embedded }( false, true, true, true, true, true, true, true, true, true , false, true , false, true , false, false),
|
||||||
{ symbian } ( false, true, false, false, false, false, true, false, false, false, false, false, false, false, false, false),
|
{ symbian } ( false, true, false, false, false, false, true, false, false, false, false, false, false, false, false, false),
|
||||||
{ haiku } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
|
{ haiku } ( false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, false),
|
||||||
{ iphonesim}( false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, false),
|
{ iphonesim}( false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, false),
|
||||||
{ aix } ( false, false, false, true, false, false, false, true, false, false, false, false, false, false, false, false),
|
{ aix } ( false, false, false, true, false, false, false, true, false, false, false, false, false, false, false, false),
|
||||||
{ java } ( false, false, false, false, false, false, false, false, false, false, false, false, true , false, false, false),
|
{ java } ( false, false, false, false, false, false, false, false, false, false, false, false, true , false, false, false),
|
||||||
|
@ -116,7 +116,7 @@ interface
|
|||||||
{ os2 } ( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
|
{ os2 } ( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
|
||||||
{ freebsd } ( true, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
|
{ freebsd } ( true, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
|
||||||
{ beos } ( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
|
{ beos } ( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
|
||||||
{ haiku } ( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
|
{ haiku } ( true, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
|
||||||
{ netbsd } ( true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false),
|
{ netbsd } ( true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false),
|
||||||
{ amiga } ( false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
|
{ amiga } ( false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
|
||||||
{ atari } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
|
{ atari } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
|
||||||
|
Loading…
Reference in New Issue
Block a user