mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 10:39:40 +01:00 
			
		
		
		
	+ add -XR switch for target root file system with libs (also used for C lib type detection)
git-svn-id: trunk@8695 -
This commit is contained in:
		
							parent
							
								
									7d5d4ba706
								
							
						
					
					
						commit
						0625040eba
					
				@ -936,8 +936,6 @@ implementation
 | 
			
		||||
            while (j>0) and (s[j]<>';') do
 | 
			
		||||
             dec(j);
 | 
			
		||||
            currPath:= TrimSpace(Copy(s,j+1,length(s)-j));
 | 
			
		||||
            DePascalQuote(currPath);
 | 
			
		||||
            currPath:=FixPath(currPath,false);
 | 
			
		||||
            if j=0 then
 | 
			
		||||
             s:=''
 | 
			
		||||
            else
 | 
			
		||||
@ -949,12 +947,12 @@ implementation
 | 
			
		||||
            if j=0 then
 | 
			
		||||
             j:=255;
 | 
			
		||||
            currPath:= TrimSpace(Copy(s,1,j-1));
 | 
			
		||||
            DePascalQuote(currPath);
 | 
			
		||||
            currPath:=SrcPath+FixPath(currPath,false);
 | 
			
		||||
            System.Delete(s,1,j);
 | 
			
		||||
          end;
 | 
			
		||||
 | 
			
		||||
         { fix pathname }
 | 
			
		||||
         DePascalQuote(currPath);
 | 
			
		||||
         currPath:=SrcPath+FixPath(currPath,false);
 | 
			
		||||
         if currPath='' then
 | 
			
		||||
           currPath:= CurDirRelPath(source_info)
 | 
			
		||||
         else
 | 
			
		||||
 | 
			
		||||
@ -191,7 +191,8 @@ interface
 | 
			
		||||
       utilsprefix    : TCmdStr;
 | 
			
		||||
       cshared        : boolean;        { pass --shared to ld to link C libs shared}
 | 
			
		||||
       Dontlinkstdlibpath: Boolean;     { Don't add std paths to linkpath}
 | 
			
		||||
       rlinkpath      : TCmdStr;         { rpath-link linkdir override}
 | 
			
		||||
       rlinkpath      : TCmdStr;        { rpath-link linkdir override}
 | 
			
		||||
       sysrootpath    : TCmdStr;        { target system root to search dyn linker }
 | 
			
		||||
 | 
			
		||||
       { some flags for global compiler switches }
 | 
			
		||||
       do_build,
 | 
			
		||||
@ -1166,6 +1167,7 @@ implementation
 | 
			
		||||
        utilsprefix:='';
 | 
			
		||||
        cshared:=false;
 | 
			
		||||
        rlinkpath:='';
 | 
			
		||||
        sysrootpath:='';
 | 
			
		||||
 | 
			
		||||
        { Search Paths }
 | 
			
		||||
        librarysearchpath:=TSearchPathList.Create;
 | 
			
		||||
 | 
			
		||||
@ -750,9 +750,9 @@ begin
 | 
			
		||||
                 'l' :
 | 
			
		||||
                   begin
 | 
			
		||||
                     if ispara then
 | 
			
		||||
                       ParaLibraryPath.AddPath(More,false)
 | 
			
		||||
                       ParaLibraryPath.AddPath(sysrootpath,More,false)
 | 
			
		||||
                     else
 | 
			
		||||
                       LibrarySearchPath.AddPath(More,true);
 | 
			
		||||
                       LibrarySearchPath.AddPath(sysrootpath,More,true);
 | 
			
		||||
                   end;
 | 
			
		||||
                 'L' :
 | 
			
		||||
                   begin
 | 
			
		||||
@ -1394,6 +1394,12 @@ begin
 | 
			
		||||
                        DefaultReplacements(rlinkpath);
 | 
			
		||||
                        More:='';
 | 
			
		||||
                      end;
 | 
			
		||||
                    'R' :
 | 
			
		||||
                      begin
 | 
			
		||||
                        sysrootpath:=copy(more,2,length(more)-1);
 | 
			
		||||
                        defaultreplacements(sysrootpath);
 | 
			
		||||
                        more:='';
 | 
			
		||||
                      end;
 | 
			
		||||
                    's' :
 | 
			
		||||
                      begin
 | 
			
		||||
                        If UnsetBool(More, j) then
 | 
			
		||||
 | 
			
		||||
@ -183,7 +183,7 @@ begin
 | 
			
		||||
  { since that is what the compiler expects.              }
 | 
			
		||||
  if pos(';',s) = 0 then
 | 
			
		||||
    s:=s+';';
 | 
			
		||||
  LibrarySearchPath.AddPath(s,true); {format:'path1;path2;...'}
 | 
			
		||||
  LibrarySearchPath.AddPath(sysrootpath,s,true); {format:'path1;path2;...'}
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -208,10 +208,10 @@ begin
 | 
			
		||||
  Inherited Create;
 | 
			
		||||
  if not Dontlinkstdlibpath Then
 | 
			
		||||
   if not(target_info.system in systems_darwin) then
 | 
			
		||||
     LibrarySearchPath.AddPath('/lib;/usr/lib;/usr/X11R6/lib',true)
 | 
			
		||||
     LibrarySearchPath.AddPath(sysrootpath,'/lib;/usr/lib;/usr/X11R6/lib',true)
 | 
			
		||||
   else
 | 
			
		||||
     { Mac OS X doesn't have a /lib }
 | 
			
		||||
     LibrarySearchPath.AddPath('/usr/lib',true)
 | 
			
		||||
     LibrarySearchPath.AddPath(sysrootpath,'/usr/lib',true)
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -205,12 +205,12 @@ begin
 | 
			
		||||
  Inherited Create;
 | 
			
		||||
  if not Dontlinkstdlibpath Then
 | 
			
		||||
{$ifdef x86_64}
 | 
			
		||||
   LibrarySearchPath.AddPath('/lib64;/usr/lib64;/usr/X11R6/lib64',true);
 | 
			
		||||
   LibrarySearchPath.AddPath(sysrootpath,'/lib64;/usr/lib64;/usr/X11R6/lib64',true);
 | 
			
		||||
{$else}
 | 
			
		||||
{$ifdef powerpc64}
 | 
			
		||||
   LibrarySearchPath.AddPath('/lib64;/usr/lib64;/usr/X11R6/lib64',true);
 | 
			
		||||
   LibrarySearchPath.AddPath(sysrootpath,'/lib64;/usr/lib64;/usr/X11R6/lib64',true);
 | 
			
		||||
{$else powerpc64}
 | 
			
		||||
   LibrarySearchPath.AddPath('/lib;/usr/lib;/usr/X11R6/lib',true);
 | 
			
		||||
   LibrarySearchPath.AddPath(sysrootpath,'/lib;/usr/lib;/usr/X11R6/lib',true);
 | 
			
		||||
{$endif powerpc64}
 | 
			
		||||
{$endif x86_64}
 | 
			
		||||
end;
 | 
			
		||||
@ -230,19 +230,21 @@ const
 | 
			
		||||
{$ifdef arm}    platform_select='';{$endif} {unknown :( }
 | 
			
		||||
{$ifdef m68k}    platform_select='';{$endif} {unknown :( }
 | 
			
		||||
 | 
			
		||||
{$ifdef m68k}
 | 
			
		||||
var
 | 
			
		||||
{$ifdef m68k}
 | 
			
		||||
  St : TSearchRec;
 | 
			
		||||
{$else}
 | 
			
		||||
  defdynlinker: string;
 | 
			
		||||
{$endif m68k}
 | 
			
		||||
begin
 | 
			
		||||
  with Info do
 | 
			
		||||
   begin
 | 
			
		||||
     ExeCmd[1]:='ld '+platform_select+' $OPT $DYNLINK $STATIC $GCSECTIONS $STRIP -L. -o $EXE $RES';
 | 
			
		||||
     ExeCmd[1]:='ld '+platform_select+' $OPT $DYNLINK $STATIC $GCSECTIONS $STRIP -L. -o $EXE -T $RES';
 | 
			
		||||
     DllCmd[1]:='ld '+platform_select+' $OPT $INIT $FINI $SONAME -shared -L. -o $EXE $RES -E';
 | 
			
		||||
     DllCmd[2]:='strip --strip-unneeded $EXE';
 | 
			
		||||
{$ifdef m68k}
 | 
			
		||||
     libctype:=glibc2;
 | 
			
		||||
     if FindFirst('/lib/ld*',faAnyFile+faSymLink,st)<>0 then
 | 
			
		||||
     if FindFirst(sysrootpath+'/lib/ld*',faAnyFile+faSymLink,st)<>0 then
 | 
			
		||||
       begin
 | 
			
		||||
         repeat
 | 
			
		||||
            if copy(st.name,1,5)='ld-2.' then
 | 
			
		||||
@ -258,6 +260,29 @@ begin
 | 
			
		||||
{$endif m68k}
 | 
			
		||||
 | 
			
		||||
{$ifdef i386}
 | 
			
		||||
     defdynlinker:='/lib/ld-linux.so.1';
 | 
			
		||||
{$endif}
 | 
			
		||||
 | 
			
		||||
{$ifdef x86_64}
 | 
			
		||||
     defdynlinker:='/lib/ld-linux-x86-64.so.2'
 | 
			
		||||
{$endif x86_64}
 | 
			
		||||
 | 
			
		||||
{$ifdef sparc}
 | 
			
		||||
     defdynlinker:='/lib/ld-linux.so.2';
 | 
			
		||||
{$endif sparc}
 | 
			
		||||
 | 
			
		||||
{$ifdef powerpc}
 | 
			
		||||
     defdynlinker:='/lib/ld.so.1';
 | 
			
		||||
{$endif powerpc}
 | 
			
		||||
 | 
			
		||||
{$ifdef powerpc64}
 | 
			
		||||
     defdynlinker:='/lib/ld64.so.1';
 | 
			
		||||
{$endif powerpc64}
 | 
			
		||||
 | 
			
		||||
{$ifdef arm}
 | 
			
		||||
     defdynlinker:='/lib/ld-linux.so.2';
 | 
			
		||||
{$endif arm}
 | 
			
		||||
 | 
			
		||||
     {
 | 
			
		||||
       Search order:
 | 
			
		||||
         glibc 2.1+
 | 
			
		||||
@ -265,19 +290,22 @@ begin
 | 
			
		||||
         glibc 2.0
 | 
			
		||||
       If none is found (e.g. when cross compiling) glibc21 is assumed
 | 
			
		||||
     }
 | 
			
		||||
     if FileExists('/lib/ld-linux.so.2',false) then
 | 
			
		||||
{$ifdef i386}
 | 
			
		||||
     if FileExists(sysrootpath+'/lib/ld-linux.so.2',false) then
 | 
			
		||||
       begin
 | 
			
		||||
         DynamicLinker:='/lib/ld-linux.so.2';
 | 
			
		||||
         libctype:=glibc21;
 | 
			
		||||
       end
 | 
			
		||||
     else if fileexists('/lib/ld-uClibc.so.0',false) then
 | 
			
		||||
     else 
 | 
			
		||||
{$endif i386}
 | 
			
		||||
     if fileexists(sysrootpath+'/lib/ld-uClibc.so.0',false) then
 | 
			
		||||
       begin
 | 
			
		||||
         dynamiclinker:='/lib/ld-uClibc.so.0';
 | 
			
		||||
         libctype:=uclibc;
 | 
			
		||||
       end
 | 
			
		||||
     else if fileexists('/lib/ld-linux.so.1',false) then
 | 
			
		||||
     else if fileexists(sysrootpath+defdynlinker,false) then
 | 
			
		||||
       begin
 | 
			
		||||
         DynamicLinker:='/lib/ld-linux.so.1';
 | 
			
		||||
         DynamicLinker:=defdynlinker;
 | 
			
		||||
         libctype:=glibc2;
 | 
			
		||||
       end
 | 
			
		||||
     else
 | 
			
		||||
@ -286,32 +314,6 @@ begin
 | 
			
		||||
         DynamicLinker:='/lib/ld-linux.so.2';
 | 
			
		||||
         libctype:=glibc21;
 | 
			
		||||
       end;
 | 
			
		||||
{$endif i386}
 | 
			
		||||
 | 
			
		||||
{$ifdef x86_64}
 | 
			
		||||
     DynamicLinker:='/lib64/ld-linux-x86-64.so.2';
 | 
			
		||||
     libctype:=glibc2;
 | 
			
		||||
{$endif x86_64}
 | 
			
		||||
 | 
			
		||||
{$ifdef sparc}
 | 
			
		||||
     DynamicLinker:='/lib/ld-linux.so.2';
 | 
			
		||||
     libctype:=glibc2;
 | 
			
		||||
{$endif sparc}
 | 
			
		||||
 | 
			
		||||
{$ifdef powerpc}
 | 
			
		||||
     DynamicLinker:='/lib/ld.so.1';
 | 
			
		||||
     libctype:=glibc2;
 | 
			
		||||
{$endif powerpc}
 | 
			
		||||
 | 
			
		||||
{$ifdef powerpc64}
 | 
			
		||||
     DynamicLinker:='/lib64/ld64.so.1';
 | 
			
		||||
     libctype:=glibc2;
 | 
			
		||||
{$endif powerpc64}
 | 
			
		||||
 | 
			
		||||
{$ifdef arm}
 | 
			
		||||
     DynamicLinker:='/lib/ld-linux.so.2';
 | 
			
		||||
     libctype:=glibc2;
 | 
			
		||||
{$endif arm}
 | 
			
		||||
   end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
@ -437,7 +439,7 @@ begin
 | 
			
		||||
      if not (target_info.system in system_internal_sysinit) and (prtobj<>'') then
 | 
			
		||||
       AddFileName(maybequoted(FindObjectFile(prtobj,'',false)));
 | 
			
		||||
      { try to add crti and crtbegin if linking to C }
 | 
			
		||||
      if linklibc then
 | 
			
		||||
      if linklibc and (libctype<>uclibc) then
 | 
			
		||||
       begin
 | 
			
		||||
         { x86_64 requires this to use entry/exit code with pic,
 | 
			
		||||
           see also issue #8210 regarding a discussion
 | 
			
		||||
@ -791,7 +793,7 @@ var
 | 
			
		||||
  binstr,
 | 
			
		||||
  cmdstr  : TCmdStr;
 | 
			
		||||
  success : boolean;
 | 
			
		||||
  DynLinkStr : string[60];
 | 
			
		||||
  DynLinkStr : string;
 | 
			
		||||
  GCSectionsStr,
 | 
			
		||||
  StaticStr,
 | 
			
		||||
  StripStr   : string[40];
 | 
			
		||||
@ -815,11 +817,11 @@ begin
 | 
			
		||||
  If (cs_profile in current_settings.moduleswitches) or
 | 
			
		||||
     ((Info.DynamicLinker<>'') and (not SharedLibFiles.Empty)) then
 | 
			
		||||
   begin
 | 
			
		||||
     DynLinkStr:='-dynamic-linker='+Info.DynamicLinker;
 | 
			
		||||
     if cshared Then
 | 
			
		||||
       DynLinkStr:='--shared ' + DynLinkStr;
 | 
			
		||||
     if rlinkpath<>'' Then
 | 
			
		||||
       DynLinkStr:='--rpath-link '+rlinkpath + ' '+ DynLinkStr;
 | 
			
		||||
     DynLinkStr:='--dynamic-linker='+Info.DynamicLinker;
 | 
			
		||||
     if cshared then
 | 
			
		||||
       DynLinkStr:=DynLinkStr+' --shared ';
 | 
			
		||||
     if rlinkpath<>'' then
 | 
			
		||||
       DynLinkStr:=DynLinkStr+' --rpath-link '+rlinkpath;
 | 
			
		||||
   End;
 | 
			
		||||
 | 
			
		||||
{ Write used files and libraries }
 | 
			
		||||
 | 
			
		||||
@ -74,7 +74,7 @@ implementation
 | 
			
		||||
Constructor TLinkerMPW.Create;
 | 
			
		||||
begin
 | 
			
		||||
  Inherited Create;
 | 
			
		||||
  //LibrarySearchPath.AddPath('/lib;/usr/lib;/usr/X11R6/lib',true);
 | 
			
		||||
  //LibrarySearchPath.AddPath(sysrootpath,'/lib;/usr/lib;/usr/X11R6/lib',true);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -182,7 +182,7 @@ Constructor TLinkersolaris.Create;
 | 
			
		||||
begin
 | 
			
		||||
  Inherited Create;
 | 
			
		||||
  if NOT Dontlinkstdlibpath Then
 | 
			
		||||
   LibrarySearchPath.AddPath('/lib;/usr/lib;/usr/X11R6/lib;/opt/sfw/lib',true);
 | 
			
		||||
   LibrarySearchPath.AddPath(sysrootpath,'/lib;/usr/lib;/usr/X11R6/lib;/opt/sfw/lib',true);
 | 
			
		||||
{$ifdef  LinkTest}
 | 
			
		||||
     if (cs_link_staticflag in current_settings.globalswitches) then  WriteLN('ForceLinkStaticFlag');
 | 
			
		||||
     if (cs_link_static in current_settings.globalswitches) then  WriteLN('LinkStatic-Flag');
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user