| Python support is still new and coming online, but is entirely functional. | |
| The library's pure C (WASM friendly) API's are completely exposed to Python. Our next goal is to work on official [Wheels](https://pythonwheels.com/), once the API is settled and more examples are written. | |
| The Python integration first tries to use native .so's in the basisu_py | |
| directory. If they don't exist, it tries the slower and single threaded WASM | |
| fallbacks under basisu_py/wasm, which requires wasmtime for Python to be | |
| installed. Some tests require an input.ktx2 or test.ktx2 to be in the current | |
| directory. | |
| Building: | |
| Under the repo's root directory - build the native SO's: | |
| ``` | |
| mkdir build_python | |
| cd build_python | |
| cmake -DBASISU_BUILD_PYTHON=ON .. | |
| make | |
| ``` | |
| Build the WASM modules (see README_WASI.md file for instructions on how to | |
| install the WASI SDK, which is required): | |
| ``` | |
| mkdir build_wasm_st | |
| cd build_wasm_st | |
| cmake .. -DCMAKE_TOOLCHAIN_FILE=$WASI_SDK_PATH/share/cmake/wasi-sdk.cmake -DCMAKE_BUILD_TYPE=Release -DBASISU_WASM_THREADING=OFF | |
| make | |
| ``` | |
| --- | |
| Running Tests | |
| ------------- | |
| The tests assume the current directory is "python". Under Windows we've tested with Python v3.12.10, and under Linux v3.12.13. | |
| Higher-level tests: | |
| - python3 -m tests.test_backend_loading | |
| - python3 -m tests.test_basic_wasm_selection | |
| - python3 -m tests.test_basic_backend_selection | |
| - python3 -m tests.test_basic_decode | |
| - python3 -m tests.test_basic_transcode | |
| - python3 -m tests.test_compress_swirl | |
| - python3 -m tests.test_compress_swirl_hdr | |
| - python3 -m tests.test_transcoder_astc | |
| - python3 -m tests.test_transcoder_backend_loading | |
| - python3 -m tests.test_transcoder_end_to_end | |
| - python3 -m tests.test_transcoder_end_to_end_hdr | |
| - python3 -m tests.test_transcoder_helpers | |
| Low-level tests (used while bringing up the codec): | |
| - python3 -m lowlevel_test_native.basic_test | |
| - python3 -m lowlevel_test_native.test_transcoder_basic | |
| - python3 -m lowlevel_test_native.example_capi_python | |
| - python3 -m lowlevel_test_wasm.basic_test | |
| - python3 -m lowlevel_test_wasm.compress_test | |
| - python3 -m lowlevel_test_wasm.compress_test_float | |
| Example output: | |
| ``` | |
| richg@ryzen9:/mnt/c/dev/bu_1_22_snapshot2/basis_universal-master/python$ python3 -m tests.test_backend_loading | |
| ========== BACKEND LOADING TEST ========== | |
| Testing native backend... | |
| [Encoder] Using native backend | |
| [OK] Native backend loaded | |
| Hello from basisu_wasm_api.cpp version 200 | |
| Native get_version() ? 200 | |
| Native alloc() returned ptr = 685784256 | |
| Native free() OK | |
| [OK] Native basic operations working. | |
| Testing WASM backend... | |
| [WASM Encoder] Loaded: /mnt/c/dev/bu_1_22_snapshot2/basis_universal-master/python/basisu_py/wasm/basisu_module_st.wasm | |
| [Encoder] Using WASM backend | |
| [OK] WASM backend loaded | |
| Hello from basisu_wasm_api.cpp version 200 | |
| WASM get_version() ? 200 | |
| WASM alloc() returned ptr = 26920160 | |
| WASM free() OK | |
| [OK] WASM basic operations working. | |
| ========== DONE ========== | |
| ``` |