Skip to content

Commit df3146c

Browse files
committed
Added compatibility for LLVM 20.
1 parent 0392a44 commit df3146c

File tree

4 files changed

+59
-38
lines changed

4 files changed

+59
-38
lines changed

README.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ Similar libraries for modern Fortran:
3535
Currently, only Linux (glibc) and FreeBSD are supported. The library has been
3636
tested on:
3737

38-
* FreeBSD 14 (GNU Fortran 13),
39-
* Debian 12 (GNU Fortran 12, Intel oneAPI 2024).
38+
* FreeBSD 14 (GCC 14, LLVM 20),
39+
* Debian 12 (GCC 12, Intel oneAPI 2024).
4040

4141
Preprocessor macros are used to achieve platform-independent interoperability.
4242
Therefore, your Fortran compiler has to support at least GNU preprocessor
@@ -57,7 +57,13 @@ On FreeBSD, run:
5757
$ make freebsd
5858
```
5959

60-
On Linux (x86-64), run instead:
60+
To build with LLVM 20 instead:
61+
62+
```
63+
$ make freebsd CC=clang20 FC=flang20
64+
```
65+
66+
On Linux (x86-64), run:
6167

6268
```
6369
$ make linux

src/unix_mqueue.F90

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -58,24 +58,24 @@ end function c_mq_open
5858

5959
! ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned int *msg_prio)
6060
function c_mq_receive(mqdes, msg_ptr, msg_len, msg_prio) bind(c, name='mq_receive')
61-
import :: c_char, c_mqd_t, c_size_t, c_unsigned_int
61+
import :: c_char, c_mqd_t, c_size_t, c_unsigned
6262
implicit none
63-
integer(kind=c_mqd_t), intent(in), value :: mqdes
64-
character(kind=c_char), intent(in) :: msg_ptr
65-
integer(kind=c_size_t), intent(in), value :: msg_len
66-
integer(kind=c_unsigned_int), intent(out) :: msg_prio
67-
integer(kind=c_size_t) :: c_mq_receive
63+
integer(kind=c_mqd_t), intent(in), value :: mqdes
64+
character(kind=c_char), intent(in) :: msg_ptr
65+
integer(kind=c_size_t), intent(in), value :: msg_len
66+
integer(kind=c_unsigned), intent(out) :: msg_prio
67+
integer(kind=c_size_t) :: c_mq_receive
6868
end function c_mq_receive
6969

7070
! int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned int msg_prio)
7171
function c_mq_send(mqdes, msg_ptr, msg_len, msg_prio) bind(c, name='mq_send')
72-
import :: c_char, c_int, c_mqd_t, c_size_t, c_unsigned_int
72+
import :: c_char, c_int, c_mqd_t, c_size_t, c_unsigned
7373
implicit none
74-
integer(kind=c_mqd_t), intent(in), value :: mqdes
75-
character(kind=c_char), intent(in) :: msg_ptr
76-
integer(kind=c_size_t), intent(in), value :: msg_len
77-
integer(kind=c_unsigned_int), intent(in), value :: msg_prio
78-
integer(kind=c_int) :: c_mq_send
74+
integer(kind=c_mqd_t), intent(in), value :: mqdes
75+
character(kind=c_char), intent(in) :: msg_ptr
76+
integer(kind=c_size_t), intent(in), value :: msg_len
77+
integer(kind=c_unsigned), intent(in), value :: msg_prio
78+
integer(kind=c_int) :: c_mq_send
7979
end function c_mq_send
8080

8181
! int mq_setattr(mqd_t mqdes, const struct mq_attr *attr, struct mq_attr *oldattr)
@@ -90,14 +90,14 @@ end function c_mq_setattr
9090

9191
! ssize_t mq_timedreceive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned int *msg_prio, const struct timespec *abs_timeout)
9292
function c_mq_timedreceive(mqdes, msg_ptr, msg_len, msg_prio, abs_timeout) bind(c, name='mq_timedreceive')
93-
import :: c_char, c_mqd_t, c_size_t, c_timespec, c_unsigned_int
93+
import :: c_char, c_mqd_t, c_size_t, c_timespec, c_unsigned
9494
implicit none
95-
integer(kind=c_mqd_t), intent(in), value :: mqdes
96-
character(kind=c_char), intent(in) :: msg_ptr
97-
integer(kind=c_size_t), intent(in), value :: msg_len
98-
integer(kind=c_unsigned_int), intent(out) :: msg_prio
99-
type(c_timespec), intent(in) :: abs_timeout
100-
integer(kind=c_size_t) :: c_mq_timedreceive
95+
integer(kind=c_mqd_t), intent(in), value :: mqdes
96+
character(kind=c_char), intent(in) :: msg_ptr
97+
integer(kind=c_size_t), intent(in), value :: msg_len
98+
integer(kind=c_unsigned), intent(out) :: msg_prio
99+
type(c_timespec), intent(in) :: abs_timeout
100+
integer(kind=c_size_t) :: c_mq_timedreceive
101101
end function c_mq_timedreceive
102102

103103
! int mq_unlink(const char *name)

src/unix_semaphore.F90

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -64,22 +64,22 @@ end function c_sem_getvalue
6464

6565
! int sem_init(sem_t *sem, int, unsigned int value)
6666
function c_sem_init(sem, value) bind(c, name='sem_init')
67-
import :: c_int, c_sem_t, c_unsigned_int
67+
import :: c_int, c_sem_t, c_unsigned
6868
implicit none
69-
type(c_sem_t), intent(in) :: sem
70-
integer(kind=c_unsigned_int), intent(in), value :: value
71-
integer(kind=c_int) :: c_sem_init
69+
type(c_sem_t), intent(in) :: sem
70+
integer(kind=c_unsigned), intent(in), value :: value
71+
integer(kind=c_int) :: c_sem_init
7272
end function c_sem_init
7373

7474
! sem_t *semsem_open(const char *name, int oflag, mode_t mode, unsigned int value)
7575
function c_sem_open(name, oflag, mode, value) bind(c, name='sem_open')
76-
import :: c_char, c_int, c_mode_t, c_ptr, c_unsigned_int
76+
import :: c_char, c_int, c_mode_t, c_ptr, c_unsigned
7777
implicit none
78-
character(kind=c_char), intent(in) :: name
79-
integer(kind=c_int), intent(in), value :: oflag
80-
integer(kind=c_mode_t), intent(in), value :: mode
81-
integer(kind=c_unsigned_int), intent(in), value :: value
82-
type(c_ptr) :: c_sem_open
78+
character(kind=c_char), intent(in) :: name
79+
integer(kind=c_int), intent(in), value :: oflag
80+
integer(kind=c_mode_t), intent(in), value :: mode
81+
integer(kind=c_unsigned), intent(in), value :: value
82+
type(c_ptr) :: c_sem_open
8383
end function c_sem_open
8484

8585
! int sem_post(sem_t *sem)

src/unix_types.F90

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,30 @@ module unix_types
77
implicit none
88
private
99

10+
#if defined (__flang__)
11+
12+
public :: c_unsigned
13+
public :: c_unsigned_char
14+
public :: c_unsigned_short
15+
public :: c_unsigned_long
16+
17+
public :: c_uint16_t
18+
public :: c_uint32_t
19+
public :: c_uint64_t
20+
21+
#else
22+
23+
integer, parameter, public :: c_unsigned = c_int
1024
integer, parameter, public :: c_unsigned_char = c_signed_char
1125
integer, parameter, public :: c_unsigned_short = c_short
12-
integer, parameter, public :: c_unsigned_int = c_int
1326
integer, parameter, public :: c_unsigned_long = c_long
1427

1528
integer, parameter, public :: c_uint16_t = c_int16_t
1629
integer, parameter, public :: c_uint32_t = c_int32_t
1730
integer, parameter, public :: c_uint64_t = c_int64_t
1831

32+
#endif
33+
1934
#if defined (__linux__)
2035

2136
integer, parameter, public :: c_blkcnt_t = c_int64_t
@@ -34,9 +49,9 @@ module unix_types
3449
integer, parameter, public :: c_pid_t = c_int32_t
3550
integer, parameter, public :: c_regoff_t = c_size_t
3651
integer, parameter, public :: c_socklen_t = c_int64_t
37-
integer, parameter, public :: c_speed_t = c_unsigned_int
52+
integer, parameter, public :: c_speed_t = c_unsigned
3853
integer, parameter, public :: c_suseconds_t = c_int
39-
integer, parameter, public :: c_tcflag_t = c_unsigned_int
54+
integer, parameter, public :: c_tcflag_t = c_unsigned
4055
integer, parameter, public :: c_time_t = c_long
4156
integer, parameter, public :: c_uid_t = c_uint32_t
4257
integer, parameter, public :: c_useconds_t = c_int32_t
@@ -60,12 +75,12 @@ module unix_types
6075
integer, parameter, public :: c_pid_t = c_int32_t
6176
integer, parameter, public :: c_regoff_t = c_int64_t
6277
integer, parameter, public :: c_socklen_t = c_size_t
63-
integer, parameter, public :: c_speed_t = c_unsigned_int
78+
integer, parameter, public :: c_speed_t = c_unsigned
6479
integer, parameter, public :: c_suseconds_t = c_long
65-
integer, parameter, public :: c_tcflag_t = c_unsigned_int
80+
integer, parameter, public :: c_tcflag_t = c_unsigned
6681
integer, parameter, public :: c_time_t = c_int64_t
6782
integer, parameter, public :: c_uid_t = c_uint32_t
68-
integer, parameter, public :: c_useconds_t = c_unsigned_int
83+
integer, parameter, public :: c_useconds_t = c_unsigned
6984

7085
#endif
7186
end module unix_types

0 commit comments

Comments
 (0)