Using the cmake system for emscripten panda builds

I have successfully passed the stage of building a project using a ninja generator. However, the compiler will not like this part of the code in this file.

FAILED: cmake/panda/src/nativenet/CMakeFiles/p3nativenet.dir/Unity/unity_0_cxx.cxx.o
D:\emsdk_3.0.0\upstream\emscripten\em++.bat -DBUILDING_PANDA_NATIVENET -ID:/panda3d-sourse/build/cmake/panda/src/nativenet -ID:/panda3d-sourse/panda/src/nativenet -ID:/panda3d-sourse/build/cmake/panda/src/pandabase -ID:/panda3d-sourse/panda/src/pandabase -ID:/panda3d-sourse/dtool/src/dtoolutil -ID:/panda3d-sourse/dtool/src/dtoolbase -ID:/panda3d-sourse/build/cmake/dtool/src/dtoolbase -ID:/panda3d-sourse/build/include -ID:/panda3d-sourse/build/cmake/dtool/metalibs/dtool -ID:/panda3d-sourse/dtool/metalibs/dtool -ID:/panda3d-sourse/panda/src/downloader -ID:/panda3d-sourse/panda/src/express -ID:/panda3d-sourse/build/cmake/panda/metalibs/pandaexpress -ID:/panda3d-sourse/panda/metalibs/pandaexpress -ID:/panda3d-sourse/build/cmake/dtool/src/interrogatedb -ID:/panda3d-sourse/dtool/src/interrogatedb -ID:/panda3d-sourse/build/cmake/dtool/src/dconfig -ID:/panda3d-sourse/dtool/src/dconfig -ID:/panda3d-sourse/build/cmake/dtool/src/prc -ID:/panda3d-sourse/dtool/src/prc -Wall -Wno-unused-function -Wno-unused-parameter -fno-strict-aliasing -Werror=return-type -O3 -Wno-unused-variable -fno-stack-protector -ffast-math -fno-unsafe-math-optimizations -fno-finite-math-only -fno-exceptions -fno-rtti -fvisibility=hidden -std=gnu++11 -MD -MT cmake/panda/src/nativenet/CMakeFiles/p3nativenet.dir/Unity/unity_0_cxx.cxx.o -MF cmake\panda\src\nativenet\CMakeFiles\p3nativenet.dir\Unity\unity_0_cxx.cxx.o.d -o cmake/panda/src/nativenet/CMakeFiles/p3nativenet.dir/Unity/unity_0_cxx.cxx.o -c D:/panda3d-sourse/build/cmake/panda/src/nativenet/CMakeFiles/p3nativenet.dir/Unity/unity_0_cxx.cxx
warning: overriding currently unsupported use of floating point exceptions on this target [-Wunsupported-floating-point-opt]
In file included from D:/panda3d-sourse/build/cmake/panda/src/nativenet/CMakeFiles/p3nativenet.dir/Unity/unity_0_cxx.cxx:3:
In file included from D:/panda3d-sourse/panda/src/nativenet/config_nativenet.cxx:16:
In file included from D:/panda3d-sourse/panda/src/nativenet/socket_ip.h:5:
D:/panda3d-sourse/panda/src/nativenet/socket_portable.h:282:1: error: unknown type name 'No'
No Host Type defined !!
^
D:/panda3d-sourse/panda/src/nativenet/socket_portable.h:282:8: error: expected ';' after top level declarator
No Host Type defined !!
       ^
       ;
D:/panda3d-sourse/panda/src/nativenet/socket_portable.h:283:2: error: Fatal
#error  Fatal
 ^

But I can’t interpret it, for me it’s just text in the middle of the code.

I commented on this line, so it’s obviously not necessary. But I was faced with the lack of a header file.

D:/panda3d-sourse/panda/src/pstatclient/pStatClientImpl.h:23:10: fatal error: 'connectionManager.h' file not found
#include "connectionManager.h"
         ^~~~~~~~~~~~~~~~~~~~~

I’ve never tried to use CMake for emscripten. Perhaps @pmpp has experience with this.

But I think you need to compile Panda with HAVE_NET disabled. See the emscripten-specific settings that are overridden in makepanda:

I can help and i would gladly do so but only if a tested sdk ( emscripten is quite an exotic thing ) on a clean VM ubuntu 22.04 is used. it is here GitHub - pygame-web/python-wasm-sdk: Tooling for building CPython+Pygame on WebAssembly python 3.10/11/12

That’s standard CI env for github and tbh the github CI is 2-3x faster than my pc.I also already build another 3D engine with cmake on that sdk so i know when emscripten is getting haywire :smiley:

@serega-kkz btw maybe you would be interested in Running In-Browser - #4 by pmpp

nb: only 3.10 has numpy for now

The problem deeper than it seems, I switched to windows build. As it turned out, this problem remained, while I need to conduct several tests with a variation of the build mode.

Hmm, I’m currently interested in cross-compilation for Windows, a bunch of Ninja and Emscripten seemed workable.

I easily made several libraries from this repository build. So I decided to try something harder, as I said earlier I managed to put together a Ninja project for panda.

is it for C++ projects ?
afaik emsdk work fine on WSL2 and you will get more support and better control of CI available around

Well, I don’t have any projects other than amateur ideas. I do not see the point in virtual operating systems, there is nothing that does not interfere with me at the moment to put a real ubuntu.

The problem is, for example, that I have never worked in a mac system and Unix-like in my life. What Emscripten offers already looks promising, I don’t need to know the development environments specific to these platforms and so on.

At the moment I prefer python, but I hope to master C++ in the future.

i do understand your feeling (as i used unix( some of them)/mac(all of them)/windows(all of them)) but believe me if you go on cross-compilation field with windows => you WILL have to and probably the hard way.

Meanwhile cross-compilation is GNU/Linux playground and usually everything can work with sane defaults ( like bash , git , clang/gcc and ready made system devel packages , and lots of coffee OFC ).

I found out that this is not related to the Emscripten platform. The most interesting thing is that the problem is disabling the HAVE_NET setting, I think there are many dependencies on this. The first thing that came to my mind was PSTATS. I do not know how to abandon it, I tried these commands, but nothing happened.

-D WANT_NATIVE_NET=NO ^ -D DO_PSTATS_STANDART=NO -D DO_PSTATS_RELWITHDEBINFO=NO -D DO_PSTATS_RELEASE=NO -D DO_PSTATS_MINSIZEREL=NO

This is enough to reproduce the problem.

cmake -D THIRDPARTY_DIRECTORY=D:\panda3d-sourse\thirdparty -D HAVE_NET=NO -G "Visual Studio 17 2022" -A x64 ..

D:\panda3d_test\build>cmake -D THIRDPARTY_DIRECTORY=D:\panda3d-sourse\thirdparty -D HAVE_NET=NO -G "Visual Studio 17 2022" -A x64 ..
-- Using multi-configuration generator
-- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.19044.
-- The C compiler identification is MSVC 19.33.31629.0
-- The CXX compiler identification is MSVC 19.33.31629.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.33.31629/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.33.31629/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.24/Modules/FindPackageHandleStandardArgs.cmake:438 (message):
  The package name passed to `find_package_handle_standard_args` (CgGL) does
  not match the name of the calling package (Cg).  This can lead to problems
  in calling code that expects `find_package` result variables (e.g.,
  `_FOUND`) to follow a certain pattern.
Call Stack (most recent call first):
  cmake/modules/FindCg.cmake:71 (find_package_handle_standard_args)
  cmake/modules/FindCg.cmake:165 (find_cggl)
  dtool/Package.cmake:670 (find_package)
  CMakeLists.txt:84 (include)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/Program Files/CMake/share/cmake-3.24/Modules/FindPackageHandleStandardArgs.cmake:438 (message):
  The package name passed to `find_package_handle_standard_args` (CgD3D9)
  does not match the name of the calling package (Cg).  This can lead to
  problems in calling code that expects `find_package` result variables
  (e.g., `_FOUND`) to follow a certain pattern.
Call Stack (most recent call first):
  cmake/modules/FindCg.cmake:116 (find_package_handle_standard_args)
  cmake/modules/FindCg.cmake:166 (find_cgd3d9)
  dtool/Package.cmake:670 (find_package)
  CMakeLists.txt:84 (include)
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of long
-- Check size of long - done
-- Check for STD namespace
-- Check for STD namespace - found
-- Performing Test PHAVE_LOCKF
-- Performing Test PHAVE_LOCKF - Failed
-- Performing Test SIMPLE_STRUCT_POINTERS
-- Performing Test SIMPLE_STRUCT_POINTERS - Failed
-- Looking for gettimeofday
-- Looking for gettimeofday - not found
-- Performing Test GETTIMEOFDAY_ONE_PARAM
-- Performing Test GETTIMEOFDAY_ONE_PARAM - Failed
-- Looking for getopt
-- Looking for getopt - not found
-- Looking for getopt_long_only
-- Looking for getopt_long_only - not found
-- Looking for C++ include getopt.h
-- Looking for C++ include getopt.h - not found
-- Performing Test HAVE_IOS_TYPEDEFS
-- Performing Test HAVE_IOS_TYPEDEFS - Success
-- Performing Test HAVE_IOS_BINARY
-- Performing Test HAVE_IOS_BINARY - Success
-- Looking for C++ include io.h
-- Looking for C++ include io.h - found
-- Looking for C++ include iostream
-- Looking for C++ include iostream - found
-- Looking for C++ include malloc.h
-- Looking for C++ include malloc.h - found
-- Looking for C++ include sys/malloc.h
-- Looking for C++ include sys/malloc.h - not found
-- Looking for C++ include alloca.h
-- Looking for C++ include alloca.h - not found
-- Looking for C++ include locale.h
-- Looking for C++ include locale.h - found
-- Looking for C++ include string.h
-- Looking for C++ include string.h - found
-- Looking for C++ include stdlib.h
-- Looking for C++ include stdlib.h - found
-- Looking for C++ include limits.h
-- Looking for C++ include limits.h - found
-- Looking for C++ include sstream
-- Looking for C++ include sstream - found
-- Looking for C++ include new
-- Looking for C++ include new - found
-- Looking for C++ include sys/types.h
-- Looking for C++ include sys/types.h - found
-- Looking for C++ include sys/time.h
-- Looking for C++ include sys/time.h - not found
-- Looking for C++ include unistd.h
-- Looking for C++ include unistd.h - not found
-- Looking for C++ include utime.h
-- Looking for C++ include utime.h - not found
-- Looking for C++ include glob.h
-- Looking for C++ include glob.h - not found
-- Looking for C++ include dirent.h
-- Looking for C++ include dirent.h - not found
-- Looking for C++ include ucontext.h
-- Looking for C++ include ucontext.h - not found
-- Looking for C++ include linux/input.h
-- Looking for C++ include linux/input.h - not found
-- Looking for C++ include stdint.h
-- Looking for C++ include stdint.h - found
-- Performing Test HAVE_SSE2
-- Performing Test HAVE_SSE2 - Success

Configuring support for the following optional third-party packages:
+ OpenSSL
+ zlib
+ libjpeg
+ libpng
+ libtiff
- OpenEXR (not found)
+ libsquish
+ Assimp
+ FCollada
+ Eigen linear algebra library (vectorization enabled in build)
- FFTW (not found)
+ FFmpeg (with swscale and swresample)
+ Vorbis
+ Opus
+ FMOD Ex sound library
+ OpenAL sound library
+ FreeType
+ HarfBuzz
- gtk+-3 (not found)
+ Bullet physics
+ Open Dynamics Engine
- SpeedTree (not found)
+ OpenGL
- OpenGL ES 1.x (not found)
- OpenGL ES 2.x (not found)
- Direct3D 9.x (not found)
+ Nvidia Cg Shading Language (supporting OpenGL and Direct3D 9)
- X11 (not found)
- EGL (not found)
- OpenCV (not found)
+ ARToolKit
+ VRPN
- mimalloc memory allocator (not used) (not found)

Compilation will generate Python interfaces for Python 3.9.13.
Compilation will include full, pipelined threading support.

See dtool_config.h for more details about the specified configuration.

-- Configuring done
-- Generating done
-- Build files have been written to: D:/panda3d_test/build

compiling: cmake --build . --config Standard --parallel 4

D:\panda3d_test\build>cmake --build . --config Standard --parallel 4
MSBuild version 17.3.1+2badb37d1 for .NET Framework
  Checking Build System
  Building Custom Rule D:/panda3d_test/dtool/src/dtoolbase/CMakeLists.txt
  unity_0_cxx.cxx
  Building Custom Rule D:/panda3d_test/direct/CMakeLists.txt
  indent.cxx
  Создание кода...
  lookup3.c
  p3dtoolbase.vcxproj -> D:\panda3d_test\build\cmake\dtool\src\dtoolbase\p3dtoolbase.dir\Standard\p3dtoolbase.lib
  Building Custom Rule D:/panda3d_test/dtool/src/dtoolutil/CMakeLists.txt
  unity_0_cxx.cxx
  Building Custom Rule D:/panda3d_test/direct/CMakeLists.txt
  p3dtoolutil.vcxproj -> D:\panda3d_test\build\cmake\dtool\src\dtoolutil\p3dtoolutil.dir\Standard\p3dtoolutil.lib
  Building Custom Rule D:/panda3d_test/dtool/metalibs/dtool/CMakeLists.txt
  unity_0_cxx.cxx
     Создается библиотека D:/panda3d_test/build/Standard/lib/p3dtool.lib и объект D:/panda3d_test/build/Standard/lib/p3
  dtool.exp
  p3dtool.vcxproj -> D:\panda3d_test\build\Standard\bin\p3dtool.dll
  Building Custom Rule D:/panda3d_test/dtool/src/prc/CMakeLists.txt
  Generating cppBison.cxx, cppBison.h
  Building Custom Rule D:/panda3d_test/dtool/src/cppparser/CMakeLists.txt
  unity_0_cxx.cxx
  unity_1_cxx.cxx
  unity_0_cxx.cxx
D:/panda3d_test/build/cmake/dtool/src/cppparser/cppBison.cxx(4272,5): warning C4065: оператор switch содержит метку "de
fault", но не содержит ни одной метки "case" [D:\panda3d_test\build\cmake\dtool\src\cppparser\p3cppParser.vcxproj]
     Создается библиотека D:/panda3d_test/build/Standard/lib/p3prc.lib и объект D:/panda3d_test/build/Standard/lib/p3pr
  c.exp
  p3prc.vcxproj -> D:\panda3d_test\build\Standard\bin\p3prc.dll
  Создание кода...
  Building Custom Rule D:/panda3d_test/dtool/src/interrogatedb/CMakeLists.txt
  unity_0_cxx.cxx
     Создается библиотека D:/panda3d_test/build/Standard/lib/p3interrogatedb.lib и объект D:/panda3d_test/build/Standar
  d/lib/p3interrogatedb.exp
  p3interrogatedb.vcxproj -> D:\panda3d_test\build\Standard\bin\p3interrogatedb.dll
  Building Custom Rule D:/panda3d_test/panda/src/express/CMakeLists.txt
  unity_2_cxx.cxx
  unity_1_cxx.cxx
  unity_0_cxx.cxx
  Создание кода...
  p3cppParser.vcxproj -> D:\panda3d_test\build\Standard\lib\libp3cppParser.lib
  Generating interrogate_preamble_python_native.cxx
  Building Custom Rule D:/panda3d_test/dtool/src/interrogate/CMakeLists.txt
  unity_0_cxx.cxx
  Building Custom Rule D:/panda3d_test/dtool/src/interrogate/CMakeLists.txt
  unity_0_cxx.cxx
  interrogate_module.vcxproj -> D:\panda3d_test\build\Standard\bin\interrogate_module.exe
  p3express.vcxproj -> D:\panda3d_test\build\cmake\panda\src\express\p3express.dir\Standard\p3express.lib
  Building Custom Rule D:/panda3d_test/panda/src/downloader/CMakeLists.txt
  unity_0_cxx.cxx
D:/panda3d_test/panda/src/downloader/bioPtr.cxx(138,5): warning C4996: 'WSAAddressToStringA': Use WSAAddressToStringW()
 instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings [D:\panda3d_test\build\cmake\pand
a\src\downloader\p3downloader.vcxproj]
  p3downloader.vcxproj -> D:\panda3d_test\build\cmake\panda\src\downloader\p3downloader.dir\Standard\p3downloader.lib
  Building Custom Rule D:/panda3d_test/panda/metalibs/pandaexpress/CMakeLists.txt
  unity_0_cxx.cxx
     Создается библиотека D:/panda3d_test/build/Standard/lib/pandaexpress.lib и объект D:/panda3d_test/build/Standard/l
  ib/pandaexpress.exp
  pandaexpress.vcxproj -> D:\panda3d_test\build\Standard\bin\pandaexpress.dll
  Building Custom Rule D:/panda3d_test/panda/src/nativenet/CMakeLists.txt
  Building Custom Rule D:/panda3d_test/panda/src/linmath/CMakeLists.txt
  Building Custom Rule D:/panda3d_test/panda/src/pipeline/CMakeLists.txt
  Building Custom Rule D:/panda3d_test/panda/src/dxml/CMakeLists.txt
  unity_0_cxx.cxx
  unity_0_cxx.cxx
  unity_0_cxx.cxx
  unity_1_cxx.cxx
  tinyxml.cpp
  unity_0_cxx.cxx
  p3nativenet.vcxproj -> D:\panda3d_test\build\cmake\panda\src\nativenet\p3nativenet.dir\Standard\p3nativenet.lib
  tinyxmlerror.cpp
  Создание кода...
  tinyxmlparser.cpp
  contextSwitch.c
  Создание кода...
  p3pipeline.vcxproj -> D:\panda3d_test\build\cmake\panda\src\pipeline\p3pipeline.dir\Standard\p3pipeline.lib
  p3dxml.vcxproj -> D:\panda3d_test\build\cmake\panda\src\dxml\p3dxml.dir\Standard\p3dxml.lib
  interrogate.vcxproj -> D:\panda3d_test\build\Standard\bin\interrogate.exe
  Interrogating interrogatedb
  Building Custom Rule D:/panda3d_test/dtool/src/interrogatedb/CMakeLists.txt
  unity_0_cxx.cxx
     Создается библиотека D:/panda3d_test/build/Standard/lib/interrogatedb.lib и объект D:/panda3d_test/build/Standard/
  lib/interrogatedb.exp
  panda3d.interrogatedb.vcxproj -> D:\panda3d_test\build\Standard\panda3d\interrogatedb.cp39-win_amd64.pyd
  p3linmath.vcxproj -> D:\panda3d_test\build\cmake\panda\src\linmath\p3linmath.dir\Standard\p3linmath.lib
  Building Custom Rule D:/panda3d_test/panda/src/putil/CMakeLists.txt
  unity_2_cxx.cxx
  unity_1_cxx.cxx
  unity_0_cxx.cxx
  Создание кода...
  p3putil.vcxproj -> D:\panda3d_test\build\cmake\panda\src\putil\p3putil.dir\Standard\p3putil.lib
  Building Custom Rule D:/panda3d_test/panda/src/gsgbase/CMakeLists.txt
  Building Custom Rule D:/panda3d_test/panda/src/pstatclient/CMakeLists.txt
  unity_0_cxx.cxx
  unity_0_cxx.cxx
D:\panda3d_test\panda\src\pstatclient\pStatClientImpl.h(23,10): fatal  error C1083: Не удается открыть файл включение:
connectionManager.h: No such file or directory, [D:\panda3d_test\build\cmake\panda\src\pstatclient\p3pstatclient.vcxpro
j]
  p3gsgbase.vcxproj -> D:\panda3d_test\build\cmake\panda\src\gsgbase\p3gsgbase.dir\Standard\p3gsgbase.lib

When I was looking for this, as it happens, I also found problems with unresolved characters when experimenting with disabling multiple parameters, however I need to narrow down the range of parameters to determine the source of the problem.

if you don’t do C++ right now then may i ask why bother to build - on windows - something that only has to be built like only once a year ( new panda3d new python ) and that any continuous integration can automate ?

sidenote: from this point of view cmake is not fully justified as makepanda does the job quite well minor a few adjustments each year.

also you say “I do not see the point in virtual operating systems” but that’s exactly what emscripten is => a virtual posix operating system running on a Wasm CPU.

You will have to deal with a behaviour way more close to linux/mac than windows especially on filesystem and dynamic loading.

Very simply, I am sometimes approached on our website, which is located in the ru zone with questions about working with panda. Sometimes you need to go part of the way yourself to help someone with their problems. For example, in folder, which rdb presented with its dependencies, there was no openal. So let’s say I found an alternative to get it in Windows.

openal is included in emscripten. you should not need and it does not require any specifics flags. it may be that you have autodetection problem and cmake think it’s not there

in the other 3d engine i spoke from earlier there was also an openal detection problem with cmake ( iirc it is due to the fact that there are multiple openal implementations around with slightly different names )

I know, however it is mentioned in the libraries for freezing.

PANDA_LIBS = ["libp3interrogatedb", "libpanda", "libpandaexpress", "libp3dtool", "libp3dtoolconfig", "libp3webgldisplay", "libp3direct", "libp3openal_audio"]

yeah but that’s Panda3D’s stuff which is in fact linked to emscripten openal emulation code
really openal is always there in emscripten, makepanda has no problem with it @rdb could confirm

Please note that this topic is about another issue, I am not claiming that the build system has a problem with this. The problem is where to get the rest of the dependencies in Windows, and cmake with a Ninja turned out to be good in this matter.

As far as I know, makepanda does not build dependency.

indeed and some does not support cmake and/or some will fail at runtime because they think they are built for 64bits but emscripten is 32bits.

i did not say makepanda is the all-in-one solution, but it is actually still the best for building Panda3D on wasm once a year.

for building wasm third parties of course cmake is ok, but it’s already been done years ago so i ask you again : why do that on windows ?

( by years ago i mean GitHub - pmp-p/pydk: An universal Python/pip+Panda3d build framework for Pythons Everywhere ( and Everyone ) which uses cmake to build 3parties for android and emscripten including CPython )

compiling anywhere will give the same WebAssembly result, the point is to re use prebuilts to never bother again with cross-compilation …

I agree with you, when I installed Linux Mint, I didn’t have a single case when I didn’t build anything. But what if I’m a masochist who enjoys Windows? :grinning:

A few days ago, I decided to use the system path environment variable . In general, it was like this, I installed python and set up a variable to call python.

I open the console and enter the name python.

And the Windows store opens with offers to install python. It turned out that Microsoft added a variable that is in front of mine to call a window with a store named python. That day I was looking for a problem for a long time, it was fun.

yeah that’s a nice one and describe the overall quality you can expect from that enhanced dos-shell.

But isn’t the final point to just run emscripten and never bother what os is used for build or is currently running ?

i only see the finality in “using-the-cmake-system-for-emscripten-panda-builds”, atm people building for emscripten use Linux ( or maybe BSD for rdb though i think he got on arch linux ) and there are wasm prebuilts available to build upon something for actually using panda on the web ( like pygame-wasm is beginning to be used in game jams and itch.io )

I can garantee that jammers don’t care what os you used to build the wasm library : they just want quality tools and offer the game to maximum audience => emscripten is the solution. and the shortest path to it is via linux.

To be honest i think windows is a time waster ( productivity-wise , not as self learning) and that you could spend more enjoyable time on deploying higher level tooling for emscripten. There are also plenty to do based upon rdb’s browser/emscripten modules for interfacing with browser.

You can also help making some noise here WebAssembly - Discussions on Python.org to get better browser support available in cpython out of the box : this is not currently the case we always have to change things and maintain code !

1 Like

I will try to repeat the path I have traveled on Linux in the near future. In general, my idea is to use the build system that offers the most options, and at the moment cmake has many configurable parameters. But when I can master C++, I think I can put together a minimal build that will contain only the panda core. On Windows, everything is constantly happening, this, that.