bootstrap
这个脚本主要做了以下几件事情:
1. 设置环境变量:将 AUTORECONF 环境变量设置为 autoreconf,如果该变量已经定义,则不会进行重新设置。
2. 生成文件列表:通过 src_listvar 函数生成各个目录下的源文件列表,并将结果保存到 src.mk 文件中。这些文件列表将在后续的构建过程中使用。
3. 设置构建环境:运行 ${AUTORECONF} --install --sym 命令来设置构建环境。autoreconf 是一个工具,用于自动生成构建系统所需的文件,例如 configure 脚本和 Makefile.in 文件。
4. 设置默认的供应商字符串:通过 sed 命令修改 tpm/include/VendorString.h 文件,将其中被注释的符号定义取消注释,以便在构建过程中使用。
总的来说,这个脚本主要是为了准备构建所需的文件列表和环境,以及设置默认的供应商字符串。具体的构建过程可能需要进一步的脚本或命令来完成。
configure.ac
这段输入是一个 configure.ac 文件,用于生成自动化构建系统的配置脚本。它包含了一系列的宏和命令,用于配置构建过程中的各种选项和依赖。
以下是这个 configure.ac 文件中的一些关键部分:
- AC_INIT 宏:指定了项目的名称、版本号、问题报告链接和项目的主页链接。
- AC_CONFIG_MACRO_DIR 宏:指定了宏文件的目录,这些宏文件用于自定义自动化构建过程中的一些行为。
- AC_PROG_CC、AC_PROG_LN_S、AC_PROG_RANLIB 宏:用于检查并设置编译器、符号链接和静态库工具。
- AM_INIT_AUTOMAKE 宏:初始化 Automake,指定了一些选项,如 foreign 和 subdir-objects。
- AC_CONFIG_FILES 宏:指定了生成的配置文件,这里只有一个 Makefile。
- AC_SUBST 宏:用于将变量的值传递给生成的配置文件。
- AC_ARG_ENABLE 宏:用于定义一个命令行选项 --enable-usedeviceid,根据选项的值来设置一些变量。
- PKG_CHECK_MODULES 宏:用于检查和引入外部依赖库。
- AX_PTHREAD 宏:用于检查并引入 pthread 库。
- AC_DEFINE 宏:用于定义预处理器宏,这里定义了一些加密算法相关的宏。
- ADD_COMPILER_FLAG 和 ADD_LINK_FLAG 宏:用于添加编译器和链接器的选项。
- AC_OUTPUT 宏:生成最终的配置脚本。
这个 configure.ac 文件的目的是根据项目的需求和依赖配置构建系统,生成适合项目的 Makefile 和配置脚本。
flags.m4
AC_DEFUN([ADD_COMPILER_FLAG],[
AX_CHECK_COMPILE_FLAG([$1],[
EXTRA_CFLAGS="$EXTRA_CFLAGS $1"
AC_SUBST([EXTRA_CFLAGS])],[
AS_IF([test x$2 != xrequired],[
AC_MSG_WARN([Optional CFLAG "$1" not supported by your compiler, continuing.])],[
AC_MSG_ERROR([Required CFLAG "$1" not supported by your compiler, aborting.])]
)],[
-Wall -Werror]
)]
)
这段输入是一个宏定义 ADD_COMPILER_FLAG,用于向编译器添加编译选项。
该宏接受两个参数:$1 是要添加的编译选项,$2 是一个可选参数,用于指定该选项是否是必需的。
宏的主要功能是使用 AX_CHECK_COMPILE_FLAG 宏来检查编译器是否支持指定的选项。如果支持,将该选项添加到 EXTRA_CFLAGS 变量中,并通过 AC_SUBST 将其传递给生成的配置文件。如果不支持,根据 $2 的值决定是发出警告还是报错。
如果没有指定 $2 的值,则默认为 -Wall -Werror,即将 -Wall 和 -Werror 选项添加到编译器选项中。
这个宏的作用是方便在自动化构建过程中向编译器添加额外的编译选项,以满足项目的需求或要求。
Makefile.am
这段输入是一个 Makefile,用于构建项目的目标文件和可执行文件。
以下是这个 Makefile 中的一些关键部分:
- include src.mk:包含了之前生成的 src.mk 文件,该文件包含了源文件的列表。
- PLATFORM_INC、SIMULATOR_INC、TPM_INC:定义了各个目录的头文件路径。
- libplatform、libtpm、tpm2_simulator:定义了生成的静态库和可执行文件的名称。
- bin_PROGRAMS、noinst_LIBRARIES:定义了要生成的可执行文件和静态库。
- Platform_src_libplatform_a_CFLAGS、Platform_src_libplatform_a_SOURCES:定义了生成 libplatform.a 静态库的编译选项和源文件列表。
- Simulator_src_tpm2_simulator_CFLAGS、Simulator_src_tpm2_simulator_LDADD、Simulator_src_tpm2_simulator_SOURCES:定义了生成 tpm2-simulator 可执行文件的编译选项、依赖库和源文件列表。
- tpm_src_libtpm_a_CFLAGS、tpm_src_libtpm_a_SOURCES:定义了生成 libtpm.a 静态库的编译选项和源文件列表。
这个 Makefile 的目的是根据源文件列表和依赖关系来编译和链接项目的目标文件和可执行文件。具体的编译和链接规则可能需要进一步的规则和命令来完成。