From 1b3e5944491c315ca99b832bc3afdb6a19d81430 Mon Sep 17 00:00:00 2001 From: Lans Zhang Date: Thu, 22 Jun 2017 15:22:01 +0800 Subject: meta-secure-core: initial commit Signed-off-by: Lans Zhang --- meta-tpm2/README.md | 21 ++ meta-tpm2/conf/layer.conf | 12 + .../packagegroups/packagegroup-tpm2-initramfs.bb | 1 + .../packagegroups/packagegroup-tpm2.bb | 11 + .../packagegroups/packagegroup-tpm2.inc | 5 + .../linux/linux-yocto-rt_4.%.bbappend | 1 + .../recipes-kernel/linux/linux-yocto-tpm2.inc | 6 + .../recipes-kernel/linux/linux-yocto/tpm2.cfg | 16 + .../recipes-kernel/linux/linux-yocto/tpm2.scc | 4 + .../recipes-kernel/linux/linux-yocto_4.%.bbappend | 1 + ...Fix-build-failure-when-searching-tabrmd.h.patch | 293 ++++++++++++++++++ .../tpm2-abrmd/files/tpm2-abrmd-init.sh | 65 ++++ .../tpm2-abrmd/files/tpm2-abrmd.default | 1 + meta-tpm2/recipes-tpm/tpm2-abrmd/tpm2-abrmd_git.bb | 61 ++++ ...tools-use-dynamic-linkage-with-tpm2-abrmd.patch | 80 +++++ .../0002-Fix-build-failure-with-glib-2.0.patch | 39 +++ .../tpm2.0-tools/ax_check_compile_flag.m4 | 74 +++++ .../tpm2.0-tools/ax_check_link_flag.m4 | 74 +++++ .../tpm2.0-tools/ax_check_preproc_flag.m4 | 74 +++++ .../recipes-tpm/tpm2.0-tools/tpm2.0-tools_git.bb | 48 +++ .../tpm2.0-tss/0001-update-bootstrap.patch | 24 ++ .../tpm2.0-tss/tpm2.0-tss/ax_check_compile_flag.m4 | 74 +++++ .../tpm2.0-tss/tpm2.0-tss/ax_check_link_flag.m4 | 74 +++++ .../tpm2.0-tss/tpm2.0-tss/ax_check_preproc_flag.m4 | 74 +++++ .../tpm2.0-tss/tpm2.0-tss/ax_pthread.m4 | 332 +++++++++++++++++++++ .../tpm2.0-tss/no-cmocka-configure-ac.diff | 10 + meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss_git.bb | 109 +++++++ 27 files changed, 1584 insertions(+) create mode 100644 meta-tpm2/README.md create mode 100644 meta-tpm2/conf/layer.conf create mode 100644 meta-tpm2/recipes-base/packagegroups/packagegroup-tpm2-initramfs.bb create mode 100644 meta-tpm2/recipes-base/packagegroups/packagegroup-tpm2.bb create mode 100644 meta-tpm2/recipes-base/packagegroups/packagegroup-tpm2.inc create mode 100644 meta-tpm2/recipes-kernel/linux/linux-yocto-rt_4.%.bbappend create mode 100644 meta-tpm2/recipes-kernel/linux/linux-yocto-tpm2.inc create mode 100644 meta-tpm2/recipes-kernel/linux/linux-yocto/tpm2.cfg create mode 100644 meta-tpm2/recipes-kernel/linux/linux-yocto/tpm2.scc create mode 100644 meta-tpm2/recipes-kernel/linux/linux-yocto_4.%.bbappend create mode 100644 meta-tpm2/recipes-tpm/tpm2-abrmd/files/Fix-build-failure-when-searching-tabrmd.h.patch create mode 100644 meta-tpm2/recipes-tpm/tpm2-abrmd/files/tpm2-abrmd-init.sh create mode 100644 meta-tpm2/recipes-tpm/tpm2-abrmd/files/tpm2-abrmd.default create mode 100644 meta-tpm2/recipes-tpm/tpm2-abrmd/tpm2-abrmd_git.bb create mode 100644 meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/0001-tpm2-tools-use-dynamic-linkage-with-tpm2-abrmd.patch create mode 100644 meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/0002-Fix-build-failure-with-glib-2.0.patch create mode 100644 meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/ax_check_compile_flag.m4 create mode 100644 meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/ax_check_link_flag.m4 create mode 100644 meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/ax_check_preproc_flag.m4 create mode 100644 meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools_git.bb create mode 100644 meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/0001-update-bootstrap.patch create mode 100644 meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/ax_check_compile_flag.m4 create mode 100644 meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/ax_check_link_flag.m4 create mode 100644 meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/ax_check_preproc_flag.m4 create mode 100644 meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/ax_pthread.m4 create mode 100644 meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/no-cmocka-configure-ac.diff create mode 100644 meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss_git.bb (limited to 'meta-tpm2') diff --git a/meta-tpm2/README.md b/meta-tpm2/README.md new file mode 100644 index 0000000..fbad353 --- /dev/null +++ b/meta-tpm2/README.md @@ -0,0 +1,21 @@ +### TPM 2.0 +This feature enables Trusted Platform Module (TPM 2.0) support, including +kernel option changes to enable tpm drivers, and picking up TPM 2.0 packages. + +Trusted Platform Module (TPM 2.0) is a microcontroller that stores keys, +passwords, and digital certificates. A TPM 2.0 offers the capabilities as +part of the overall platform security requirements. + +### Clear TPM +For TPM 2.0, the following typical steps can be performed to get the TPM +ready for use: + +- Clear and enable TPM from the BIOS or set the security jumper on the board. +- Take TPM ownership, setting Owner/Endorsement/Lockout passwords if + necessary. These passwords are used for the authorization to certain + TPM 2.0 commands. +``` + # tpm2_takeownership -o -e -l +``` +Then, you can use the TPM for a specific need, such as key generation, +sealing encrypted data, etc. diff --git a/meta-tpm2/conf/layer.conf b/meta-tpm2/conf/layer.conf new file mode 100644 index 0000000..0b8656e --- /dev/null +++ b/meta-tpm2/conf/layer.conf @@ -0,0 +1,12 @@ +# We have a conf and classes directory, add to BBPATH +BBPATH .= ":${LAYERDIR}" + +# We have recipes-* directories, add to BBFILES +BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ + ${LAYERDIR}/recipes-*/*/*.bbappend" + +BBFILE_COLLECTIONS += "tpm2" +BBFILE_PATTERN_tpm2 = "^${LAYERDIR}/" +BBFILE_PRIORITY_tpm2 = "10" + +LAYERDEPENDS_tpm2 = "core" diff --git a/meta-tpm2/recipes-base/packagegroups/packagegroup-tpm2-initramfs.bb b/meta-tpm2/recipes-base/packagegroups/packagegroup-tpm2-initramfs.bb new file mode 100644 index 0000000..87c811a --- /dev/null +++ b/meta-tpm2/recipes-base/packagegroups/packagegroup-tpm2-initramfs.bb @@ -0,0 +1 @@ +include packagegroup-tpm2.inc diff --git a/meta-tpm2/recipes-base/packagegroups/packagegroup-tpm2.bb b/meta-tpm2/recipes-base/packagegroups/packagegroup-tpm2.bb new file mode 100644 index 0000000..b0dc843 --- /dev/null +++ b/meta-tpm2/recipes-base/packagegroups/packagegroup-tpm2.bb @@ -0,0 +1,11 @@ +include packagegroup-tpm2.inc + +RDEPENDS_${PN} += "\ + tpm2-abrmd \ + tpm2.0-tools \ + rng-tools \ +" + +RRECOMMENDS_${PN} += "\ + kernel-module-tpm-rng \ +" diff --git a/meta-tpm2/recipes-base/packagegroups/packagegroup-tpm2.inc b/meta-tpm2/recipes-base/packagegroups/packagegroup-tpm2.inc new file mode 100644 index 0000000..9ffca61 --- /dev/null +++ b/meta-tpm2/recipes-base/packagegroups/packagegroup-tpm2.inc @@ -0,0 +1,5 @@ +DESCRIPTION = "Packagegroup for TPM2 TCG TSS userspace and utilities." +LICENSE = "MIT" +PR = "r0" + +inherit packagegroup diff --git a/meta-tpm2/recipes-kernel/linux/linux-yocto-rt_4.%.bbappend b/meta-tpm2/recipes-kernel/linux/linux-yocto-rt_4.%.bbappend new file mode 100644 index 0000000..edaf7f3 --- /dev/null +++ b/meta-tpm2/recipes-kernel/linux/linux-yocto-rt_4.%.bbappend @@ -0,0 +1 @@ +include linux-yocto-tpm2.inc diff --git a/meta-tpm2/recipes-kernel/linux/linux-yocto-tpm2.inc b/meta-tpm2/recipes-kernel/linux/linux-yocto-tpm2.inc new file mode 100644 index 0000000..32456ca --- /dev/null +++ b/meta-tpm2/recipes-kernel/linux/linux-yocto-tpm2.inc @@ -0,0 +1,6 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/linux-yocto:" + +SRC_URI += " \ + ${@bb.utils.contains('DISTRO_FEATURES', 'tpm2', \ + 'file://tpm2.scc file://tpm2.cfg', '', d)} \ +" diff --git a/meta-tpm2/recipes-kernel/linux/linux-yocto/tpm2.cfg b/meta-tpm2/recipes-kernel/linux/linux-yocto/tpm2.cfg new file mode 100644 index 0000000..d175fb5 --- /dev/null +++ b/meta-tpm2/recipes-kernel/linux/linux-yocto/tpm2.cfg @@ -0,0 +1,16 @@ +.......................................................................... +. WARNING +. +. This file is a kernel configuration fragment, and not a full kernel +. configuration file. The final kernel configuration is made up of +. an assembly of processed fragments, each of which is designed to +. capture a specific part of the final configuration (e.g. platform +. configuration, feature configuration, and board specific hardware +. configuration). For more information on kernel configuration, please +. consult the product documentation. +. +.......................................................................... + +CONFIG_TCG_TPM=y +CONFIG_TCG_TIS=y +CONFIG_TCG_CRB=y diff --git a/meta-tpm2/recipes-kernel/linux/linux-yocto/tpm2.scc b/meta-tpm2/recipes-kernel/linux/linux-yocto/tpm2.scc new file mode 100644 index 0000000..b369daa --- /dev/null +++ b/meta-tpm2/recipes-kernel/linux/linux-yocto/tpm2.scc @@ -0,0 +1,4 @@ +define KFEATURE_DESCRIPTION "TPM 2.x enablement" + +kconf hardware tpm2.cfg + diff --git a/meta-tpm2/recipes-kernel/linux/linux-yocto_4.%.bbappend b/meta-tpm2/recipes-kernel/linux/linux-yocto_4.%.bbappend new file mode 100644 index 0000000..edaf7f3 --- /dev/null +++ b/meta-tpm2/recipes-kernel/linux/linux-yocto_4.%.bbappend @@ -0,0 +1 @@ +include linux-yocto-tpm2.inc diff --git a/meta-tpm2/recipes-tpm/tpm2-abrmd/files/Fix-build-failure-when-searching-tabrmd.h.patch b/meta-tpm2/recipes-tpm/tpm2-abrmd/files/Fix-build-failure-when-searching-tabrmd.h.patch new file mode 100644 index 0000000..24dc022 --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2-abrmd/files/Fix-build-failure-when-searching-tabrmd.h.patch @@ -0,0 +1,293 @@ +From 034e9cd7e539e1feda2fbe9a3646e28156856594 Mon Sep 17 00:00:00 2001 +From: Lans Zhang +Date: Thu, 15 Jun 2017 10:21:02 +0800 +Subject: [PATCH] Fix build failure when searching tabrmd.h + +Signed-off-by: Lans Zhang +--- + Makefile.am | 2 +- + src/access-broker.c | 2 +- + src/include/tabrmd.h | 56 --------------------------- + src/include/tcti-tabrmd.h | 2 +- + src/include/tss2/tabrmd.h | 56 +++++++++++++++++++++++++++ + src/resource-manager.c | 2 +- + src/tabrmd-error.c | 2 +- + src/tabrmd.c | 2 +- + src/tcti-tabrmd.c | 2 +- + test/integration/hash-sequence.int.c | 2 +- + test/integration/password-authorization.int.c | 2 +- + test/integration/tcti-cancel.int.c | 2 +- + test/integration/tcti-set-locality.int.c | 2 +- + 13 files changed, 67 insertions(+), 67 deletions(-) + delete mode 100644 src/include/tabrmd.h + create mode 100644 src/include/tss2/tabrmd.h + +diff --git a/Makefile.am b/Makefile.am +index 5f88429..4733d4f 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -90,7 +90,7 @@ install-data-hook: + $(DESTDIR)$(mandir)/man3/tss2_tcti_tabrmd_init_full.3 + + tpm2_abrmddir = $(includedir)/tss2 +-tpm2_abrmd_HEADERS = $(srcdir)/src/include/tabrmd.h ++tpm2_abrmd_HEADERS = $(srcdir)/src/include/tss2/tabrmd.h + libtcti_tabrmddir = $(includedir)/tcti + libtcti_tabrmd_HEADERS = $(srcdir)/src/include/tcti-tabrmd.h + +diff --git a/src/access-broker.c b/src/access-broker.c +index d21113d..f357101 100644 +--- a/src/access-broker.c ++++ b/src/access-broker.c +@@ -28,7 +28,7 @@ + #include + #include + +-#include "tabrmd.h" ++#include + + #include "access-broker.h" + #include "tcti.h" +diff --git a/src/include/tabrmd.h b/src/include/tabrmd.h +deleted file mode 100644 +index 42d41a2..0000000 +--- a/src/include/tabrmd.h ++++ /dev/null +@@ -1,56 +0,0 @@ +-/* +- * Copyright (c) 2017, Intel Corporation +- * All rights reserved. +- * +- * Redistribution and use in source and binary forms, with or without +- * modification, are permitted provided that the following conditions are met: +- * +- * 1. Redistributions of source code must retain the above copyright notice, +- * this list of conditions and the following disclaimer. +- * +- * 2. Redistributions in binary form must reproduce the above copyright notice, +- * this list of conditions and the following disclaimer in the documentation +- * and/or other materials provided with the distribution. +- * +- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +- * THE POSSIBILITY OF SUCH DAMAGE. +- */ +-#ifndef TSS2_TABD_H +-#define TSS2_TABD_H +- +-#include +-#include +- +-#define TABRMD_DBUS_INTERFACE "com.intel.tss2.TctiTabrmd" +-#define TABRMD_DBUS_NAME_DEFAULT "com.intel.tss2.Tabrmd" +-#define TABRMD_DBUS_PATH "/com/intel/tss2/Tabrmd/Tcti" +-#define TABRMD_DBUS_METHOD_CREATE_CONNECTION "CreateConnection" +-#define TABRMD_DBUS_METHOD_CANCEL "Cancel" +-#define TABRMD_DBUS_TYPE_DEFAULT G_BUS_TYPE_SYSTEM +- +-/* implementation specific RCs */ +-#define TSS2_RESMGR_RC_INTERNAL_ERROR (TSS2_RC)(TSS2_RESMGR_ERROR_LEVEL | (1 << TSS2_LEVEL_IMPLEMENTATION_SPECIFIC_SHIFT)) +-#define TSS2_RESMGR_RC_SAPI_INIT (TSS2_RC)(TSS2_RESMGR_ERROR_LEVEL | (2 << TSS2_LEVEL_IMPLEMENTATION_SPECIFIC_SHIFT)) +-#define TSS2_RESMGR_RC_OUT_OF_MEMORY (TSS2_RC)(TSS2_RESMGR_ERROR_LEVEL | (3 << TSS2_LEVEL_IMPLEMENTATION_SPECIFIC_SHIFT)) +-/* RCs in the RESMGR layer */ +-#define TSS2_RESMGR_RC_BAD_VALUE (TSS2_RC)(TSS2_RESMGR_ERROR_LEVEL | TSS2_BASE_RC_BAD_VALUE) +-#define TSS2_RESMGR_RC_NOT_PERMITTED (TSS2_RC)(TSS2_RESMGR_ERROR_LEVEL | TSS2_BASE_RC_NOT_PERMITTED) +-#define TSS2_RESMGR_RC_NOT_IMPLEMENTED (TSS2_RC)(TSS2_RESMGR_ERROR_LEVEL | TSS2_BASE_RC_NOT_IMPLEMENTED) +-#define TSS2_RESMGR_RC_GENERAL_FAILURE (TSS2_RC)(TSS2_RESMGR_ERROR_LEVEL | TSS2_BASE_RC_GENERAL_FAILURE) +-#define TSS2_RESMGR_RC_OBJECT_MEMORY (TSS2_RC)(TSS2_RESMGR_ERROR_LEVEL | TPM_RC_OBJECT_MEMORY) +- +-#define TABRMD_ERROR tabrmd_error_quark () +-GQuark tabrmd_error_quark (void); +- +-TSS2_RC tss2_tcti_tabrmd_dump_trans_state (TSS2_TCTI_CONTEXT *tcti_context); +- +-#endif /* TSS2_TABD_H */ +diff --git a/src/include/tcti-tabrmd.h b/src/include/tcti-tabrmd.h +index c145eb5..e8e0c7f 100644 +--- a/src/include/tcti-tabrmd.h ++++ b/src/include/tcti-tabrmd.h +@@ -35,7 +35,7 @@ extern "C" { + #include + #include + +-#include "tabrmd.h" ++#include + + #define TCTI_TABRMD_DBUS_TYPE_DEFAULT TABRMD_DBUS_TYPE_DEFAULT + #define TCTI_TABRMD_DBUS_NAME_DEFAULT TABRMD_DBUS_NAME_DEFAULT +diff --git a/src/include/tss2/tabrmd.h b/src/include/tss2/tabrmd.h +new file mode 100644 +index 0000000..42d41a2 +--- /dev/null ++++ b/src/include/tss2/tabrmd.h +@@ -0,0 +1,56 @@ ++/* ++ * Copyright (c) 2017, Intel Corporation ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without ++ * modification, are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, ++ * this list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, ++ * this list of conditions and the following disclaimer in the documentation ++ * and/or other materials provided with the distribution. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ++ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN ++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF ++ * THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++#ifndef TSS2_TABD_H ++#define TSS2_TABD_H ++ ++#include ++#include ++ ++#define TABRMD_DBUS_INTERFACE "com.intel.tss2.TctiTabrmd" ++#define TABRMD_DBUS_NAME_DEFAULT "com.intel.tss2.Tabrmd" ++#define TABRMD_DBUS_PATH "/com/intel/tss2/Tabrmd/Tcti" ++#define TABRMD_DBUS_METHOD_CREATE_CONNECTION "CreateConnection" ++#define TABRMD_DBUS_METHOD_CANCEL "Cancel" ++#define TABRMD_DBUS_TYPE_DEFAULT G_BUS_TYPE_SYSTEM ++ ++/* implementation specific RCs */ ++#define TSS2_RESMGR_RC_INTERNAL_ERROR (TSS2_RC)(TSS2_RESMGR_ERROR_LEVEL | (1 << TSS2_LEVEL_IMPLEMENTATION_SPECIFIC_SHIFT)) ++#define TSS2_RESMGR_RC_SAPI_INIT (TSS2_RC)(TSS2_RESMGR_ERROR_LEVEL | (2 << TSS2_LEVEL_IMPLEMENTATION_SPECIFIC_SHIFT)) ++#define TSS2_RESMGR_RC_OUT_OF_MEMORY (TSS2_RC)(TSS2_RESMGR_ERROR_LEVEL | (3 << TSS2_LEVEL_IMPLEMENTATION_SPECIFIC_SHIFT)) ++/* RCs in the RESMGR layer */ ++#define TSS2_RESMGR_RC_BAD_VALUE (TSS2_RC)(TSS2_RESMGR_ERROR_LEVEL | TSS2_BASE_RC_BAD_VALUE) ++#define TSS2_RESMGR_RC_NOT_PERMITTED (TSS2_RC)(TSS2_RESMGR_ERROR_LEVEL | TSS2_BASE_RC_NOT_PERMITTED) ++#define TSS2_RESMGR_RC_NOT_IMPLEMENTED (TSS2_RC)(TSS2_RESMGR_ERROR_LEVEL | TSS2_BASE_RC_NOT_IMPLEMENTED) ++#define TSS2_RESMGR_RC_GENERAL_FAILURE (TSS2_RC)(TSS2_RESMGR_ERROR_LEVEL | TSS2_BASE_RC_GENERAL_FAILURE) ++#define TSS2_RESMGR_RC_OBJECT_MEMORY (TSS2_RC)(TSS2_RESMGR_ERROR_LEVEL | TPM_RC_OBJECT_MEMORY) ++ ++#define TABRMD_ERROR tabrmd_error_quark () ++GQuark tabrmd_error_quark (void); ++ ++TSS2_RC tss2_tcti_tabrmd_dump_trans_state (TSS2_TCTI_CONTEXT *tcti_context); ++ ++#endif /* TSS2_TABD_H */ +diff --git a/src/resource-manager.c b/src/resource-manager.c +index 6efdd82..8ad4e46 100644 +--- a/src/resource-manager.c ++++ b/src/resource-manager.c +@@ -35,7 +35,7 @@ + #include "resource-manager.h" + #include "sink-interface.h" + #include "source-interface.h" +-#include "tabrmd.h" ++#include + #include "tpm2-header.h" + #include "tpm2-command.h" + #include "tpm2-response.h" +diff --git a/src/tabrmd-error.c b/src/tabrmd-error.c +index 5ff5a7d..41a561d 100644 +--- a/src/tabrmd-error.c ++++ b/src/tabrmd-error.c +@@ -1,6 +1,6 @@ + #include + #include +-#include "tabrmd.h" ++#include + + static const GDBusErrorEntry tabrmd_error_entries[] = { + { +diff --git a/src/tabrmd.c b/src/tabrmd.c +index 2275aa5..7156cdf 100644 +--- a/src/tabrmd.c ++++ b/src/tabrmd.c +@@ -34,7 +34,7 @@ + #include + + #include +-#include "tabrmd.h" ++#include + #include "access-broker.h" + #include "connection.h" + #include "connection-manager.h" +diff --git a/src/tcti-tabrmd.c b/src/tcti-tabrmd.c +index d6d78ea..52418de 100644 +--- a/src/tcti-tabrmd.c ++++ b/src/tcti-tabrmd.c +@@ -35,7 +35,7 @@ + + #include + +-#include "tabrmd.h" ++#include + #include "tcti-tabrmd.h" + #include "tcti-tabrmd-priv.h" + #include "tpm2-header.h" +diff --git a/test/integration/hash-sequence.int.c b/test/integration/hash-sequence.int.c +index cf8331d..fd489f9 100644 +--- a/test/integration/hash-sequence.int.c ++++ b/test/integration/hash-sequence.int.c +@@ -34,7 +34,7 @@ + + #include + +-#include "tabrmd.h" ++#include + #include "tcti-tabrmd.h" + #include "common.h" + +diff --git a/test/integration/password-authorization.int.c b/test/integration/password-authorization.int.c +index e6298ef..5416eaa 100644 +--- a/test/integration/password-authorization.int.c ++++ b/test/integration/password-authorization.int.c +@@ -32,7 +32,7 @@ + #include + #include + +-#include "tabrmd.h" ++#include + #include "tcti-tabrmd.h" + #include "common.h" + +diff --git a/test/integration/tcti-cancel.int.c b/test/integration/tcti-cancel.int.c +index 31f0f9a..c2a808b 100644 +--- a/test/integration/tcti-cancel.int.c ++++ b/test/integration/tcti-cancel.int.c +@@ -27,7 +27,7 @@ + #include + #include + +-#include "tabrmd.h" ++#include + #include "tcti-tabrmd.h" + #include "common.h" + +diff --git a/test/integration/tcti-set-locality.int.c b/test/integration/tcti-set-locality.int.c +index 6b7509b..0a54b6a 100644 +--- a/test/integration/tcti-set-locality.int.c ++++ b/test/integration/tcti-set-locality.int.c +@@ -27,7 +27,7 @@ + #include + #include + +-#include "tabrmd.h" ++#include + #include "tcti-tabrmd.h" + #include "common.h" + +-- +2.7.5 + diff --git a/meta-tpm2/recipes-tpm/tpm2-abrmd/files/tpm2-abrmd-init.sh b/meta-tpm2/recipes-tpm/tpm2-abrmd/files/tpm2-abrmd-init.sh new file mode 100644 index 0000000..c8dfb7d --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2-abrmd/files/tpm2-abrmd-init.sh @@ -0,0 +1,65 @@ +#!/bin/sh + +### BEGIN INIT INFO +# Provides: tpm2-abrmd +# Required-Start: $local_fs $remote_fs $network +# Required-Stop: $local_fs $remote_fs $network +# Should-Start: +# Should-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: starts tpm2-abrmd +# Description: tpm2-abrmd implements the TCG resource manager +### END INIT INFO + +PATH=/sbin:/bin:/usr/sbin:/usr/bin +DAEMON=/usr/sbin/tpm2-abrmd +NAME=tpm2-abrmd +DESC="TCG TSS2 Access Broker and Resource Management daemon" +USER="tss" + +test -x "${DAEMON}" || exit 0 + +# Read configuration variable file if it is present +[ -r /etc/default/$NAME ] && . /etc/default/$NAME + +case "${1}" in + start) + echo -n "Starting $DESC: " + + if [ ! -e /dev/tpm* ] + then + echo "device driver not loaded, skipping." + exit 0 + fi + + start-stop-daemon --start --quiet --oknodo --background --pidfile /var/run/${NAME}.pid --user ${USER} --chuid ${USER} --exec ${DAEMON} -- ${DAEMON_OPTS} + RETVAL="$?" + echo "$NAME." + [ "$RETVAL" = 0 ] && pidof $DAEMON > /var/run/${NAME}.pid + exit $RETVAL + ;; + + stop) + echo -n "Stopping $DESC: " + + start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/${NAME}.pid --user ${USER} --exec ${DAEMON} + RETVAL="$?" + echo "$NAME." + rm -f /var/run/${NAME}.pid + exit $RETVAL + ;; + + restart|force-reload) + "${0}" stop + sleep 1 + "${0}" start + exit $? + ;; + *) + echo "Usage: ${NAME} {start|stop|restart|force-reload|status}" >&2 + exit 3 + ;; +esac + +exit 0 diff --git a/meta-tpm2/recipes-tpm/tpm2-abrmd/files/tpm2-abrmd.default b/meta-tpm2/recipes-tpm/tpm2-abrmd/files/tpm2-abrmd.default new file mode 100644 index 0000000..987978a --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2-abrmd/files/tpm2-abrmd.default @@ -0,0 +1 @@ +DAEMON_OPTS="--tcti=device --logger=syslog --max-connections=20 --max-transient-objects=20 --fail-on-loaded-trans" diff --git a/meta-tpm2/recipes-tpm/tpm2-abrmd/tpm2-abrmd_git.bb b/meta-tpm2/recipes-tpm/tpm2-abrmd/tpm2-abrmd_git.bb new file mode 100644 index 0000000..17dc449 --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2-abrmd/tpm2-abrmd_git.bb @@ -0,0 +1,61 @@ +SUMMARY = "" +DESCRIPTION = "" +SECTION = "tpm" + +# This is a lie. The source for this project is covered by several licenses. +# We're currently working on a way to make this clear for those consuming the +# project. Till then I'm using 'BSD' as a place holder since the Intel license +# is "BSD-like". +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/BSD;md5=3775480a712fc46a69647678acb234cb" + +DEPENDS += "autoconf-archive dbus glib-2.0 pkgconfig tpm2.0-tss glib-2.0-native" +RDEPENDS_${PN} += "libgcc dbus-glib" + +SRC_URI = " \ + git://github.com/01org/tpm2-abrmd.git;branch=master;name=tpm2-abrmd;destsuffix=tpm2-abrmd \ + file://tpm2-abrmd-init.sh \ + file://tpm2-abrmd.default \ + " + +SRCREV = "4f0bd204d07176084b245d005df665fbfdf68db5" +PV = "1.0.0+git${SRCPV}" +S = "${WORKDIR}/${BPN}" + +inherit autotools pkgconfig systemd update-rc.d useradd + +SYSTEMD_PACKAGES += "${PN}" +SYSTEMD_SERVICE_${PN} = "tpm2-abrmd.service" +SYSTEMD_AUTO_ENABLE_${PN} = "enable" + +INITSCRIPT_NAME = "tpm2-abrmd" +INITSCRIPT_PARAMS = "start 99 2 3 4 5 . stop 19 0 1 6 ." + +USERADD_PACKAGES = "${PN}" +GROUPADD_PARAM_${PN} = "tss" +USERADD_PARAM_${PN} = "-M -d /var/lib/tpm -s /bin/false -g tss tss" + +# break out tcti into a package: libtcti-tabrmd +# package up the service file + +EXTRA_OECONF += " \ + --with-systemdsystemunitdir=${systemd_system_unitdir} \ + --with-udevrulesdir=${sysconfdir}/udev/rules.d \ + " + +do_configure_prepend() { + # execute the bootstrap script + currentdir=$(pwd) + cd "${S}" + ACLOCAL="aclocal --system-acdir=${STAGING_DATADIR}/aclocal" ./bootstrap --force + cd "${currentdir}" +} + +do_install_append() { + install -d "${D}${sysconfdir}/init.d" + install -m 0755 "${WORKDIR}/tpm2-abrmd-init.sh" "${D}${sysconfdir}/init.d/tpm2-abrmd" + install -d "${D}${sysconfdir}/default" + install -m 0644 "${WORKDIR}/tpm2-abrmd.default" "${D}${sysconfdir}/default/tpm2-abrmd" +} + +BBCLASSEXTEND = "native" diff --git a/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/0001-tpm2-tools-use-dynamic-linkage-with-tpm2-abrmd.patch b/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/0001-tpm2-tools-use-dynamic-linkage-with-tpm2-abrmd.patch new file mode 100644 index 0000000..8d91ca0 --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/0001-tpm2-tools-use-dynamic-linkage-with-tpm2-abrmd.patch @@ -0,0 +1,80 @@ +From 9aee7b2bc400a336f0a938ce80eba51707662612 Mon Sep 17 00:00:00 2001 +From: Lans Zhang +Date: Mon, 19 Jun 2017 13:52:53 +0800 +Subject: [PATCH 1/2] tpm2-tools: use dynamic linkage with tpm2-abrmd + +tpm2-abrmd has huge dependencies and they are not necessary to be involved +in initramfs. + +Signed-off-by: Lans Zhang +--- + Makefile.am | 2 +- + lib/context-util.c | 22 ++++++++++++++++++++-- + 2 files changed, 21 insertions(+), 3 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index a3c43f8..68ba044 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -38,7 +38,7 @@ LIB_COMMON := lib/libcommon.a + AM_CFLAGS := $(INCLUDE_DIRS) $(TPM20_TSS_CFLAGS) $(EXTRA_CFLAGS) $(TCTI_TABRMD_CFLAGS) + AM_LDFLAGS := $(EXTRA_LDFLAGS) + +-LDADD = $(LIB_COMMON) $(TPM20_TSS_LIBS) $(TCTI_SOCK_LIBS) $(TCTI_DEV_LIBS) $(TCTI_TABRMD_LIBS) ++LDADD = $(LIB_COMMON) $(TPM20_TSS_LIBS) $(TCTI_SOCK_LIBS) $(TCTI_DEV_LIBS) $(TCTI_TABRMD_LIBS) -ldl + + sbin_PROGRAMS = \ + tools/tpm2_create \ +diff --git a/lib/context-util.c b/lib/context-util.c +index 7de22ac..2ef181d 100644 +--- a/lib/context-util.c ++++ b/lib/context-util.c +@@ -38,6 +38,7 @@ + #include + #endif + #ifdef HAVE_TCTI_TABRMD ++#include + #include + #endif + +@@ -134,10 +135,27 @@ TSS2_TCTI_CONTEXT* + tcti_tabrmd_init (void) + { + TSS2_TCTI_CONTEXT *tcti_ctx; ++ TSS2_RC (*init)(TSS2_TCTI_CONTEXT *, size_t *); ++ /* ++ * Intend to "forget" the handle in order to make sure libtcti-tabrmd ++ * is unloaded along with the deconstructed functions. ++ */ ++ void *tabrmd_handle; + TSS2_RC rc; + size_t size; + +- rc = tss2_tcti_tabrmd_init(NULL, &size); ++ tabrmd_handle = dlopen("libtcti-tabrmd.so.0", RTLD_LAZY); ++ if (!tabrmd_handle) { ++ fprintf (stderr, ++ "Unable to find out the tabrmd tcti library\n"); ++ return NULL; ++ } ++ ++ init = dlsym(tabrmd_handle, "tss2_tcti_tabrmd_init"); ++ if (!init) ++ return NULL; ++ ++ rc = init(NULL, &size); + if (rc != TSS2_RC_SUCCESS) { + LOG_ERR ("Failed to get size for TABRMD TCTI context: 0x%" PRIx32, rc); + return NULL; +@@ -148,7 +166,7 @@ tcti_tabrmd_init (void) + strerror (errno)); + return NULL; + } +- rc = tss2_tcti_tabrmd_init (tcti_ctx, &size); ++ rc = init (tcti_ctx, &size); + if (rc != TSS2_RC_SUCCESS) { + LOG_ERR ("Failed to initialize TABRMD TCTI context: 0x%" PRIx32, rc); + free (tcti_ctx); +-- +2.7.5 + diff --git a/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/0002-Fix-build-failure-with-glib-2.0.patch b/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/0002-Fix-build-failure-with-glib-2.0.patch new file mode 100644 index 0000000..faeaf2a --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/0002-Fix-build-failure-with-glib-2.0.patch @@ -0,0 +1,39 @@ +From 53f9b2f63c5370f4d269bf08d940cc8576fcbbf4 Mon Sep 17 00:00:00 2001 +From: Lans Zhang +Date: Mon, 19 Jun 2017 13:54:34 +0800 +Subject: [PATCH 2/2] Fix build failure with glib-2.0 + +Signed-off-by: Lans Zhang +--- + Makefile.am | 2 +- + configure.ac | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index 68ba044..e792049 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -35,7 +35,7 @@ ACLOCAL_AMFLAGS = -I m4 + INCLUDE_DIRS = -I$(srcdir)/src -I$(srcdir)/lib + LIB_COMMON := lib/libcommon.a + +-AM_CFLAGS := $(INCLUDE_DIRS) $(TPM20_TSS_CFLAGS) $(EXTRA_CFLAGS) $(TCTI_TABRMD_CFLAGS) ++AM_CFLAGS := $(INCLUDE_DIRS) $(GLIB_CFLAGS) $(TPM20_TSS_CFLAGS) $(EXTRA_CFLAGS) $(TCTI_TABRMD_CFLAGS) + AM_LDFLAGS := $(EXTRA_LDFLAGS) + + LDADD = $(LIB_COMMON) $(TPM20_TSS_LIBS) $(TCTI_SOCK_LIBS) $(TCTI_DEV_LIBS) $(TCTI_TABRMD_LIBS) -ldl +diff --git a/configure.ac b/configure.ac +index ce781ea..08fa81c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -6,6 +6,7 @@ LT_INIT + AM_INIT_AUTOMAKE([foreign + subdir-objects]) + AC_CONFIG_FILES([Makefile]) ++PKG_CHECK_MODULES([GLIB], [glib-2.0]) + PKG_CHECK_MODULES([SAPI],[sapi]) + # disable libtcti-device selectively (enabled by default) + AC_ARG_WITH( +-- +2.7.5 + diff --git a/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/ax_check_compile_flag.m4 b/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/ax_check_compile_flag.m4 new file mode 100644 index 0000000..dcabb92 --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/ax_check_compile_flag.m4 @@ -0,0 +1,74 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the current language's compiler +# or gives an error. (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the current language's default +# flags (e.g. CFLAGS) when the check is done. The check is thus made with +# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to +# force the compiler to issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_COMPILE_IFELSE. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 5 + +AC_DEFUN([AX_CHECK_COMPILE_FLAG], +[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl +AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ + ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS + _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" + AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) +AS_VAR_IF(CACHEVAR,yes, + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_COMPILE_FLAGS diff --git a/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/ax_check_link_flag.m4 b/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/ax_check_link_flag.m4 new file mode 100644 index 0000000..819409a --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/ax_check_link_flag.m4 @@ -0,0 +1,74 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the linker or gives an error. +# (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the linker's default flags +# when the check is done. The check is thus made with the flags: "LDFLAGS +# EXTRA-FLAGS FLAG". This can for example be used to force the linker to +# issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_LINK_IFELSE. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 5 + +AC_DEFUN([AX_CHECK_LINK_FLAG], +[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl +AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [ + ax_check_save_flags=$LDFLAGS + LDFLAGS="$LDFLAGS $4 $1" + AC_LINK_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + LDFLAGS=$ax_check_save_flags]) +AS_VAR_IF(CACHEVAR,yes, + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_LINK_FLAGS diff --git a/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/ax_check_preproc_flag.m4 b/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/ax_check_preproc_flag.m4 new file mode 100644 index 0000000..4850ff3 --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools/ax_check_preproc_flag.m4 @@ -0,0 +1,74 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_preproc_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_PREPROC_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the current language's +# preprocessor or gives an error. (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the preprocessor's default +# flags when the check is done. The check is thus made with the flags: +# "CPPFLAGS EXTRA-FLAGS FLAG". This can for example be used to force the +# preprocessor to issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_PREPROC_IFELSE. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{COMPILE,LINK}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 5 + +AC_DEFUN([AX_CHECK_PREPROC_FLAG], +[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]cppflags_$4_$1])dnl +AC_CACHE_CHECK([whether _AC_LANG preprocessor accepts $1], CACHEVAR, [ + ax_check_save_flags=$CPPFLAGS + CPPFLAGS="$CPPFLAGS $4 $1" + AC_PREPROC_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + CPPFLAGS=$ax_check_save_flags]) +AS_VAR_IF(CACHEVAR,yes, + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_PREPROC_FLAGS diff --git a/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools_git.bb b/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools_git.bb new file mode 100644 index 0000000..a914c3b --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2.0-tools/tpm2.0-tools_git.bb @@ -0,0 +1,48 @@ +SUMMARY = "Tools for TPM2." +DESCRIPTION = "tpm2.0-tools" +SECTION = "tpm" + +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=91b7c548d73ea16537799e8060cea819" + +DEPENDS += "tpm2.0-tss tpm2-abrmd openssl curl autoconf-archive pkgconfig" +RDEPENDS_${PN} += "libtss2 libtctidevice" + +SRC_URI = " \ + git://github.com/01org/tpm2.0-tools.git;branch=master;name=tpm2.0-tools;destsuffix=tpm2.0-tools \ + file://ax_check_compile_flag.m4 \ + file://ax_check_preproc_flag.m4 \ + file://ax_check_link_flag.m4 \ + file://0001-tpm2-tools-use-dynamic-linkage-with-tpm2-abrmd.patch \ + file://0002-Fix-build-failure-with-glib-2.0.patch \ +" + +S = "${WORKDIR}/${BPN}" +SRCREV = "ada4c20d23d99b4b489c6c793e4132c1d5234b66" +PV = "2.0.0+git${SRCPV}" + +inherit autotools pkgconfig + +EXTRA_OECONF += " \ + --with-tcti-device \ + --without-tcti-socket \ + --with-tcti-tabrmd \ +" + +EXTRA_OEMAKE += " \ + CFLAGS="${CFLAGS} -Wno-implicit-fallthrough" \ +" + +do_configure_prepend() { + mkdir -p "${S}/m4" + cp "${WORKDIR}/ax_check_compile_flag.m4" "${S}/m4" + cp "${WORKDIR}/ax_check_preproc_flag.m4" "${S}/m4" + cp "${WORKDIR}/ax_check_link_flag.m4" "${S}/m4" + + # execute the bootstrap script + currentdir=$(pwd) + cd "${S}" + ACLOCAL="aclocal --system-acdir=${STAGING_DATADIR}/aclocal" \ + ./bootstrap --force + cd "${currentdir}" +} diff --git a/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/0001-update-bootstrap.patch b/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/0001-update-bootstrap.patch new file mode 100644 index 0000000..3f5fa81 --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/0001-update-bootstrap.patch @@ -0,0 +1,24 @@ +Index: TPM2.0-TSS/bootstrap +=================================================================== +--- TPM2.0-TSS.orig/bootstrap ++++ TPM2.0-TSS/bootstrap +@@ -13,6 +13,7 @@ src_listvar () { + } + + VARS_FILE=src_vars.mk ++AUTORECONF=${AUTORECONF:-autoreconf} + + echo "Generating file lists: ${VARS_FILE}" + ( +@@ -30,11 +31,3 @@ echo "Generating file lists: ${VARS_FILE + printf "SAMPLE_SRC = \$(SAMPLE_C) \$(SAMPLE_H)\n" + ) > ${VARS_FILE} + +-printf "Running libtoolize ...\n" +-libtoolize --install +-printf "Running aclocal ...\n" +-aclocal +-printf "Running autoconf ...\n" +-autoconf +-printf "Running automake ...\n" +-automake --add-missing diff --git a/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/ax_check_compile_flag.m4 b/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/ax_check_compile_flag.m4 new file mode 100644 index 0000000..dcabb92 --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/ax_check_compile_flag.m4 @@ -0,0 +1,74 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the current language's compiler +# or gives an error. (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the current language's default +# flags (e.g. CFLAGS) when the check is done. The check is thus made with +# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to +# force the compiler to issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_COMPILE_IFELSE. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 5 + +AC_DEFUN([AX_CHECK_COMPILE_FLAG], +[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl +AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ + ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS + _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" + AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) +AS_VAR_IF(CACHEVAR,yes, + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_COMPILE_FLAGS diff --git a/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/ax_check_link_flag.m4 b/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/ax_check_link_flag.m4 new file mode 100644 index 0000000..819409a --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/ax_check_link_flag.m4 @@ -0,0 +1,74 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the linker or gives an error. +# (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the linker's default flags +# when the check is done. The check is thus made with the flags: "LDFLAGS +# EXTRA-FLAGS FLAG". This can for example be used to force the linker to +# issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_LINK_IFELSE. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 5 + +AC_DEFUN([AX_CHECK_LINK_FLAG], +[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl +AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [ + ax_check_save_flags=$LDFLAGS + LDFLAGS="$LDFLAGS $4 $1" + AC_LINK_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + LDFLAGS=$ax_check_save_flags]) +AS_VAR_IF(CACHEVAR,yes, + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_LINK_FLAGS diff --git a/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/ax_check_preproc_flag.m4 b/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/ax_check_preproc_flag.m4 new file mode 100644 index 0000000..4850ff3 --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/ax_check_preproc_flag.m4 @@ -0,0 +1,74 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_preproc_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_PREPROC_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the current language's +# preprocessor or gives an error. (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the preprocessor's default +# flags when the check is done. The check is thus made with the flags: +# "CPPFLAGS EXTRA-FLAGS FLAG". This can for example be used to force the +# preprocessor to issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_PREPROC_IFELSE. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{COMPILE,LINK}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 5 + +AC_DEFUN([AX_CHECK_PREPROC_FLAG], +[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]cppflags_$4_$1])dnl +AC_CACHE_CHECK([whether _AC_LANG preprocessor accepts $1], CACHEVAR, [ + ax_check_save_flags=$CPPFLAGS + CPPFLAGS="$CPPFLAGS $4 $1" + AC_PREPROC_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + CPPFLAGS=$ax_check_save_flags]) +AS_VAR_IF(CACHEVAR,yes, + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_PREPROC_FLAGS diff --git a/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/ax_pthread.m4 b/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/ax_pthread.m4 new file mode 100644 index 0000000..d383ad5 --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/ax_pthread.m4 @@ -0,0 +1,332 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_pthread.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +# +# DESCRIPTION +# +# This macro figures out how to build C programs using POSIX threads. It +# sets the PTHREAD_LIBS output variable to the threads library and linker +# flags, and the PTHREAD_CFLAGS output variable to any special C compiler +# flags that are needed. (The user can also force certain compiler +# flags/libs to be tested by setting these environment variables.) +# +# Also sets PTHREAD_CC to any special C compiler that is needed for +# multi-threaded programs (defaults to the value of CC otherwise). (This +# is necessary on AIX to use the special cc_r compiler alias.) +# +# NOTE: You are assumed to not only compile your program with these flags, +# but also link it with them as well. e.g. you should link with +# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS +# +# If you are only building threads programs, you may wish to use these +# variables in your default LIBS, CFLAGS, and CC: +# +# LIBS="$PTHREAD_LIBS $LIBS" +# CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +# CC="$PTHREAD_CC" +# +# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant +# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name +# (e.g. PTHREAD_CREATE_UNDETACHED on AIX). +# +# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the +# PTHREAD_PRIO_INHERIT symbol is defined when compiling with +# PTHREAD_CFLAGS. +# +# ACTION-IF-FOUND is a list of shell commands to run if a threads library +# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it +# is not found. If ACTION-IF-FOUND is not specified, the default action +# will define HAVE_PTHREAD. +# +# Please let the authors know if this macro fails on any platform, or if +# you have any other suggestions or comments. This macro was based on work +# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help +# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by +# Alejandro Forero Cuervo to the autoconf macro repository. We are also +# grateful for the helpful feedback of numerous users. +# +# Updated for Autoconf 2.68 by Daniel Richard G. +# +# LICENSE +# +# Copyright (c) 2008 Steven G. Johnson +# Copyright (c) 2011 Daniel Richard G. +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 21 + +AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) +AC_DEFUN([AX_PTHREAD], [ +AC_REQUIRE([AC_CANONICAL_HOST]) +AC_LANG_PUSH([C]) +ax_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on True64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) + AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes]) + AC_MSG_RESULT([$ax_pthread_ok]) + if test x"$ax_pthread_ok" = xno; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) +# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) +# -pthreads: Solaris/gcc +# -mthreads: Mingw32/gcc, Lynx/gcc +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads too; +# also defines -D_REENTRANT) +# ... -mt is also the pthreads flag for HP/aCC +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case ${host_os} in + solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + + ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" + ;; + + darwin*) + ax_pthread_flags="-pthread $ax_pthread_flags" + ;; +esac + +# Clang doesn't consider unrecognized options an error unless we specify +# -Werror. We throw in some extra Clang-specific options to ensure that +# this doesn't happen for GCC, which also accepts -Werror. + +AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags]) +save_CFLAGS="$CFLAGS" +ax_pthread_extra_flags="-Werror" +CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])], + [AC_MSG_RESULT([yes])], + [ax_pthread_extra_flags= + AC_MSG_RESULT([no])]) +CFLAGS="$save_CFLAGS" + +if test x"$ax_pthread_ok" = xno; then +for flag in $ax_pthread_flags; do + + case $flag in + none) + AC_MSG_CHECKING([whether pthreads work without any flags]) + ;; + + -*) + AC_MSG_CHECKING([whether pthreads work with $flag]) + PTHREAD_CFLAGS="$flag" + ;; + + pthread-config) + AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) + if test x"$ax_pthread_config" = xno; then continue; fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + AC_MSG_CHECKING([for the pthreads library -l$flag]) + PTHREAD_LIBS="-l$flag" + ;; + esac + + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include + static void routine(void *a) { a = 0; } + static void *start_routine(void *a) { return a; }], + [pthread_t th; pthread_attr_t attr; + pthread_create(&th, 0, start_routine, 0); + pthread_join(th, 0); + pthread_attr_init(&attr); + pthread_cleanup_push(routine, 0); + pthread_cleanup_pop(0) /* ; */])], + [ax_pthread_ok=yes], + []) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + AC_MSG_RESULT([$ax_pthread_ok]) + if test "x$ax_pthread_ok" = xyes; then + break; + fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$ax_pthread_ok" = xyes; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + AC_MSG_CHECKING([for joinable pthread attribute]) + attr_name=unknown + for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], + [int attr = $attr; return attr /* ; */])], + [attr_name=$attr; break], + []) + done + AC_MSG_RESULT([$attr_name]) + if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then + AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name], + [Define to necessary symbol if this constant + uses a non-standard name on your system.]) + fi + + AC_MSG_CHECKING([if more special flags are required for pthreads]) + flag=no + case ${host_os} in + aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; + osf* | hpux*) flag="-D_REENTRANT";; + solaris*) + if test "$GCC" = "yes"; then + flag="-D_REENTRANT" + else + # TODO: What about Clang on Solaris? + flag="-mt -D_REENTRANT" + fi + ;; + esac + AC_MSG_RESULT([$flag]) + if test "x$flag" != xno; then + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + fi + + AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], + [ax_cv_PTHREAD_PRIO_INHERIT], [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[int i = PTHREAD_PRIO_INHERIT;]])], + [ax_cv_PTHREAD_PRIO_INHERIT=yes], + [ax_cv_PTHREAD_PRIO_INHERIT=no]) + ]) + AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"], + [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])]) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + # More AIX lossage: compile with *_r variant + if test "x$GCC" != xyes; then + case $host_os in + aix*) + AS_CASE(["x/$CC"], + [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], + [#handle absolute path differently from PATH based program lookup + AS_CASE(["x$CC"], + [x/*], + [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], + [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) + ;; + esac + fi +fi + +test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" + +AC_SUBST([PTHREAD_LIBS]) +AC_SUBST([PTHREAD_CFLAGS]) +AC_SUBST([PTHREAD_CC]) + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$ax_pthread_ok" = xyes; then + ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) + : +else + ax_pthread_ok=no + $2 +fi +AC_LANG_POP +])dnl AX_PTHREAD diff --git a/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/no-cmocka-configure-ac.diff b/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/no-cmocka-configure-ac.diff new file mode 100644 index 0000000..9e5f2f5 --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss/no-cmocka-configure-ac.diff @@ -0,0 +1,10 @@ +Index: TPM2.0-TSS/configure.ac +=================================================================== +--- TPM2.0-TSS.orig/configure.ac ++++ TPM2.0-TSS/configure.ac +@@ -11,5 +11,4 @@ AX_PTHREAD([], [AC_MSG_ERROR([requires p + AM_INIT_AUTOMAKE([foreign + subdir-objects]) + AC_CONFIG_FILES([Makefile]) +-PKG_CHECK_MODULES([CMOCKA],[cmocka]) + AC_OUTPUT diff --git a/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss_git.bb b/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss_git.bb new file mode 100644 index 0000000..cda3b30 --- /dev/null +++ b/meta-tpm2/recipes-tpm/tpm2.0-tss/tpm2.0-tss_git.bb @@ -0,0 +1,109 @@ +SUMMARY = "Software stack for TPM2." +DESCRIPTION = "tpm2.0-tss like woah." +SECTION = "tpm" + +# This is a lie. The source for this project is covered by several licenses. +# We're currently working on a way to make this clear for those consuming the +# project. Till then I'm using 'BSD' as a place holder since the Intel license +# is "BSD-like". +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/BSD;md5=3775480a712fc46a69647678acb234cb" + +# This doesn't seem to work. Keeping it here for completeness. Remove once +# it's fixed upstream. +DEPENDS += "autoconf-archive pkgconfig" +#RDEPENDS_libtss2 += "libmarshal" +#RDEPENDS_libtctidevice += "libmarshal" + +SRC_URI = " \ + git://github.com/01org/TPM2.0-TSS.git;protocol=http;branch=1.x;name=TPM2.0-TSS;destsuffix=TPM2.0-TSS \ +" + +# CAPS? SRSLY? +S = "${WORKDIR}/${@d.getVar('BPN',d).upper()}" + +SRCREV = "1fa2f4d12449d5d639032fee28d922fe9d4877b5" +PV = "1.1.0+git${SRCPV}" + +RRECOMMENDS_${PN} += "\ + kernel-module-tpm-crb \ + kernel-module-tpm-tis \ +" + +TPM_DESCRIPTION = 'device/description' +FAMILY_MAJOR = 'TPM 2.0' + +PACKAGES = " \ + ${PN}-dbg \ + libtss2 \ + libtss2-dev \ + libtss2-staticdev \ + libtss2-doc \ + libtctidevice \ + libtctidevice-dev \ + libtctidevice-staticdev \ + libtctisocket \ + libtctisocket-dev \ + libtctisocket-staticdev \ + libmarshal \ + libmarshal-dev \ + libmarshal-staticdev \ +" + +FILES_libtss2 = "${libdir}/libsapi.so.*" +FILES_libtss2-dev = " \ + ${includedir}/sapi \ + ${includedir}/tcti/common.h \ + ${libdir}/libsapi.so \ + ${libdir}/pkgconfig/sapi.pc \ + ${libdir}/libsapi.la \ +" +FILES_libtss2-staticdev = " \ + ${libdir}/libsapi.a \ +" +FILES_libtss2-doc = " \ + ${mandir} \ +" +FILES_libtctidevice = "${libdir}/libtcti-device.so.*" +FILES_libtctidevice-dev = " \ + ${includedir}/tcti/tcti_device.h \ + ${libdir}/libtcti-device.so \ + ${libdir}/pkgconfig/tcti-device.pc \ + ${libdir}/libtcti-device.la \ +" +FILES_libtctidevice-staticdev = "${libdir}/libtcti-device.a" +FILES_libtctisocket = "${libdir}/libtcti-socket.so.*" +FILES_libtctisocket-dev = " \ + ${includedir}/tcti/tcti_socket.h \ + ${libdir}/libtcti-socket.so \ + ${libdir}/pkgconfig/tcti-socket.pc \ + ${libdir}/libtcti-socket.la \ +" +FILES_libtctisocket-staticdev = "${libdir}/libtcti-socket.a" +FILES_libmarshal = "${libdir}/libmarshal.so.*" +FILES_libmarshal-dev = "${libdir}/libmarshal.la ${libdir}/libmarshal.so" +FILES_libmarshal-staticdev = "${libdir}/libmarshal.a" + +inherit autotools + +# the autotools / autoconf-archive don't work as expected so we include the +# pthread macro ourselves for now +SRC_URI += " \ + file://ax_pthread.m4 \ + file://ax_check_compile_flag.m4 \ + file://ax_check_preproc_flag.m4 \ + file://ax_check_link_flag.m4 \ +" +do_configure_prepend () { + mkdir -p ${S}/m4 + cp ${WORKDIR}/ax_pthread.m4 ${S}/m4 + cp ${WORKDIR}/ax_check_compile_flag.m4 ${S}/m4 + cp ${WORKDIR}/ax_check_preproc_flag.m4 ${S}/m4 + cp ${WORKDIR}/ax_check_link_flag.m4 ${S}/m4 + # execute the bootstrap script + currentdir=$(pwd) + cd ${S} + ACLOCAL="aclocal --system-acdir=${STAGING_DATADIR}/aclocal" ./bootstrap --force + cd ${currentdir} +} + -- cgit v1.2.3-54-g00ecf