Przeglądaj źródła

webgl-port: wasi support (#1557)

Paul m. p. Peny 1 rok temu
rodzic
commit
b60e3b1af8

+ 2 - 2
dtool/Config.cmake

@@ -30,7 +30,7 @@ if(DEFINED CMAKE_CXX_FLAGS_COVERAGE)
 endif()
 
 # Are we building with static or dynamic linking?
-if(EMSCRIPTEN)
+if(EMSCRIPTEN OR WASI)
   set(_default_shared OFF)
 else()
   set(_default_shared ON)
@@ -566,7 +566,7 @@ set(THREADS_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}")
 set(HAVE_POSIX_THREADS ${CMAKE_USE_PTHREADS_INIT})
 
 # Add basic use flag for threading
-if(EMSCRIPTEN)
+if(EMSCRIPTEN OR WASI)
   set(_default_threads OFF)
 else()
   set(_default_threads ON)

+ 3 - 0
dtool/Package.cmake

@@ -68,6 +68,9 @@ if(THIRDPARTY_DIRECTORY)
   elseif(CMAKE_SYSTEM_NAME STREQUAL "Android")
     set(_package_dir ${THIRDPARTY_DIRECTORY}/android-libs-${CMAKE_ANDROID_ARCH})
 
+  elseif(CMAKE_SYSTEM_NAME STREQUAL "WASI")
+    set(_package_dir ${THIRDPARTY_DIRECTORY})
+
   else()
     message(FATAL_ERROR
       "You can't use THIRDPARTY_DIRECTORY on this platform. Unset it to continue.")

+ 10 - 0
dtool/src/dtoolbase/dtool_platform.h

@@ -65,6 +65,16 @@
 #define DTOOL_PLATFORM "android_i386"
 #endif
 
+#elif defined(__wasm32__)
+#define DTOOL_PLATFORM "wasi_wasm32"
+
+#elif defined(__wasm64__)
+#define DTOOL_PLATFORM "wasi_wasm64"
+
+// fallback to wasm32 with older sdk
+#elif defined(__wasi__)
+#define DTOOL_PLATFORM "wasi_wasm32"
+
 #elif defined(__EMSCRIPTEN__)
 #if defined(__wasm64__)
 #define DTOOL_PLATFORM "emscripten_wasm64"

+ 3 - 3
dtool/src/dtoolutil/executionEnvironment.cxx

@@ -62,7 +62,7 @@ extern char **environ;
 #include <sys/sysctl.h>
 #endif
 
-#if defined(IS_LINUX) || defined(IS_FREEBSD)
+#if (defined(IS_LINUX) || defined(IS_FREEBSD)) && !defined(__wasi__)
 // For link_map and dlinfo.
 #include <link.h>
 #include <dlfcn.h>
@@ -921,7 +921,7 @@ read_args() {
   }
 #endif
 
-#ifndef _WIN32
+#if !defined(_WIN32) && !defined(__wasi__)
   // Try to use realpath to get cleaner paths.
 
   if (!_binary_name.empty()) {
@@ -937,7 +937,7 @@ read_args() {
       _dtool_name = newpath;
     }
   }
-#endif  // _WIN32
+#endif  // _WIN32 __wasi__
 
   if (_dtool_name.empty()) {
     _dtool_name = _binary_name;

+ 3 - 3
dtool/src/dtoolutil/filename.cxx

@@ -436,7 +436,7 @@ Filename Filename::
 temporary(const string &dirname, const string &prefix, const string &suffix,
           Type type) {
   Filename fdirname = dirname;
-#if defined(_WIN32) || defined(ANDROID)
+#if defined(_WIN32) || defined(ANDROID) || defined(__wasi__)
   // The Windows tempnam() function doesn't do a good job of choosing a
   // temporary directory.  Choose one ourselves.
   if (fdirname.empty()) {
@@ -1049,7 +1049,7 @@ make_canonical() {
     return true;
   }
 
-#ifndef _WIN32
+#if !defined(_WIN32) && !defined(__wasi__)
   // Use realpath in order to resolve symlinks properly
   char newpath [PATH_MAX + 1];
   if (realpath(c_str(), newpath) != nullptr) {
@@ -1057,7 +1057,7 @@ make_canonical() {
     newpath_fn._flags = _flags;
     (*this) = newpath_fn;
   }
-#endif
+#endif  // _WIN32 __wasi__
 
   Filename cwd = ExecutionEnvironment::get_cwd();
   if (!r_make_canonical(cwd)) {

+ 1 - 0
panda/src/tinydisplay/CMakeLists.txt

@@ -118,6 +118,7 @@ add_metalib(p3tinydisplay ${MODULE_TYPE}
 unset(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME)
 
 set_target_properties(p3tinydisplay PROPERTIES DEFINE_SYMBOL BUILDING_TINYDISPLAY)
+target_link_libraries(p3tinydisplay panda)
 
 install(TARGETS p3tinydisplay
   EXPORT TinyDisplay COMPONENT TinyDisplay