Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 1 | # |
Magnus Ihse Bursie | 6d2a538 | 2018-04-10 23:32:54 +0200 | [diff] [blame] | 2 | # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 3 | # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| 4 | # |
| 5 | # This code is free software; you can redistribute it and/or modify it |
| 6 | # under the terms of the GNU General Public License version 2 only, as |
| 7 | # published by the Free Software Foundation. Oracle designates this |
| 8 | # particular file as subject to the "Classpath" exception as provided |
| 9 | # by Oracle in the LICENSE file that accompanied this code. |
| 10 | # |
| 11 | # This code is distributed in the hope that it will be useful, but WITHOUT |
| 12 | # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| 13 | # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| 14 | # version 2 for more details (a copy is included in the LICENSE file that |
| 15 | # accompanied this code). |
| 16 | # |
| 17 | # You should have received a copy of the GNU General Public License version |
| 18 | # 2 along with this work; if not, write to the Free Software Foundation, |
| 19 | # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| 20 | # |
| 21 | # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| 22 | # or visit www.oracle.com if you need additional information or have any |
| 23 | # questions. |
| 24 | # |
| 25 | |
| 26 | ################################################################################ |
| 27 | # This file contains helper functions for Init.gmk. |
| 28 | # It is divided in two parts, depending on if a SPEC is present or not |
| 29 | # (HAS_SPEC is true or not). |
| 30 | ################################################################################ |
| 31 | |
| 32 | ifndef _INITSUPPORT_GMK |
| 33 | _INITSUPPORT_GMK := 1 |
| 34 | |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 35 | ifeq ($(HAS_SPEC),) |
Magnus Ihse Bursie | b826ae7 | 2017-03-03 12:57:57 +0100 | [diff] [blame] | 36 | |
Magnus Ihse Bursie | 8fe36be | 2018-06-11 20:18:38 +0200 | [diff] [blame] | 37 | # COMMA is defined in spec.gmk, but that is not included yet |
| 38 | COMMA := , |
| 39 | |
Magnus Ihse Bursie | b826ae7 | 2017-03-03 12:57:57 +0100 | [diff] [blame] | 40 | # Include the corresponding closed file, if present. |
Magnus Ihse Bursie | ecd3cd8 | 2017-10-05 11:02:18 +0200 | [diff] [blame] | 41 | ifneq ($(CUSTOM_MAKE_DIR), ) |
| 42 | -include $(CUSTOM_MAKE_DIR)/InitSupport.gmk |
| 43 | endif |
Magnus Ihse Bursie | b826ae7 | 2017-03-03 12:57:57 +0100 | [diff] [blame] | 44 | |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 45 | ############################################################################## |
| 46 | # Helper functions for the initial part of Init.gmk, before the spec file is |
| 47 | # loaded. Most of these functions provide parsing and setting up make options |
| 48 | # from the command-line. |
| 49 | ############################################################################## |
| 50 | |
| 51 | # Make control variables, handled by Init.gmk |
Magnus Ihse Bursie | b826ae7 | 2017-03-03 12:57:57 +0100 | [diff] [blame] | 52 | INIT_CONTROL_VARIABLES += LOG CONF CONF_NAME SPEC JOBS TEST_JOBS CONF_CHECK \ |
Magnus Ihse Bursie | d267afd | 2017-11-29 14:45:41 +0100 | [diff] [blame] | 53 | COMPARE_BUILD JTREG GTEST TEST_OPTS TEST_VM_OPTS |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 54 | |
| 55 | # All known make control variables |
| 56 | MAKE_CONTROL_VARIABLES := $(INIT_CONTROL_VARIABLES) TEST JDK_FILTER |
| 57 | |
| 58 | # Define a simple reverse function. |
| 59 | # Should maybe move to MakeBase.gmk, but we can't include that file now. |
| 60 | reverse = \ |
| 61 | $(if $(strip $(1)), $(call reverse, $(wordlist 2, $(words $(1)), $(1)))) \ |
| 62 | $(firstword $(1)) |
| 63 | |
| 64 | # The variable MAKEOVERRIDES contains variable assignments from the command |
| 65 | # line, but in reverse order to what the user entered. |
Magnus Ihse Bursie | 19b025d | 2015-09-21 09:32:07 +0200 | [diff] [blame] | 66 | # The '\#' <=> '\ 'dance is needed to keep values with space in them connected. |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 67 | COMMAND_LINE_VARIABLES := $(subst \#,\ , $(call reverse, $(subst \ ,\#,$(MAKEOVERRIDES)))) |
| 68 | |
Magnus Ihse Bursie | 7ba3b45 | 2015-04-07 09:06:24 +0200 | [diff] [blame] | 69 | # A list like FOO="val1" BAR="val2" containing all user-supplied make |
| 70 | # variables that we should propagate. |
Magnus Ihse Bursie | 19b025d | 2015-09-21 09:32:07 +0200 | [diff] [blame] | 71 | # The '\#' <=> '\ 'dance is needed to keep values with space in them connected. |
| 72 | USER_MAKE_VARS := $(subst \#,\ , $(filter-out $(addsuffix =%, $(INIT_CONTROL_VARIABLES)), \ |
| 73 | $(subst \ ,\#,$(MAKEOVERRIDES)))) |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 74 | |
Magnus Ihse Bursie | 7ba3b45 | 2015-04-07 09:06:24 +0200 | [diff] [blame] | 75 | # Setup information about available configurations, if any. |
Magnus Ihse Bursie | f627304 | 2017-10-16 08:43:42 +0200 | [diff] [blame] | 76 | ifneq ($(CUSTOM_ROOT), ) |
| 77 | build_dir=$(CUSTOM_ROOT)/build |
Erik Joelsson | 72c4ec5 | 2017-09-12 19:03:56 +0200 | [diff] [blame] | 78 | else |
Magnus Ihse Bursie | f627304 | 2017-10-16 08:43:42 +0200 | [diff] [blame] | 79 | build_dir=$(topdir)/build |
Erik Joelsson | 72c4ec5 | 2017-09-12 19:03:56 +0200 | [diff] [blame] | 80 | endif |
Magnus Ihse Bursie | 7ba3b45 | 2015-04-07 09:06:24 +0200 | [diff] [blame] | 81 | all_spec_files=$(wildcard $(build_dir)/*/spec.gmk) |
| 82 | # Extract the configuration names from the path |
| 83 | all_confs=$(patsubst %/spec.gmk, %, $(patsubst $(build_dir)/%, %, $(all_spec_files))) |
| 84 | |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 85 | # Check for unknown command-line variables |
| 86 | define CheckControlVariables |
| 87 | command_line_variables := $$(strip $$(foreach var, \ |
| 88 | $$(subst \ ,_,$$(MAKEOVERRIDES)), \ |
| 89 | $$(firstword $$(subst =, , $$(var))))) |
Magnus Ihse Bursie | 7ba3b45 | 2015-04-07 09:06:24 +0200 | [diff] [blame] | 90 | unknown_command_line_variables := $$(strip \ |
| 91 | $$(filter-out $$(MAKE_CONTROL_VARIABLES), $$(command_line_variables))) |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 92 | ifneq ($$(unknown_command_line_variables), ) |
| 93 | $$(info Note: Command line contains non-control variables:) |
| 94 | $$(foreach var, $$(unknown_command_line_variables), $$(info * $$(var)=$$($$(var)))) |
| 95 | $$(info Make sure it is not mistyped, and that you intend to override this variable.) |
| 96 | $$(info 'make help' will list known control variables.) |
| 97 | $$(info ) |
| 98 | endif |
| 99 | endef |
| 100 | |
| 101 | # Check for deprecated ALT_ variables |
| 102 | define CheckDeprecatedEnvironment |
| 103 | defined_alt_variables := $$(filter ALT_%, $$(.VARIABLES)) |
| 104 | ifneq ($$(defined_alt_variables), ) |
| 105 | $$(info Warning: You have the following ALT_ variables set:) |
| 106 | $$(foreach var, $$(defined_alt_variables), $$(info * $$(var)=$$($$(var)))) |
| 107 | $$(info ALT_ variables are deprecated, and may result in a failed build.) |
| 108 | $$(info Please clean your environment.) |
| 109 | $$(info ) |
| 110 | endif |
| 111 | endef |
| 112 | |
| 113 | # Check for invalid make flags like -j |
| 114 | define CheckInvalidMakeFlags |
| 115 | # This is a trick to get this rule to execute before any other rules |
| 116 | # MAKEFLAGS only indicate -j if read in a recipe (!) |
| 117 | $$(topdir)/make/Init.gmk: .FORCE |
| 118 | $$(if $$(findstring --jobserver, $$(MAKEFLAGS)), \ |
| 119 | $$(info Error: 'make -jN' is not supported, use 'make JOBS=N') \ |
| 120 | $$(error Cannot continue) \ |
| 121 | ) |
| 122 | .FORCE: |
| 123 | .PHONY: .FORCE |
| 124 | endef |
| 125 | |
| 126 | # Check that the CONF_CHECK option is valid and set up handling |
| 127 | define ParseConfCheckOption |
| 128 | ifeq ($$(CONF_CHECK), ) |
| 129 | # Default behavior is fail |
| 130 | CONF_CHECK := fail |
| 131 | else ifneq ($$(filter-out auto fail ignore, $$(CONF_CHECK)),) |
| 132 | $$(info Error: CONF_CHECK must be one of: auto, fail or ignore.) |
| 133 | $$(error Cannot continue) |
| 134 | endif |
| 135 | endef |
| 136 | |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 137 | define ParseConfAndSpec |
| 138 | ifneq ($$(origin SPEC), undefined) |
| 139 | # We have been given a SPEC, check that it works out properly |
| 140 | ifneq ($$(origin CONF), undefined) |
| 141 | # We also have a CONF argument. We can't have both. |
| 142 | $$(info Error: Cannot use CONF=$$(CONF) and SPEC=$$(SPEC) at the same time. Choose one.) |
| 143 | $$(error Cannot continue) |
| 144 | endif |
Erik Joelsson | 129c302 | 2015-12-09 11:44:40 +0100 | [diff] [blame] | 145 | ifneq ($$(origin CONF_NAME), undefined) |
| 146 | # We also have a CONF_NAME argument. We can't have both. |
| 147 | $$(info Error: Cannot use CONF_NAME=$$(CONF_NAME) and SPEC=$$(SPEC) at the same time. Choose one.) |
| 148 | $$(error Cannot continue) |
| 149 | endif |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 150 | ifeq ($$(wildcard $$(SPEC)),) |
| 151 | $$(info Error: Cannot locate spec.gmk, given by SPEC=$$(SPEC).) |
| 152 | $$(error Cannot continue) |
| 153 | endif |
| 154 | ifeq ($$(filter /%, $$(SPEC)),) |
| 155 | # If given with relative path, make it absolute |
| 156 | SPECS := $$(CURDIR)/$$(strip $$(SPEC)) |
| 157 | else |
| 158 | SPECS := $$(SPEC) |
| 159 | endif |
| 160 | |
| 161 | # For now, unset this SPEC variable. |
| 162 | override SPEC := |
| 163 | else |
| 164 | # Use spec.gmk files in the build output directory |
Magnus Ihse Bursie | 7ba3b45 | 2015-04-07 09:06:24 +0200 | [diff] [blame] | 165 | ifeq ($$(all_spec_files),) |
Magnus Ihse Bursie | f627304 | 2017-10-16 08:43:42 +0200 | [diff] [blame] | 166 | ifneq ($(CUSTOM_ROOT), ) |
| 167 | $$(info Error: No configurations found for $$(CUSTOM_ROOT).) |
| 168 | else |
| 169 | $$(info Error: No configurations found for $$(topdir).) |
| 170 | endif |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 171 | $$(info Please run 'bash configure' to create a configuration.) |
| 172 | $$(info ) |
| 173 | $$(error Cannot continue) |
| 174 | endif |
| 175 | |
Erik Joelsson | 129c302 | 2015-12-09 11:44:40 +0100 | [diff] [blame] | 176 | ifneq ($$(origin CONF_NAME), undefined) |
| 177 | ifneq ($$(origin CONF), undefined) |
| 178 | # We also have a CONF argument. We can't have both. |
| 179 | $$(info Error: Cannot use CONF=$$(CONF) and CONF_NAME=$$(CONF_NAME) at the same time. Choose one.) |
| 180 | $$(error Cannot continue) |
| 181 | endif |
| 182 | matching_conf := $$(strip $$(filter $$(CONF_NAME), $$(all_confs))) |
| 183 | ifeq ($$(matching_conf),) |
| 184 | $$(info Error: No configurations found matching CONF_NAME=$$(CONF_NAME).) |
| 185 | $$(info Available configurations in $$(build_dir):) |
| 186 | $$(foreach var, $$(all_confs), $$(info * $$(var))) |
| 187 | $$(error Cannot continue) |
| 188 | else ifneq ($$(words $$(matching_conf)), 1) |
| 189 | $$(info Error: Matching more than one configuration CONF_NAME=$$(CONF_NAME).) |
| 190 | $$(info Available configurations in $$(build_dir):) |
| 191 | $$(foreach var, $$(all_confs), $$(info * $$(var))) |
| 192 | $$(error Cannot continue) |
| 193 | else |
| 194 | $$(info Building configuration '$$(matching_conf)' (matching CONF_NAME=$$(CONF_NAME))) |
| 195 | endif |
| 196 | # Create a SPEC definition. This will contain the path to exactly one spec file. |
| 197 | SPECS := $$(build_dir)/$$(matching_conf)/spec.gmk |
| 198 | else ifneq ($$(origin CONF), undefined) |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 199 | # User have given a CONF= argument. |
| 200 | ifeq ($$(CONF),) |
| 201 | # If given CONF=, match all configurations |
| 202 | matching_confs := $$(strip $$(all_confs)) |
| 203 | else |
| 204 | # Otherwise select those that contain the given CONF string |
Magnus Ihse Bursie | 7ba3b45 | 2015-04-07 09:06:24 +0200 | [diff] [blame] | 205 | matching_confs := $$(strip $$(foreach var, $$(all_confs), \ |
| 206 | $$(if $$(findstring $$(CONF), $$(var)), $$(var)))) |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 207 | endif |
| 208 | ifeq ($$(matching_confs),) |
| 209 | $$(info Error: No configurations found matching CONF=$$(CONF).) |
| 210 | $$(info Available configurations in $$(build_dir):) |
| 211 | $$(foreach var, $$(all_confs), $$(info * $$(var))) |
| 212 | $$(error Cannot continue) |
| 213 | else |
Erik Joelsson | 8c55662 | 2016-01-16 13:01:43 +0100 | [diff] [blame] | 214 | # Don't repeat this output on make restarts caused by including |
| 215 | # generated files. |
| 216 | ifeq ($$(MAKE_RESTARTS),) |
| 217 | ifeq ($$(words $$(matching_confs)), 1) |
Magnus Ihse Bursie | 7fd078b | 2017-12-04 19:12:57 +0100 | [diff] [blame] | 218 | ifneq ($$(findstring $$(LOG_LEVEL), info debug trace),) |
| 219 | $$(info Building configuration '$$(matching_confs)' (matching CONF=$$(CONF))) |
| 220 | endif |
Erik Joelsson | 8c55662 | 2016-01-16 13:01:43 +0100 | [diff] [blame] | 221 | else |
| 222 | $$(info Building these configurations (matching CONF=$$(CONF)):) |
| 223 | $$(foreach var, $$(matching_confs), $$(info * $$(var))) |
| 224 | endif |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 225 | endif |
| 226 | endif |
| 227 | |
| 228 | # Create a SPEC definition. This will contain the path to one or more spec.gmk files. |
| 229 | SPECS := $$(addsuffix /spec.gmk, $$(addprefix $$(build_dir)/, $$(matching_confs))) |
| 230 | else |
| 231 | # No CONF or SPEC given, check the available configurations |
| 232 | ifneq ($$(words $$(all_spec_files)), 1) |
| 233 | $$(info Error: No CONF given, but more than one configuration found.) |
| 234 | $$(info Available configurations in $$(build_dir):) |
| 235 | $$(foreach var, $$(all_confs), $$(info * $$(var))) |
| 236 | $$(info Please retry building with CONF=<config pattern> (or SPEC=<spec file>).) |
| 237 | $$(info ) |
| 238 | $$(error Cannot continue) |
| 239 | endif |
| 240 | |
| 241 | # We found exactly one configuration, use it |
| 242 | SPECS := $$(strip $$(all_spec_files)) |
| 243 | endif |
| 244 | endif |
| 245 | endef |
| 246 | |
Magnus Ihse Bursie | 7ba3b45 | 2015-04-07 09:06:24 +0200 | [diff] [blame] | 247 | # Extract main targets from Main.gmk using the spec provided in $2. |
| 248 | # |
| 249 | # Param 1: FORCE = force generation of main-targets.gmk or LAZY = do not force. |
| 250 | # Param 2: The SPEC file to use. |
| 251 | define DefineMainTargets |
| 252 | |
| 253 | # We will start by making sure the main-targets.gmk file is removed, if |
| 254 | # make has not been restarted. By the -include, we will trigger the |
| 255 | # rule for generating the file (which is never there since we removed it), |
| 256 | # thus generating it fresh, and make will restart, incrementing the restart |
| 257 | # count. |
| 258 | main_targets_file := $$(dir $(strip $2))make-support/main-targets.gmk |
| 259 | |
| 260 | ifeq ($$(MAKE_RESTARTS),) |
| 261 | # Only do this if make has not been restarted, and if we do not force it. |
| 262 | ifeq ($(strip $1), FORCE) |
| 263 | $$(shell rm -f $$(main_targets_file)) |
| 264 | endif |
| 265 | endif |
| 266 | |
| 267 | $$(main_targets_file): |
| 268 | @( cd $$(topdir) && \ |
Erik Joelsson | 8c55662 | 2016-01-16 13:01:43 +0100 | [diff] [blame] | 269 | $$(MAKE) $$(MAKE_LOG_FLAGS) -r -R -f $$(topdir)/make/Main.gmk \ |
Magnus Ihse Bursie | 7ba3b45 | 2015-04-07 09:06:24 +0200 | [diff] [blame] | 270 | -I $$(topdir)/make/common SPEC=$(strip $2) NO_RECIPES=true \ |
Alexey Semenyuk | 2cfcf97 | 2017-03-30 21:23:07 +0200 | [diff] [blame] | 271 | $$(MAKE_LOG_VARS) \ |
Magnus Ihse Bursie | 7ba3b45 | 2015-04-07 09:06:24 +0200 | [diff] [blame] | 272 | create-main-targets-include ) |
| 273 | |
| 274 | # Now include main-targets.gmk. This will define ALL_MAIN_TARGETS. |
| 275 | -include $$(main_targets_file) |
| 276 | endef |
| 277 | |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 278 | define PrintConfCheckFailed |
| 279 | @echo ' ' |
| 280 | @echo "Please rerun configure! Easiest way to do this is by running" |
| 281 | @echo "'make reconfigure'." |
| 282 | @echo "This behavior may also be changed using CONF_CHECK=<ignore|auto>." |
| 283 | @echo ' ' |
| 284 | endef |
| 285 | |
| 286 | else # $(HAS_SPEC)=true |
| 287 | ############################################################################## |
| 288 | # Helper functions for the 'main' target. These functions assume a single, |
Magnus Ihse Bursie | 7ba3b45 | 2015-04-07 09:06:24 +0200 | [diff] [blame] | 289 | # proper and existing SPEC is included. |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 290 | ############################################################################## |
| 291 | |
Erik Joelsson | 72c4ec5 | 2017-09-12 19:03:56 +0200 | [diff] [blame] | 292 | include $(TOPDIR)/make/common/MakeBase.gmk |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 293 | |
| 294 | # Define basic logging setup |
Magnus Ihse Bursie | e84be60 | 2017-09-25 10:32:00 +0200 | [diff] [blame] | 295 | BUILD_LOG := $(OUTPUTDIR)/build.log |
| 296 | BUILD_PROFILE_LOG := $(OUTPUTDIR)/build-profile.log |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 297 | |
Erik Joelsson | f2c59f9 | 2016-04-22 10:48:12 +0200 | [diff] [blame] | 298 | BUILD_LOG_PIPE := > >($(TEE) -a $(BUILD_LOG)) 2> >($(TEE) -a $(BUILD_LOG) >&2) && wait |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 299 | |
Magnus Ihse Bursie | 0b6f8bb | 2018-02-16 18:51:35 +0100 | [diff] [blame] | 300 | ifneq ($(CUSTOM_ROOT), ) |
| 301 | topdir=$(CUSTOM_ROOT) |
| 302 | else |
| 303 | topdir=$(TOPDIR) |
| 304 | endif |
| 305 | |
Magnus Ihse Bursie | 19b025d | 2015-09-21 09:32:07 +0200 | [diff] [blame] | 306 | # Parse COMPARE_BUILD into COMPARE_BUILD_* |
| 307 | # Syntax: COMPARE_BUILD=CONF=<configure options>:PATCH=<patch file>: |
Magnus Ihse Bursie | f81eafe | 2015-09-25 08:58:49 +0200 | [diff] [blame] | 308 | # MAKE=<make targets>:COMP_OPTS=<compare script options>: |
Erik Joelsson | a5b9b52 | 2016-02-11 11:54:00 +0100 | [diff] [blame] | 309 | # COMP_DIR=<compare script base dir>|<default>: |
| 310 | # FAIL=<bool> |
Magnus Ihse Bursie | 19b025d | 2015-09-21 09:32:07 +0200 | [diff] [blame] | 311 | # If neither CONF or PATCH is given, assume <default> means CONF if it |
| 312 | # begins with "--", otherwise assume it means PATCH. |
| 313 | # MAKE and COMP_OPTS can only be used with CONF and/or PATCH specified. |
| 314 | # If any value contains "+", it will be replaced by space. |
Erik Joelsson | a5b9b52 | 2016-02-11 11:54:00 +0100 | [diff] [blame] | 315 | # FAIL can be set to false to have the return value of compare be ignored. |
Magnus Ihse Bursie | 19b025d | 2015-09-21 09:32:07 +0200 | [diff] [blame] | 316 | define ParseCompareBuild |
| 317 | ifneq ($$(COMPARE_BUILD), ) |
Magnus Ihse Bursie | 0b6f8bb | 2018-02-16 18:51:35 +0100 | [diff] [blame] | 318 | COMPARE_BUILD_OUTPUTDIR := $(topdir)/build/compare-build/$(CONF_NAME) |
Erik Joelsson | a5b9b52 | 2016-02-11 11:54:00 +0100 | [diff] [blame] | 319 | COMPARE_BUILD_FAIL := true |
Magnus Ihse Bursie | 209ebcf | 2015-11-10 11:41:21 +0100 | [diff] [blame] | 320 | |
Magnus Ihse Bursie | 19b025d | 2015-09-21 09:32:07 +0200 | [diff] [blame] | 321 | ifneq ($$(findstring :, $$(COMPARE_BUILD)), ) |
| 322 | $$(foreach part, $$(subst :, , $$(COMPARE_BUILD)), \ |
| 323 | $$(if $$(filter PATCH=%, $$(part)), \ |
| 324 | $$(eval COMPARE_BUILD_PATCH=$$(strip $$(patsubst PATCH=%, %, $$(part)))) \ |
| 325 | ) \ |
| 326 | $$(if $$(filter CONF=%, $$(part)), \ |
| 327 | $$(eval COMPARE_BUILD_CONF=$$(strip $$(subst +, , $$(patsubst CONF=%, %, $$(part))))) \ |
| 328 | ) \ |
| 329 | $$(if $$(filter MAKE=%, $$(part)), \ |
| 330 | $$(eval COMPARE_BUILD_MAKE=$$(strip $$(subst +, , $$(patsubst MAKE=%, %, $$(part))))) \ |
| 331 | ) \ |
| 332 | $$(if $$(filter COMP_OPTS=%, $$(part)), \ |
| 333 | $$(eval COMPARE_BUILD_COMP_OPTS=$$(strip $$(subst +, , $$(patsubst COMP_OPTS=%, %, $$(part))))) \ |
| 334 | ) \ |
Magnus Ihse Bursie | f81eafe | 2015-09-25 08:58:49 +0200 | [diff] [blame] | 335 | $$(if $$(filter COMP_DIR=%, $$(part)), \ |
| 336 | $$(eval COMPARE_BUILD_COMP_DIR=$$(strip $$(subst +, , $$(patsubst COMP_DIR=%, %, $$(part))))) \ |
| 337 | ) \ |
Erik Joelsson | a5b9b52 | 2016-02-11 11:54:00 +0100 | [diff] [blame] | 338 | $$(if $$(filter FAIL=%, $$(part)), \ |
| 339 | $$(eval COMPARE_BUILD_FAIL=$$(strip $$(subst +, , $$(patsubst FAIL=%, %, $$(part))))) \ |
| 340 | ) \ |
Magnus Ihse Bursie | 19b025d | 2015-09-21 09:32:07 +0200 | [diff] [blame] | 341 | ) |
| 342 | else |
| 343 | # Separate handling for single field case, to allow for spaces in values. |
| 344 | ifneq ($$(filter PATCH=%, $$(COMPARE_BUILD)), ) |
| 345 | COMPARE_BUILD_PATCH=$$(strip $$(patsubst PATCH=%, %, $$(COMPARE_BUILD))) |
| 346 | else ifneq ($$(filter CONF=%, $$(COMPARE_BUILD)), ) |
| 347 | COMPARE_BUILD_CONF=$$(strip $$(subst +, , $$(patsubst CONF=%, %, $$(COMPARE_BUILD)))) |
| 348 | else ifneq ($$(filter --%, $$(COMPARE_BUILD)), ) |
| 349 | # Assume CONF if value begins with -- |
| 350 | COMPARE_BUILD_CONF=$$(strip $$(subst +, , $$(COMPARE_BUILD))) |
| 351 | else |
| 352 | # Otherwise assume patch file |
| 353 | COMPARE_BUILD_PATCH=$$(strip $$(COMPARE_BUILD)) |
| 354 | endif |
| 355 | endif |
| 356 | ifneq ($$(COMPARE_BUILD_PATCH), ) |
Magnus Ihse Bursie | 0b6f8bb | 2018-02-16 18:51:35 +0100 | [diff] [blame] | 357 | ifneq ($$(wildcard $$(topdir)/$$(COMPARE_BUILD_PATCH)), ) |
Magnus Ihse Bursie | 19b025d | 2015-09-21 09:32:07 +0200 | [diff] [blame] | 358 | # Assume relative path, if file exists |
Magnus Ihse Bursie | 0b6f8bb | 2018-02-16 18:51:35 +0100 | [diff] [blame] | 359 | COMPARE_BUILD_PATCH := $$(wildcard $$(topdir)/$$(COMPARE_BUILD_PATCH)) |
Magnus Ihse Bursie | 19b025d | 2015-09-21 09:32:07 +0200 | [diff] [blame] | 360 | else ifeq ($$(wildcard $$(COMPARE_BUILD_PATCH)), ) |
| 361 | $$(error Patch file $$(COMPARE_BUILD_PATCH) does not exist) |
| 362 | endif |
| 363 | endif |
Erik Joelsson | a5b9b52 | 2016-02-11 11:54:00 +0100 | [diff] [blame] | 364 | ifneq ($$(COMPARE_BUILD_FAIL), true) |
| 365 | COMPARE_BUILD_IGNORE_RESULT := || true |
| 366 | endif |
Magnus Ihse Bursie | 19b025d | 2015-09-21 09:32:07 +0200 | [diff] [blame] | 367 | endif |
| 368 | endef |
| 369 | |
Magnus Ihse Bursie | 209ebcf | 2015-11-10 11:41:21 +0100 | [diff] [blame] | 370 | # Prepare for a comparison rebuild |
| 371 | define PrepareCompareBuild |
| 372 | $(ECHO) "Preparing for comparison rebuild" |
| 373 | # Apply patch, if any |
Magnus Ihse Bursie | ff76e20 | 2018-03-06 17:43:21 +0100 | [diff] [blame] | 374 | $(if $(COMPARE_BUILD_PATCH), cd $(topdir) && $(PATCH) -p1 < $(COMPARE_BUILD_PATCH)) |
Magnus Ihse Bursie | 209ebcf | 2015-11-10 11:41:21 +0100 | [diff] [blame] | 375 | # Move the first build away temporarily |
Magnus Ihse Bursie | 0b6f8bb | 2018-02-16 18:51:35 +0100 | [diff] [blame] | 376 | $(RM) -r $(topdir)/build/.compare-build-temp |
| 377 | $(MKDIR) -p $(topdir)/build/.compare-build-temp |
| 378 | $(MV) $(OUTPUTDIR) $(topdir)/build/.compare-build-temp |
Magnus Ihse Bursie | 209ebcf | 2015-11-10 11:41:21 +0100 | [diff] [blame] | 379 | # Restore an old compare-build, or create a new compare-build directory. |
Magnus Ihse Bursie | e84be60 | 2017-09-25 10:32:00 +0200 | [diff] [blame] | 380 | if test -d $(COMPARE_BUILD_OUTPUTDIR); then \ |
| 381 | $(MV) $(COMPARE_BUILD_OUTPUTDIR) $(OUTPUTDIR); \ |
Magnus Ihse Bursie | 209ebcf | 2015-11-10 11:41:21 +0100 | [diff] [blame] | 382 | else \ |
Magnus Ihse Bursie | e84be60 | 2017-09-25 10:32:00 +0200 | [diff] [blame] | 383 | $(MKDIR) -p $(OUTPUTDIR); \ |
Magnus Ihse Bursie | 209ebcf | 2015-11-10 11:41:21 +0100 | [diff] [blame] | 384 | fi |
| 385 | # Re-run configure with the same arguments (and possibly some additional), |
| 386 | # must be done after patching. |
Magnus Ihse Bursie | e84be60 | 2017-09-25 10:32:00 +0200 | [diff] [blame] | 387 | ( cd $(OUTPUTDIR) && PATH="$(ORIGINAL_PATH)" \ |
Magnus Ihse Bursie | 0b6f8bb | 2018-02-16 18:51:35 +0100 | [diff] [blame] | 388 | $(BASH) $(topdir)/configure $(CONFIGURE_COMMAND_LINE) $(COMPARE_BUILD_CONF)) |
Magnus Ihse Bursie | 209ebcf | 2015-11-10 11:41:21 +0100 | [diff] [blame] | 389 | endef |
| 390 | |
| 391 | # Cleanup after a compare build |
| 392 | define CleanupCompareBuild |
| 393 | # If running with a COMPARE_BUILD patch, reverse-apply it |
Magnus Ihse Bursie | ff76e20 | 2018-03-06 17:43:21 +0100 | [diff] [blame] | 394 | $(if $(COMPARE_BUILD_PATCH), cd $(topdir) && $(PATCH) -R -p1 < $(COMPARE_BUILD_PATCH)) |
Magnus Ihse Bursie | 209ebcf | 2015-11-10 11:41:21 +0100 | [diff] [blame] | 395 | # Move this build away and restore the original build |
Magnus Ihse Bursie | 0b6f8bb | 2018-02-16 18:51:35 +0100 | [diff] [blame] | 396 | $(MKDIR) -p $(topdir)/build/compare-build |
Magnus Ihse Bursie | e84be60 | 2017-09-25 10:32:00 +0200 | [diff] [blame] | 397 | $(MV) $(OUTPUTDIR) $(COMPARE_BUILD_OUTPUTDIR) |
Magnus Ihse Bursie | 0b6f8bb | 2018-02-16 18:51:35 +0100 | [diff] [blame] | 398 | $(MV) $(topdir)/build/.compare-build-temp/$(CONF_NAME) $(OUTPUTDIR) |
| 399 | $(RM) -r $(topdir)/build/.compare-build-temp |
Magnus Ihse Bursie | 209ebcf | 2015-11-10 11:41:21 +0100 | [diff] [blame] | 400 | endef |
| 401 | |
| 402 | # Do the actual comparison of two builds |
| 403 | define CompareBuildDoComparison |
| 404 | # Compare first and second build. Ignore any error code from compare.sh. |
| 405 | $(ECHO) "Comparing between comparison rebuild (this/new) and baseline (other/old)" |
| 406 | $(if $(COMPARE_BUILD_COMP_DIR), \ |
Magnus Ihse Bursie | e84be60 | 2017-09-25 10:32:00 +0200 | [diff] [blame] | 407 | +(cd $(COMPARE_BUILD_OUTPUTDIR) && ./compare.sh $(COMPARE_BUILD_COMP_OPTS) \ |
| 408 | -2dirs $(COMPARE_BUILD_OUTPUTDIR)/$(COMPARE_BUILD_COMP_DIR) \ |
| 409 | $(OUTPUTDIR)/$(COMPARE_BUILD_COMP_DIR) $(COMPARE_BUILD_IGNORE_RESULT)), \ |
| 410 | +(cd $(COMPARE_BUILD_OUTPUTDIR) && ./compare.sh $(COMPARE_BUILD_COMP_OPTS) \ |
| 411 | -o $(OUTPUTDIR) $(COMPARE_BUILD_IGNORE_RESULT)) \ |
Magnus Ihse Bursie | 209ebcf | 2015-11-10 11:41:21 +0100 | [diff] [blame] | 412 | ) |
| 413 | endef |
| 414 | |
| 415 | define PrintFailureReports |
Magnus Ihse Bursie | 6d2a538 | 2018-04-10 23:32:54 +0200 | [diff] [blame] | 416 | $(if $(filter none, $(LOG_REPORT)), , \ |
| 417 | $(if $(wildcard $(MAKESUPPORT_OUTPUTDIR)/failure-logs/*.log), \ |
| 418 | $(PRINTF) "\n=== Output from failing command(s) repeated here ===\n" $(NEWLINE) \ |
| 419 | $(foreach logfile, $(sort $(wildcard $(MAKESUPPORT_OUTPUTDIR)/failure-logs/*.log)), \ |
| 420 | $(PRINTF) "* For target $(notdir $(basename $(logfile))):\n" $(NEWLINE) \ |
| 421 | $(if $(filter all, $(LOG_REPORT)), \ |
| 422 | $(GREP) -v -e "^Note: including file:" < $(logfile) || true $(NEWLINE) \ |
| 423 | , \ |
| 424 | ($(GREP) -v -e "^Note: including file:" < $(logfile) || true) | $(HEAD) -n 12 $(NEWLINE) \ |
| 425 | if test `$(WC) -l < $(logfile)` -gt 12; then \ |
| 426 | $(ECHO) " ... (rest of output omitted)" ; \ |
| 427 | fi $(NEWLINE) \ |
| 428 | ) \ |
| 429 | ) \ |
| 430 | $(PRINTF) "\n* All command lines available in $(MAKESUPPORT_OUTPUTDIR)/failure-logs.\n" $(NEWLINE) \ |
| 431 | $(PRINTF) "=== End of repeated output ===\n" \ |
Magnus Ihse Bursie | 209ebcf | 2015-11-10 11:41:21 +0100 | [diff] [blame] | 432 | ) \ |
Magnus Ihse Bursie | 209ebcf | 2015-11-10 11:41:21 +0100 | [diff] [blame] | 433 | ) |
| 434 | endef |
| 435 | |
| 436 | define PrintBuildLogFailures |
Magnus Ihse Bursie | 6d2a538 | 2018-04-10 23:32:54 +0200 | [diff] [blame] | 437 | $(if $(filter none, $(LOG_REPORT)), , \ |
| 438 | if $(GREP) -q "recipe for target .* failed" $(BUILD_LOG) 2> /dev/null; then \ |
| 439 | $(PRINTF) "\n=== Make failed targets repeated here ===\n" ; \ |
| 440 | $(GREP) "recipe for target .* failed" $(BUILD_LOG) ; \ |
| 441 | $(PRINTF) "=== End of repeated output ===\n" ; \ |
| 442 | $(PRINTF) "\nHint: Try searching the build log for the name of the first failed target.\n" ; \ |
| 443 | else \ |
| 444 | $(PRINTF) "\nNo indication of failed target found.\n" ; \ |
| 445 | $(PRINTF) "Hint: Try searching the build log for '] Error'.\n" ; \ |
| 446 | fi \ |
| 447 | ) |
Magnus Ihse Bursie | 209ebcf | 2015-11-10 11:41:21 +0100 | [diff] [blame] | 448 | endef |
| 449 | |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 450 | define RotateLogFiles |
Erik Joelsson | 8c55662 | 2016-01-16 13:01:43 +0100 | [diff] [blame] | 451 | $(RM) $(BUILD_LOG).old 2> /dev/null && \ |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 452 | $(MV) $(BUILD_LOG) $(BUILD_LOG).old 2> /dev/null || true |
Alexey Semenyuk | 2cfcf97 | 2017-03-30 21:23:07 +0200 | [diff] [blame] | 453 | $(if $(findstring true, $(LOG_PROFILE_TIMES_FILE)), \ |
| 454 | $(RM) $(BUILD_PROFILE_LOG).old 2> /dev/null && \ |
| 455 | $(MV) $(BUILD_PROFILE_LOG) $(BUILD_PROFILE_LOG).old 2> /dev/null || true \ |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 456 | ) |
| 457 | endef |
| 458 | |
Magnus Ihse Bursie | d51f783 | 2018-06-14 11:46:53 +0200 | [diff] [blame] | 459 | # Failure logs are only supported for "parallel" main targets, not the |
| 460 | # (trivial) sequential make targets (such as clean and reconfigure), |
| 461 | # since the failure-logs directory creation will conflict with clean. |
Magnus Ihse Bursie | 6047d89 | 2015-09-03 11:05:49 +0200 | [diff] [blame] | 462 | define PrepareFailureLogs |
Erik Joelsson | 8c55662 | 2016-01-16 13:01:43 +0100 | [diff] [blame] | 463 | $(RM) -r $(MAKESUPPORT_OUTPUTDIR)/failure-logs 2> /dev/null && \ |
Magnus Ihse Bursie | 6047d89 | 2015-09-03 11:05:49 +0200 | [diff] [blame] | 464 | $(MKDIR) -p $(MAKESUPPORT_OUTPUTDIR)/failure-logs |
Magnus Ihse Bursie | b826ae7 | 2017-03-03 12:57:57 +0100 | [diff] [blame] | 465 | $(RM) $(MAKESUPPORT_OUTPUTDIR)/exit-with-error 2> /dev/null |
Magnus Ihse Bursie | 6047d89 | 2015-09-03 11:05:49 +0200 | [diff] [blame] | 466 | endef |
| 467 | |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 468 | # Remove any javac server logs and port files. This |
| 469 | # prevents a new make run to reuse the previous servers. |
| 470 | define PrepareSmartJavac |
| 471 | $(if $(SJAVAC_SERVER_DIR), \ |
| 472 | $(RM) -r $(SJAVAC_SERVER_DIR) 2> /dev/null && \ |
| 473 | $(MKDIR) -p $(SJAVAC_SERVER_DIR) \ |
| 474 | ) |
| 475 | endef |
| 476 | |
| 477 | define CleanupSmartJavac |
| 478 | [ -f $(SJAVAC_SERVER_DIR)/server.port ] && $(ECHO) Stopping sjavac server && \ |
| 479 | $(TOUCH) $(SJAVAC_SERVER_DIR)/server.port.stop; true |
| 480 | endef |
| 481 | |
Magnus Ihse Bursie | 44a1209 | 2016-01-30 10:25:15 +0100 | [diff] [blame] | 482 | ifeq ($(OPENJDK_BUILD_OS), windows) |
| 483 | # On windows we need to synchronize with the javac server to be able to |
| 484 | # move or remove the build output directory. Since we have no proper |
| 485 | # synchronization process, wait for a while and hope it helps. This is only |
| 486 | # used by build comparisons. |
| 487 | define WaitForSmartJavacFinish |
| 488 | $(if $(SJAVAC_SERVER_DIR), \ |
| 489 | sleep 5\ |
| 490 | ) |
| 491 | endef |
| 492 | else |
| 493 | define WaitForSmartJavacFinish |
| 494 | endef |
| 495 | endif |
| 496 | |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 497 | define StartGlobalTimer |
Erik Joelsson | 8c55662 | 2016-01-16 13:01:43 +0100 | [diff] [blame] | 498 | $(RM) -r $(BUILDTIMESDIR) 2> /dev/null && \ |
| 499 | $(MKDIR) -p $(BUILDTIMESDIR) && \ |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 500 | $(call RecordStartTime,TOTAL) |
| 501 | endef |
| 502 | |
| 503 | define StopGlobalTimer |
| 504 | $(call RecordEndTime,TOTAL) |
| 505 | endef |
| 506 | |
| 507 | # Find all build_time_* files and print their contents in a list sorted |
| 508 | # on the name of the sub repository. |
| 509 | define ReportBuildTimes |
Erik Joelsson | 8c55662 | 2016-01-16 13:01:43 +0100 | [diff] [blame] | 510 | $(PRINTF) $(LOG_INFO) -- \ |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 511 | "----- Build times -------\nStart %s\nEnd %s\n%s\n%s\n-------------------------\n" \ |
| 512 | "`$(CAT) $(BUILDTIMESDIR)/build_time_start_TOTAL_human_readable`" \ |
| 513 | "`$(CAT) $(BUILDTIMESDIR)/build_time_end_TOTAL_human_readable`" \ |
| 514 | "`$(LS) $(BUILDTIMESDIR)/build_time_diff_* | $(GREP) -v _TOTAL | \ |
| 515 | $(XARGS) $(CAT) | $(SORT) -k 2`" \ |
Erik Joelsson | 8c55662 | 2016-01-16 13:01:43 +0100 | [diff] [blame] | 516 | "`$(CAT) $(BUILDTIMESDIR)/build_time_diff_TOTAL`" \ |
| 517 | $(BUILD_LOG_PIPE) |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 518 | endef |
| 519 | |
Alexey Semenyuk | 2cfcf97 | 2017-03-30 21:23:07 +0200 | [diff] [blame] | 520 | define ReportProfileTimes |
| 521 | $(if $(findstring true, $(LOG_PROFILE_TIMES_LOG)), \ |
| 522 | [ ! -f $(BUILD_PROFILE_LOG) ] || \ |
| 523 | { $(ECHO) Begin $(notdir $(BUILD_PROFILE_LOG)) && \ |
| 524 | $(CAT) $(BUILD_PROFILE_LOG) && \ |
| 525 | $(ECHO) End $(notdir $(BUILD_PROFILE_LOG)); \ |
| 526 | } \ |
| 527 | $(BUILD_LOG_PIPE) |
| 528 | ) |
| 529 | endef |
| 530 | |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 531 | endif # HAS_SPEC |
| 532 | |
Magnus Ihse Bursie | 6d2a538 | 2018-04-10 23:32:54 +0200 | [diff] [blame] | 533 | # Look for a given option in the LOG variable, and if found, set a variable |
| 534 | # and remove the option from the LOG variable |
| 535 | # $1: The option to look for |
| 536 | # $2: The variable to set to "true" if the option is found |
| 537 | define ParseLogOption |
| 538 | ifneq ($$(findstring $1, $$(LOG)),) |
| 539 | override $2 := true |
Magnus Ihse Bursie | 6d2a538 | 2018-04-10 23:32:54 +0200 | [diff] [blame] | 540 | # First try to remove ",<option>" if it exists, otherwise just remove "<option>" |
| 541 | LOG_STRIPPED := $$(subst $1,, $$(subst $$(COMMA)$$(strip $1),, $$(LOG))) |
| 542 | # We might have ended up with a leading comma. Remove it. Need override |
| 543 | # since LOG is set from the command line. |
| 544 | override LOG := $$(strip $$(patsubst $$(COMMA)%, %, $$(LOG_STRIPPED))) |
| 545 | endif |
| 546 | endef |
| 547 | |
| 548 | # Look for a given option with an assignment in the LOG variable, and if found, |
| 549 | # set a variable to that value and remove the option from the LOG variable |
| 550 | # $1: The option to look for |
| 551 | # $2: The variable to set to the value of the option, if found |
| 552 | define ParseLogValue |
| 553 | ifneq ($$(findstring $1=, $$(LOG)),) |
| 554 | # Make words of out comma-separated list and find the one with opt=val |
| 555 | value := $$(strip $$(subst $$(strip $1)=,, $$(filter $$(strip $1)=%, $$(subst $$(COMMA), , $$(LOG))))) |
| 556 | override $2 := $$(value) |
Magnus Ihse Bursie | 6d2a538 | 2018-04-10 23:32:54 +0200 | [diff] [blame] | 557 | # First try to remove ",<option>" if it exists, otherwise just remove "<option>" |
| 558 | LOG_STRIPPED := $$(subst $$(strip $1)=$$(value),, \ |
| 559 | $$(subst $$(COMMA)$$(strip $1)=$$(value),, $$(LOG))) |
| 560 | # We might have ended up with a leading comma. Remove it. Need override |
| 561 | # since LOG is set from the command line. |
| 562 | override LOG := $$(strip $$(patsubst $$(COMMA)%, %, $$(LOG_STRIPPED))) |
| 563 | endif |
| 564 | endef |
| 565 | |
| 566 | |
| 567 | define ParseLogLevel |
| 568 | # Catch old-style VERBOSE= command lines. |
| 569 | ifneq ($$(origin VERBOSE), undefined) |
| 570 | $$(info Error: VERBOSE is deprecated. Use LOG=<warn|info|debug|trace> instead.) |
| 571 | $$(error Cannot continue) |
| 572 | endif |
| 573 | |
| 574 | # Setup logging according to LOG |
| 575 | |
| 576 | # If "nofile" is present, do not log to a file |
| 577 | $$(eval $$(call ParseLogOption, nofile, LOG_NOFILE)) |
| 578 | |
| 579 | # If "cmdline" is present, print all executes "important" command lines. |
| 580 | $$(eval $$(call ParseLogOption, cmdlines, LOG_CMDLINES)) |
| 581 | |
| 582 | # If "report" is present, use non-standard reporting options at build failure. |
| 583 | $$(eval $$(call ParseLogValue, report, LOG_REPORT)) |
| 584 | ifneq ($$(LOG_REPORT), ) |
| 585 | ifeq ($$(filter $$(LOG_REPORT), none all default), ) |
| 586 | $$(info Error: LOG=report has invalid value: $$(LOG_REPORT).) |
| 587 | $$(info Valid values: LOG=report=<none>|<all>|<default>) |
| 588 | $$(error Cannot continue) |
| 589 | endif |
| 590 | endif |
| 591 | |
| 592 | # If "profile-to-log" is present, write shell times in build log |
| 593 | $$(eval $$(call ParseLogOption, profile-to-log, LOG_PROFILE_TIMES_LOG)) |
| 594 | |
| 595 | # If "profile" is present, write shell times in separate log file |
| 596 | # IMPORTANT: $(ParseLogOption profile-to-log) should go first. Otherwise |
| 597 | # parsing of 'LOG=debug,profile-to-log,nofile' ends up in the following error: |
| 598 | # Error: LOG contains unknown option or log level: debug-to-log. |
| 599 | $$(eval $$(call ParseLogOption, profile, LOG_PROFILE_TIMES_FILE)) |
| 600 | |
| 601 | # Treat LOG=profile-to-log as if it were LOG=profile,profile-to-log |
| 602 | LOG_PROFILE_TIMES_FILE := $$(firstword $$(LOG_PROFILE_TIMES_FILE) $$(LOG_PROFILE_TIMES_LOG)) |
| 603 | |
| 604 | override LOG_LEVEL := $$(LOG) |
| 605 | |
| 606 | ifeq ($$(LOG_LEVEL),) |
| 607 | # Set LOG to "warn" as default if not set |
| 608 | override LOG_LEVEL := warn |
| 609 | endif |
| 610 | |
| 611 | ifeq ($$(LOG_LEVEL), warn) |
| 612 | override MAKE_LOG_FLAGS := -s |
| 613 | else ifeq ($$(LOG_LEVEL), info) |
| 614 | override MAKE_LOG_FLAGS := -s |
| 615 | else ifeq ($$(LOG_LEVEL), debug) |
| 616 | override MAKE_LOG_FLAGS := |
| 617 | else ifeq ($$(LOG_LEVEL), trace) |
| 618 | override MAKE_LOG_FLAGS := |
| 619 | else |
| 620 | $$(info Error: LOG contains unknown option or log level: $$(LOG).) |
| 621 | $$(info LOG can be <level>[,<opt>[...]] where <opt> is nofile | cmdlines | profile | profile-to-log) |
| 622 | $$(info and <level> is warn | info | debug | trace) |
| 623 | $$(error Cannot continue) |
| 624 | endif |
| 625 | endef |
| 626 | |
Alexey Semenyuk | 2cfcf97 | 2017-03-30 21:23:07 +0200 | [diff] [blame] | 627 | MAKE_LOG_VARS = $(foreach v, \ |
Magnus Ihse Bursie | 6d2a538 | 2018-04-10 23:32:54 +0200 | [diff] [blame] | 628 | LOG_LEVEL LOG_NOFILE LOG_CMDLINES LOG_REPORT LOG_PROFILE_TIMES_LOG \ |
| 629 | LOG_PROFILE_TIMES_FILE, \ |
Alexey Semenyuk | 2cfcf97 | 2017-03-30 21:23:07 +0200 | [diff] [blame] | 630 | $v=$($v) \ |
| 631 | ) |
| 632 | |
Magnus Ihse Bursie | 1eb8d0b | 2015-03-26 16:17:30 +0100 | [diff] [blame] | 633 | endif # _INITSUPPORT_GMK |