Building & Porting
This Python package uses the OPTIGA™ Trust Host Library for C as a shared library (.so or .dll). Precompiled libraries are available for the following platforms in src/optigatrust/lib.
OS |
Architecture |
Interface |
Library name |
---|---|---|---|
Linux |
armv7l |
I²C |
liboptigatrust-i2c-linux-armv7l.so |
Linux |
aarch64 |
I²C |
liboptigatrust-i2c-linux-aarch64.so |
Linux |
x86_64 |
I²C |
liboptigatrust-i2c-linux-x86_64.so |
Linux |
armv7l |
I²C-GPIOD |
liboptigatrust-i2c-gpiod-linux-armv7l.so |
Linux |
aarch64 |
I²C-GPIOD |
liboptigatrust-i2c-gpiod-linux-aarch64.so |
Linux |
x86_64 |
I²C-GPIOD |
liboptigatrust-i2c-gpiod-linux-x86_64.so |
Linux |
armv7l |
UART |
liboptigatrust-uart-linux-armv7l.so |
Linux |
aarch64 |
UART |
liboptigatrust-uart-linux-aarch64.so |
Linux |
x86_64 |
UART |
liboptigatrust-uart-linux-x86_64.so |
Linux |
armv7l |
libusb |
liboptigatrust-libusb-linux-armv7l.so |
Linux |
aarch64 |
libusb |
liboptigatrust-libusb-linux-aarch64.so |
Linux |
x86_64 |
libusb |
liboptigatrust-libusb-linux-x86_64.so |
Windows |
i686 |
UART |
liboptigatrust-uart-win-x86_64.dll |
Windows |
amd64 |
UART |
liboptigatrust-uart-win-x86_64.dll |
Windows |
i686 |
libusb |
liboptigatrust-libsub-win-x86_64.dll |
Windows |
amd64 |
libusb |
liboptigatrust-libsub-win-x86_64.dll |
Building the OPTIGA™ Trust Host Library for C
This chapter describes how to build the optigatrust
Python module from scratch.
Linux
If you want to port this module to other Linux platforms, perform the following steps.
Clone the git submodule for the OPTIGA™ Trust Host Library for C in extras/optiga-trust-m.:
git submodule update --init
Install CMake:
sudo apt-get install cmake
Install prerequisites:
sudo apt-get install libgpio-dev libusb-dev
Build the library
To build the library from this folder (extras/optiga-trust-m), run the following commands. You can enable/disable the build of individual interfaces via -D<variant>=ON.
cmake -B build -Di2c=ON -Di2c-gpiod=ON -Duart=ON -Dlibusb=ON cmake --build build
Sample output
cmake -B build -Di2c=ON -Di2c-gpiod=ON -Duart=ON -Dlibusb=ON
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - 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: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /python-optiga-trust/extras/optiga-trust-m/build
cmake --build build
[ 1%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal.c.o
[ 2%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_gpio.c.o
[ 3%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_i2c.c.o
[ 4%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/target/rpi3/pal_ifx_i2c_config.c.o
[ 5%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_event.c.o
[ 6%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_datastore.c.o
[ 7%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_logger.c.o
[ 8%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_lock.c.o
[ 9%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_timer.c.o
[ 10%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_memory.c.o
[ 12%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_shared_mutex.c.o
[ 13%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/comms/optiga_comms_ifx_i2c.c.o
[ 14%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c.c.o
[ 15%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_config.c.o
[ 16%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_data_link_layer.c.o
[ 17%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_physical_layer.c.o
[ 18%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_presentation_layer.c.o
[ 19%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_transport_layer.c.o
[ 20%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/src/optiga_trust_init.c.o
[ 21%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/crypt/optiga_crypt.c.o
[ 23%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/util/optiga_util.c.o
[ 24%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/cmd/optiga_cmd.c.o
[ 25%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/common/optiga_lib_common.c.o
[ 26%] Building C object CMakeFiles/optigatrust-i2c-linux-x86_64.dir/external/optiga/src/common/optiga_lib_logger.c.o
[ 27%] Linking C shared library /python-optiga-trust/src/optigatrust/lib/liboptigatrust-i2c-linux-x86_64.so
[ 27%] Built target optigatrust-i2c-linux-x86_64
[ 28%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal.c.o
[ 29%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_gpio_gpiod.c.o
[ 30%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_i2c.c.o
[ 31%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/target/gpiod/pal_ifx_i2c_config.c.o
[ 32%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_event.c.o
[ 34%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_datastore.c.o
[ 35%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_logger.c.o
[ 36%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_lock.c.o
[ 37%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_timer.c.o
[ 38%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_os_memory.c.o
[ 39%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/extras/pal/linux/pal_shared_mutex.c.o
[ 40%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/comms/optiga_comms_ifx_i2c.c.o
[ 41%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c.c.o
[ 42%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_config.c.o
[ 43%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_data_link_layer.c.o
[ 45%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_physical_layer.c.o
[ 46%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_presentation_layer.c.o
[ 47%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_transport_layer.c.o
[ 48%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/src/optiga_trust_init.c.o
[ 49%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/crypt/optiga_crypt.c.o
[ 50%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/util/optiga_util.c.o
[ 51%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/cmd/optiga_cmd.c.o
[ 52%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/common/optiga_lib_common.c.o
[ 53%] Building C object CMakeFiles/optigatrust-i2c-gpiod-linux-x86_64.dir/external/optiga/src/common/optiga_lib_logger.c.o
[ 54%] Linking C shared library /python-optiga-trust/src/optigatrust/lib/liboptigatrust-i2c-gpiod-linux-x86_64.so
[ 54%] Built target optigatrust-i2c-gpiod-linux-x86_64
[ 56%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal.c.o
[ 57%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_common.c.o
[ 58%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_gpio.c.o
[ 59%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_i2c.c.o
[ 60%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_ifx_usb_config.c.o
[ 61%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_os_event.c.o
[ 62%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_logger.c.o
[ 63%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_os_datastore.c.o
[ 64%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_os_lock.c.o
[ 65%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_os_memory.c.o
[ 67%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/extras/pal/libusb/pal_os_timer.c.o
[ 68%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/comms/optiga_comms_ifx_i2c.c.o
[ 69%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c.c.o
[ 70%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_config.c.o
[ 71%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_data_link_layer.c.o
[ 72%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_physical_layer.c.o
[ 73%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_presentation_layer.c.o
[ 74%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/comms/ifx_i2c/ifx_i2c_transport_layer.c.o
[ 75%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/src/optiga_trust_init.c.o
[ 76%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/crypt/optiga_crypt.c.o
[ 78%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/util/optiga_util.c.o
[ 79%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/cmd/optiga_cmd.c.o
[ 80%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/common/optiga_lib_common.c.o
[ 81%] Building C object CMakeFiles/optigatrust-libusb-linux-x86_64.dir/external/optiga/src/common/optiga_lib_logger.c.o
[ 82%] Linking C shared library python-optiga-trust/src/optigatrust/lib/liboptigatrust-libusb-linux-x86_64.so
[ 82%] Built target optigatrust-libusb-linux-x86_64
[ 83%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/optiga_comms_tc_uart.c.o
[ 84%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/pal_os_event.c.o
[ 85%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/pal_gpio.c.o
[ 86%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/pal_config.c.o
[ 87%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/pal_os_datastore.c.o
[ 89%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/pal_logger.c.o
[ 90%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/pal_os_lock.c.o
[ 91%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/pal_os_timer.c.o
[ 92%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/extras/pal/linux_uart/pal_os_memory.c.o
[ 93%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/src/optiga_trust_init.c.o
[ 94%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/src/crypt/optiga_crypt.c.o
[ 95%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/src/util/optiga_util.c.o
[ 96%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/src/cmd/optiga_cmd.c.o
[ 97%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/src/common/optiga_lib_common.c.o
[ 98%] Building C object CMakeFiles/optigatrust-uart-linux-x86_64.dir/external/optiga/src/common/optiga_lib_logger.c.o
[100%] Linking C shared library /python-optiga-trust/src/optigatrust/lib/liboptigatrust-uart-linux-x86_64.so
[100%] Built target optigatrust-uart-linux-x86_64
Windows
To build the OPTIGA™ Trust Host Library for C, Microsoft Visual Studio 2022 is needed. The solution for the project is located in extras/optiga-trust-m
.
Building and installing the Python module
Install the Python module optigatrust
from source code as follows.
python -m pip install -r requirements.txt
python -m pip install .