From dfe634be132047899d4bdcd00dfde29fa3e7a94b Mon Sep 17 00:00:00 2001 From: David Garske Date: Tue, 22 May 2018 10:04:21 -0700 Subject: [PATCH] Fix to handle `CFLAGS`. Added generation of configuration options in `wolftpm/options.h`. Cleanup of the `configure.ac`. --- .gitignore | 1 + configure.ac | 117 ++++++++++++++++++++++++++------- m4/ax_harden_compiler_flags.m4 | 9 ++- wolftpm/include.am | 3 +- wolftpm/options.h.in | 39 +++++++++++ 5 files changed, 141 insertions(+), 28 deletions(-) create mode 100644 wolftpm/options.h.in diff --git a/.gitignore b/.gitignore index cc03661..348d66e 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ RemoteSystemsTempFiles *.libs examples/wrap/wrap_test examples/native/native_test +wolftpm/options.h diff --git a/configure.ac b/configure.ac index ee8787a..50a1ebd 100644 --- a/configure.ac +++ b/configure.ac @@ -8,11 +8,14 @@ AC_INIT([wolftpm],[1.1.0],[https://github.com/wolfssl/wolfTPM/issues],[wolftpm], AC_PREREQ([2.63]) AC_CONFIG_AUX_DIR([build-aux]) +# The following sets CFLAGS to empty if unset on command line. : ${CFLAGS=""} -: ${AR_FLAGS="cr"} + +# Test ar for the "U" option. Should be checked before the libtool macros. +xxx_ar_flags=$((ar --help) 2>&1) +AS_CASE([$xxx_ar_flags],[*'use actual timestamps and uids/gids'*],[: ${AR_FLAGS="Ucru"}]) AC_CANONICAL_HOST -AC_CANONICAL_BUILD AM_INIT_AUTOMAKE([1.11 -Wall -Werror -Wno-portability foreign tar-ustar subdir-objects no-define color-tests]) @@ -34,6 +37,7 @@ WOLFTPM_LIBRARY_VERSION=2:0:0 # +- increment if interfaces have been added, removed or changed AC_SUBST([WOLFTPM_LIBRARY_VERSION]) + LT_PREREQ([2.2]) LT_INIT([disable-static], [win32-dll]) LT_LANG([C]) @@ -49,34 +53,28 @@ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) # Checks for programs. AC_PROG_CC AM_PROG_CC_C_O -AC_PROG_CC_C_O AC_PROG_INSTALL # Checks for header files. AC_HEADER_STDC -AC_CHECK_SIZEOF(long long, 8) -AC_CHECK_SIZEOF(long, 4) +AC_CHECK_SIZEOF([long long], 8) +AC_CHECK_SIZEOF([long], 4) # Check headers/libs -AC_CHECK_FUNCS([gethostbyname]) -AC_CHECK_FUNCS([getaddrinfo]) -AC_CHECK_FUNCS([gettimeofday]) -AC_CHECK_FUNCS([inet_ntoa]) -AC_CHECK_FUNCS([memset]) -AC_CHECK_FUNCS([socket]) -AC_CHECK_FUNCS([signal]) -AC_CHECK_LIB(network,socket) +AC_CHECK_FUNCS([gethostbyname getaddrinfo gettimeofday inet_ntoa memset socket]) +AC_CHECK_LIB([network],[socket]) # DEBUG -DEBUG_CFLAGS="-g -O0" -DEBUG_CPPFLAGS="-DDEBUG -DDEBUG_WOLFTPM" +DEBUG_CFLAGS="-g -O0 -DDEBUG_WOLFTPM" + +# Optimizations +OPTIMIZE_CFLAGS="-O2" AX_DEBUG AS_IF([test "x$ax_enable_debug" = "xyes"], - [AM_CFLAGS="$DEBUG_CFLAGS $AM_CFLAGS" - AM_CPPFLAGS="$DEBUG_CPPFLAGS $AM_CPPFLAGS"], - [AM_CFLAGS="$AM_CFLAGS -O2" - AM_CPPFLAGS="-DNDEBUG $AM_CFLAGS"]) + [AM_CFLAGS="$DEBUG_CFLAGS $AM_CFLAGS -DDEBUG"], + [AM_CFLAGS="$AM_CFLAGS $OPTIMIZE_CFLAGS -DNDEBUG"]) + AX_PTHREAD([ # If AX_PTHREAD is adding -Qunused-arguments, need to prepend with @@ -88,16 +86,15 @@ AX_PTHREAD([ # Checks for typedefs, structures, and compiler characteristics. if test "$ac_cv_sizeof_long" = "8"; then - AM_CPPFLAGS="$AM_CPPFLAGS -DSIZEOF_LONG=8" + AM_CFLAGS="$AM_CFLAGS -DSIZEOF_LONG=8" else if test "$ac_cv_sizeof_long_long" = "8"; then - AM_CPPFLAGS="$AM_CPPFLAGS -DSIZEOF_LONG_LONG=8" + AM_CFLAGS="$AM_CFLAGS -DSIZEOF_LONG_LONG=8" fi fi TAO_REQUIRE_LIBWOLFSSL -AM_CPPFLAGS="$AM_CPPFLAGS -DDHAVE_WOLFSSL_OPTIONS -DHAVE_CYASSL_OPTIONS" # Examples @@ -128,6 +125,9 @@ AM_CONDITIONAL([BUILD_WRAPPER], [test "x$ENABLED_WRAPPER" = "xyes"]) # HARDEN FLAGS AX_HARDEN_CC_COMPILER_FLAGS +OPTION_FLAGS="$CFLAGS $CPPFLAGS $AM_CFLAGS" + + CREATE_HEX_VERSION AC_SUBST([AM_CPPFLAGS]) AC_SUBST([AM_CFLAGS]) @@ -136,6 +136,7 @@ AC_SUBST([AM_LDFLAGS]) # FINAL AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([wolftpm/version.h]) +AC_CONFIG_FILES([wolftpm/options.h]) AX_CREATE_GENERIC_CONFIG AX_AM_JOBSERVER([yes]) @@ -148,6 +149,78 @@ echo "Running make clean..." make clean >/dev/null 2>&1 echo +# generate user options header +echo "---" +echo "Generating user options header..." + + +OPTION_FILE="wolftpm/options.h" +rm -f $OPTION_FILE + +echo "/* wolftpm options.h" > $OPTION_FILE +echo " * generated from configure options" >> $OPTION_FILE +echo " *" >> $OPTION_FILE +echo " * Copyright (C) 2006-2018 wolfSSL Inc." >> $OPTION_FILE +echo " *" >> $OPTION_FILE +echo " * * This file is part of wolfTPM." >> $OPTION_FILE +echo " *" >> $OPTION_FILE +echo " */" >> $OPTION_FILE + +echo "" >> $OPTION_FILE +echo "#ifndef WOLFMTPM_OPTIONS_H" >> $OPTION_FILE +echo "#define WOLFMTPM_OPTIONS_H" >> $OPTION_FILE +echo "" >> $OPTION_FILE +echo "" >> $OPTION_FILE +echo "#ifdef __cplusplus" >> $OPTION_FILE +echo "extern \"C\" {" >> $OPTION_FILE +echo "#endif" >> $OPTION_FILE +echo "" >> $OPTION_FILE + +for option in $OPTION_FLAGS; do + defonly=`echo $option | sed 's/-D//'` + if test "$defonly" != "$option" + then + noequalsign=`echo $defonly | sed 's/=/ /'` + if test "$noequalsign" = "NDEBUG" || test "$noequalsign" = "DEBUG" + then + echo "not outputting (N)DEBUG to $OPTION_FILE" + continue + fi + + # allow user to igonore system options + ignoresys=no + if [[[ $noequalsign == _* ]]] ; + then + ignoresys=yes + echo "#ifndef WOLFSSL_OPTIONS_IGNORE_SYS" >> $OPTION_FILE + fi + + noarg=`echo $defonly | sed 's/=.*//'` + echo "#undef $noarg" >> $OPTION_FILE + echo "#define $noequalsign" >> $OPTION_FILE + + if test "$ignoresys" = "yes" + then + echo "#endif" >> $OPTION_FILE + fi + + echo "" >> $OPTION_FILE + else + echo "option w/o begin -D is $option, not saving to $OPTION_FILE" + fi +done + +echo "" >> $OPTION_FILE +echo "#ifdef __cplusplus" >> $OPTION_FILE +echo "}" >> $OPTION_FILE +echo "#endif" >> $OPTION_FILE +echo "" >> $OPTION_FILE +echo "" >> $OPTION_FILE +echo "#endif /* WOLFMTPM_OPTIONS_H */" >> $OPTION_FILE +echo "" >> $OPTION_FILE +echo + + # output config summary echo "---" echo "Configuration summary for $PACKAGE_NAME version $VERSION" diff --git a/m4/ax_harden_compiler_flags.m4 b/m4/ax_harden_compiler_flags.m4 index a8d7743..c0ee1b1 100644 --- a/m4/ax_harden_compiler_flags.m4 +++ b/m4/ax_harden_compiler_flags.m4 @@ -60,11 +60,13 @@ # AX_APPEND_COMPILE_FLAGS([-Wlogical-op],,[$ax_append_compile_cflags_extra]) # AX_APPEND_COMPILE_FLAGS([-fstack-check],,[$ax_append_compile_cflags_extra]) -- problems with fastmath stack size checks # AX_APPEND_COMPILE_FLAGS([-floop-parallelize-all],,[$ax_append_compile_cflags_extra]) -- causes RSA verify problem on x64 +# AX_APPEND_COMPILE_FLAGS([-Wunreachable-code],,[$ax_append_compile_cflags_extra]) -- older clang and when gcc had it are buggy +# AX_APPEND_COMPILE_FLAGS([-fPIE],,[$ax_append_compile_cflags_extra]) -- Flag for executables not libraries -#serial 4 +#serial 4.2 +# changes: deleted the clearing of CFLAGS AC_DEFUN([AX_HARDEN_LINKER_FLAGS], [ - AC_REQUIRE([AX_CHECK_LINK_FLAG]) AC_REQUIRE([AX_VCS_CHECKOUT]) AC_REQUIRE([AX_DEBUG]) @@ -93,12 +95,10 @@ ]) AC_DEFUN([AX_HARDEN_CC_COMPILER_FLAGS], [ - AC_REQUIRE([AX_APPEND_COMPILE_FLAGS]) AC_REQUIRE([AX_HARDEN_LINKER_FLAGS]) AC_LANG_PUSH([C]) - CFLAGS= ac_cv_warnings_as_errors=no ax_append_compile_cflags_extra= AS_IF([test "$ac_cv_vcs_checkout" = "yes"],[ @@ -227,7 +227,6 @@ ]) AC_DEFUN([AX_CC_OTHER_FLAGS], [ - AC_REQUIRE([AX_APPEND_COMPILE_FLAGS]) AC_REQUIRE([AX_HARDEN_CC_COMPILER_FLAGS]) AC_LANG_PUSH([C]) diff --git a/wolftpm/include.am b/wolftpm/include.am index 7d82253..64db084 100644 --- a/wolftpm/include.am +++ b/wolftpm/include.am @@ -8,4 +8,5 @@ nobase_include_HEADERS+= \ wolftpm/tpm2_tis.h \ wolftpm/tpm2_wrap.h \ wolftpm/version.h \ - wolftpm/visibility.h + wolftpm/visibility.h \ + wolftpm/options.h diff --git a/wolftpm/options.h.in b/wolftpm/options.h.in new file mode 100644 index 0000000..54a21d3 --- /dev/null +++ b/wolftpm/options.h.in @@ -0,0 +1,39 @@ +/* options.h.in + * + * Copyright (C) 2006-2018 wolfSSL Inc. + * + * This file is part of wolfTPM. + * + * wolfTPM 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 2 of the License, or + * (at your option) any later version. + * + * wolfTPM 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ + + +/* default blank options for autoconf */ + +#ifndef WOLFTPM_OPTIONS_H +#define WOLFTPM_OPTIONS_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* WOLFTPM_OPTIONS_H */