Skip to content

Commit 7acaf06

Browse files
committed
wasi able to build p3d wgl port
1 parent 889abed commit 7acaf06

File tree

5 files changed

+159
-150
lines changed

5 files changed

+159
-150
lines changed

scripts/wasisdk-fetch.sh

Lines changed: 76 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ then
1111
export WASI_SYSROOT="${WASI_SDK_PREFIX}/share/wasi-sysroot"
1212

1313

14+
export CMAKE_TOOLCHAIN_FILE=${SDKROOT}/wasisdk/share/cmake/Modules/Platform/WASI.cmake
15+
export CMAKE_INSTALL_PREFIX="${SDKROOT}/devices/wasi/usr"
1416

1517
if [ -d ${WASI_SDK_PREFIX} ]
1618
then
@@ -39,10 +41,17 @@ then
3941
# /opt/python-wasm-sdk/devices/x86_64/usr/lib/python3.11/site-packages/cmake/data/share/cmake-3.27/Modules/Platform/
4042
cp -v wasisdk/share/cmake/WASI.cmake ${SDKROOT}/devices/$(arch)/usr/lib/python${PYBUILD}/site-packages/cmake/data/share/cmake-*/Modules/Platform/
4143

42-
cat > ${SDKROOT}/devices/$(arch)/usr/lib/python${PYBUILD}/site-packages/cmake/data/share/cmake-*/Modules/Platform/WASI.cmake <<END
44+
45+
#cat > ${SDKROOT}/devices/$(arch)/usr/lib/python${PYBUILD}/site-packages/cmake/data/share/cmake-*/Modules/Platform/WASI.cmake <<END
46+
47+
mkdir -p ${SDKROOT}/wasisdk/share/cmake/Modules/Platform/
48+
49+
cat > ${CMAKE_TOOLCHAIN_FILE} <<END
4350
# Cmake toolchain description file for the Makefile
4451
45-
set(CMAKE_TOOLCHAIN_FILE ${WASISDK}/share/cmake/wasi-sdk.cmake)
52+
# set(CMAKE_TOOLCHAIN_FILE "${CMAKE_TOOLCHAIN_FILE}")
53+
# list(APPEND CMAKE_MODULE_PATH "${WASISDK}/share/cmake/Modules")
54+
4655
4756
# This is arbitrary, AFAIK, for now.
4857
cmake_minimum_required(VERSION 3.5.0)
@@ -75,14 +84,37 @@ else()
7584
set(WASI_HOST_EXE_SUFFIX "")
7685
endif()
7786
87+
# lock those
7888
set(CMAKE_C_COMPILER ${WASISDK}/bin/wasi-c)
7989
set(CMAKE_CXX_COMPILER ${WASISDK}/bin/wasi-c++)
80-
set(CMAKE_ASM_COMPILER ${WASI_SDK_PREFIX}/bin/clang\${WASI_HOST_EXE_SUFFIX})
81-
set(CMAKE_AR ${WASI_SDK_PREFIX}/bin/llvm-ar\${WASI_HOST_EXE_SUFFIX})
82-
set(CMAKE_RANLIB ${WASI_SDK_PREFIX}/bin/llvm-ranlib\${WASI_HOST_EXE_SUFFIX})
83-
set(CMAKE_C_COMPILER_TARGET \${triple})
84-
set(CMAKE_CXX_COMPILER_TARGET \${triple})
85-
set(CMAKE_ASM_COMPILER_TARGET \${triple})
90+
91+
set(CMAKE_C_COMPILER_ID_RUN TRUE)
92+
set(CMAKE_C_COMPILER_FORCED TRUE)
93+
set(CMAKE_C_COMPILER_WORKS TRUE)
94+
set(CMAKE_C_COMPILER_ID Clang)
95+
set(CMAKE_C_COMPILER_FRONTEND_VARIANT GNU)
96+
set(CMAKE_C_STANDARD_COMPUTED_DEFAULT 11)
97+
98+
#set(CMAKE_C_STANDARD 99)
99+
#set(CMAKE_C_STANDARD_REQUIRED ON)
100+
set(CMAKE_C_EXTENSIONS ON)
101+
102+
set(CMAKE_CXX_COMPILER_ID_RUN TRUE)
103+
set(CMAKE_CXX_COMPILER_FORCED TRUE)
104+
set(CMAKE_CXX_COMPILER_WORKS TRUE)
105+
set(CMAKE_CXX_COMPILER_ID Clang)
106+
set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT GNU)
107+
set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT 98)
108+
109+
set(CMAKE_C_PLATFORM_ID "wasi")
110+
set(CMAKE_CXX_PLATFORM_ID "wasi")
111+
112+
set(CMAKE_ASM_COMPILER ${WASI_SDK_PREFIX}/bin/clang${WASI_HOST_EXE_SUFFIX})
113+
set(CMAKE_AR ${WASI_SDK_PREFIX}/bin/llvm-ar${WASI_HOST_EXE_SUFFIX})
114+
set(CMAKE_RANLIB ${WASI_SDK_PREFIX}/bin/llvm-ranlib${WASI_HOST_EXE_SUFFIX})
115+
set(CMAKE_C_COMPILER_TARGET ${triple})
116+
set(CMAKE_CXX_COMPILER_TARGET ${triple})
117+
set(CMAKE_ASM_COMPILER_TARGET ${triple})
86118
87119
# Don't look in the sysroot for executables to run during the build
88120
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
@@ -91,8 +123,41 @@ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
91123
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
92124
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
93125
126+
# 64
127+
#set(CMAKE_SIZEOF_VOID_P 8)
128+
#set(CMAKE_C_SIZEOF_DATA_PTR 8)
129+
#set(CMAKE_CXX_SIZEOF_DATA_PTR 8)
130+
131+
# 32
132+
set(CMAKE_SIZEOF_VOID_P 4)
133+
set(CMAKE_C_SIZEOF_DATA_PTR 4)
134+
set(CMAKE_CXX_SIZEOF_DATA_PTR 4)
135+
136+
# faster
137+
set(CMAKE_SKIP_COMPATIBILITY_TESTS 1)
138+
set(CMAKE_SIZEOF_CHAR 1)
139+
set(CMAKE_SIZEOF_UNSIGNED_SHORT 2)
140+
set(CMAKE_SIZEOF_SHORT 2)
141+
set(CMAKE_SIZEOF_INT 4)
142+
set(CMAKE_SIZEOF_UNSIGNED_LONG 4)
143+
set(CMAKE_SIZEOF_UNSIGNED_INT 4)
144+
set(CMAKE_SIZEOF_LONG 4)
145+
set(CMAKE_SIZEOF_FLOAT 4)
146+
set(CMAKE_SIZEOF_DOUBLE 8)
147+
set(CMAKE_HAVE_LIMITS_H 1)
148+
set(CMAKE_HAVE_UNISTD_H 1)
149+
set(CMAKE_HAVE_PTHREAD_H 1)
150+
set(CMAKE_HAVE_SYS_PRCTL_H 1)
151+
set(CMAKE_WORDS_BIGENDIAN 0)
152+
153+
set(CMAKE_EXECUTABLE_SUFFIX ".wasi")
154+
155+
set(CMAKE_CROSSCOMPILING_EMULATOR "${WASISDK}/bin/wasi-run" FILEPATH "Path to the emulator for the target system.")
156+
94157
END
95158

159+
# cp ${SDKROOT}/wasisdk/share/cmake/Modules/Platform/WASI.cmake ${SDKROOT}/devices/$(arch)/usr/lib/python${PYBUILD}/site-packages/cmake/data/share/cmake-*/Modules/Platform/
160+
96161
pushd ${WASI_SYSROOT}
97162
wget "https://github.com/vmware-labs/webassembly-language-runtimes/releases/download/libs%2Flibpng%2F1.6.39%2B20230629-ccb4cb0/libpng-1.6.39-wasi-sdk-20.0.tar.gz" -O-| tar xvfz -
98163
wget "https://github.com/vmware-labs/webassembly-language-runtimes/releases/download/libs%2Fzlib%2F1.2.13%2B20230623-2993864/libz-1.2.13-wasi-sdk-20.0.tar.gz" -O-| tar xvfz -
@@ -105,7 +170,7 @@ END
105170

106171
export PATH="${WASISDK}/bin:${WASI_SDK_PREFIX}/bin:$PATH"
107172

108-
export PREFIX="${SDKROOT}/devices/wasi/usr"
173+
export PREFIX=$CMAKE_INSTALL_PREFIX
109174

110175
# instruct pkg-config to use wasi target root
111176
export PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig:${WASI_SYSROOT}/lib/wasm32-wasi/pkgconfig"
@@ -128,7 +193,6 @@ END
128193
# wasi assembly
129194
WASI_ALL="${WASI_CFG} ${WASI_DEF} -fPIC -fno-rtti -fno-exceptions"
130195

131-
132196
WASI_ALL="$WASI_ALL -Wno-unused-but-set-variable -Wno-unused-command-line-argument -Wno-unsupported-floating-point-opt"
133197

134198
# wasi linking
@@ -138,10 +202,10 @@ END
138202
# export CPP="${WASISDK}/bin/wasi-cpp"
139203
# export CXX="${WASISDK}/bin/wasi++"
140204

141-
CXX_lIBS="-lc++ -lc++abi -lc++experimental"
205+
CXX_LIBS="-lc++ -lc++abi -lc++experimental"
142206

143207
export CC="${WASI_SDK_PREFIX}/bin/clang ${WASI_ALL}"
144-
export CXX="${WASI_SDK_PREFIX}/bin/clang++ ${WASI_ALL} ${CXX_lIBS}"
208+
export CXX="${WASI_SDK_PREFIX}/bin/clang++ ${WASI_ALL} ${CXX_LIBS}"
145209
export CPP="${WASI_SDK_PREFIX}/bin/clang-cpp ${WASI_CFG} ${WASI_DEF}"
146210

147211

wasisdk/bin/wasi

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
#!/bin/bash
22

3+
# https://stackoverflow.com/questions/20530105/how-to-specify-a-custom-stdlib-directory-for-llvm
4+
# https://stackoverflow.com/questions/60712261/how-to-prevent-osx-gcc-to-always-search-usr-local-include
5+
36
WASI_CFG="--sysroot=${WASI_SDK_PREFIX}/share/wasi-sysroot -iwithsysroot /include/c++/v1 -I${WASISDK}/hotfix"
47
WASI_DEF="-D_WASI_EMULATED_MMAN -D_WASI_EMULATED_SIGNAL -D_WASI_EMULATED_PROCESS_CLOCKS -D_WASI_EMULATED_GETPID"
58

69
# wasi assembly
7-
WASI_ALL="${WASI_CFG} ${WASI_DEF} -fPIC -fno-rtti -fno-exceptions"
10+
WASI_ALL="${WASI_CFG} ${WASI_DEF} -fPIC -fno-rtti -fno-exceptions -include ${WASISDK}/hotfix/patch.h"
811

912

1013
WASI_ALL="$WASI_ALL -Wno-unused-but-set-variable -Wno-unused-command-line-argument -Wno-unsupported-floating-point-opt"
@@ -15,7 +18,7 @@ WASI_LNK="-lwasi-emulated-getpid -lwasi-emulated-mman -lwasi-emulated-signal -lw
1518

1619
export CC="${WASI_SDK_PREFIX}/bin/clang ${WASI_ALL}"
1720
export CXX="${WASI_SDK_PREFIX}/bin/clang++ ${WASI_ALL}"
18-
export CPP="${WASI_SDK_PREFIX}/bin/clang-cpp ${WASI_CFG} ${WASI_DEF}"
21+
export CPP="${WASI_SDK_PREFIX}/bin/clang-cpp ${WASI_CFG} -include ${WASISDK}/hotfix/patch.h ${WASI_DEF}"
1922

2023
if echo $0|grep -q c++$
2124
then

wasisdk/hotfix/dlfcn.h

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,27 @@ extern "C" {
1919

2020
#define RTLD_DI_LINKMAP 2
2121

22-
int dlclose(void *) {
22+
static int
23+
dlclose(void *) {
2324
puts("int dlclose(void)");
2425
return 0;
2526
}
2627

27-
const char *errormsg = "dlerror";
28-
char *dlerror(void) {
28+
static const char *errormsg = "dlerror";
29+
30+
static char *
31+
dlerror(void) {
2932
return (char *)dlerror;
3033
}
3134

32-
void *dlopen(const char *, int) {
35+
static void *
36+
dlopen(const char *, int) {
3337
puts("void *dlopen(const char *, int)");
3438
return NULL;
3539
}
3640

37-
void *dlsym(void *__restrict, const char *__restrict) {
41+
static void *
42+
dlsym(void *__restrict, const char *__restrict) {
3843
puts("void *dlsym(void *__restrict, const char *__restrict)");
3944
return NULL;
4045
}

wasisdk/hotfix/patch.h

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#include <stdio.h>
2+
#include <string.h>
3+
#include <stdlib.h>
4+
#include <errno.h>
5+
#include <sys/stat.h>
6+
#include <limits.h>
7+
#include <string.h>
8+
#include <stdlib.h>
9+
#include <time.h>
10+
#include <stdint.h>
11+
12+
#define P_tmpdir "/tmp"
13+
#define LOCK_EX 2
14+
#define LOCK_NB 4
15+
16+
static FILE *
17+
popen(const char *command, const char *type){
18+
return NULL;
19+
}
20+
21+
static char *
22+
__randname(char *tmpl)
23+
{
24+
int i;
25+
struct timespec ts;
26+
unsigned long r;
27+
28+
clock_gettime(CLOCK_REALTIME, &ts);
29+
r = ts.tv_nsec*65537 ^ (uintptr_t)&ts / 16 + (uintptr_t)tmpl;
30+
for (i=0; i<6; i++, r>>=5)
31+
tmpl[i] = 'A'+(r&15)+(r&16)*2;
32+
33+
return tmpl;
34+
}
35+
36+
static char *
37+
tempnam(const char *dir, const char *pfx)
38+
{
39+
char s[PATH_MAX];
40+
size_t l, dl, pl;
41+
42+
if (!dir) dir = P_tmpdir;
43+
if (!pfx) pfx = "temp";
44+
45+
dl = strlen(dir);
46+
pl = strlen(pfx);
47+
l = dl + 1 + pl + 1 + 6;
48+
49+
if (l >= PATH_MAX) {
50+
errno = ENAMETOOLONG;
51+
return 0;
52+
}
53+
54+
memcpy(s, dir, dl);
55+
s[dl] = '/';
56+
memcpy(s+dl+1, pfx, pl);
57+
s[dl+1+pl] = '_';
58+
s[l] = 0;
59+
60+
__randname(s+l-6);
61+
return strdup(s);
62+
}
63+
64+
static int
65+
lockf(int fd, int cmd, off_t len) {
66+
return 0;
67+
}
68+

0 commit comments

Comments
 (0)