* merged the fixes_3_0-relevant parts of r31808, r31830, r31879: add support

for clang as an assembler on Darwin and use it by default for i386 and x86_64
  (ARM will be in fixes_3_0_ios)

git-svn-id: branches/fixes_3_0@31907 -
This commit is contained in:
Jonas Maebe 2015-10-01 20:40:08 +00:00
parent 24747a2e4f
commit decff7ad16
7 changed files with 67 additions and 13 deletions

View File

@ -368,7 +368,7 @@ unit agarmgas;
as_arm_gas_darwin_info : tasminfo =
(
id : as_darwin;
idtxt : 'AS-Darwin';
idtxt : 'AS-DARWIN';
asmbin : 'as';
asmcmd : '-o $OBJ $EXTRAOPT $ASM -arch $ARCH';
supported_targets : [system_arm_darwin];
@ -379,7 +379,22 @@ unit agarmgas;
);
as_arm_clang_darwin_info : tasminfo =
(
id : as_clang;
idtxt : 'CLANG';
asmbin : 'clang';
asmcmd : '-c -o $OBJ $EXTRAOPT -arch $ARCH $DARWINVERSION -x assembler $ASM';
supported_targets : [system_arm_darwin];
flags : [af_needar,af_smartlink_sections,af_supports_dwarf];
labelprefix : 'L';
comment : '# ';
dollarsign: '$';
);
begin
RegisterAssembler(as_arm_gas_info,TARMGNUAssembler);
RegisterAssembler(as_arm_gas_darwin_info,TArmAppleGNUAssembler);
RegisterAssembler(as_arm_clang_darwin_info,TArmAppleGNUAssembler);
end.

View File

@ -275,7 +275,7 @@ Implementation
begin
DoPipe:=(cs_asm_pipe in current_settings.globalswitches) and
(([cs_asm_extern,cs_asm_leave,cs_link_on_target] * current_settings.globalswitches) = []) and
((target_asm.id in [as_gas,as_ggas,as_darwin,as_powerpc_xcoff]));
((target_asm.id in [as_gas,as_ggas,as_darwin,as_powerpc_xcoff,as_clang]));
end;
@ -582,6 +582,13 @@ Implementation
function TExternalAssembler.MakeCmdLine: TCmdStr;
begin
result:=target_asm.asmcmd;
{ for Xcode 7.x and later }
if MacOSXVersionMin<>'' then
Replace(result,'$DARWINVERSION','-mmacosx-version-min='+MacOSXVersionMin)
else if iPhoneOSVersionMin<>'' then
Replace(result,'$DARWINVERSION','-miphoneos-version-min='+iPhoneOSVersionMin)
else
Replace(result,'$DARWINVERSION','');
{$ifdef arm}
if (target_info.system=system_arm_darwin) then
Replace(result,'$ARCH',lower(cputypestr[current_settings.cputype]));
@ -595,7 +602,10 @@ Implementation
begin
{$ifdef hasunix}
if DoPipe then
Replace(result,'$ASM','')
if target_asm.id<>as_clang then
Replace(result,'$ASM','')
else
Replace(result,'$ASM','-')
else
{$endif}
Replace(result,'$ASM',maybequoted(AsmFileName));

View File

@ -556,7 +556,7 @@ unit agppcgas;
(
id : as_darwin;
idtxt : 'AS-Darwin';
idtxt : 'AS-DARWIN';
asmbin : 'as';
asmcmd : '-o $OBJ $EXTRAOPT $ASM -arch $ARCH';
supported_targets : [system_powerpc_darwin,system_powerpc64_darwin];

View File

@ -211,6 +211,7 @@
,as_i8086_nasm
,as_i8086_nasmobj
,as_gas_powerpc_xcoff
,as_clang
);
tlink = (ld_none,

View File

@ -70,7 +70,7 @@ interface
id : tasm;
idtxt : string[12];
asmbin : string[8];
asmcmd : string[50];
asmcmd : string[70];
supported_targets : set of tsystem;
flags : set of tasmflags;
labelprefix : string[3];

View File

@ -729,8 +729,8 @@ unit i_bsd;
Cprefix : '_';
newline : #10;
dirsep : '/';
assem : as_darwin;
assemextern : as_darwin;
assem : as_clang;
assemextern : as_clang;
link : ld_none;
linkextern : ld_bsd;
ar : ar_gnu_ar;
@ -793,8 +793,8 @@ unit i_bsd;
Cprefix : '_';
newline : #10;
dirsep : '/';
assem : as_darwin;
assemextern : as_darwin;
assem : as_clang;
assemextern : as_clang;
link : ld_none;
linkextern : ld_bsd;
ar : ar_gnu_ar;
@ -921,8 +921,8 @@ unit i_bsd;
Cprefix : '_';
newline : #10;
dirsep : '/';
assem : as_darwin;
assemextern : as_darwin;
assem : as_clang;
assemextern : as_clang;
link : ld_none;
linkextern : ld_bsd;
ar : ar_gnu_ar;

View File

@ -508,7 +508,7 @@ interface
as_x86_64_gas_darwin_info : tasminfo =
(
id : as_darwin;
idtxt : 'AS-Darwin';
idtxt : 'AS-DARWIN';
asmbin : 'as';
asmcmd : '-o $OBJ $EXTRAOPT $ASM -arch x86_64';
supported_targets : [system_x86_64_darwin];
@ -518,6 +518,19 @@ interface
dollarsign: '$';
);
as_x86_64_clang_darwin_info : tasminfo =
(
id : as_clang;
idtxt : 'CLANG';
asmbin : 'clang';
asmcmd : '-c -o $OBJ $EXTRAOPT -arch x86_64 $DARWINVERSION -x assembler $ASM';
supported_targets : [system_x86_64_darwin];
flags : [af_needar,af_smartlink_sections,af_supports_dwarf];
labelprefix : 'L';
comment : '# ';
dollarsign: '$';
);
{$else x86_64}
as_i386_as_info : tasminfo =
(
@ -569,7 +582,7 @@ interface
as_i386_gas_darwin_info : tasminfo =
(
id : as_darwin;
idtxt : 'AS-Darwin';
idtxt : 'AS-DARWIN';
asmbin : 'as';
asmcmd : '-o $OBJ $EXTRAOPT $ASM -arch i386';
supported_targets : [system_i386_darwin,system_i386_iphonesim];
@ -579,6 +592,19 @@ interface
dollarsign: '$';
);
as_i386_clang_darwin_info : tasminfo =
(
id : as_clang;
idtxt : 'CLANG';
asmbin : 'clang';
asmcmd : '-c -o $OBJ $EXTRAOPT -arch i386 $DARWINVERSION -x assembler $ASM';
supported_targets : [system_i386_darwin,system_i386_iphonesim];
flags : [af_needar,af_smartlink_sections,af_supports_dwarf];
labelprefix : 'L';
comment : '# ';
dollarsign: '$';
);
as_i386_gas_info : tasminfo =
(
id : as_ggas;
@ -602,11 +628,13 @@ initialization
RegisterAssembler(as_x86_64_yasm_info,Tx86ATTAssembler);
RegisterAssembler(as_x86_64_gas_info,Tx86ATTAssembler);
RegisterAssembler(as_x86_64_gas_darwin_info,Tx86AppleGNUAssembler);
RegisterAssembler(as_x86_64_clang_darwin_info,Tx86AppleGNUAssembler);
{$else x86_64}
RegisterAssembler(as_i386_as_info,Tx86ATTAssembler);
RegisterAssembler(as_i386_gas_info,Tx86ATTAssembler);
RegisterAssembler(as_i386_yasm_info,Tx86ATTAssembler);
RegisterAssembler(as_i386_gas_darwin_info,Tx86AppleGNUAssembler);
RegisterAssembler(as_i386_clang_darwin_info,Tx86AppleGNUAssembler);
RegisterAssembler(as_i386_as_aout_info,Tx86AoutGNUAssembler);
{$endif x86_64}
end.