On Wed, 2014-12-17 13:11:32 +0000, Jurica Stanojkovic wrote:
> Package: tbb
> Version: 4.2~20140122-4
> Severity: serious
> Tags: sid + patch
> Justification: FTBFS
> User: debian-m...@lists.debian.org
> Usertags: mips-patch
>
> Hello,
> Package tbb_4.2~20140122-4 FTBFS on mips and mipsel.
>
> Mips platform does not have 64-bit __sync_* operations.
> To resolve this issue it is needed to use corresponding
> __atomic_* from libatomic library.
>
> https://buildd.debian.org/status/package.php?p=tbb&suite=sid
>
> build logs:
> https://buildd.debian.org/status/fetch.php?pkg=tbb&arch=mips&ver=4.2~20140122-4&stamp=1415055684
> https://buildd.debian.org/status/fetch.php?pkg=tbb&arch=mipsel&ver=4.2~20140122-4&stamp=1415054347
>
> I have attached a patch resolving this issue.
>
> Thank you!
>
> Regards,
> Jurica

Hello Steven,

At IMGtech.com, we would like to support this patch for tbb.

If you prefer, I could sponsor a new Debian version of tbb including
Jurica's patch.

Regards,

Aníbal
-- 
Anibal Monsalve Salazar <anibal.monsalvesala...@imgtec.com>

> --- tbb-4.2~20140122.orig/build/linux.gcc.inc
> +++ tbb-4.2~20140122/build/linux.gcc.inc
> @@ -80,6 +80,14 @@ endif
>  TBB_ASM.OBJ=
>  MALLOC_ASM.OBJ=
>  
> +ifeq (mips,$(arch))
> +    LINK_FLAGS += -latomic
> +endif
> +
> +ifeq (mipsel,$(arch))
> +    LINK_FLAGS += -latomic
> +endif
> +
>  ifeq (ia64,$(arch))
>  # Position-independent code (PIC) is a must on IA-64 architecture, even for 
> regular (not shared) executables
>      CPLUS_FLAGS += $(PIC_KEY)
> --- tbb-4.2~20140122.orig/build/linux.inc
> +++ tbb-4.2~20140122/build/linux.inc
> @@ -76,6 +76,12 @@ ifndef arch
>          ifeq ($(deb_host_arch),i386)
>                  export arch:=ia32
>          endif
> +     ifeq ($(deb_host_arch),mips)
> +                export arch:=mips
> +        endif
> +        ifeq ($(deb_host_arch),mipsel)
> +                export arch:=mipsel
> +        endif
>          ifndef arch
>                  export arch:=$(uname_m)
>                  $(warning "Unknown arch: " $(arch))
> --- tbb-4.2~20140122.orig/include/tbb/machine/gcc_generic.h
> +++ tbb-4.2~20140122/include/tbb/machine/gcc_generic.h
> @@ -68,14 +68,27 @@
>  #define __TBB_full_memory_fence()           __sync_synchronize()
>  #define __TBB_control_consistency_helper()  __sync_synchronize()
>  
> -#define __TBB_MACHINE_DEFINE_ATOMICS(S,T)                                    
>                      \
> -inline T __TBB_machine_cmpswp##S( volatile void *ptr, T value, T comparand ) 
> {                    \
> -    return __sync_val_compare_and_swap(reinterpret_cast<volatile T 
> *>(ptr),comparand,value);      \
> -}                                                                            
>                      \
> -                                                                             
>                      \
> -inline T __TBB_machine_fetchadd##S( volatile void *ptr, T value ) {          
>                      \
> -    return __sync_fetch_and_add(reinterpret_cast<volatile T *>(ptr),value);  
>                      \
> -}                                                                            
>                      \
> +#if defined (__mips) && !defined (__mips64)
> +        #define __TBB_MACHINE_DEFINE_ATOMICS(S,T)                            
>                              \
> +        inline T __TBB_machine_cmpswp##S( volatile void *ptr, T value, T 
> comparand ) {                    \
> +            __atomic_compare_exchange(reinterpret_cast<volatile T 
> *>(ptr),&comparand,&value,              \
> +            false,__ATOMIC_SEQ_CST,__ATOMIC_SEQ_CST);                        
>                              \
> +            return comparand;                                                
>                              \
> +        }                                                                    
>                              \
> +                                                                             
>                              \
> +        inline T __TBB_machine_fetchadd##S( volatile void *ptr, T value ) {  
>                              \
> +            return __atomic_fetch_add(reinterpret_cast<volatile T 
> *>(ptr),value,__ATOMIC_SEQ_CST);        \
> +        }
> +#else
> +     #define __TBB_MACHINE_DEFINE_ATOMICS(S,T)                               
>                           \
> +     inline T __TBB_machine_cmpswp##S( volatile void *ptr, T value, T 
> comparand ) {                    \
> +         return __sync_val_compare_and_swap(reinterpret_cast<volatile T 
> *>(ptr),comparand,value);      \
> +     }                                                                       
>                           \
> +                                                                             
>                           \
> +     inline T __TBB_machine_fetchadd##S( volatile void *ptr, T value ) {     
>                           \
> +         return __sync_fetch_and_add(reinterpret_cast<volatile T 
> *>(ptr),value);                       \
> +     } 
> +#endif
>  
>  __TBB_MACHINE_DEFINE_ATOMICS(1,int8_t)
>  __TBB_MACHINE_DEFINE_ATOMICS(2,int16_t)

Attachment: signature.asc
Description: Digital signature

Reply via email to