mirror of https://github.com/wolfSSL/wolfTPM.git
Add support for wolfTPM CMake to output the options.h. This enables the end application to include the build settings used. Add `WOLFTPM_DEBUG` option.
parent
160b3e04f6
commit
ce0dc15419
|
@ -24,6 +24,7 @@ cmake_minimum_required(VERSION 3.16)
|
|||
project(wolfTPM VERSION 2.4.0 LANGUAGES C)
|
||||
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||
set(WOLFTPM_DEFINITIONS)
|
||||
|
||||
set(TPM_SOURCES
|
||||
src/tpm2.c
|
||||
|
@ -69,15 +70,12 @@ else()
|
|||
if (wolfssl_FOUND)
|
||||
target_link_libraries(wolftpm PUBLIC wolfssl)
|
||||
else()
|
||||
target_compile_definitions(wolftpm PUBLIC
|
||||
"WOLFTPM2_NO_WOLFCRYPT"
|
||||
)
|
||||
list(APPEND WOLFTPM_DEFINITIONS "-DWOLFTPM2_NO_WOLFCRYPT")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# TODO
|
||||
# * Debug/logging
|
||||
# * wrapper
|
||||
# * wolfcrypt
|
||||
# * I2C
|
||||
|
@ -86,14 +84,27 @@ endif()
|
|||
# * wait state
|
||||
# * small stack
|
||||
|
||||
|
||||
# Enable Debugging
|
||||
set(WOLFTPM_DEBUG "no" CACHE STRING
|
||||
"Enables option for debug (default: disabled)")
|
||||
set_property(CACHE WOLFTPM_DEBUG
|
||||
PROPERTY STRINGS "yes;no;verbose")
|
||||
if(WOLFTPM_DEBUG)
|
||||
list(APPEND WOLFTPM_DEFINITIONS
|
||||
"-DDEBUG_WOLFTPM"
|
||||
"-DDEBUG")
|
||||
if("${WOLFTPM_DEBUG}" STREQUAL "verbose")
|
||||
list(APPEND WOLFTPM_DEFINITIONS "-DWOLFTPM_DEBUG_VERBOSE")
|
||||
endif("${WOLFTPM_DEBUG}" STREQUAL "verbose")
|
||||
endif()
|
||||
|
||||
# Device Interface
|
||||
set(WOLFTPM_INTERFACE "auto" CACHE STRING
|
||||
"Select interface to TPM")
|
||||
set_property(CACHE WOLFTPM_INTERFACE
|
||||
PROPERTY STRINGS "auto;SWTPM;WINAPI;DEVTPM")
|
||||
|
||||
set(WOLFTPM_EXAMPLES "yes" CACHE BOOL
|
||||
"Build examples")
|
||||
|
||||
# automatically set
|
||||
message("INTERFACE ${WOLFTPM_INTERFACE}")
|
||||
if("${WOLFTPM_INTERFACE}" STREQUAL "auto")
|
||||
|
@ -117,17 +128,13 @@ if(WIN32)
|
|||
endif(WIN32)
|
||||
|
||||
if("${WOLFTPM_INTERFACE}" STREQUAL "SWTPM")
|
||||
target_compile_definitions(wolftpm PUBLIC
|
||||
"WOLFTPM_SWTPM"
|
||||
)
|
||||
list(APPEND WOLFTPM_DEFINITIONS "-DWOLFTPM_SWTPM")
|
||||
|
||||
elseif("${WOLFTPM_INTERFACE}" STREQUAL "DEVTPM")
|
||||
target_compile_definitions(wolftpm PUBLIC
|
||||
"WOLFTPM_LINUX_DEV"
|
||||
)
|
||||
list(APPEND WOLFTPM_DEFINITIONS "-DWOLFTPM_LINUX_DEV")
|
||||
|
||||
elseif("${WOLFTPM_INTERFACE}" STREQUAL "WINAPI")
|
||||
target_compile_definitions(wolftpm PUBLIC
|
||||
"WOLFTPM_WINAPI"
|
||||
)
|
||||
list(APPEND WOLFTPM_DEFINITIONS "-DWOLFTPM_WINAPI")
|
||||
target_link_libraries(wolftpm PRIVATE tbs)
|
||||
else()
|
||||
get_property(INTERFACE_OPTS CACHE WOLFTPM_INTERFACE
|
||||
|
@ -136,6 +143,10 @@ else()
|
|||
" ${INTERFACE_OPTS}")
|
||||
endif("${WOLFTPM_INTERFACE}" STREQUAL "SWTPM")
|
||||
|
||||
# Examples
|
||||
set(WOLFTPM_EXAMPLES "yes" CACHE BOOL
|
||||
"Build examples")
|
||||
|
||||
target_include_directories(wolftpm
|
||||
PUBLIC
|
||||
$<INSTALL_INTERFACE:include>
|
||||
|
@ -158,8 +169,60 @@ function(add_tpm_example name src)
|
|||
target_link_libraries(${name} wolftpm tpm_test_lib)
|
||||
endfunction()
|
||||
|
||||
#TODO generate options file
|
||||
configure_file(wolftpm/options.h.in wolftpm/options.h)
|
||||
function(add_to_options_file DEFINITIONS OPTION_FILE)
|
||||
list(REMOVE_DUPLICATES DEFINITIONS)
|
||||
foreach(DEF IN LISTS DEFINITIONS)
|
||||
if(DEF MATCHES "^-D")
|
||||
if(DEF MATCHES "^-D(N)?DEBUG(=.+)?")
|
||||
message("not outputting (N)DEBUG to ${OPTION_FILE}")
|
||||
endif()
|
||||
|
||||
string(REGEX REPLACE "^-D" "" DEF_NO_PREFIX ${DEF})
|
||||
string(REGEX REPLACE "=.*$" "" DEF_NO_EQUAL_NO_VAL ${DEF_NO_PREFIX})
|
||||
string(REPLACE "=" " " DEF_NO_EQUAL ${DEF_NO_PREFIX})
|
||||
|
||||
file(APPEND ${OPTION_FILE} "#undef ${DEF_NO_EQUAL_NO_VAL}\n")
|
||||
file(APPEND ${OPTION_FILE} "#define ${DEF_NO_EQUAL}\n")
|
||||
|
||||
file(APPEND ${OPTION_FILE} "\n")
|
||||
else()
|
||||
message("option w/o begin -D is ${DEF}, not saving to ${OPTION_FILE}")
|
||||
endif()
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
add_definitions(${WOLFTPM_DEFINITIONS})
|
||||
|
||||
# generate options file
|
||||
set(OPTION_FILE "wolftpm/options.h")
|
||||
|
||||
file(REMOVE ${OPTION_FILE})
|
||||
|
||||
file(APPEND ${OPTION_FILE} "/* wolftpm options.h\n")
|
||||
file(APPEND ${OPTION_FILE} " * generated from cmake configure options\n")
|
||||
file(APPEND ${OPTION_FILE} " *\n")
|
||||
file(APPEND ${OPTION_FILE} " * Copyright (C) 2006-2022 wolfSSL Inc.\n")
|
||||
file(APPEND ${OPTION_FILE} " *\n")
|
||||
file(APPEND ${OPTION_FILE} " * This file is part of wolfSSL.\n")
|
||||
file(APPEND ${OPTION_FILE} " *\n")
|
||||
file(APPEND ${OPTION_FILE} " */\n\n")
|
||||
file(APPEND ${OPTION_FILE} "#ifndef WOLFTPM_OPTIONS_H\n")
|
||||
file(APPEND ${OPTION_FILE} "#define WOLFTPM_OPTIONS_H\n\n\n")
|
||||
file(APPEND ${OPTION_FILE} "#ifdef __cplusplus\n")
|
||||
file(APPEND ${OPTION_FILE} "extern \"C\" {\n")
|
||||
file(APPEND ${OPTION_FILE} "#endif\n\n")
|
||||
|
||||
add_to_options_file("${WOLFTPM_DEFINITIONS}" "${OPTION_FILE}")
|
||||
# CMAKE_C_FLAGS is just a string of space-separated flags to pass to the C
|
||||
# compiler. We need to replace those spaces with semicolons in order to treat it
|
||||
# as a CMake list.
|
||||
string(REPLACE " " ";" CMAKE_C_FLAGS_LIST "${CMAKE_C_FLAGS}")
|
||||
add_to_options_file("${CMAKE_C_FLAGS_LIST}" "${OPTION_FILE}")
|
||||
|
||||
file(APPEND ${OPTION_FILE} "\n#ifdef __cplusplus\n")
|
||||
file(APPEND ${OPTION_FILE} "}\n")
|
||||
file(APPEND ${OPTION_FILE} "#endif\n\n\n")
|
||||
file(APPEND ${OPTION_FILE} "#endif /* WOLFTPM_OPTIONS_H */\n\n")
|
||||
|
||||
|
||||
if (WOLFTPM_EXAMPLES)
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
if wolfTPM cmake solution is built using visual studio,
|
||||
we need to back out several(5) directories `wrapper\CSharp\bin\Debug\netcoreapp3.1`
|
||||
-->
|
||||
<PATH>%PATH%;..\..\..\..\..\out\build\x64-Debug\bin</PATH>
|
||||
<PATH>%PATH%;..\..\..\..\..\out\install\windows-default\bin;..\..\..\..\..\..\wolfssl\out\install\windows-default\bin</PATH>
|
||||
</EnvironmentVariables>
|
||||
</RunConfiguration>
|
||||
</RunSettings>
|
|
@ -14,6 +14,15 @@ wrappers. In order to run the tests you will need to update the
|
|||
placeholder to leverage a vcpkg build, but cmake can also be used to
|
||||
build wolfTPM with Visual Studios.
|
||||
|
||||
When building wolfTPM with cmake on Windows here is an example of the settings used:
|
||||
|
||||
```
|
||||
"WOLFTPM_INTERFACE": "WINAPI",
|
||||
"WOLFTPM_EXAMPLES": "no",
|
||||
"WOLFTPM_DEBUG": "yes",
|
||||
"WITH_WOLFSSL": "C:/Users/[username]/wolfssl/out/install/windows-default"
|
||||
```
|
||||
|
||||
## Linux
|
||||
|
||||
The wrapper has been tested with the swtpm TCP protocol for use with
|
||||
|
@ -41,6 +50,7 @@ some tests:
|
|||
```
|
||||
cd wrapper/CSharp
|
||||
mcs wolfTPM.cs wolfTPM-tests.cs -r:/usr/lib/cli/nunit.framework-2.6.3/nunit.framework.dll -t:library
|
||||
|
||||
# run selftest case
|
||||
LD_LIBRARY_PATH=../../src/.libs/ nunit-console wolfTPM.dll -run=tpm_csharp_test.WolfTPMTest.TrySelfTest
|
||||
#run all tests
|
||||
|
|
Loading…
Reference in New Issue