jnr / jnr-ffi

Java Abstracted Foreign Function Layer
Other
1.25k stars 156 forks source link

Add riscv64 linux support #327

Closed laokz closed 1 year ago

laokz commented 1 year ago

Add riscv64 linux support referenced to other arches, tested under QEMU 7.0 virt machine.

To verify various types, I used the following program. It seems that there is no swblk_t type in linux and I leave it same as aarch64.

#include <stdio.h>                                                                             
#include <stdint.h>                                                                            
#include <unistd.h>                                                                            
#include <stdlib.h>                                                                            
#include <netinet/in.h>                                                                        
#include <asm-generic/termbits.h>                                                              
#include <sys/resource.h>                                                                      
#define tYpeof(t)  _Generic(t,\                                                                
            int8_t: printf("i8\n"),\                                                           
            uint8_t: printf("u8\n"),\                                                          
            int16_t: printf("i16\n"),\
            uint16_t: printf("u16\n"),\                                                        
            int32_t: printf("i32\n"),\                                                         
            uint32_t: printf("u32\n"),\                                                        
            int64_t: printf("i64\n"),\                                                         
            uint64_t: printf("u64\n"),\                                                        
            char *: printf("char *\n"))                                                        

int main()                                                                                     
{                                                                                              
    { int8_t  a;printf("%20s","int8_t  ");tYpeof(a);}
    { u_int8_t  a;printf("%20s","u_int8_t  ");tYpeof(a);}
    { int16_t  a;printf("%20s","int16_t  ");tYpeof(a);}
    { u_int16_t  a;printf("%20s","u_int16_t  ");tYpeof(a);}  
    { int32_t  a;printf("%20s","int32_t  ");tYpeof(a);}      
    { u_int32_t  a;printf("%20s","u_int32_t  ");tYpeof(a);}    
    { int64_t  a;printf("%20s","int64_t  ");tYpeof(a);}    
    { u_int64_t  a;printf("%20s","u_int64_t  ");tYpeof(a);}
    { intptr_t  a;printf("%20s","intptr_t  ");tYpeof(a);}                                      
    { uintptr_t  a;printf("%20s","uintptr_t  ");tYpeof(a);}
    { caddr_t  a;printf("%20s","caddr_t  ");tYpeof(a);} 
    { dev_t  a;printf("%20s","dev_t  ");tYpeof(a);}
    { blkcnt_t  a;printf("%20s","blkcnt_t  ");tYpeof(a);}
    { blksize_t  a;printf("%20s","blksize_t  ");tYpeof(a);}
    { gid_t  a;printf("%20s","gid_t  ");tYpeof(a);}
    { in_addr_t  a;printf("%20s","in_addr_t  ");tYpeof(a);}
    { in_port_t  a;printf("%20s","in_port_t  ");tYpeof(a);}
    { ino_t  a;printf("%20s","ino_t  ");tYpeof(a);}
    { printf("%20s","ino64_t\n"); }
    { key_t  a;printf("%20s","key_t  ");tYpeof(a);}
    { mode_t  a;printf("%20s","mode_t  ");tYpeof(a);}
    { nlink_t  a;printf("%20s","nlink_t  ");tYpeof(a);}
    { id_t  a;printf("%20s","id_t  ");tYpeof(a);}
    { pid_t  a;printf("%20s","pid_t  ");tYpeof(a);}
    { off_t  a;printf("%20s","off_t  ");tYpeof(a);}
    { printf("%20s","swblk_t\n"); }
    { uid_t  a;printf("%20s","uid_t  ");tYpeof(a);}
    { clock_t  a;printf("%20s","clock_t  ");tYpeof(a);}
    { size_t  a;printf("%20s","size_t  ");tYpeof(a);}
    { ssize_t  a;printf("%20s","ssize_t  ");tYpeof(a);}
    { time_t  a;printf("%20s","time_t  ");tYpeof(a);}
    { fsblkcnt_t  a;printf("%20s","fsblkcnt_t  ");tYpeof(a);}
    { fsfilcnt_t  a;printf("%20s","fsfilcnt_t  ");tYpeof(a);}
    { sa_family_t  a;printf("%20s","sa_family_t  ");tYpeof(a);}
    { socklen_t  a;printf("%20s","socklen_t  ");tYpeof(a);}
    { rlim_t  a;printf("%20s","rlim_t  ");tYpeof(a);}
    { cc_t  a;printf("%20s","cc_t  ");tYpeof(a);}
    { speed_t  a;printf("%20s","speed_t  ");tYpeof(a);}
    { tcflag_t  a;printf("%20s","tcflag_t  ");tYpeof(a);}
}
headius commented 1 year ago

Looks good, and sorry for delay getting this merged! I'll fix the wonky formatting myself.