From f81eafeacb674cda2af57aec8e3ce49622338e44 Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Fri, 25 Sep 2015 08:58:49 +0200 Subject: [PATCH] 8137014: Various improvements in build infrastructure Co-authored-by: Erik Joelsson Reviewed-by: erikj --- common/bin/compare.sh | 67 +++++++++++++++++-------------- make/Init.gmk | 6 ++- make/InitSupport.gmk | 6 ++- make/common/JavaCompilation.gmk | 50 ++++++++++++++--------- make/common/NativeCompilation.gmk | 21 ++++++---- 5 files changed, 91 insertions(+), 59 deletions(-) diff --git a/common/bin/compare.sh b/common/bin/compare.sh index ce527af478d..77d51c41df0 100644 --- a/common/bin/compare.sh +++ b/common/bin/compare.sh @@ -88,23 +88,19 @@ diff_text() { TMP=$(LC_ALL=C $DIFF $OTHER_FILE $THIS_FILE | \ $GREP '^[<>]' | \ $SED -e '/[<>] \* from.*\.idl/d' \ - -e '/[<>] \*.*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \ + -e '/[<>] .*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \ -e '/[<>] \*.*[0-9]\{4\} [0-9][0-9]*:[0-9]\{2\}:[0-9]\{2\}.*/d' \ -e '/\/\/ Generated from input file.*/d' \ -e '/\/\/ This file was generated AUTOMATICALLY from a template file.*/d' \ -e '/\/\/ java GenerateCharacter.*/d') fi # Ignore date strings in class files. - # On Macosx the system sources for generated java classes produce different output on - # consequtive invocations seemingly randomly. - # For example a method parameter randomly named "thePoint" or "aPoint". Ignore this. # Anonymous lambda classes get randomly assigned counters in their names. if test "x$SUFFIX" = "xclass"; then # To improve performance when large diffs are found, do a rough filtering of classes # elibeble for these exceptions if $GREP -R -e '[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}' \ -e '[0-9]\{2\}/[0-9]\{2\}/[0-9]\{4\}' \ - -e thePoint -e aPoint -e setItemsPtr \ -e 'lambda\$[a-zA-Z0-9]*\$[0-9]' ${THIS_FILE} > /dev/null; then $JAVAP -c -constants -l -p "${OTHER_FILE}" > ${OTHER_FILE}.javap $JAVAP -c -constants -l -p "${THIS_FILE}" > ${THIS_FILE}.javap @@ -112,9 +108,6 @@ diff_text() { $GREP '^[<>]' | \ $SED -e '/[<>].*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \ -e '/[0-9]\{2\}\/[0-9]\{2\}\/[0-9]\{4\}/d' \ - -e '/[<>].*Point Lcom\/apple\/jobjc\/foundation\/NSPoint;/d' \ - -e '/[<>].*public com\.apple\.jobjc\.Pointer].*public void setItemsPtr(com\.apple\.jobjc\.Pointer].*lambda\$[a-zA-Z0-9]*\$[0-9]*/d') fi fi @@ -313,7 +306,7 @@ compare_general_files() { ! -name "jspawnhelper" \ | $GREP -v "./bin/" | $SORT | $FILTER) - echo General files... + echo Other files with binary differences... for f in $GENERAL_FILES do if [ -e $OTHER_DIR/$f ]; then @@ -590,7 +583,7 @@ compare_bin_file() { ORIG_THIS_FILE="$THIS_FILE" ORIG_OTHER_FILE="$OTHER_FILE" - if [[ "$STRIP_BEFORE_COMPARE" = *"$BIN_FILE"* ]]; then + if [ "$STRIP_ALL" = "true" ] || [[ "$STRIP_BEFORE_COMPARE" = *"$BIN_FILE"* ]]; then THIS_STRIPPED_FILE=$FILE_WORK_DIR/this/$NAME OTHER_STRIPPED_FILE=$FILE_WORK_DIR/other/$NAME $MKDIR -p $FILE_WORK_DIR/this $FILE_WORK_DIR/other @@ -722,7 +715,7 @@ compare_bin_file() { fi fi - if [[ "$SORT_SYMBOLS" = *"$BIN_FILE"* ]]; then + if [ "$SORT_ALL_SYMBOLS" = "true" ] || [[ "$SORT_SYMBOLS" = *"$BIN_FILE"* ]]; then SYM_SORT_CMD="sort" else SYM_SORT_CMD="cat" @@ -810,31 +803,34 @@ compare_bin_file() { if [ -z "$FULLDUMP_DIFF_FILTER" ]; then FULLDUMP_DIFF_FILTER="$CAT" fi - $FULLDUMP_CMD $OTHER_FILE | eval "$FULLDUMP_DIFF_FILTER" > $WORK_FILE_BASE.fulldump.other 2>&1 - $FULLDUMP_CMD $THIS_FILE | eval "$FULLDUMP_DIFF_FILTER" > $WORK_FILE_BASE.fulldump.this 2>&1 + $FULLDUMP_CMD $OTHER_FILE | eval "$FULLDUMP_DIFF_FILTER" \ + > $WORK_FILE_BASE.fulldump.other 2>&1 + $FULLDUMP_CMD $THIS_FILE | eval "$FULLDUMP_DIFF_FILTER" \ + > $WORK_FILE_BASE.fulldump.this 2>&1 - LC_ALL=C $DIFF $WORK_FILE_BASE.fulldump.other $WORK_FILE_BASE.fulldump.this > $WORK_FILE_BASE.fulldump.diff + LC_ALL=C $DIFF $WORK_FILE_BASE.fulldump.other $WORK_FILE_BASE.fulldump.this \ + > $WORK_FILE_BASE.fulldump.diff if [ -s $WORK_FILE_BASE.fulldump.diff ]; then - ELF_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.fulldump.diff | awk '{print $5}') - ELF_MSG=$($PRINTF "%8d" $ELF_DIFF_SIZE) - if [[ "$ACCEPTED_ELF_DIFF" != *"$BIN_FILE"* ]]; then - DIFF_ELF=true - if [[ "$KNOWN_ELF_DIFF" != *"$BIN_FILE"* ]]; then - ELF_MSG="*$ELF_MSG*" + FULLDUMP_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.fulldump.diff | awk '{print $5}') + FULLDUMP_MSG=$($PRINTF "%8d" $FULLDUMP_DIFF_SIZE) + if [[ "$ACCEPTED_FULLDUMP_DIFF" != *"$BIN_FILE"* ]]; then + DIFF_FULLDUMP=true + if [[ "$KNOWN_FULLDUMP_DIFF" != *"$BIN_FILE"* ]]; then + FULLDUMP_MSG="*$FULLDUMP_MSG*" REGRESSIONS=true else - ELF_MSG=" $ELF_MSG " + FULLDUMP_MSG=" $FULLDUMP_MSG " fi else - ELF_MSG="($ELF_MSG)" - DIFF_ELF= + FULLDUMP_MSG="($FULLDUMP_MSG)" + DIFF_FULLDUMP= fi else - ELF_MSG=" " - DIFF_ELF= - if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then - ELF_MSG=" ! " + FULLDUMP_MSG=" " + DIFF_FULLDUMP= + if [[ "$KNOWN_FULLDUMP_DIFF $ACCEPTED_FULLDUMP_DIFF" = *"$BIN_FILE"* ]]; then + FULLDUMP_MSG=" ! " fi fi fi @@ -845,7 +841,7 @@ compare_bin_file() { # To get a raw diff with the complete disassembly, set # DIS_DIFF_FILTER="$CAT" if [ -z "$DIS_DIFF_FILTER" ]; then - DIS_DIFF_FILTER="$GREP -v ' # .* <.*>$'" + DIS_DIFF_FILTER="$GREP -v ' # .* <.*>$' | $SED -r -e 's/(\b|x)([0-9a-fA-F]+)(\b|:|>)/X/g'" fi $DIS_CMD $OTHER_FILE | $GREP -v $NAME | eval "$DIS_DIFF_FILTER" > $WORK_FILE_BASE.dis.other 2>&1 $DIS_CMD $THIS_FILE | $GREP -v $NAME | eval "$DIS_DIFF_FILTER" > $WORK_FILE_BASE.dis.this 2>&1 @@ -877,12 +873,12 @@ compare_bin_file() { fi - if [ -n "$DIFF_BIN$DIFF_SIZE$DIFF_SYM$DIFF_DEP$DIFF_ELF$DIFF_DIS" ] || [ -n "$VERBOSE" ]; then + if [ -n "$DIFF_BIN$DIFF_SIZE$DIFF_SYM$DIFF_DEP$DIFF_FULLDUMP$DIFF_DIS" ] || [ -n "$VERBOSE" ]; then if [ -n "$BIN_MSG" ]; then echo -n "$BIN_MSG:"; fi if [ -n "$SIZE_MSG" ]; then echo -n "$SIZE_MSG:"; fi if [ -n "$SYM_MSG" ]; then echo -n "$SYM_MSG:"; fi if [ -n "$DEP_MSG" ]; then echo -n "$DEP_MSG:"; fi - if [ -n "$ELF_MSG" ]; then echo -n "$ELF_MSG:"; fi + if [ -n "$FULLDUMP_MSG" ]; then echo -n "$FULLDUMP_MSG:"; fi if [ -n "$DIS_MSG" ]; then echo -n "$DIS_MSG:"; fi echo " $BIN_FILE" if [ "$SHOW_DIFFS" = "true" ]; then @@ -1015,6 +1011,9 @@ if [ -z "$1" ] || [ "$1" = "-h" ] || [ "$1" = "-?" ] || [ "$1" = "/h" ] || [ "$1 echo "-vv More verbose output, shows diff output of all comparisons" echo "-o [OTHER] Compare with build in other directory. Will default to the old build directory" echo "" + echo "--sort-symbols Sort all symbols before comparing" + echo "--strip Strip all binaries before comparing" + echo "" echo "[FILTER] List filenames in the image to compare, works for jars, zips, libs and execs" echo "Example:" echo "bash ./common/bin/compareimages.sh CodePointIM.jar" @@ -1107,6 +1106,12 @@ while [ -n "$1" ]; do shift shift ;; + --sort-symbols) + SORT_ALL_SYMBOLS=true + ;; + --strip) + STRIP_ALL=true + ;; *) CMP_NAMES=false CMP_PERMS=false @@ -1223,7 +1228,7 @@ if [ "$SKIP_DEFAULT" != "true" ]; then OTHER_JDK_BUNDLE="$OTHER/images/jdk-bundle" OTHER_JRE_BUNDLE="$OTHER/images/jre-bundle" fi - echo "Also comparing macosx bundles" + echo "Also comparing jdk macosx bundles" echo " $THIS_JDK_BUNDLE" echo " $OTHER_JDK_BUNDLE" fi diff --git a/make/Init.gmk b/make/Init.gmk index 923a063b6b3..38d83db0e3a 100644 --- a/make/Init.gmk +++ b/make/Init.gmk @@ -341,7 +341,11 @@ else # HAS_SPEC=true post-compare-build: # Compare first and second build. Ignore any error code from compare.sh. $(ECHO) "Comparing between comparison rebuild (this/new) and baseline (other/old)" - +(cd $(OUTPUT_ROOT) && ./compare.sh $(COMPARE_BUILD_COMP_OPTS) -o $(OUTPUT_ROOT).OLD || true) + ifneq ($(COMPARE_BUILD_COMP_DIR), ) + +(cd $(OUTPUT_ROOT) && ./compare.sh $(COMPARE_BUILD_COMP_OPTS) -2dirs $(OUTPUT_ROOT)/$(COMPARE_BUILD_COMP_DIR) $(OUTPUT_ROOT).OLD/$(COMPARE_BUILD_COMP_DIR) || true) + else + +(cd $(OUTPUT_ROOT) && ./compare.sh $(COMPARE_BUILD_COMP_OPTS) -o $(OUTPUT_ROOT).OLD || true) + endif .PHONY: print-targets print-modules reconfigure main on-failure endif diff --git a/make/InitSupport.gmk b/make/InitSupport.gmk index 6129fb0aa53..61719916a27 100644 --- a/make/InitSupport.gmk +++ b/make/InitSupport.gmk @@ -313,7 +313,8 @@ else # $(HAS_SPEC)=true # Parse COMPARE_BUILD into COMPARE_BUILD_* # Syntax: COMPARE_BUILD=CONF=:PATCH=: - # MAKE=:COMP_OPTS=| + # MAKE=:COMP_OPTS=: + # COMP_DIR=| # If neither CONF or PATCH is given, assume means CONF if it # begins with "--", otherwise assume it means PATCH. # MAKE and COMP_OPTS can only be used with CONF and/or PATCH specified. @@ -334,6 +335,9 @@ else # $(HAS_SPEC)=true $$(if $$(filter COMP_OPTS=%, $$(part)), \ $$(eval COMPARE_BUILD_COMP_OPTS=$$(strip $$(subst +, , $$(patsubst COMP_OPTS=%, %, $$(part))))) \ ) \ + $$(if $$(filter COMP_DIR=%, $$(part)), \ + $$(eval COMPARE_BUILD_COMP_DIR=$$(strip $$(subst +, , $$(patsubst COMP_DIR=%, %, $$(part))))) \ + ) \ ) else # Separate handling for single field case, to allow for spaces in values. diff --git a/make/common/JavaCompilation.gmk b/make/common/JavaCompilation.gmk index 9524c4b57ea..0e3ec13642c 100644 --- a/make/common/JavaCompilation.gmk +++ b/make/common/JavaCompilation.gmk @@ -155,6 +155,7 @@ define SetupArchiveBody # When this macro is run in the same makefile as the java compilation, dependencies are # transfered in make variables. When the macro is run in a different makefile than the # java compilation, the dependencies need to be found in the filesystem. + $1_ORIG_DEPS := $$($1_DEPENDENCIES) ifeq ($$($1_DEPENDENCIES), ) # Add all source roots to the find cache since we are likely going to run find # on these more than once. The cache will only be updated if necessary. @@ -266,7 +267,8 @@ define SetupArchiveBody # Include all variables of significance in the vardeps file $1_VARDEPS := $(JAR) $$($1_JAR_CREATE_OPTIONS) $$($1_MANIFEST) \ - $$($1_JARMAIN) $$($1_EXTRA_MANIFEST_ATTR) + $$($1_JARMAIN) $$($1_EXTRA_MANIFEST_ATTR) $$($1_ORIG_DEPS) $$($1_SRCS) \ + $$($1_INCLUDES) $$($1_EXCLUDES) $$($1_EXCLUDE_FILES) $$($1_EXTRA_FILES) $1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, $$(dir $$($1_JAR))_the.$$($1_JARNAME).vardeps) # Here is the rule that creates/updates the jar file. @@ -280,7 +282,7 @@ define SetupArchiveBody # potential changes. $$(if $$(filter $$($1_VARDEPS_FILE) $$($1_MANIFEST), $$?), \ $$(if $$($1_MANIFEST), \ - $(CP) $$($1_MANIFEST) $$($1_MANIFEST_FILE) $$(NEWLINE) \ + $(SED) -e '$(DOLLAR)$(DOLLAR)a\' $$($1_MANIFEST) > $$($1_MANIFEST_FILE) $$(NEWLINE) \ , \ $(RM) $$($1_MANIFEST_FILE) && $(TOUCH) $$($1_MANIFEST_FILE) $$(NEWLINE)) \ $$(if $$($1_JARMAIN), \ @@ -417,6 +419,7 @@ endef # HEADERS:=path to directory where all generated c-headers are written. # DEPENDS:=Extra dependecy # DISABLE_SJAVAC:=Explicitly disable the use of sjavac for this compilation unit. +# KEEP_DUPS:=Do not remove duplicate file names from different source roots. SetupJavaCompilation = $(NamedParamsMacroTemplate) define SetupJavaCompilationBody @@ -469,19 +472,27 @@ define SetupJavaCompilationBody $1_SRCS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_SRCS)) endif - # Remove duplicate source files by keeping the first found of each duplicate. - # This allows for automatic overrides with custom or platform specific versions - # source files. - # - # For the smart javac wrapper case, add each removed file to an extra exclude - # file list to prevent sjavac from finding duplicate sources. - $1_SRCS := $$(strip $$(foreach s, $$($1_SRCS), \ - $$(eval relative_src := $$(call remove-prefixes, $$($1_SRC), $$(s))) \ - $$(if $$($1_$$(relative_src)), \ - $$(eval $1_SJAVAC_EXCLUDE_FILES += $$(s)), \ - $$(eval $1_$$(relative_src) := 1) $$(s)))) + ifneq ($$($1_KEEP_DUPS), true) + # Remove duplicate source files by keeping the first found of each duplicate. + # This allows for automatic overrides with custom or platform specific versions + # source files. + # + # For the smart javac wrapper case, add each removed file to an extra exclude + # file list to prevent sjavac from finding duplicate sources. + $1_SRCS := $$(strip $$(foreach s, $$($1_SRCS), \ + $$(eval relative_src := $$(call remove-prefixes, $$($1_SRC), $$(s))) \ + $$(if $$($1_$$(relative_src)), \ + $$(eval $1_SJAVAC_EXCLUDE_FILES += $$(s)), \ + $$(eval $1_$$(relative_src) := 1) $$(s)))) + endif - # Create the corresponding smart javac wrapper command line. + ifeq ($$(strip $$($1_SRCS)), ) + $$(error No source files found for $1) + endif + + $1_SAFE_NAME := $$(strip $$(subst /,_, $1)) + + # Create the corresponding smart javac wrapper command line. $1_SJAVAC_ARGS:=$$(addprefix -x ,$$(addsuffix /*,$$($1_EXCLUDES))) \ $$(addprefix -i ,$$(addsuffix /*,$$($1_INCLUDES))) \ $$(addprefix -xf *,$$(strip $$($1_EXCLUDE_FILES) $$($1_SJAVAC_EXCLUDE_FILES))) \ @@ -560,14 +571,15 @@ define SetupJavaCompilationBody $$(SPACE),%20,$$(subst $$(COMMA),%2C,$$(strip $$($1_SERVER_JVM) $$($1_SJAVAC)))) $1_VARDEPS := $$($1_JVM) $$($1_SJAVAC) $$($1_SJAVAC_ARGS) $$($1_FLAGS) \ - $$($1_HEADERS_ARG) $$($1_BIN) + $$($1_HEADERS_ARG) $$($1_BIN) $$($1_EXCLUDES) $$($1_INCLUDES) \ + $$($1_EXCLUDE_FILES) $$($1_INCLUDE_FILES) $1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, $$($1_BIN)/_the.$1.vardeps) $$($1_BIN)/_the.$1_batch: $$($1_SRCS) $$($1_DEPENDS) $$($1_VARDEPS_FILE) $(MKDIR) -p $$(@D) $$(dir $$($1_SJAVAC_PORTFILE)) $$(call ListPathsSafely,$1_SRCS,\n, >> $$($1_BIN)/_the.$1_batch.tmp) $(ECHO) Compiling $1 - $(call LogFailures, $$($1_BIN)/_the.$1_batch.log, $1, \ + $(call LogFailures, $$($1_BIN)/_the.$$($1_SAFE_NAME)_batch.log, $$($1_SAFE_NAME), \ $$($1_JVM) $$($1_SJAVAC) \ $$($1_REMOTE) \ -j 1 \ @@ -616,7 +628,9 @@ define SetupJavaCompilationBody $1_HEADER_TARGETS := $$($1_HEADERS)/_the.$1_headers endif - $1_VARDEPS := $$($1_JVM) $$($1_JAVAC) $$($1_FLAGS) $$($1_BIN) $$($1_HEADERS_ARG) + $1_VARDEPS := $$($1_JVM) $$($1_JAVAC) $$($1_FLAGS) $$($1_BIN) \ + $$($1_HEADERS_ARG) $$($1_EXCLUDES) $$($1_INCLUDES) \ + $$($1_EXCLUDE_FILES) $$($1_INCLUDE_FILES) $1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, $$($1_BIN)/_the.$1.vardeps) # When not using sjavac, pass along all sources to javac using an @file. @@ -625,7 +639,7 @@ define SetupJavaCompilationBody $(RM) $$($1_BIN)/_the.$1_batch $$($1_BIN)/_the.$1_batch.tmp $$(call ListPathsSafely,$1_SRCS,\n, >> $$($1_BIN)/_the.$1_batch.tmp) $(ECHO) Compiling `$(WC) $$($1_BIN)/_the.$1_batch.tmp | $(TR) -s ' ' | $(CUT) -f 2 -d ' '` files for $1 - $(call LogFailures, $$($1_BIN)/_the.$1_batch.log, $1, \ + $(call LogFailures, $$($1_BIN)/_the.$$($1_SAFE_NAME)_batch.log, $$($1_SAFE_NAME), \ $$($1_JVM) $$($1_JAVAC) $$($1_FLAGS) \ -implicit:none \ -d $$($1_BIN) $$($1_HEADERS_ARG) @$$($1_BIN)/_the.$1_batch.tmp) && \ diff --git a/make/common/NativeCompilation.gmk b/make/common/NativeCompilation.gmk index adba62283a1..4ae2fc8c47e 100644 --- a/make/common/NativeCompilation.gmk +++ b/make/common/NativeCompilation.gmk @@ -204,18 +204,18 @@ define add_native_source ifeq ($(TOOLCHAIN_TYPE)$$(filter %.s,$2), solstudio) # The Solaris studio compiler doesn't output the full path to the object file in the # generated deps files. Fixing it with sed. If compiling assembly, don't try this. - $(call LogFailures, $$($1_$2_OBJ).log, $1_$$(notdir $2), \ + $(call LogFailures, $$($1_$2_OBJ).log, $$($1_SAFE_NAME)_$$(notdir $2), \ $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP).tmp $(CC_OUT_OPTION)$$($1_$2_OBJ) $2) $(SED) 's|^$$(@F):|$$@:|' $$($1_$2_DEP).tmp > $$($1_$2_DEP) else - $(call LogFailures, $$($1_$2_OBJ).log, $1_$$(notdir $2), \ + $(call LogFailures, $$($1_$2_OBJ).log, $$($1_SAFE_NAME)_$$(notdir $2), \ $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2) endif else # The Visual Studio compiler lacks a feature for generating make dependencies, but by # setting -showIncludes, all included files are printed. These are filtered out and # parsed into make dependences. - ($(call LogFailures, $$($1_$2_OBJ).log, $1_$$(notdir $2), \ + ($(call LogFailures, $$($1_$2_OBJ).log, $$($1_SAFE_NAME)_$$(notdir $2), \ $$($1_$2_COMP) $$($1_$2_FLAGS) -showIncludes $$($1_$2_DEBUG_OUT_FLAGS) \ $(CC_OUT_OPTION)$$($1_$2_OBJ) $2) ; echo $$$$? > $$($1_$2_DEP).exitvalue) \ | $(TEE) $$($1_$2_DEP).raw | $(GREP) -v -e "^Note: including file:" \ @@ -353,6 +353,7 @@ define SetupNativeCompilationBody $1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME) $1_NOSUFFIX:=$$($1_PROGRAM) endif + $1_SAFE_NAME := $$(strip $$(subst /,_, $1)) ifeq (,$$($1_TARGET)) $$(error Neither PROGRAM, LIBRARY nor STATIC_LIBRARY has been specified for SetupNativeCompilation) @@ -414,6 +415,10 @@ define SetupNativeCompilationBody $1_SRCS += $$($1_EXTRA_FILES) + ifeq (,$$($1_SRCS)) + $$(error No sources found for $1 when looking inside the dirs $$($1_SRC)) + endif + # Calculate the expected output from compiling the sources (sort to remove duplicates. Also provides # a reproducable order on the input files to the linker). $1_EXPECTED_OBJS_FILENAMES := $$(call replace_with_obj_extension, $$(notdir $$($1_SRCS))) @@ -549,8 +554,8 @@ define SetupNativeCompilationBody else $(ECHO) $$(strip 'Updating $$($1_BASENAME)' \ $$(if $$(filter-out %.vardeps, $$?), \ - 'from $$(words $$(filter-out %.vardeps, $$?)) file(s)') \ - $$(if $$(filter %.vardeps, $$?), 'due to makefile changes')) + 'due to $$(words $$(filter-out %.vardeps, $$?)) file(s)', \ + $$(if $$(filter %.vardeps, $$?), 'due to makefile changes'))) endif $(TOUCH) $$@ @@ -674,7 +679,7 @@ define SetupNativeCompilationBody $$($1_TARGET): $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_REAL_MAPFILE) \ $$($1_VARDEPS_FILE) $(ECHO) $(LOG_INFO) "Linking $$($1_BASENAME)" - $(call LogFailures, $$($1_OBJECT_DIR)/$1_link.log, $1_link, \ + $(call LogFailures, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link.log, $$($1_SAFE_NAME)_link, \ $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $$($1_SYSROOT_LDFLAGS) \ $(LD_OUT_OPTION)$$@ \ $$($1_EXPECTED_OBJS) $$($1_RES) \ @@ -697,7 +702,7 @@ define SetupNativeCompilationBody # Generating a static library, ie object file archive. $$($1_TARGET): $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_VARDEPS_FILE) $(ECHO) $(LOG_INFO) "Archiving $$($1_STATIC_LIBRARY)" - $(call LogFailures, $$($1_OBJECT_DIR)/$1_link.log, $1_link, \ + $(call LogFailures, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link.log, $$($1_SAFE_NAME)_link, \ $$($1_AR) $$($1_ARFLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_EXPECTED_OBJS) \ $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX)) endif @@ -715,7 +720,7 @@ define SetupNativeCompilationBody $$($1_TARGET): $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_MANIFEST) \ $$($1_VARDEPS_FILE) $(ECHO) $(LOG_INFO) "Linking executable $$($1_BASENAME)" - $(call LogFailures, $$($1_OBJECT_DIR)/$1_link.log, $1_link, \ + $(call LogFailures, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link.log, $$($1_SAFE_NAME)_link, \ $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $$($1_SYSROOT_LDFLAGS) \ $(EXE_OUT_OPTION)$$($1_TARGET) \ $$($1_EXPECTED_OBJS) $$($1_RES) \