mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-20 09:09:41 +01:00
* fixed linking on NetBSD/m68k after r36168
* fixed linking on target for NetBSD/m68k, and when cross-compiling for
Darwin from Windows after r36168
* enabled the use of the "-filelist" linker option for Darwin in all
cases (mantis #36273)
git-svn-id: trunk@43485 -
This commit is contained in:
parent
6d78547260
commit
c22d39bcdf
@ -617,28 +617,29 @@ begin
|
||||
HPath:=TCmdStrListItem(HPath.Next);
|
||||
end;
|
||||
end;
|
||||
{ force local symbol resolution (i.e., inside the shared }
|
||||
{ library itself) for all non-exorted symbols, otherwise }
|
||||
{ several RTL symbols of FPC-compiled shared libraries }
|
||||
{ will be bound to those of a single shared library or }
|
||||
{ to the main program }
|
||||
if (isdll) and (target_info.system in systems_bsd) then
|
||||
|
||||
{ force local symbol resolution (i.e., inside the shared }
|
||||
{ library itself) for all non-exorted symbols, otherwise }
|
||||
{ several RTL symbols of FPC-compiled shared libraries }
|
||||
{ will be bound to those of a single shared library or }
|
||||
{ to the main program }
|
||||
if (isdll) and (target_info.system in systems_bsd) then
|
||||
begin
|
||||
LinkRes.add('VERSION');
|
||||
LinkRes.add('{');
|
||||
LinkRes.add(' {');
|
||||
if not texportlibunix(exportlib).exportedsymnames.empty then
|
||||
begin
|
||||
LinkRes.add('VERSION');
|
||||
LinkRes.add('{');
|
||||
LinkRes.add(' {');
|
||||
if not texportlibunix(exportlib).exportedsymnames.empty then
|
||||
begin
|
||||
LinkRes.add(' global:');
|
||||
repeat
|
||||
LinkRes.add(' '+texportlibunix(exportlib).exportedsymnames.getfirst+';');
|
||||
until texportlibunix(exportlib).exportedsymnames.empty;
|
||||
end;
|
||||
LinkRes.add(' local:');
|
||||
LinkRes.add(' *;');
|
||||
LinkRes.add(' };');
|
||||
LinkRes.add('}');
|
||||
LinkRes.add(' global:');
|
||||
repeat
|
||||
LinkRes.add(' '+texportlibunix(exportlib).exportedsymnames.getfirst+';');
|
||||
until texportlibunix(exportlib).exportedsymnames.empty;
|
||||
end;
|
||||
LinkRes.add(' local:');
|
||||
LinkRes.add(' *;');
|
||||
LinkRes.add(' };');
|
||||
LinkRes.add('}');
|
||||
end;
|
||||
|
||||
if not LdSupportsNoResponseFile then
|
||||
LinkRes.Add('INPUT(');
|
||||
@ -669,10 +670,7 @@ begin
|
||||
|
||||
{ main objectfiles }
|
||||
|
||||
{ Generate linkfiles.res file if needed }
|
||||
{ Only needed on Windows, due to the limitation of 8196 characters for command line }
|
||||
if (LdSupportsNoResponseFile) and
|
||||
(source_info.system in systems_all_windows) then
|
||||
if (target_info.system in systems_darwin) then
|
||||
begin
|
||||
FilesList:=TLinkRes.Create(outputexedir+'linkfiles.res',false);
|
||||
while not ObjectFiles.Empty do
|
||||
@ -680,11 +678,7 @@ begin
|
||||
s:=ObjectFiles.GetFirst;
|
||||
if s<>'' then
|
||||
begin
|
||||
repeat
|
||||
i:=Pos(source_info.dirsep,s);
|
||||
if i>0 then
|
||||
s[i]:=target_info.dirsep;
|
||||
until i=0;
|
||||
s:=TargetFixFileName(s);
|
||||
FilesList.Add(s);
|
||||
end;
|
||||
end;
|
||||
@ -932,7 +926,7 @@ begin
|
||||
else
|
||||
Replace(cmdstr,'$ORDERSYMS','');
|
||||
|
||||
if (LdSupportsNoResponseFile) and (source_info.system in systems_all_windows) then
|
||||
if (target_info.system in systems_darwin) then
|
||||
Replace(cmdstr,'$FILELIST','-filelist '+maybequoted(outputexedir+'linkfiles.res'))
|
||||
else
|
||||
Replace(cmdstr,'$FILELIST','');
|
||||
@ -991,12 +985,10 @@ begin
|
||||
DeleteFile(linkscript.fn);
|
||||
linkscript.free
|
||||
end;
|
||||
if target_info.system in systems_darwin then
|
||||
DeleteFile(outputexedir+'linkfiles.res');
|
||||
end;
|
||||
|
||||
{ Remove linkfiles.res }
|
||||
if (success) and (LdSupportsNoResponseFile) and (source_info.system in systems_all_windows) then
|
||||
DeleteFile(outputexedir+'linkfiles.res');
|
||||
|
||||
MakeExecutable:=success; { otherwise a recursive call to link method }
|
||||
end;
|
||||
|
||||
@ -1084,7 +1076,7 @@ begin
|
||||
Replace(cmdstr,'$TARGET',targetstr);
|
||||
Replace(cmdstr,'$EMUL',EmulStr);
|
||||
Replace(cmdstr,'$CATRES',CatFileContent(outputexedir+Info.ResName));
|
||||
if (LdSupportsNoResponseFile) and (source_info.system in systems_all_windows) then
|
||||
if (target_info.system in systems_darwin) then
|
||||
Replace(cmdstr,'$FILELIST','-filelist '+maybequoted(outputexedir+'linkfiles.res'))
|
||||
else
|
||||
Replace(cmdstr,'$FILELIST','');
|
||||
@ -1178,13 +1170,12 @@ begin
|
||||
linkscript.free
|
||||
end;
|
||||
if (target_info.system in systems_darwin) then
|
||||
DeleteFile(outputexedir+'linksyms.fpc');
|
||||
begin
|
||||
DeleteFile(outputexedir+'linksyms.fpc');
|
||||
DeleteFile(outputexedir+'linkfiles.res');
|
||||
end;
|
||||
end;
|
||||
|
||||
{ Remove linkfiles.res }
|
||||
if (success) and (LdSupportsNoResponseFile) and (source_info.system in systems_all_windows) then
|
||||
DeleteFile(outputexedir+'linkfiles.res');
|
||||
|
||||
MakeSharedLibrary:=success; { otherwise a recursive call to link method }
|
||||
end;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user