[fpc-devel] Sparc64 on solaris

Pierre Muller pierre at freepascal.org
Mon Dec 10 22:12:52 CET 2018


I forgot that I also had these local changes on a solaris farm machine ...

As the changes are rather small, I include them here below.

 If you want to test them, you need to patch current trunk,

go to fpcsrc/utils/fpcm to compile a new fpcmake program,
and use that new fpcmake to regenerate all Makefile's.

  The easiest is to go to trunk directory and do

find . -name Makefile.fpc | xargs /path/to/new/fpcmake -Tall

  After that operation, you will need to cross-compile the first sparc64 native compiler.

For that move to fpcsrc/compiler:

gmake cycle CPU_TARGET=sparc64 OPT="-n -gl"
 the -n option is to be sure that your local Free Pascal configuration will not affect your build,
 the -gl is to be able to debug any compiler generated...

if this works, you should have a ppcsparc64 binary in compiler directory that is a native sparc64 executable.
But you might need to add some tweaks for correct library directories...

  Next you need to install the new binary.

For that you will need to use:

gmake installsymlink rtlinstall FPC=`pwd`/ppcsparc64 INSTALL_PREFIX=/where/you/want/your/new/sparc64

After try to compile the whole trunk tree:

go to trunk dir:

gmake distclean install OPT="-n -gl" FPC=/where/you/want/your/new/sparc64/bin/ppcsparc64 INSTALL_PREFIX=/where/you/want/your/new/sparc64

At that point, you can just reply to the mailing list that you made it ...
Or report any problem before!


Pierre



Index: fpcsrc/utils/fpcm/fpcmmain.pp
===================================================================
--- fpcsrc/utils/fpcm/fpcmmain.pp       (revision 40515)
+++ fpcsrc/utils/fpcm/fpcmmain.pp       (working copy)
@@ -120,7 +120,7 @@
         { netbsd }  ( true,  true,  true,  true,  true,  true,  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, false,  false),
         { atari }   ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false, false, false, false,  false),
-        { solaris } ( true,  false, false, true,  true,  false, false, false, false, false, false, false, false, false,   false, false, false, false, false, false,  false),
+        { solaris } ( true,  false, false, true,  true,  false, false, false, false, false, false, false, false, false,   false, false, false, false, true,  false,  false),
         { qnx }     ( false, false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false, false, false, false,  false),
         { netware } ( true,  false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false, false, false, false,  false),
         { openbsd } ( true,  false, false, false, true,  false, false, false, false, false, false, false, false, false,   false, false, false, false, false, false,  false),
Index: fpcsrc/compiler/systems/t_sunos.pas
===================================================================
--- fpcsrc/compiler/systems/t_sunos.pas (revision 40515)
+++ fpcsrc/compiler/systems/t_sunos.pas (working copy)
@@ -95,9 +95,12 @@
 {$endif }
 {$ifdef sparc}
 const
-  { no emulation specification needed, as long as only 32-bit is supported }
-  gnu_emul = '';
+  gnu_emul = '-m elf32_sparc_sol2';
 {$endif}
+{$ifdef sparc64}
+const
+  gnu_emul = '-m elf64_sparc_sol2';
+{$endif}

 Constructor TLinkersolaris.Create;
 begin
@@ -107,11 +110,18 @@
   else
     use_gnu_ld:=true;
   if NOT Dontlinkstdlibpath Then
+{$ifdef i386}
+   LibrarySearchPath.AddPath(sysrootpath,'/lib;/usr/lib;/usr/X11R6/lib;/opt/sfw/lib',true);
+{$endif i386}
 {$ifdef x86_64}
    LibrarySearchPath.AddPath(sysrootpath,'/lib/64;/usr/lib/64;/usr/X11R6/lib/64;/opt/sfw/lib/64',true);
-{$else not x86_64}
-   LibrarySearchPath.AddPath(sysrootpath,'/lib;/usr/lib;/usr/X11R6/lib;/opt/sfw/lib',true);
-{$endif not x86_64}
+{$endif x86_64}
+{$ifdef sparc}
+   LibrarySearchPath.AddPath(sysrootpath,'/lib;/usr/lib;/usr/X11R6/lib;/opt/sfw/lib;/opt/csw/lib',true);
+{$endif sparc}
+{$ifdef sparc64}
+   LibrarySearchPath.AddPath(sysrootpath,'/lib/sparcv9;/usr/lib/sparcv9;/usr/X11R6/lib/sparcv9;/opt/sfw/lib/sparcv9;/opt/csw/lib/sparcv9',true);
+{$endif sparc64}
 {$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');
@@ -136,9 +146,14 @@
 {$endif }
 {$ifdef sparc}
 const
-  gld = 'gld ';
+  gld = 'gld $EMUL';
   solaris_ld = 'ld ';
 {$endif}
+{$ifdef sparc64}
+const
+  gld = 'gld $EMUL';
+  solaris_ld = 'ld -64 ';
+{$endif}
 begin
   Glibc2:=false;
   Glibc21:=false;
@@ -678,5 +693,11 @@
   RegisterTarget(system_sparc_solaris_info);
 {$endif sparc}

+{$ifdef sparc64}
+  RegisterImport(system_sparc64_solaris,TImportLibsolaris);
+  RegisterExport(system_sparc64_solaris,TExportLibsolaris);
+  RegisterTarget(system_sparc64_solaris_info);
+{$endif sparc}
+
   RegisterRes(res_elf_info,TWinLikeResourceFile);
 end.
Index: fpcsrc/compiler/systems/i_sunos.pas
===================================================================
--- fpcsrc/compiler/systems/i_sunos.pas (revision 40515)
+++ fpcsrc/compiler/systems/i_sunos.pas (working copy)
@@ -241,6 +241,79 @@
             llvmdatalayout : 'E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-n32-S64';
           );

+        system_sparc64_solaris_info : tsysteminfo =
+          (
+            system       : system_sparc64_solaris;
+            name         : 'Solaris for SPARC64';
+            shortname    : 'solaris';
+           { sparc64 linux flags        : [tf_needs_symbol_size,tf_library_needs_pic,tf_smartlink_sections,
+                            tf_needs_symbol_type,tf_files_case_sensitive,
+                            tf_pic_uses_got,
+                            tf_requires_proper_alignment,tf_safecall_exceptions, tf_safecall_clearstack,
+                            tf_has_winlike_resources]; }
+            flags        : [tf_needs_symbol_size,tf_under_development,
+                            tf_files_case_sensitive,
+                            tf_pic_uses_got,
+                            tf_requires_proper_alignment,tf_smartlink_library,
+                            tf_has_winlike_resources];
+            cpu          : cpu_sparc64;
+            unit_env     : 'SOLARISUNITS';
+            extradefines : 'UNIX;LIBC;SUNOS;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_ggas;
+            assemextern  : as_ggas;
+            link         : ld_none;
+            linkextern   : ld_solaris;
+            ar           : ar_gnu_gar;
+            res          : res_elf;
+            dbg          : dbg_dwarf2;
+            script       : script_unix;
+            endian       : endian_big;
+            alignment    :
+              (
+                procalign       : 16;
+                loopalign       : 8;
+                jumpalign       : 0;
+                constalignmin   : 4;
+                constalignmax   : 16;
+                varalignmin     : 4;
+                varalignmax     : 16;
+                localalignmin   : 4;
+                localalignmax   : 16;
+                recordalignmin  : 0;
+                recordalignmax  : 16;
+                maxCrecordalign : 16
+              );
+            first_parm_offset : 176;
+            stacksize    : 16*1024*1024;
+            stackalign   : 16;
+            abi : abi_default;
+            llvmdatalayout : 'E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-n32-S64';
+          );
+
+
   implementation

 initialization
@@ -259,5 +332,10 @@
     set_source_info(system_sparc_solaris_info);
   {$endif solaris}
 {$endif CPUSparc}
+{$ifdef CPUSparc64}
+  {$ifdef solaris}
+    set_source_info(system_sparc64_solaris_info);
+  {$endif solaris}
+{$endif CPUSparc64}

 end.
Index: fpcsrc/compiler/sparcgen/cpugas.pas
===================================================================
--- fpcsrc/compiler/sparcgen/cpugas.pas (revision 40515)
+++ fpcsrc/compiler/sparcgen/cpugas.pas (working copy)
@@ -274,7 +274,7 @@
            idtxt  : 'GAS';
            asmbin : 'gas';
            asmcmd : '$ARCH $PIC -o $OBJ $EXTRAOPT $ASM';
-           supported_targets : [system_sparc64_linux];
+           supported_targets : [system_sparc64_linux, system_sparc64_solaris];
            flags : [af_needar,af_smartlink_sections];
            labelprefix : '.L';
            comment : '# ';
Index: fpcsrc/compiler/sparc64/cputarg.pas
===================================================================
--- fpcsrc/compiler/sparc64/cputarg.pas (revision 40515)
+++ fpcsrc/compiler/sparc64/cputarg.pas (working copy)
@@ -43,7 +43,7 @@
       ,t_linux
     {$endif}
     {$ifndef NOTARGETSUNOS}
-//      ,t_sunos
+      ,t_sunos
     {$endif}

 {**************************************
Index: fpcsrc/compiler/sparc64/cpugas.pas
===================================================================
--- fpcsrc/compiler/sparc64/cpugas.pas  (revision 40515)
+++ fpcsrc/compiler/sparc64/cpugas.pas  (working copy)
@@ -235,7 +235,7 @@
 {$else}
            asmcmd : '$ARCH $PIC -o $OBJ $EXTRAOPT $ASM';
 {$endif}
-           supported_targets : [system_sparc64_linux];
+           supported_targets : [system_sparc64_linux,system_sparc64_solaris];
            flags : [af_needar,af_smartlink_sections];
            labelprefix : '.L';
            comment : '# ';
@@ -248,7 +248,7 @@
            idtxt  : 'GAS';
            asmbin : 'gas';
            asmcmd : '$ARCH $PIC -o $OBJ $EXTRAOPT $ASM';
-           supported_targets : [system_sparc64_linux];
+           supported_targets : [system_sparc64_linux,system_sparc64_solaris];
            flags : [af_needar,af_smartlink_sections];
            labelprefix : '.L';
            comment : '# ';


Le 10/12/2018 à 13:11, Pierre Muller a écrit :
>   Did you check if the snapshots are working?
> 
> ftp://ftp.freepascal.org/pub/fpc/snapshot/trunk/sparc64-linux/
> 
> contains both native snapshots and cross-snapshots created on a x86_64-linux machine.
> 
>   For sparc64-solaris, the situation is different,
> because it is not yet enabled in trunk.
> 
>   I had some local changes on stadler.debian.net machine,
> but this machine did not re-appear after a machine upgrade that
> probably did not work out as expected ...
> 
> 
> Pierre
> 
> 
> Le 09/12/2018 à 22:33, Peter Popov a écrit :
>> Hi All
>>
>> I noticed that the trunk version of the compiler has a Sparc64/Linux target. Did a little work to create a Sparc64/Solaris target. Had little luck producing an executable.
>>
>>  
>>
>> What is the current status of Sparc64/Linux?
>>
>>  
>>
>> Any interest in uploading the Sparc64/Solaris patches (could not produce an working executable)?
>>
>>  
>>
>> Peter Popov
>>
>>  
>>
>>  
>>
>> Sent from Mail <https://go.microsoft.com/fwlink/?LinkId=550986> for Windows 10
>>
>>  
>>
>>
>> _______________________________________________
>> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
>> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
>>
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
> 



More information about the fpc-devel mailing list