Skip to content

Commit 06bd6fd

Browse files
committed
add bsd ci
1 parent a824bf9 commit 06bd6fd

File tree

9 files changed

+273
-7
lines changed

9 files changed

+273
-7
lines changed

.github/workflows/dragonflybsd.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: DragonflyBSD
2+
3+
on:
4+
pull_request:
5+
push:
6+
release:
7+
types: [published]
8+
9+
jobs:
10+
build:
11+
12+
runs-on: ubuntu-latest
13+
14+
concurrency:
15+
group: ${{ github.ref }}-${{ github.base_ref }}-${{ github.head_ref }}-DragonflyBSD
16+
cancel-in-progress: true
17+
steps:
18+
- uses: actions/checkout@v4
19+
with:
20+
submodules: true
21+
22+
- name: Tests
23+
id: test
24+
uses: vmactions/dragonflybsd-vm@v1
25+
with:
26+
usesh: true
27+
prepare: |
28+
pkg install -y socat git gmake bash
29+
run: |
30+
cd $GITHUB_WORKSPACE
31+
./configure
32+
gmake -j4
33+
gmake run
34+

.github/workflows/freebsd.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: FreeBSD
2+
3+
on:
4+
pull_request:
5+
push:
6+
release:
7+
types: [published]
8+
9+
jobs:
10+
build:
11+
12+
runs-on: ubuntu-latest
13+
14+
concurrency:
15+
group: ${{ github.ref }}-${{ github.base_ref }}-${{ github.head_ref }}-FreeBSD
16+
cancel-in-progress: true
17+
steps:
18+
- uses: actions/checkout@v2
19+
with:
20+
submodules: true
21+
22+
- name: Tests
23+
uses: vmactions/freebsd-vm@v1
24+
with:
25+
usesh: true
26+
mem: 4096
27+
copyback: false
28+
prepare: pkg install -y git curl unzip gmake llvm gsed bash perl5
29+
run: |
30+
./configure
31+
gmake -j4
32+
gmake run
33+

.github/workflows/netbsd.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: NetBSD
2+
3+
on:
4+
pull_request:
5+
push:
6+
release:
7+
types: [published]
8+
9+
jobs:
10+
build:
11+
12+
runs-on: ubuntu-latest
13+
14+
concurrency:
15+
group: ${{ github.ref }}-${{ github.base_ref }}-${{ github.head_ref }}-NetBSD
16+
cancel-in-progress: true
17+
steps:
18+
- uses: actions/checkout@v4
19+
with:
20+
submodules: true
21+
22+
- name: Tests
23+
id: test
24+
uses: vmactions/netbsd-vm@v1
25+
with:
26+
usesh: true
27+
prepare: |
28+
/usr/sbin/pkg_add curl bash git gmake
29+
run: |
30+
cd $GITHUB_WORKSPACE
31+
./configure
32+
gmake -j4
33+
gmake run
34+

.github/workflows/openbsd.yml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: OpenBSD
2+
3+
on:
4+
pull_request:
5+
push:
6+
release:
7+
types: [published]
8+
9+
jobs:
10+
build:
11+
12+
runs-on: ubuntu-latest
13+
14+
concurrency:
15+
group: ${{ github.ref }}-${{ github.base_ref }}-${{ github.head_ref }}-OpenBSD
16+
cancel-in-progress: true
17+
steps:
18+
- uses: actions/checkout@v4
19+
with:
20+
submodules: true
21+
22+
- name: Tests
23+
id: test
24+
uses: vmactions/openbsd-vm@v1
25+
with:
26+
usesh: true
27+
prepare: |
28+
pkg_add curl git gmake bash gcc
29+
ln -sf /usr/local/bin/gmake /usr/local/bin/make || true
30+
run: |
31+
cd $GITHUB_WORKSPACE
32+
./configure
33+
gmake -j4
34+
gmake run
35+

.github/workflows/solaris.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: Solaris
2+
3+
on:
4+
pull_request:
5+
push:
6+
release:
7+
types: [published]
8+
9+
jobs:
10+
build:
11+
12+
runs-on: ubuntu-latest
13+
14+
concurrency:
15+
group: ${{ github.ref }}-${{ github.base_ref }}-${{ github.head_ref }}-Solaris
16+
cancel-in-progress: true
17+
steps:
18+
- uses: actions/checkout@v4
19+
with:
20+
submodules: true
21+
22+
- name: Tests
23+
id: test
24+
uses: vmactions/solaris-vm@v1
25+
with:
26+
usesh: true
27+
prepare: |
28+
pkgutil -y -i socat git gmake bash gcc4g++ || pkgutil -y -i socat git gmake bash gcc5g++ || pkg install -y developer/gcc || true
29+
run: |
30+
cd $GITHUB_WORKSPACE
31+
bash ./configure
32+
gmake -j4
33+
gmake run
34+

configure

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -687,7 +687,11 @@ case "${os_host}" in
687687
*darwin*) os_host="macosx" ;;
688688
*linux*) os_host="linux" ;;
689689
*freebsd*) os_host="freebsd" ;;
690+
*netbsd*) os_host="netbsd" ;;
691+
*openbsd*) os_host="openbsd" ;;
692+
*dragonfly*) os_host="dragonflybsd" ;;
690693
*bsd*) os_host="bsd" ;;
694+
*sunos*) os_host="solaris" ;;
691695
*haiku*) os_host="haiku" ;;
692696
esac
693697

@@ -708,8 +712,10 @@ is_host() {
708712

709713
# detect host architecture
710714
os_arch=`uname -m | tr '[A-Z]' '[a-z]'`
711-
if test_eq "${os_arch}" "i686"; then
715+
if test_eq "${os_arch}" "i686" "i86pc"; then
712716
os_arch="i386"
717+
elif test_eq "${os_arch}" "amd64"; then
718+
os_arch="x86_64"
713719
elif test_eq "${os_arch}" "aarch64" || test_eq "${os_arch}" "arm64"; then
714720
os_arch="arm64"
715721
elif string_contains "${os_arch}" "armv7"; then
@@ -724,7 +730,7 @@ fi
724730
_target_plat_default=${os_host}
725731
if is_host "msys"; then
726732
_target_plat_default="mingw"
727-
elif is_host "freebsd"; then
733+
elif is_host "freebsd" "openbsd" "dragonflybsd" "netbsd"; then
728734
_target_plat_default="bsd"
729735
elif test_nz "${EMSDK}"; then
730736
_target_plat_default="wasm"
@@ -756,7 +762,7 @@ _target_mode_default="release"
756762
_target_kind_default="static"
757763

758764
# set the default project generator and build program
759-
if is_host "freebsd" "bsd"; then
765+
if is_host "freebsd" "netbsd" "openbsd" "dragonflybsd" "bsd" "solaris"; then
760766
project_generator="gmake"
761767
_make_program_default="gmake"
762768
_ninja_program_default="ninja"

src/tbox/platform/posix/sched_affinity.c

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
#include <string.h>
2828
#include <sched.h>
2929
#include <sys/types.h>
30+
#ifdef __NetBSD__
31+
#include <sched.h>
32+
#endif
3033

3134
/* //////////////////////////////////////////////////////////////////////////////////////
3235
* implementation
@@ -36,7 +39,23 @@ tb_bool_t tb_sched_setaffinity(tb_size_t pid, tb_cpuset_ref_t cpuset)
3639
// check
3740
tb_assert_and_check_return_val(cpuset, tb_false);
3841

39-
// set cpu affinity
42+
#ifdef __NetBSD__
43+
// NetBSD uses cpuset_t API for process affinity
44+
cpuset_t *cpu_set = cpuset_create();
45+
if (!cpu_set)
46+
return tb_false;
47+
48+
tb_int_t i;
49+
for (i = 0; i < TB_CPUSET_SIZE; i++)
50+
{
51+
if (TB_CPUSET_ISSET(i, cpuset))
52+
cpuset_set(i, cpu_set);
53+
}
54+
tb_bool_t ok = cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, (pid_t)pid, cpuset_size(cpu_set), cpu_set) == 0;
55+
cpuset_destroy(cpu_set);
56+
return ok;
57+
#else
58+
// Linux uses cpu_set_t API
4059
tb_int_t i;
4160
cpu_set_t cpu_set;
4261
CPU_ZERO(&cpu_set);
@@ -46,13 +65,37 @@ tb_bool_t tb_sched_setaffinity(tb_size_t pid, tb_cpuset_ref_t cpuset)
4665
CPU_SET(i, &cpu_set);
4766
}
4867
return sched_setaffinity((pid_t)pid, sizeof(cpu_set_t), &cpu_set) == 0;
68+
#endif
4969
}
5070
tb_bool_t tb_sched_getaffinity(tb_size_t pid, tb_cpuset_ref_t cpuset)
5171
{
5272
// check
5373
tb_assert_and_check_return_val(cpuset, tb_false);
5474

55-
// get cpu affinity
75+
#ifdef __NetBSD__
76+
// NetBSD uses cpuset_t API for process affinity
77+
cpuset_t *cpu_set = cpuset_create();
78+
if (!cpu_set)
79+
return tb_false;
80+
81+
if (cpuset_getaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, (pid_t)pid, cpuset_size(cpu_set), cpu_set) != 0)
82+
{
83+
cpuset_destroy(cpu_set);
84+
return tb_false;
85+
}
86+
87+
// save cpuset
88+
tb_int_t i;
89+
TB_CPUSET_ZERO(cpuset);
90+
for (i = 0; i < TB_CPUSET_SIZE; i++)
91+
{
92+
if (cpuset_isset(i, cpu_set))
93+
TB_CPUSET_SET(i, cpuset);
94+
}
95+
cpuset_destroy(cpu_set);
96+
return tb_true;
97+
#else
98+
// Linux uses cpu_set_t API
5699
cpu_set_t cpu_set;
57100
CPU_ZERO(&cpu_set);
58101
if (sched_getaffinity((pid_t)pid, sizeof(cpu_set_t), &cpu_set) != 0)
@@ -67,4 +110,5 @@ tb_bool_t tb_sched_getaffinity(tb_size_t pid, tb_cpuset_ref_t cpuset)
67110
TB_CPUSET_SET(i, cpuset);
68111
}
69112
return tb_true;
113+
#endif
70114
}

src/tbox/platform/posix/thread_affinity.c

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
#include "../thread.h"
2828
#include <pthread.h>
2929
#include <string.h>
30+
#ifdef __NetBSD__
31+
#include <sched.h>
32+
#endif
3033

3134
/* //////////////////////////////////////////////////////////////////////////////////////
3235
* implementation
@@ -39,7 +42,23 @@ tb_bool_t tb_thread_setaffinity(tb_thread_ref_t thread, tb_cpuset_ref_t cpuset)
3942
// get thread
4043
pthread_t pthread = thread? *((pthread_t*)thread) : pthread_self();
4144

42-
// set cpu affinity
45+
#ifdef __NetBSD__
46+
// NetBSD uses cpuset_t API
47+
cpuset_t *cpu_set = cpuset_create();
48+
if (!cpu_set)
49+
return tb_false;
50+
51+
tb_int_t i;
52+
for (i = 0; i < TB_CPUSET_SIZE; i++)
53+
{
54+
if (TB_CPUSET_ISSET(i, cpuset))
55+
cpuset_set(i, cpu_set);
56+
}
57+
tb_bool_t ok = pthread_setaffinity_np(pthread, cpuset_size(cpu_set), cpu_set) == 0;
58+
cpuset_destroy(cpu_set);
59+
return ok;
60+
#else
61+
// Linux uses cpu_set_t API
4362
tb_int_t i;
4463
cpu_set_t cpu_set;
4564
CPU_ZERO(&cpu_set);
@@ -49,6 +68,7 @@ tb_bool_t tb_thread_setaffinity(tb_thread_ref_t thread, tb_cpuset_ref_t cpuset)
4968
CPU_SET(i, &cpu_set);
5069
}
5170
return pthread_setaffinity_np(pthread, sizeof(cpu_set_t), &cpu_set) == 0;
71+
#endif
5272
}
5373
tb_bool_t tb_thread_getaffinity(tb_thread_ref_t thread, tb_cpuset_ref_t cpuset)
5474
{
@@ -58,7 +78,30 @@ tb_bool_t tb_thread_getaffinity(tb_thread_ref_t thread, tb_cpuset_ref_t cpuset)
5878
// get thread
5979
pthread_t pthread = thread? *((pthread_t*)thread) : pthread_self();
6080

61-
// get cpu affinity
81+
#ifdef __NetBSD__
82+
// NetBSD uses cpuset_t API
83+
cpuset_t *cpu_set = cpuset_create();
84+
if (!cpu_set)
85+
return tb_false;
86+
87+
if (pthread_getaffinity_np(pthread, cpuset_size(cpu_set), cpu_set) != 0)
88+
{
89+
cpuset_destroy(cpu_set);
90+
return tb_false;
91+
}
92+
93+
// save cpuset
94+
tb_int_t i;
95+
TB_CPUSET_ZERO(cpuset);
96+
for (i = 0; i < TB_CPUSET_SIZE; i++)
97+
{
98+
if (cpuset_isset(i, cpu_set))
99+
TB_CPUSET_SET(i, cpuset);
100+
}
101+
cpuset_destroy(cpu_set);
102+
return tb_true;
103+
#else
104+
// Linux uses cpu_set_t API
62105
cpu_set_t cpu_set;
63106
CPU_ZERO(&cpu_set);
64107
if (pthread_getaffinity_np(pthread, sizeof(cpu_set_t), &cpu_set) != 0)
@@ -73,4 +116,5 @@ tb_bool_t tb_thread_getaffinity(tb_thread_ref_t thread, tb_cpuset_ref_t cpuset)
73116
TB_CPUSET_SET(i, cpuset);
74117
}
75118
return tb_true;
119+
#endif
76120
}

src/xmake.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ if is_plat "mingw" "msys" "cygwin"; then
3737
add_syslinks "ws2_32" "pthread" "m"
3838
elif is_plat "haiku"; then
3939
add_syslinks "pthread" "network" "m" "c"
40+
elif is_plat "bsd" "solaris"; then
41+
add_syslinks "pthread" "m"
4042
else
4143
add_syslinks "pthread" "dl" "m" "c"
4244
fi

0 commit comments

Comments
 (0)