Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix compilation on embedded platforms #2676

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -223,3 +223,31 @@ $ make doxygen-doc
The generated documentation will appear here:
* doxygen-doc/html HTML format (start with file doxygen-doc/html/index.html)
* doxygen-doc/rtf/refman.rtf RTF format

# Building for embedded

The libraries SYS, ESYS, MU, RC, tctildr, tcti-spi-helper, tcti-i2c-helper
can also be build for embedded devices. The following is an example to build
for cortex-m4:
```
./bootstrap
./configure \
--disable-fapi \
--disable-esys \
--disable-policy \
--disable-tcti-cmd \
--disable-tcti-device \
--disable-tcti-libtpms \
--disable-tcti-mssim \
--disable-tcti-pcap \
--disable-tcti-spi-lt2go \
--disable-tcti-spi-ftdi \
--disable-tcti-swtpm \
--disable-doxygen-doc \
--enable-nodl \
--host=arm-none-eabi \
--prefix=/home/afuchs/tpm2-software/INSTALL.uC \
CFLAGS='-mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -mthumb' \
LDFLAGS='--specs=nosys.specs'
make
```
12 changes: 6 additions & 6 deletions Makefile-test.am
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ TESTS_CFLAGS = $(AM_CFLAGS) $(CRYPTO_CFLAGS) -I$(srcdir)/include -I$(srcdir)/src
-I$(srcdir)/test/data -Wno-unused-parameter -Wno-missing-field-initializers \
-DTOP_SOURCEDIR"=\"$(top_srcdir)\""
TESTS_LDADD = $(check_LTLIBRARIES) $(lib_LTLIBRARIES) \
$(CRYPTO_LIBS) $(libutil)
$(CRYPTO_LIBS) $(libutil) $(libutilio)

check_LTLIBRARIES =
# test harness configuration
Expand Down Expand Up @@ -483,7 +483,7 @@ CLEANFILES += \
if UNIT
if ENABLE_TCTI_DEVICE
test_unit_tcti_device_CFLAGS = $(CMOCKA_CFLAGS) $(TESTS_CFLAGS)
test_unit_tcti_device_LDADD = $(CMOCKA_LIBS) $(libtss2_mu) $(libutil)
test_unit_tcti_device_LDADD = $(CMOCKA_LIBS) $(libtss2_mu) $(libutil) $(libutilio)
test_unit_tcti_device_LDFLAGS = -Wl,--wrap=read -Wl,--wrap=write -Wl,--wrap=poll \
-Wl,--wrap=open
test_unit_tcti_device_SOURCES = test/unit/tcti-device.c \
Expand All @@ -493,7 +493,7 @@ endif

if ENABLE_TCTI_MSSIM
test_unit_tcti_mssim_CFLAGS = $(CMOCKA_CFLAGS) $(TESTS_CFLAGS)
test_unit_tcti_mssim_LDADD = $(CMOCKA_LIBS) $(libtss2_mu) $(libutil)
test_unit_tcti_mssim_LDADD = $(CMOCKA_LIBS) $(libtss2_mu) $(libutil) $(libutilio)
test_unit_tcti_mssim_LDFLAGS = -Wl,--wrap=connect -Wl,--wrap=read -Wl,--wrap=write -Wl,--wrap=poll
test_unit_tcti_mssim_SOURCES = test/unit/tcti-mssim.c \
src/tss2-tcti/tcti-common.c \
Expand All @@ -502,7 +502,7 @@ endif

if ENABLE_TCTI_SWTPM
test_unit_tcti_swtpm_CFLAGS = $(CMOCKA_CFLAGS) $(TESTS_CFLAGS)
test_unit_tcti_swtpm_LDADD = $(CMOCKA_LIBS) $(libtss2_mu) $(libutil)
test_unit_tcti_swtpm_LDADD = $(CMOCKA_LIBS) $(libtss2_mu) $(libutil) $(libutilio)
test_unit_tcti_swtpm_LDFLAGS = -Wl,--wrap=connect,--wrap=read,--wrap=select,--wrap=write
test_unit_tcti_swtpm_SOURCES = test/unit/tcti-swtpm.c \
src/tss2-tcti/tcti-common.c \
Expand All @@ -522,7 +522,7 @@ endif

if ENABLE_TCTI_PCAP
test_unit_tcti_pcap_CFLAGS = $(CMOCKA_CFLAGS) $(TESTS_CFLAGS)
test_unit_tcti_pcap_LDADD = $(CMOCKA_LIBS) $(libtss2_mu) $(libutil)
test_unit_tcti_pcap_LDADD = $(CMOCKA_LIBS) $(libtss2_mu) $(libutil) $(libutilio)
test_unit_tcti_pcap_LDFLAGS = -Wl,--wrap=getenv -Wl,--wrap=rand -Wl,--wrap=clock_gettime \
-Wl,--wrap=open -Wl,--wrap=read -Wl,--wrap=write -Wl,--wrap=close \
-Wl,--wrap=__clock_gettime64
Expand Down Expand Up @@ -652,7 +652,7 @@ test_unit_tctildr_getinfo_SOURCES = test/unit/tctildr-getinfo.c \
src/tss2-tcti/tctildr.c

test_unit_io_CFLAGS = $(CMOCKA_CFLAGS) $(TESTS_CFLAGS)
test_unit_io_LDADD = $(CMOCKA_LIBS) $(libtss2_mu) $(libutil)
test_unit_io_LDADD = $(CMOCKA_LIBS) $(libtss2_mu) $(libutil) $(libutilio)
test_unit_io_LDFLAGS = -Wl,--wrap=connect,--wrap=read,--wrap=socket,--wrap=write

test_unit_key_value_parse_CFLAGS = $(CMOCKA_CFLAGS) $(TESTS_CFLAGS)
Expand Down
14 changes: 10 additions & 4 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,12 @@ libutil = libutil.la
noinst_LTLIBRARIES += $(libutil)
libutil_la_SOURCES = $(UTIL_SRC)

if ENABLE_UTIL_IO
libutilio = libutil-io.la
noinst_LTLIBRARIES += $(libutilio)
libutil_io_la_SOURCES = $(UTIL_IO_SRC)
endif

### TCG TSS Marshaling/Unmarshaling spec library ###
libtss2_mu = src/tss2-mu/libtss2-mu.la
tss2_HEADERS += $(srcdir)/include/tss2/tss2_mu.h
Expand Down Expand Up @@ -301,7 +307,7 @@ pkgconfig_DATA += lib/tss2-tcti-device.pc
if HAVE_LD_VERSION_SCRIPT
src_tss2_tcti_libtss2_tcti_device_la_LDFLAGS = -Wl,--version-script=$(srcdir)/lib/tss2-tcti-device.map
endif # HAVE_LD_VERSION_SCRIPT
src_tss2_tcti_libtss2_tcti_device_la_LIBADD = $(libtss2_mu) $(libutil)
src_tss2_tcti_libtss2_tcti_device_la_LIBADD = $(libtss2_mu) $(libutil) $(libutilio)
src_tss2_tcti_libtss2_tcti_device_la_SOURCES = \
src/tss2-tcti/tcti-common.c \
src/tss2-tcti/tcti-device.c
Expand All @@ -318,7 +324,7 @@ pkgconfig_DATA += lib/tss2-tcti-swtpm.pc
if HAVE_LD_VERSION_SCRIPT
src_tss2_tcti_libtss2_tcti_swtpm_la_LDFLAGS = -Wl,--version-script=$(srcdir)/lib/tss2-tcti-swtpm.map
endif # HAVE_LD_VERSION_SCRIPT
src_tss2_tcti_libtss2_tcti_swtpm_la_LIBADD = $(libtss2_mu) $(libutil)
src_tss2_tcti_libtss2_tcti_swtpm_la_LIBADD = $(libtss2_mu) $(libutil) $(libutilio)
src_tss2_tcti_libtss2_tcti_swtpm_la_SOURCES = \
src/tss2-tcti/tcti-common.c \
src/tss2-tcti/tcti-swtpm.c \
Expand All @@ -336,7 +342,7 @@ pkgconfig_DATA += lib/tss2-tcti-mssim.pc
if HAVE_LD_VERSION_SCRIPT
src_tss2_tcti_libtss2_tcti_mssim_la_LDFLAGS = -Wl,--version-script=$(srcdir)/lib/tss2-tcti-mssim.map
endif # HAVE_LD_VERSION_SCRIPT
src_tss2_tcti_libtss2_tcti_mssim_la_LIBADD = $(libtss2_mu) $(libutil)
src_tss2_tcti_libtss2_tcti_mssim_la_LIBADD = $(libtss2_mu) $(libutil) $(libutilio)
src_tss2_tcti_libtss2_tcti_mssim_la_SOURCES = \
src/tss2-tcti/tcti-common.c \
src/tss2-tcti/tcti-mssim.c
Expand All @@ -355,7 +361,7 @@ pkgconfig_DATA += lib/tss2-tcti-pcap.pc
if HAVE_LD_VERSION_SCRIPT
src_tss2_tcti_libtss2_tcti_pcap_la_LDFLAGS = -Wl,--version-script=$(srcdir)/lib/tss2-tcti-pcap.map
endif # HAVE_LD_VERSION_SCRIPT
src_tss2_tcti_libtss2_tcti_pcap_la_LIBADD = $(libtss2_tctildr) $(libtss2_mu) $(libutil)
src_tss2_tcti_libtss2_tcti_pcap_la_LIBADD = $(libtss2_tctildr) $(libtss2_mu) $(libutil) $(libutilio)
src_tss2_tcti_libtss2_tcti_pcap_la_SOURCES = \
src/tss2-tcti/tcti-common.c \
src/tss2-tcti/tcti-pcap-builder.c \
Expand Down
4 changes: 4 additions & 0 deletions bootstrap
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ echo "Generating file lists: ${VARS_FILE}"
src_listvar "src/util" "*.h" "UTIL_H"
printf "UTIL_SRC = \$(UTIL_C) \$(UTIL_H)\n"

src_listvar "src/util-io" "*.c" "UTIL_IO_C"
src_listvar "src/util-io" "*.h" "UTIL_IO_H"
printf "UTIL_IO_SRC = \$(UTIL_IO_C) \$(UTIL_IO_H)\n"

src_listvar "src/tss2-sys/" "*.c" "TSS2_SYS_C"
src_listvar "src/tss2-sys/" "*.h" "TSS2_SYS_H"
printf "TSS2_SYS_SRC = \$(TSS2_SYS_H) \$(TSS2_SYS_C)\n"
Expand Down
9 changes: 8 additions & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ AS_IF([test "x$enable_fapi_async_tests" = "xyes"],
[AC_MSG_WARN("FAPI compiled with asynchronous spinning testing. NOT FOR PRODUCTION!")])

AC_ARG_ENABLE([policy],
[AS_HELP_STRING([--enable-policy],
[AS_HELP_STRING([--disable-policy],
[build the tss2-policy library (default is yes)])],
[enable_policy=$enableval],
[enable_policy=yes])
Expand Down Expand Up @@ -226,6 +226,13 @@ AC_CHECK_LIB([curl], [curl_url_strerror], [AC_DEFINE([HAVE_CURL_URL_STRERROR],[1
AS_IF([test "x$enable_fapi" = xyes -o "x$enable_policy" = xyes ],
[PKG_CHECK_MODULES([UUID], [uuid])])

AC_ARG_ENABLE([util-io],
[AS_HELP_STRING([--disable-util-io],
[don't build the util-io])],,
[enable_util_io=yes])

AM_CONDITIONAL(ENABLE_UTIL_IO, test "x$enable_util_io" = "xyes")

AC_ARG_WITH([tctidefaultmodule],
[AS_HELP_STRING([--with-tctidefaultmodule],
[The default TCTI module for ESYS. (Default: libtss2-tcti-default.so)])],
Expand Down
4 changes: 2 additions & 2 deletions doc/tcti-spi-helper.md
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ TSS2_TCTI_CONTEXT* create_tcti_ctx()
// Get requested TCTI context size
rc = Tss2_Tcti_Spi_Helper_Init(NULL, &size, &tcti_platform);
if (rc != TSS2_RC_SUCCESS) {
printf("Failed to get allocation size for device tcti context: 0x%x\n", rc);
printf("Failed to get allocation size for device tcti context: 0x%"PRIx32"\n", rc);
return NULL;
}

Expand All @@ -236,7 +236,7 @@ TSS2_TCTI_CONTEXT* create_tcti_ctx()
// Initialize TCTI context
rc = Tss2_Tcti_Spi_Helper_Init(tcti_ctx, &size, &tcti_platform);
if (rc != TSS2_RC_SUCCESS) {
printf("Failed to initialize device TCTI context: 0x%x\n", rc);
printf("Failed to initialize device TCTI context: 0x%"PRIx32"\n", rc);
free(tcti_ctx);
return NULL;
}
Expand Down
4 changes: 2 additions & 2 deletions src/tss2-esys/api/Esys_StartAuthSession.c
Original file line number Diff line number Diff line change
Expand Up @@ -436,14 +436,14 @@ Esys_StartAuthSession_Finish(
tpmKeyNode->rsrc.misc.rsrc_key_pub.publicArea.nameAlg, &
keyHash_size);
if (r != TSS2_RC_SUCCESS) {
LOG_ERROR("Error: initialize auth session (%x).", r);
LOG_ERROR("Error: initialize auth session (0x%08"PRIx32").", r);
return r;
}
}
r = iesys_crypto_hash_get_digest_size(esysContext->in.StartAuthSession.
authHash,&authHash_size);
if (r != TSS2_RC_SUCCESS) {
LOG_ERROR("Error: initialize auth session (%x).", r);
LOG_ERROR("Error: initialize auth session (0x%08"PRIx32").", r);
return r;
}
/* compute session key except for an unbound session */
Expand Down
12 changes: 6 additions & 6 deletions src/tss2-esys/esys_iutil.c
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@ iesys_handle_to_tpm_handle(ESYS_TR esys_handle, TPM2_HANDLE * tpm_handle)
*tpm_handle = TPM2_NV_AC_FIRST + (esys_handle - ESYS_TR_RH_AC_FIRST);
return TPM2_RC_SUCCESS;
}
LOG_ERROR("Error: Esys invalid ESAPI handle (%x).", esys_handle);
LOG_ERROR("Error: Esys invalid ESAPI handle (%"PRIx32").", esys_handle);
return TSS2_ESYS_RC_BAD_VALUE;
}

Expand All @@ -413,7 +413,7 @@ iesys_is_platform_handle(ESYS_TR handle) {
case TPM2_RH_PLATFORM_NV:
case TPM2_RH_ENDORSEMENT:
case TPM2_RH_NULL:
LOG_WARNING("Convert handle from TPM2_RH to ESYS_TR, got: 0x%x",
LOG_WARNING("Convert handle from TPM2_RH to ESYS_TR, got: 0x%"PRIx32,
handle);
return true;
default:
Expand Down Expand Up @@ -574,7 +574,7 @@ iesys_gen_caller_nonces(ESYS_CONTEXT * esys_context)
r = iesys_crypto_get_random2b(&esys_context->crypto_backend,
&session->rsrc.misc.rsrc_session.nonceCaller,
session->rsrc.misc.rsrc_session.nonceCaller.size);
return_if_error(r, "Error: computing caller nonce (%x).");
return_if_error(r, "Error: computing caller nonce.");
}
return TSS2_RC_SUCCESS;
}
Expand Down Expand Up @@ -612,7 +612,7 @@ iesys_update_session_flags(ESYS_CONTEXT * esys_context,
rsrc_session->sessionAttributes &= ~(TPMA_SESSION_ENCRYPT);
}

LOG_DEBUG("Session Attrs 0x%x orig 0x%x",
LOG_DEBUG("Session Attrs 0x%"PRIx32" orig 0x%"PRIx32,
rsrc_session->sessionAttributes,
rsrc_session->origSessionAttributes);
}
Expand All @@ -633,7 +633,7 @@ iesys_restore_session_flags(ESYS_CONTEXT *esys_context)
if (session == NULL)
continue;
IESYS_SESSION *rsrc_session = &session->rsrc.misc.rsrc_session;
LOG_DEBUG("Orig Session %i Attrs 0x%x, altered Attrs x%x", i,
LOG_DEBUG("Orig Session %i Attrs 0x%"PRIx8", altered Attrs x%"PRIx8, i,
rsrc_session->origSessionAttributes,
rsrc_session->sessionAttributes);

Expand Down Expand Up @@ -1166,7 +1166,7 @@ esys_GetResourceObject(ESYS_CONTEXT * esys_context,
/* All objects with a TR-handle larger than ESYS_TR_MIN_OBJECT must have
been initialized previously. Therefore the TR handle was erroneous. */
if (esys_handle >= ESYS_TR_MIN_OBJECT) {
LOG_ERROR("Error: Esys handle does not exist (%x).",
LOG_ERROR("Error: Esys handle does not exist (0x%08"PRIx32").",
TSS2_ESYS_RC_BAD_TR);
return TSS2_ESYS_RC_BAD_TR;
}
Expand Down
2 changes: 1 addition & 1 deletion src/tss2-esys/esys_tr.c
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,7 @@ Esys_TR_Close(ESYS_CONTEXT * esys_context, ESYS_TR * object)
return TSS2_RC_SUCCESS;
}
}
LOG_ERROR("Error: Esys handle does not exist (%x).", TSS2_ESYS_RC_BAD_TR);
LOG_ERROR("Error: Esys handle does not exist (0x%08"PRIx32").", TSS2_ESYS_RC_BAD_TR);
return TSS2_ESYS_RC_BAD_TR;
}

Expand Down
8 changes: 4 additions & 4 deletions src/tss2-mu/tpmu-types.c
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ TSS2_RC Tss2_MU_##type##_Marshal(type const *src, uint32_t selector, uint8_t buf
return TSS2_MU_RC_BAD_REFERENCE; \
} \
\
LOG_DEBUG("Marshalling " #type ", selector %x", selector); \
LOG_DEBUG("Marshalling " #type ", selector 0x%"PRIx32, selector); \
switch (selector) { \
case sel: \
ret = fn(op src->m, buffer, buffer_size, offset); \
Expand Down Expand Up @@ -328,7 +328,7 @@ TSS2_RC Tss2_MU_##type##_Marshal(type const *src, uint32_t selector, uint8_t buf
ret = TSS2_RC_SUCCESS; \
break; \
default: \
LOG_DEBUG("wrong selector %x return error", selector); \
LOG_DEBUG("wrong selector 0x%"PRIx32" return error", selector); \
break; \
} \
return ret; \
Expand Down Expand Up @@ -382,7 +382,7 @@ TSS2_RC Tss2_MU_##type##_Unmarshal(uint8_t const buffer[], size_t buffer_size, \
{ \
TSS2_RC ret = TSS2_MU_RC_BAD_VALUE; \
\
LOG_DEBUG("Unmarshalling " #type ", selector %x", selector); \
LOG_DEBUG("Unmarshalling " #type ", selector 0x%"PRIx32, selector); \
switch (selector) { \
case sel: \
ret = fn(buffer, buffer_size, offset, dest ? &dest->m : NULL); \
Expand Down Expand Up @@ -425,7 +425,7 @@ TSS2_RC Tss2_MU_##type##_Unmarshal(uint8_t const buffer[], size_t buffer_size, \
ret = TSS2_RC_SUCCESS; \
break; \
default: \
LOG_DEBUG("wrong selector %x return error", selector); \
LOG_DEBUG("wrong selector 0x%"PRIx32" return error", selector); \
break; \
} \
return ret; \
Expand Down
2 changes: 1 addition & 1 deletion src/tss2-policy/tss2_policy.c
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ Tss2_PolicyExecute(
through all execution stages / states of this invocation. */
} while (is_try_again(r));

LOG_TRACE("finished, returning: 0x%x", r);
LOG_TRACE("finished, returning: 0x%"PRIx32, r);

return r;
}
Expand Down
11 changes: 6 additions & 5 deletions src/tss2-rc/tss2_rc.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <inttypes.h>

#include "tss2_rc.h"
#include "tss2_sys.h"
Expand Down Expand Up @@ -641,7 +642,7 @@ tpm2_err_handler_fmt1(TPM2_RC rc)
if (m) {
catbuf(buf, "%s", m);
} else {
catbuf(buf, "unknown error num: 0x%X", errnum);
catbuf(buf, "unknown error num: 0x%"PRIX8, errnum);
}

return buf;
Expand All @@ -663,7 +664,7 @@ tpm2_err_handler_fmt0(TSS2_RC rc)
if (tpm2_rc_tpm_fmt0_V_get(rc)) {
/* TCG specific error code */
if (tpm2_rc_fmt0_T_get(rc)) {
catbuf(buf, "Vendor specific error: 0x%X", errnum);
catbuf(buf, "Vendor specific error: 0x%"PRIX8, errnum);
return buf;
}

Expand Down Expand Up @@ -884,7 +885,7 @@ unknown_layer_handler(TSS2_RC rc)
static __thread char buf[32];

clearbuf(buf);
catbuf(buf, "0x%X", rc);
catbuf(buf, "0x%"PRIX32, rc);

return buf;
}
Expand Down Expand Up @@ -992,7 +993,7 @@ Tss2_RC_Decode(TSS2_RC rc)
if (e) {
catbuf(buf, "%s", e);
} else {
catbuf(buf, "0x%X", err_bits);
catbuf(buf, "0x%"PRIX16, err_bits);
}
} else {
/*
Expand Down Expand Up @@ -1076,7 +1077,7 @@ Tss2_RC_DecodeInfoError(TSS2_RC_INFO *info)
if (m) {
catbuf(buf, "%s", m);
} else {
catbuf(buf, "0x%X", info->error);
catbuf(buf, "0x%"PRIX32, info->error);
}

return buf;
Expand Down
2 changes: 1 addition & 1 deletion src/tss2-sys/api/Tss2_Sys_Execute.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ TSS2_RC Tss2_Sys_ExecuteFinish(TSS2_SYS_CONTEXT *sysContext, int32_t timeout)
}
if (response_size > ctx->maxCmdSize) {
ctx->previousStage = CMD_STAGE_PREPARE;
LOG_ERROR("Response size to big: %zu > %u", response_size, ctx->maxCmdSize);
LOG_ERROR("Response size to big: %zu > %"PRIu32, response_size, ctx->maxCmdSize);
return TSS2_SYS_RC_INSUFFICIENT_CONTEXT;
}

Expand Down
2 changes: 1 addition & 1 deletion src/tss2-tcti/tcti-cmd.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#include <limits.h>

#include "tcti-common.h"
#include "util/io.h"
#include "util-io/io.h"

#define TCTI_CMD_NAME "tcti-cmd"
#define TCTI_CMD_DESCRIPTION "TCTI module for using a process to send and receive data."
Expand Down
2 changes: 1 addition & 1 deletion src/tss2-tcti/tcti-device.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
#include "tss2_mu.h"
#include "tcti-common.h"
#include "tcti-device.h"
#include "util/io.h"
#include "util-io/io.h"
#include "util/aux_util.h"
#define LOGMODULE tcti
#include "util/log.h"
Expand Down
Loading
Loading