icon: tools order: 19
Quick start covers the default build. This page explains the options that change what the interpreter can do.
Pass options when configuring the build:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DPK_BUILD_STATIC_MAIN=ON -DPK_BUILD_MODULE_LZ4=ON
cmake --build build --config Release
When embedding with add_subdirectory(pocketpy), set cache options before
adding the subdirectory, or pass them on the CMake command line.
| Option | Default | Effect |
|---|---|---|
PK_BUILD_SHARED_LIB |
OFF |
Build only the shared library. |
PK_BUILD_STATIC_LIB |
OFF at the repository root; ON as a dependency |
Build only the static library. |
PK_BUILD_STATIC_MAIN |
OFF |
Link the standalone executable statically when neither library-only option is selected. |
PK_BUILD_WITH_UNITY |
ON |
Combine interpreter sources into a unity build. |
PK_ENABLE_OS |
ON |
Enable host OS facilities, including file access and the default debugger transport. |
PK_ENABLE_THREADS |
ON |
Enable thread support and pkpy.ComputeThread. |
PK_ENABLE_DLL |
ON |
Enable native dynamic-module loading on supported desktop platforms. |
PK_ENABLE_DETERMINISM |
ON |
Use the project's deterministic math implementation. |
PK_ENABLE_WATCHDOG |
OFF |
Enable execution timeout checks. |
PK_ENABLE_CUSTOM_SNAME |
OFF |
Omit the built-in name implementation; an advanced host integration must supply its own. |
PK_ENABLE_MIMALLOC |
OFF |
Fetch and use mimalloc instead of the default allocator. |
Select at most one library-only option. With both off, the root build creates
the standalone main executable and a library.
The following modules are optional and default to OFF:
| Option | Module |
|---|---|
PK_BUILD_MODULE_LZ4 |
lz4 |
PK_BUILD_MODULE_CUTE_PNG |
cute_png |
PK_BUILD_MODULE_MSGPACK |
msgpack |
PK_BUILD_MODULE_PERIPHERY |
periphery, for Linux hardware I/O |
Initialize the required Git submodules before enabling a module that uses them:
git submodule update --init --recursive
The exact options are defined in CMakeOptions.txt.
Compile the interpreter as C11, even when your application uses C++. Use an
optimized build with NDEBUG for deployment. For MSVC, include /utf-8 and
/experimental:c11atomics.
The defaults in
config.h
differ from CMake: PK_ENABLE_THREADS, PK_ENABLE_DLL, and
PK_ENABLE_DETERMINISM default to 0 unless explicitly enabled.
Do not assume a manually compiled interpreter has the same features as a CMake
build.
Match the platform libraries and feature definitions in
CMakeLists.txt.
For example, Windows uses ws2_32; enabled thread support needs the platform
thread library, and supported Unix dynamic loading uses dl.
Optional modules also need their native sources and libraries; defining a
module macro alone is insufficient.
import pkpy
print(pkpy.configmacros)
print(pkpy.currentvm()) # 0 in the default VM
This is useful when a script runs on the desktop but a module or feature is unavailable in an embedded or browser build. Disabling OS access reduces the exposed facilities; it does not turn the interpreter into a security sandbox.