@@ -33,6 +33,8 @@ ifndef LIBWOLFSSL_NAME
3333 LIBWOLFSSL_NAME := libwolfssl
3434endif
3535
36+ module : $(LIBWOLFSSL_NAME ) .ko
37+
3638all : $(LIBWOLFSSL_NAME ) .ko $(LIBWOLFSSL_NAME ) .ko.signed
3739
3840ifndef MODULE_TOP
@@ -249,6 +251,7 @@ $(LIBWOLFSSL_NAME).ko:
249251 echo ' CPPFLAGS = "$(CPPFLAGS)"' ;
250252 echo ' AM_CFLAGS = "$(AM_CFLAGS)"' ;
251253 echo ' CFLAGS = "$(CFLAGS)"' ;
254+ echo ' HOSTCFLAGS = "$(HOSTCFLAGS)"' ;
252255 echo ' KERNEL_EXTRA_CFLAGS = "$(KERNEL_EXTRA_CFLAGS)"' ;
253256 echo ' FIPS_OPTEST = "$(FIPS_OPTEST)"' ;
254257 echo ' AM_CCASFLAGS = "$(AM_CCASFLAGS)"' ;
@@ -261,6 +264,7 @@ $(LIBWOLFSSL_NAME).ko:
261264 echo ' host_triplet = "$(host_triplet)"' ;
262265 echo ' build_triplet = "$(build_triplet)"' ;
263266 echo ' CC = "$(CC)"' ;
267+ echo ' HOSTCC = "$(HOSTCC)"' ;
264268 echo ' AS = "$(AS)"' ;
265269 echo ' LD = "$(LD)"' ;
266270 echo ' READELF = "$(READELF)"' ;
@@ -302,21 +306,25 @@ ifeq "$(ENABLED_LINUXKM_PIE)" "yes"
302306 @RELOC_TMP=$$(mktemp "$(MAKE_TMPDIR)/wc_linuxkm_pie_reloc_tab.c.XXXXXX")
303307 @trap 'rm "$$RELOC_TMP"' EXIT
304308 @if [[ -f "$@" ]]; then touch -r "$@" "$$RELOC_TMP"; fi
305- +$(MAKE) ARCH='$(KERNEL_ARCH)' $(OVERRIDE_PATHS) $(CROSS_COMPILE) -C '$(KERNEL_ROOT)' M='$(MODULE_TOP)' $(KBUILD_EXTRA_FLAGS) CC_FLAGS_FTRACE=
309+ # --no-silent works around make bug that otherwise leads to "No rule to make target 's'. Stop." (due to a bug around $(MAKEFLAGS)) in --quiet builds.
310+ +$(MAKE) $(QFLAG) --no-print-directory --no-silent ARCH='$(KERNEL_ARCH)' $(OVERRIDE_PATHS) $(CROSS_COMPILE) -C '$(KERNEL_ROOT)' M='$(MODULE_TOP)' $(KBUILD_EXTRA_FLAGS) CC_FLAGS_FTRACE=
306311 # if the above make didn't build a fresh libwolfssl.ko, then the module is already up to date and we leave it untouched, assuring stability for purposes of module-update-fips-hash.
307312 @if [[ ! "$@" -nt "$$RELOC_TMP" ]]; then echo ' Module already up-to-date.'; exit 0; fi
308313 @SECTION_MAP=$$(mktemp)
309314 @trap 'rm "$$RELOC_TMP" "$$SECTION_MAP"' EXIT
310315 @export SECTION_MAP
311316 @$(READELF) --wide --sections --symbols "$@" | $(GENERATE_SECTION_MAP)
312317 @$(READELF) --wide --relocs "$@" | $(GENERATE_RELOC_TAB) >| '$(MODULE_TOP)/linuxkm/wc_linuxkm_pie_reloc_tab.c'
313- +$(MAKE) ARCH='$(KERNEL_ARCH)' $(OVERRIDE_PATHS) $(CROSS_COMPILE) -C '$(KERNEL_ROOT)' M='$(MODULE_TOP)' $(KBUILD_EXTRA_FLAGS) CC_FLAGS_FTRACE=
318+ +$(MAKE) $(QFLAG) --no-print-directory --no-silent ARCH='$(KERNEL_ARCH)' $(OVERRIDE_PATHS) $(CROSS_COMPILE) -C '$(KERNEL_ROOT)' M='$(MODULE_TOP)' $(KBUILD_EXTRA_FLAGS) CC_FLAGS_FTRACE=
314319 @$(READELF) --wide --relocs "$@" | $(GENERATE_RELOC_TAB) >| "$$RELOC_TMP"
315320 @if diff '$(MODULE_TOP)/linuxkm/wc_linuxkm_pie_reloc_tab.c' "$$RELOC_TMP"; then echo " Relocation table is stable."; else echo "PIE failed: relocation table is unstable." 1>&2; exit 1; fi
316321else
317- +$(MAKE) ARCH='$(KERNEL_ARCH)' $(OVERRIDE_PATHS) $(CROSS_COMPILE) -C '$(KERNEL_ROOT)' M='$(MODULE_TOP)' $(KBUILD_EXTRA_FLAGS)
322+ # --no-silent works around make bug that otherwise leads to "No rule to make target 's'. Stop." (due to a bug around $(MAKEFLAGS)) in --quiet builds.
323+ +$(MAKE) $(QFLAG) --no-print-directory --no-silent ARCH='$(KERNEL_ARCH)' $(OVERRIDE_PATHS) $(CROSS_COMPILE) -C '$(KERNEL_ROOT)' M='$(MODULE_TOP)' $(KBUILD_EXTRA_FLAGS)
318324endif
319325
326+ $(MODULE_TOP ) /$(LIBWOLFSSL_NAME ) .ko : $(LIBWOLFSSL_NAME ) .ko
327+
320328.PHONY : module-update-fips-hash
321329module-update-fips-hash : $(LIBWOLFSSL_NAME ) .ko
322330 @set -e
@@ -335,7 +343,7 @@ module-update-fips-hash: $(LIBWOLFSSL_NAME).ko
335343 if [[ ' $(FIPS_HASH)' == " $$ current_verifyCore" ]]; then echo ' Supplied FIPS_HASH matches existing verifyCore -- no update needed.' ; exit 0; fi ; \
336344 echo -n ' $(FIPS_HASH)' | dd bs=1 conv=notrunc of=" $<" seek=$$ verifyCore_offset count=64 status=none && \
337345 echo " FIPS verifyCore updated successfully." && \
338- if [[ -f '$(LIBWOLFSSL_NAME).ko.signed' ]]; then $(MAKE) -C . '$(LIBWOLFSSL_NAME).ko.signed'; fi
346+ if [[ -f '$(LIBWOLFSSL_NAME).ko.signed' ]]; then $(MAKE) $(QFLAG) --no-print-directory --no-silent -C . '$(LIBWOLFSSL_NAME).ko.signed'; fi
339347
340348
341349# linuxkm-fips-hash implements offline (no-load) FIPS hash calculation and graft-in.
@@ -348,45 +356,61 @@ module-update-fips-hash: $(LIBWOLFSSL_NAME).ko
348356# depending on changes/config in the source directory. Also, aside from
349357# FIPS_FLAVOR, inherited configuration settings in the environment are cleansed.
350358
351- libwolfssl-user-build/src/.libs/libwolfssl.so :
352- @set -e
353- @$(RM ) -rf ' $(MODULE_TOP)/libwolfssl-user-build'
354- @mkdir ' $(MODULE_TOP)/libwolfssl-user-build'
359+ FRESH_MAKEFLAGS := $(patsubst -j% ,-j % ,$(filter -% ,$(filter-out -- --jobserver-auth=% ,$(MAKEFLAGS ) ) ) )
360+ FRESH_ENV := env -i HOME="$$HOME" PATH="/usr/local/bin:/usr/bin:/bin:$$PATH" LANG="$${LANG-C.UTF-8}" LC_ALL="$${LC_ALL-C.UTF-8}" TERM="$${TERM-dumb}"
361+
362+ .PHONY : $(MODULE_TOP ) /libwolfssl-user-build/src/.libs/libwolfssl.so
363+ $(MODULE_TOP ) /libwolfssl-user-build/src/.libs/libwolfssl.so : $(LIBWOLFSSL_NAME ) .ko
364+ @set -o errexit -o pipefail
365+ @if [[ ' $(SRC_TOP)/configure' -nt ' $@' ]]; then
366+ @ echo ' Purging stale libwolfssl-user-build tree.'
367+ @ $(RM ) -rf ' $(MODULE_TOP)/libwolfssl-user-build'
368+ @fi
369+ @mkdir -p ' $(MODULE_TOP)/libwolfssl-user-build'
355370 @cd ' $(MODULE_TOP)/libwolfssl-user-build'
356- @pushd ' $(SRC_TOP)' > /dev/null
357- @echo -n ' Populating tree of symlinks...'
358- @readarray -d ' ' -t srcfiles < <( find examples src support tests testsuite wolfcrypt wolfssl configure * .in build-aux debian rpm scripts certs doc mcapi cmake linuxkm/* .[ch] \( -name options.h -o -name user_settings\* \) -prune -o \( ! -type d \) \( -name ' *.[chsSi]' -o -name configure -o -name ' *.in' -o -name \* .sh -o -path support/\* -o -path build-aux/\* -o -path debian/\* -o -path rpm/\* -o -path scripts/\* -o -path certs/\* -o -path doc/\* -o -path mcapi/\* -o -path cmake/\* \) -print0)
359- @popd > /dev/null
360- @for file in " $$ {srcfiles[@]}" ; do if [[ ! -e " $$ file" ]]; then mkdir -p " $$ (dirname " $$ file" )" && cp --no-dereference --symbolic-link --no-clobber ' $(SRC_TOP)' /" $$ file" " $$ file" ; fi ; done
361- @echo ' done.'
362- @echo ' __attribute__ ((visibility("default"))) extern const char coreKey[];' > user_settings.h
363- @echo > user_settings_asm.h
364- @echo -n ' Configuring libwolfssl.so...'
365- @unset WOLFSSL_CFLAGS WOLFCRYPT_PIE_FILES ASFLAGS_FPUSIMD_ENABLE ASFLAGS_FPU_DISABLE_SIMD_ENABLE src_libwolfssl_la_OBJECTS WOLFSSL_ASFLAGS AM_CFLAGS WOLFSSL_OBJ_FILES ENABLED_LINUXKM_LKCAPI_REGISTER EXTRA_LDFLAGS CC LD
366- @./configure $(QFLAG ) $(VFLAG ) --disable-jobserver --enable-cryptonly --enable-fips=" $$ FIPS_FLAVOR" CFLAGS=' -DWC_SYM_RELOC_TABLES_SUPPORT -DWOLFCRYPT_FIPS_CORE_DYNAMIC_HASH_VALUE -DWOLFSSL_USER_SETTINGS -DWOLFSSL_USER_SETTINGS_ASM'
371+ @if [[ ! -e ' $(MODULE_TOP)/libwolfssl-user-build/configure' ]]; then
372+ @ pushd ' $(SRC_TOP)' > /dev/null
373+ @ echo -n ' Populating tree of symlinks for user libwolfssl.so build...'
374+ @ readarray -t srcfiles < <( find examples src support tests testsuite wolfcrypt wolfssl configure * .in build-aux debian rpm scripts certs doc mcapi cmake linuxkm/* .[ch] \( -name options.h -o -name user_settings\* \) -prune -o \( ! -type d \) \( -name ' *.[chsSi]' -o -name configure -o -name ' *.in' -o -name \* .sh -o -path support/\* -o -path build-aux/\* -o -path debian/\* -o -path rpm/\* -o -path scripts/\* -o -path certs/\* -o -path doc/\* -o -path mcapi/\* -o -path cmake/\* \) -print)
375+ @ popd > /dev/null
376+ @ for file in " $$ {srcfiles[@]}" ; do if [[ ! -e " $$ file" ]]; then mkdir -p " $$ (dirname " $$ file" )" && cp --no-dereference --symbolic-link --no-clobber ' $(SRC_TOP)' /" $$ file" " $$ file" ; fi ; done
377+ @ echo ' done.'
378+ @fi
379+ @if [[ ! -f user_settings.h ]]; then
380+ @ echo ' __attribute__ ((visibility("default"))) extern const char coreKey[];' > user_settings.h
381+ @ echo > user_settings_asm.h
382+ @fi
383+ @if [[ -f Makefile ]]; then
384+ @ echo ' Using existing Makefile for libwolfssl.so.'
385+ @else
386+ @ echo -n ' Configuring user libwolfssl.so...'
387+ @ $(FRESH_ENV ) ./configure $(QFLAG ) $(VFLAG ) --disable-jobserver --enable-cryptonly --enable-fips=" $$ FIPS_FLAVOR" CFLAGS=' -DWC_SYM_RELOC_TABLES_SUPPORT -DWOLFCRYPT_FIPS_CORE_DYNAMIC_HASH_VALUE -DWOLFSSL_USER_SETTINGS -DWOLFSSL_USER_SETTINGS_ASM' ' $(if $(HOSTCC),CC=$(HOSTCC))'
388+ @ echo ' done.'
389+ @fi
390+ @echo -n ' Building user libwolfssl.so...'
391+ @$(FRESH_ENV ) $(MAKE ) $(QFLAG ) $(FRESH_MAKEFLAGS ) > /dev/null
367392 @echo ' done.'
368- @echo -n ' Compiling and linking libwolfssl.so...'
369- + $( MAKE ) $( QFLAG ) > /dev/null
370- @echo ' done. '
371- @echo -n ' Fixing FIPS hash... '
372- @userhash= $$( wolfcrypt/test/testwolfcrypt 2>&1 | sed -n -E 's/^hash = (.+ ) $$ / \1 /p ' )
373- @if [[ -z " $$ userhash " ]] ; then echo ' FIPS hash not found! ' >&2 ; exit 1 ; fi
374- @find wolfcrypt/src -name ' *fips_test*o ' -delete
375- + $( MAKE ) $( QFLAG ) EXTRA_CFLAGS=-DWOLFCRYPT_FIPS_CORE_HASH_VALUE= " $$ userhash "
376- @echo ' done. '
377-
378- linuxkm-fips-hash : libwolfssl-user-build/src/.libs/libwolfssl.so linuxkm-fips-hash.c
393+ @echo -n ' Fixing FIPS hash in user libwolfssl.so...'
394+ @if ! userhash= $$( wolfcrypt/test/testwolfcrypt 2>&1 | sed -n -E 's/^hash = (.+ ) $$ / \1 /p ' ); then
395+ @ if [[ -z " $$ userhash " ]] ; then echo ' FIPS hash not found! ' >&2 ; exit 1 ; fi
396+ @ find wolfcrypt/src -name ' *fips_test*o ' -delete
397+ @ $( FRESH_ENV ) $( MAKE ) $( QFLAG ) $( FRESH_MAKEFLAGS ) EXTRA_CFLAGS=-DWOLFCRYPT_FIPS_CORE_HASH_VALUE= " $$ userhash " > /dev/null
398+ @ echo ' done. '
399+ @else
400+ @ @echo ' already matches (no update needed). '
401+ @fi
402+
403+ linuxkm-fips-hash : $( MODULE_TOP ) / libwolfssl-user-build/src/.libs/libwolfssl.so linuxkm-fips-hash.c
379404 @set -e
380405 @echo -n ' Compiling linuxkm-fips-hash...'
381- # note direct invocation of cc -- we are compiling for the build host, not the target host.
382- @cc -Wall -Wextra -O2 -I'$(MODULE_TOP)/libwolfssl-user-build' -o linuxkm-fips-hash linuxkm/linuxkm-fips-hash.c -L '$(MODULE_TOP)/libwolfssl-user-build/src/.libs' -Wl,-rpath-link='$(MODULE_TOP)/libwolfssl-user-build/src/.libs' -Wl,-rpath='$(MODULE_TOP)/libwolfssl-user-build/src/.libs' -lwolfssl
406+ @$(or $(HOSTCC ) ,cc) $(or $(HOSTCFLAGS ) ,-Wall -Wextra -O2) -I' $(MODULE_TOP)/libwolfssl-user-build' -o linuxkm-fips-hash linuxkm/linuxkm-fips-hash.c -L ' $(MODULE_TOP)/libwolfssl-user-build/src/.libs' -Wl,-rpath-link=' $(MODULE_TOP)/libwolfssl-user-build/src/.libs' -Wl,-rpath=' $(MODULE_TOP)/libwolfssl-user-build/src/.libs' -lwolfssl
383407 @echo ' done.'
384408
385409.PHONY : module-with-matching-fips-hash
386410module-with-matching-fips-hash : $(LIBWOLFSSL_NAME ) .ko linuxkm-fips-hash
387411 @set -e
388412 @./linuxkm-fips-hash-wrapper.sh " $<" $(QFLAG ) $(VFLAG )
389- +$(MAKE ) $(QFLAG ) -C . ' $(LIBWOLFSSL_NAME).ko.signed'
413+ +$(MAKE ) $(QFLAG ) --no-print-directory --no-silent - C . ' $(LIBWOLFSSL_NAME).ko.signed'
390414
391415.PHONY : module-with-matching-fips-hash-no-sign
392416module-with-matching-fips-hash-no-sign : $(LIBWOLFSSL_NAME ) .ko linuxkm-fips-hash
406430 ;;
407431 esac
408432 done < .config
409- if [[ "$${CONFIG_MODULE_SIG}" = "y" && -n "$${CONFIG_MODULE_SIG_KEY}" && \
433+ if [[ "$${CONFIG_MODULE_SIG}" != "y" ]]; then
434+ echo ' [skipping $@ -- CONFIG_MODULE_SIG is unset in target kernel]'
435+ elif [[ -n "$${CONFIG_MODULE_SIG_KEY}" && \
410436 -n "$${CONFIG_MODULE_SIG_HASH}" && ( ! -f '$(MODULE_TOP)/$@' || \
411437 '$(MODULE_TOP)/$<' -nt '$(MODULE_TOP)/$@' ) ]]; then
412438 CONFIG_MODULE_SIG_KEY="$${CONFIG_MODULE_SIG_KEY# \"}"
@@ -426,19 +452,22 @@ else
426452 if [[ "$(quiet)" != "silent_" ]]; then
427453 echo " Module $@ signed by $${CONFIG_MODULE_SIG_KEY}."
428454 fi
455+ elif [[ ! -f '$(MODULE_TOP)/$@' || '$(MODULE_TOP)/$<' -nt '$(MODULE_TOP)/$@' ]]; then
456+ echo 'Unable to generate $@ from $<: CONFIG_MODULE_SIG_KEY and/or CONFIG_MODULE_SIG_HASH is missing.' >&2
457+ exit 1
429458 fi
430459endif
431460
432461
433462.PHONY : install modules_install
434463install modules_install :
435- +$(MAKE ) -C $(KERNEL_ROOT ) M=$(MODULE_TOP ) src=$(SRC_TOP ) INSTALL_MOD_DIR=wolfssl modules_install
464+ +$(MAKE ) $( QFLAG ) --no-silent -C $(KERNEL_ROOT ) M=$(MODULE_TOP ) src=$(SRC_TOP ) INSTALL_MOD_DIR=wolfssl modules_install
436465
437466.PHONY : clean
438467# note, must supply $(MODULE_TOP) as the src value for clean so that Kbuild is included, else
439468# the top Makefile (which is not for the kernel build) would be included here.
440469clean :
441- +$(MAKE ) -C $(KERNEL_ROOT ) M=$(MODULE_TOP ) src=$(MODULE_TOP ) clean
470+ +$(MAKE ) $( QFLAG ) --no-silent -C $(KERNEL_ROOT ) M=$(MODULE_TOP ) src=$(MODULE_TOP ) clean
442471 $(RM ) -rf ' $(MODULE_TOP)/linuxkm'
443472 $(RM ) -rf ' $(MODULE_TOP)/wolfcrypt'
444473 $(RM ) -rf ' $(MODULE_TOP)/src'
0 commit comments