On Thu, 11 Apr 2013 22:51:30 +0200, Tobias Ulmer wrote:
> Add sparc64 to the list of supported Ada archs
> 
> * Add ncpu detection, this also affects the other archs thus REVISION bump.
> * Use SJLJ (setjump/longjump) exceptions because ZCX generates broken
>   code on sparc64 (exceptions are thrown, but not caught).
> * Disable PCH support, which caused hangs on sparc64, from Pascal
> * a-numaux.adb, for those who wonder, contains special sauce for
>   i386/amd64 - other architectures get their math functions via -lm,
>   thus a-numaux.adb is not needed. Instead of introducing yet another
>   PLIST I've chosen to "fake" it and supply an empty body.

I'd actually prefer another PFRAG here to make it apparent that
amd64/i386 are special.

> Comments? OK?
> 
> Index: Makefile
> ===================================================================
> RCS file: /home/vcs/cvs/openbsd/ports/lang/gcc/4.8/Makefile,v
> retrieving revision 1.1.1.1
> diff -u -p -u -p -r1.1.1.1 Makefile
> --- Makefile  8 Apr 2013 08:20:19 -0000       1.1.1.1
> +++ Makefile  11 Apr 2013 20:46:58 -0000
> @@ -12,6 +12,9 @@ ADASTRAP-i386 = adastrap-i386-$V-1.tar.x
>  ADASTRAP_LIBC-amd64 = 67.0
>  ADASTRAP_LIBM-amd64 = 8.0
>  ADASTRAP-amd64 = adastrap-amd64-$V-1.tar.xz
> +ADASTRAP_LIBC-sparc64 = 67.0
> +ADASTRAP_LIBM-sparc64 = 8.0
> +ADASTRAP-sparc64 = adastrap-sparc64-$V-1.tar.xz

You can start from 0 here.

>  PKGNAME-main =  gcc-${FULL_PKGVERSION}
>  PKGNAME-c++ =   g++-${FULL_PKGVERSION}
> @@ -24,6 +27,8 @@ PKGNAME-ada =   gnat-${FULL_PKGVERSION}
>  #PKGNAME-go =        gccgo-${FULL_PKGVERSION}
>  PKGSPEC-main = gcc->=4.8,<4.9
>  
> +REVISION-ada = 0
> +
>  SHARED_LIBS =        estdc++         16.0 \
>               gfortran        5.0 \
>               gcj             3.0 \
> @@ -41,7 +46,7 @@ SHARED_LIBS =       estdc++         16.0 \
>  PSEUDO_FLAVORS = no_c++ no_f95 no_objc no_java no_ada no_go full
>  FLAVOR ?= 
>  
> -ONLY_FOR_ARCHS-ada = amd64 i386
> +ONLY_FOR_ARCHS-ada = amd64 i386 sparc64
>  ONLY_FOR_ARCHS-java = amd64 i386 powerpc sparc64
>  
>  MULTI_PACKAGES = -main -f95 -objc -c++ -estdc -java -ada
> @@ -59,7 +64,8 @@ DISTNAME =          gcc-${FULL_VERSION}
>  DISTFILES =  ${DISTNAME}.tar.bz2
>  # there's no ecj-4.8.jar
>  ECJ =                ecj-4.5.jar
> -SUPDISTFILES =       ${ADASTRAP-amd64}:0 ${ADASTRAP-i386}:0 ${ECJ}:1
> +SUPDISTFILES =       ${ADASTRAP-amd64}:0 ${ADASTRAP-i386}:0 ${ECJ}:1 \
> +             ${ADASTRAP-sparc64}:0
>  EXTRACT_ONLY =       ${DISTNAME}.tar.bz2
>  
>  BUILD_DEPENDS +=     devel/bison \
> @@ -136,7 +142,8 @@ CONFIGURE_ARGS += \
>       --enable-threads=posix \
>       --enable-wchar_t \
>       --with-gmp="${LOCALBASE}" \
> -     --enable-languages=${LANGS}
> +     --enable-languages=${LANGS} \
> +     --disable-libstdcxx-pch
>  
>  # This is needed, as internal cpp is no longer compatible with the
>  # visible beast
> @@ -241,9 +248,12 @@ post-extract:
>  .if ${BUILD_PACKAGES:M-java}
>       cp ${FULLDISTDIR}/${ECJ} ${WRKSRC}/ecj.jar
>  .endif
> +     cp ${FILESDIR}/system-openbsd-sparcv9.ads ${WRKSRC}/gcc/ada/

Can you make this a patch instead of adding it to FILESDIR?  That's how
stuff like this is handled elsewhere in the gcc ports, and I'd like to
do it consistently.

>  post-install:
>  .if ${BUILD_PACKAGES:M-ada}
> +     # add a-numaux.adb to all archs to simplify packaging
> +     touch ${PREFIX}/lib/gcc/${CONFIG}/$V/adainclude/a-numaux.adb
>       chown -R ${SHAREOWN}:${SHAREGRP} ${PREFIX}/lib/gcc/*/$V/adainclude
>       chown -R ${SHAREOWN}:${SHAREGRP} ${PREFIX}/lib/gcc/*/$V/adalib
>  .endif
> Index: distinfo
> ===================================================================
> RCS file: /home/vcs/cvs/openbsd/ports/lang/gcc/4.8/distinfo,v
> retrieving revision 1.1.1.1
> diff -u -p -u -p -r1.1.1.1 distinfo
> --- distinfo  8 Apr 2013 08:20:19 -0000       1.1.1.1
> +++ distinfo  11 Apr 2013 20:46:58 -0000
> @@ -1,8 +1,10 @@
>  SHA256 (gcc/adastrap-amd64-4.8.0-1.tar.xz) = 
> 8zqPYBYcNX913KeXrRlg37VHLuPGnssCCob4Fc51hNg=
>  SHA256 (gcc/adastrap-i386-4.8.0-1.tar.xz) = 
> HoPDSgf0fCHyyKknoxThnFgxWZ0T3mdSiXBomEEH5m4=
> +SHA256 (gcc/adastrap-sparc64-4.8.0-1.tar.xz) = 
> g9RJkaXJXtumPRctcUSH83xKXrd8BDLyB2MV6r3EgHs=
>  SHA256 (gcc/ecj-4.5.jar) = mP0Sjx03TZ5C/Z1INr3SScbVEevGwN8X+8G535bD14E=
>  SHA256 (gcc/gcc-4.8.0.tar.bz2) = sDf+UTK3HsrS6nFB7JIpK10yQnv5D9kM3kMrHVq6zCw=
>  SIZE (gcc/adastrap-amd64-4.8.0-1.tar.xz) = 31996808
>  SIZE (gcc/adastrap-i386-4.8.0-1.tar.xz) = 30038792
> +SIZE (gcc/adastrap-sparc64-4.8.0-1.tar.xz) = 27002840
>  SIZE (gcc/ecj-4.5.jar) = 1470676
>  SIZE (gcc/gcc-4.8.0.tar.bz2) = 86663646
> Index: files/system-openbsd-sparcv9.ads
> ===================================================================
> RCS file: files/system-openbsd-sparcv9.ads
> diff -N files/system-openbsd-sparcv9.ads
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ files/system-openbsd-sparcv9.ads  11 Apr 2013 20:46:58 -0000
> @@ -0,0 +1,142 @@
> +------------------------------------------------------------------------------
> +--                                                                          
> --
> +--                        GNAT RUN-TIME COMPONENTS                          
> --
> +--                                                                          
> --
> +--                               S Y S T E M                                
> --
> +--                                                                          
> --
> +--                                 S p e c                                  
> --
> +--                         (OpenBSD/sparc64 Version)                        
> --
> +--                                                                          
> --
> +--          Copyright (C) 1992-2011, Free Software Foundation, Inc.         
> --
> +--                                                                          
> --
> +-- This specification is derived from the Ada Reference Manual for use with 
> --
> +-- GNAT. The copyright notice above, and the license provisions that follow 
> --
> +-- apply solely to the  contents of the part following the private keyword. 
> --
> +--                                                                          
> --
> +-- GNAT is free software;  you can  redistribute it  and/or modify it under 
> --
> +-- terms of the  GNU General Public License as published  by the Free Soft- 
> --
> +-- ware  Foundation;  either version 3,  or (at your option) any later ver- 
> --
> +-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- 
> --
> +-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY 
> --
> +-- or FITNESS FOR A PARTICULAR PURPOSE.                                     
> --
> +--                                                                          
> --
> +-- As a special exception under Section 7 of GPL version 3, you are granted 
> --
> +-- additional permissions described in the GCC Runtime Library Exception,   
> --
> +-- version 3.1, as published by the Free Software Foundation.               
> --
> +--                                                                          
> --
> +-- You should have received a copy of the GNU General Public License and    
> --
> +-- a copy of the GCC Runtime Library Exception along with this program;     
> --
> +-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    
> --
> +-- <http://www.gnu.org/licenses/>.                                          
> --
> +--                                                                          
> --
> +-- GNAT was originally developed  by the GNAT team at  New York University. 
> --
> +-- Extensive contributions were provided by Ada Core Technologies Inc.      
> --
> +--                                                                          
> --
> +------------------------------------------------------------------------------
> +
> +package System is
> +pragma Pure (System);
> +--  Note that we take advantage of the implementation permission to
> +--  make this unit Pure instead of Preelaborable, see RM 13.7(36)
> +
> +   type Name is (SYSTEM_NAME_GNAT);
> +   System_Name : constant Name := SYSTEM_NAME_GNAT;
> +
> +   --  System-Dependent Named Numbers
> +
> +   Min_Int               : constant := Long_Long_Integer'First;
> +   Max_Int               : constant := Long_Long_Integer'Last;
> +
> +   Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
> +   Max_Nonbinary_Modulus : constant := Integer'Last;
> +
> +   Max_Base_Digits       : constant := Long_Long_Float'Digits;
> +   Max_Digits            : constant := Long_Long_Float'Digits;
> +
> +   Max_Mantissa          : constant := 63;
> +   Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
> +
> +   Tick                  : constant := 0.000_001;
> +
> +   --  Storage-related Declarations
> +
> +   type Address is private;
> +   Null_Address : constant Address;
> +
> +   Storage_Unit : constant := 8;
> +   Word_Size    : constant := 64;
> +   Memory_Size  : constant := 2 ** 64;
> +
> +   --  Address comparison
> +
> +   function "<"  (Left, Right : Address) return Boolean;
> +   function "<=" (Left, Right : Address) return Boolean;
> +   function ">"  (Left, Right : Address) return Boolean;
> +   function ">=" (Left, Right : Address) return Boolean;
> +   function "="  (Left, Right : Address) return Boolean;
> +
> +   pragma Import (Intrinsic, "<");
> +   pragma Import (Intrinsic, "<=");
> +   pragma Import (Intrinsic, ">");
> +   pragma Import (Intrinsic, ">=");
> +   pragma Import (Intrinsic, "=");
> +
> +   --  Other System-Dependent Declarations
> +
> +   type Bit_Order is (High_Order_First, Low_Order_First);
> +   Default_Bit_Order : constant Bit_Order := High_Order_First;
> +   pragma Warnings (Off, Default_Bit_Order); -- kill constant condition 
> warning
> +
> +   --  Priority-related Declarations (RM D.1)
> +
> +   Max_Priority           : constant Positive := 30;
> +   Max_Interrupt_Priority : constant Positive := 31;
> +
> +   subtype Any_Priority       is Integer      range  0 .. 31;
> +   subtype Priority           is Any_Priority range  0 .. 30;
> +   subtype Interrupt_Priority is Any_Priority range 31 .. 31;
> +
> +   Default_Priority : constant Priority := 15;
> +
> +private
> +
> +   type Address is mod Memory_Size;
> +   Null_Address : constant Address := 0;
> +
> +   --------------------------------------
> +   -- System Implementation Parameters --
> +   --------------------------------------
> +
> +   --  These parameters provide information about the target that is used
> +   --  by the compiler. They are in the private part of System, where they
> +   --  can be accessed using the special circuitry in the Targparm unit
> +   --  whose source should be consulted for more detailed descriptions
> +   --  of the individual switch values.
> +
> +   Backend_Divide_Checks     : constant Boolean := False;
> +   Backend_Overflow_Checks   : constant Boolean := False;
> +   Command_Line_Args         : constant Boolean := True;
> +   Configurable_Run_Time     : constant Boolean := False;
> +   Denorm                    : constant Boolean := True;
> +   Duration_32_Bits          : constant Boolean := False;
> +   Exit_Status_Supported     : constant Boolean := True;
> +   Fractional_Fixed_Ops      : constant Boolean := False;
> +   Frontend_Layout           : constant Boolean := False;
> +   Machine_Overflows         : constant Boolean := False;
> +   Machine_Rounds            : constant Boolean := True;
> +   Preallocated_Stacks       : constant Boolean := False;
> +   Signed_Zeros              : constant Boolean := True;
> +   Stack_Check_Default       : constant Boolean := False;
> +   Stack_Check_Probes        : constant Boolean := True;
> +   Stack_Check_Limits        : constant Boolean := False;
> +   Support_64_Bit_Divides    : constant Boolean := True;
> +   Support_Aggregates        : constant Boolean := True;
> +   Support_Composite_Assign  : constant Boolean := True;
> +   Support_Composite_Compare : constant Boolean := True;
> +   Support_Long_Shifts       : constant Boolean := True;
> +   Always_Compatible_Rep     : constant Boolean := True;
> +   Suppress_Standard_Library : constant Boolean := False;
> +   Use_Ada_Main_Program_Name : constant Boolean := False;
> +   ZCX_By_Default            : constant Boolean := False;
> +
> +end System;
> Index: patches/patch-gcc_ada_adaint_c
> ===================================================================
> RCS file: 
> /home/vcs/cvs/openbsd/ports/lang/gcc/4.8/patches/patch-gcc_ada_adaint_c,v
> retrieving revision 1.1.1.1
> diff -u -p -u -p -r1.1.1.1 patch-gcc_ada_adaint_c
> --- patches/patch-gcc_ada_adaint_c    8 Apr 2013 08:20:24 -0000       1.1.1.1
> +++ patches/patch-gcc_ada_adaint_c    11 Apr 2013 20:46:58 -0000
> @@ -1,7 +1,17 @@
>  $OpenBSD: patch-gcc_ada_adaint_c,v 1.1.1.1 2013/04/08 08:20:24 pascal Exp $
> ---- gcc/ada/adaint.c.orig    Thu Jan  3 11:09:24 2013
> -+++ gcc/ada/adaint.c Sat Jan 12 13:27:07 2013
> -@@ -3855,3 +3855,9 @@ void __gnat_cpu_set (int cpu, size_t count ATTRIBUTE_U
> +--- gcc/ada/adaint.c.orig    Wed Feb  6 13:01:20 2013
> ++++ gcc/ada/adaint.c Wed Apr 10 01:42:27 2013
> +@@ -2467,7 +2467,8 @@ __gnat_number_of_cpus (void)
> + {
> +   int cores = 1;
> + 
> +-#if defined (linux) || defined (sun) || defined (AIX) || defined (__APPLE__)
> ++#if defined (linux) || defined (sun) || defined (AIX) || defined 
> (__APPLE__) ||\
> ++  defined (__OpenBSD__)

Maybe this should be testing for the feature instead, but ok for now.

> +   cores = (int) sysconf (_SC_NPROCESSORS_ONLN);
> + 
> + #elif defined (__hpux__)
> +@@ -3855,3 +3856,9 @@ void __gnat_cpu_set (int cpu, size_t count ATTRIBUTE_U
>   #ifdef __cplusplus
>   }
>   #endif
> Index: patches/patch-gcc_ada_gcc-interface_Makefile_in
> ===================================================================
> RCS file: 
> /home/vcs/cvs/openbsd/ports/lang/gcc/4.8/patches/patch-gcc_ada_gcc-interface_Makefile_in,v
> retrieving revision 1.1.1.1
> diff -u -p -u -p -r1.1.1.1 patch-gcc_ada_gcc-interface_Makefile_in
> --- patches/patch-gcc_ada_gcc-interface_Makefile_in   8 Apr 2013 08:20:24 
> -0000       1.1.1.1
> +++ patches/patch-gcc_ada_gcc-interface_Makefile_in   11 Apr 2013 20:46:58 
> -0000
> @@ -1,7 +1,7 @@
>  $OpenBSD: patch-gcc_ada_gcc-interface_Makefile_in,v 1.1.1.1 2013/04/08 
> 08:20:24 pascal Exp $
>  --- gcc/ada/gcc-interface/Makefile.in.orig   Wed Feb  6 12:19:08 2013
> -+++ gcc/ada/gcc-interface/Makefile.in        Sun Apr  7 17:02:16 2013
> -@@ -1333,6 +1333,58 @@ ifeq ($(strip $(filter-out %86_64 freebsd%,$(arch) $(o
> ++++ gcc/ada/gcc-interface/Makefile.in        Thu Apr 11 02:03:24 2013
> +@@ -1333,6 +1333,85 @@ ifeq ($(strip $(filter-out %86_64 freebsd%,$(arch) $(o
>     MISCLIB = -lutil
>   endif
>   
> @@ -51,6 +51,33 @@ $OpenBSD: patch-gcc_ada_gcc-interface_Ma
>  +  GNATLIB_SHARED = gnatlib-shared-dual
>  +
>  +  EH_MECHANISM=-gcc
> ++  THREADSLIB= -lpthread
> ++  GMEM_LIB = gmemlib
> ++  LIBRARY_VERSION := $(LIB_VERSION)
> ++  MISCLIB = -lutil
> ++endif
> ++
> ++ifeq ($(strip $(filter-out sparc64 openbsd%,$(arch) $(osys))),)
> ++  LIBGNAT_TARGET_PAIRS = \
> ++  a-intnam.ads<a-intnam-freebsd.ads \
> ++  s-inmaop.adb<s-inmaop-posix.adb \
> ++  s-intman.adb<s-intman-posix.adb \
> ++  s-osinte.ads<s-osinte-freebsd.ads \
> ++  s-osinte.adb<s-osinte-freebsd.adb \
> ++  s-osprim.adb<s-osprim-posix.adb \
> ++  s-taprop.adb<s-taprop-posix.adb \
> ++  s-taspri.ads<s-taspri-posix.ads \
> ++  s-tpopsp.adb<s-tpopsp-posix.adb \
> ++  $(ATOMICS_TARGET_PAIRS) \
> ++  $(ATOMICS_BUILTINS_TARGET_PAIRS) \
> ++  system.ads<system-openbsd-sparcv9.ads
> ++
> ++  TOOLS_TARGET_PAIRS = \
> ++  mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb
> ++  GNATLIB_SHARED = gnatlib-shared-dual
> ++
> ++  # Empty when not using ZCX
> ++  EH_MECHANISM=
>  +  THREADSLIB= -lpthread
>  +  GMEM_LIB = gmemlib
>  +  LIBRARY_VERSION := $(LIB_VERSION)
> 
> 

Reply via email to