Makefile 16.3 KB
Newer Older
D
duke 已提交
1
#
2
# Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
D
duke 已提交
3 4 5 6
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
7
# published by the Free Software Foundation.  Oracle designates this
D
duke 已提交
8
# particular file as subject to the "Classpath" exception as provided
9
# by Oracle in the LICENSE file that accompanied this code.
D
duke 已提交
10 11 12 13 14 15 16 17 18 19 20
#
# This code 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
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
21 22 23
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
D
duke 已提交
24 25
#

26 27 28
# If NEWBUILD is defined, use the new build-infra Makefiles and configure.
#     See NewMakefile.gmk for more information.

29 30 31 32 33
# If not specified, select what the default build is
ifndef NEWBUILD
  NEWBUILD=true
endif

34 35 36 37 38 39 40
ifeq ($(NEWBUILD),true)

  # The new top level Makefile
  include NewMakefile.gmk

else # Original Makefile logic

41 42
BUILD_PARENT_DIRECTORY=.

O
ohair 已提交
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
# Basename of any originally supplied ALT_OUTPUTDIR directory
ifndef ORIG_OUTPUTDIR_BASENAME
  ifdef ALT_OUTPUTDIR
    ORIG_OUTPUTDIR_BASENAME := $(shell basename $(ALT_OUTPUTDIR))
  else
    ORIG_OUTPUTDIR_BASENAME  = $(PLATFORM)-$(ARCH)
  endif
endif
export ORIG_OUTPUTDIR_BASENAME

# The three possible directories created for output (3 build flavors)
OUTPUTDIR_BASENAME-          = $(ORIG_OUTPUTDIR_BASENAME)
OUTPUTDIR_BASENAME-debug     = $(ORIG_OUTPUTDIR_BASENAME)-debug
OUTPUTDIR_BASENAME-fastdebug = $(ORIG_OUTPUTDIR_BASENAME)-fastdebug

# Relative path to a debug output area
REL_JDK_OUTPUTDIR = ../$(OUTPUTDIR_BASENAME-$(DEBUG_NAME))

# The created jdk image directory
JDK_IMAGE_DIRNAME = j2sdk-image
JDK_IMAGE_DIR     = $(OUTPUTDIR)/$(JDK_IMAGE_DIRNAME)
ABS_JDK_IMAGE_DIR = $(ABS_OUTPUTDIR)/$(JDK_IMAGE_DIRNAME)

# Relative path from an output directory to the image directory
REL_JDK_IMAGE_DIR = ../$(OUTPUTDIR_BASENAME-$(DEBUG_NAME))/$(JDK_IMAGE_DIRNAME)
REL_JDK_DEBUG_IMAGE_DIR = ../$(OUTPUTDIR_BASENAME-debug)/$(JDK_IMAGE_DIRNAME)
REL_JDK_FASTDEBUG_IMAGE_DIR = ../$(OUTPUTDIR_BASENAME-fastdebug)/$(JDK_IMAGE_DIRNAME)

D
duke 已提交
71
ifndef TOPDIR
72
  TOPDIR:=.
D
duke 已提交
73 74 75 76 77 78 79 80 81
endif

ifndef JDK_TOPDIR
  JDK_TOPDIR=$(TOPDIR)/jdk
endif
ifndef JDK_MAKE_SHARED_DIR
  JDK_MAKE_SHARED_DIR=$(JDK_TOPDIR)/make/common/shared
endif

82
default: all
D
duke 已提交
83

84 85
include $(JDK_MAKE_SHARED_DIR)/Defs-control.gmk
include ./make/Defs-internal.gmk
D
duke 已提交
86 87 88 89 90 91 92
include ./make/sanity-rules.gmk
include ./make/hotspot-rules.gmk
include ./make/langtools-rules.gmk
include ./make/corba-rules.gmk
include ./make/jaxp-rules.gmk
include ./make/jaxws-rules.gmk
include ./make/jdk-rules.gmk
J
jjg 已提交
93
include ./make/nashorn-rules.gmk
D
duke 已提交
94 95 96 97
include ./make/install-rules.gmk
include ./make/sponsors-rules.gmk
include ./make/deploy-rules.gmk

98
all:: sanity
99 100 101 102 103 104 105 106

ifeq ($(SKIP_FASTDEBUG_BUILD), false)
  all:: fastdebug_build
endif

ifeq ($(SKIP_DEBUG_BUILD), false)
  all:: debug_build
endif
D
duke 已提交
107

O
ohair 已提交
108 109
all:: all_product_build 

O
ohair 已提交
110 111
all_product_build::

112 113
# Everything for a full product build
ifeq ($(SKIP_PRODUCT_BUILD), false)
O
ohrstrom 已提交
114

115 116 117 118 119 120
  all_product_build:: product_build

  ifeq ($(BUILD_INSTALL), true)
    all_product_build:: $(INSTALL)
    clobber:: install-clobber
  endif
O
ohrstrom 已提交
121

122 123 124 125
  ifeq ($(BUILD_SPONSORS), true)
    all_product_build:: $(SPONSORS)
    clobber:: sponsors-clobber
  endif
O
ohrstrom 已提交
126

127 128 129 130 131 132
  ifneq ($(SKIP_COMPARE_IMAGES), true)
    all_product_build:: compare-image
  endif

endif

O
ohrstrom 已提交
133 134 135 136 137 138 139 140 141
define StartTimer
	$(MKDIR) -p $(BUILDTIMESDIR)
	$(RM) $(BUILDTIMESDIR)/build_time_*
	$(call RecordStartTime,TOTAL)
endef

define StopTimer
	$(if $(REPORT_BUILD_TIMES),$(call RecordEndTime,TOTAL) && $(call ReportBuildTimes,$1),)
endef
142

143
# Generic build of basic repo series
144
generic_build_repo_series:: $(SOURCE_TIPS)
O
ohair 已提交
145
	$(MKDIR) -p $(JDK_IMAGE_DIR)
O
ohrstrom 已提交
146
	@$(call StartTimer)
D
duke 已提交
147 148

ifeq ($(BUILD_LANGTOOLS), true)
149
  generic_build_repo_series:: langtools
D
duke 已提交
150 151 152 153
  clobber:: langtools-clobber
endif

ifeq ($(BUILD_CORBA), true)
154
  generic_build_repo_series:: corba
D
duke 已提交
155 156 157 158
  clobber:: corba-clobber
endif

ifeq ($(BUILD_JAXP), true)
159
  generic_build_repo_series:: jaxp
D
duke 已提交
160 161 162 163
  clobber:: jaxp-clobber
endif

ifeq ($(BUILD_JAXWS), true)
164
  generic_build_repo_series:: jaxws
D
duke 已提交
165 166 167 168
  clobber:: jaxws-clobber
endif

ifeq ($(BUILD_HOTSPOT), true)
169
  generic_build_repo_series:: $(HOTSPOT) 
D
duke 已提交
170 171 172 173
  clobber:: hotspot-clobber
endif

ifeq ($(BUILD_JDK), true)
174
  generic_build_repo_series:: $(JDK_JAVA_EXE)
D
duke 已提交
175 176 177
  clobber:: jdk-clobber
endif

J
jjg 已提交
178 179 180 181 182
ifeq ($(BUILD_NASHORN), true)
  generic_build_repo_series:: $(NASHORN)
  clobber:: nashorn-clobber
endif

D
duke 已提交
183
ifeq ($(BUILD_DEPLOY), true)
184
  generic_build_repo_series:: $(DEPLOY)
D
duke 已提交
185 186 187
  clobber:: deploy-clobber
endif

O
ohrstrom 已提交
188 189 190
generic_build_repo_series::
	@$(call StopTimer,$(if $(DEBUG_NAME),$(DEBUG_NAME)_build,all_product_build))

191
# The debug build, fastdebug or debug. Needs special handling.
D
duke 已提交
192 193 194 195 196
#  Note that debug builds do NOT do INSTALL steps, but must be done
#  after the product build and before the INSTALL step of the product build.
#
#   DEBUG_NAME is fastdebug or debug
#   ALT_OUTPUTDIR is changed to have -debug or -fastdebug suffix
O
ohair 已提交
197 198
#   The resulting image directory (j2sdk-image) is used by the install makefiles
#     to create a debug install bundle jdk-*-debug-** bundle (tar or zip) 
D
duke 已提交
199 200 201 202 203
#     which will install in the debug or fastdebug subdirectory of the
#     normal product install area.
#     The install process needs to know what the DEBUG_NAME is, so
#     look for INSTALL_DEBUG_NAME in the install rules.
#
204 205 206 207
#   NOTE: On windows, do not use $(ABS_BOOTDIR_OUTPUTDIR)-$(DEBUG_NAME).
#         Due to the use of short paths in $(ABS_OUTPUTDIR), this may 
#         not be the same location.
#
D
duke 已提交
208

209 210
# Location of fresh bootdir output
ABS_BOOTDIR_OUTPUTDIR=$(ABS_OUTPUTDIR)/bootjdk
O
ohair 已提交
211 212
FRESH_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/$(JDK_IMAGE_DIRNAME)
FRESH_DEBUG_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/$(REL_JDK_IMAGE_DIR)
213 214 215
  
create_fresh_product_bootdir: FRC
	$(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \
216
		GENERATE_DOCS=false \
217 218 219 220 221
		BOOT_CYCLE_SETTINGS= \
		build_product_image

create_fresh_debug_bootdir: FRC
	$(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \
222
		GENERATE_DOCS=false \
223 224 225 226 227
		BOOT_CYCLE_DEBUG_SETTINGS= \
		build_debug_image

create_fresh_fastdebug_bootdir: FRC
	$(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \
228
		GENERATE_DOCS=false \
229 230 231 232 233 234 235 236 237
		BOOT_CYCLE_DEBUG_SETTINGS= \
		build_fastdebug_image

# Create boot image?
ifeq ($(SKIP_BOOT_CYCLE),false)
  ifneq ($(PLATFORM)$(ARCH_DATA_MODEL),solaris64)
    DO_BOOT_CYCLE=true
  endif
endif
D
duke 已提交
238

O
ohrstrom 已提交
239 240


241 242 243 244 245 246 247 248 249 250 251 252 253 254
ifeq ($(DO_BOOT_CYCLE),true)
  
  # Create the bootdir to use in the build
  product_build:: create_fresh_product_bootdir
  debug_build:: create_fresh_debug_bootdir
  fastdebug_build:: create_fresh_fastdebug_bootdir

  # Define variables to be used now for the boot jdk
  BOOT_CYCLE_SETTINGS= \
     ALT_BOOTDIR=$(FRESH_BOOTDIR) \
     ALT_JDK_IMPORT_PATH=$(FRESH_BOOTDIR)
  BOOT_CYCLE_DEBUG_SETTINGS= \
     ALT_BOOTDIR=$(FRESH_DEBUG_BOOTDIR) \
     ALT_JDK_IMPORT_PATH=$(FRESH_DEBUG_BOOTDIR)
D
duke 已提交
255

256
else
D
duke 已提交
257

258 259 260
  # Use the supplied ALT_BOOTDIR as the boot
  BOOT_CYCLE_SETTINGS=
  BOOT_CYCLE_DEBUG_SETTINGS=
D
duke 已提交
261 262 263

endif

264 265 266 267 268 269
build_product_image:
	$(MAKE) \
	        SKIP_FASTDEBUG_BUILD=true \
	        SKIP_DEBUG_BUILD=true \
	        $(BOOT_CYCLE_SETTINGS) \
	        generic_build_repo_series
D
duke 已提交
270

271 272 273 274
#   NOTE: On windows, do not use $(ABS_OUTPUTDIR)-$(DEBUG_NAME).
#         Due to the use of short paths in $(ABS_OUTPUTDIR), this may 
#         not be the same location.

275 276
generic_debug_build:
	$(MAKE) \
O
ohair 已提交
277
		ALT_OUTPUTDIR=$(ABS_OUTPUTDIR)/$(REL_JDK_OUTPUTDIR) \
278
	        DEBUG_NAME=$(DEBUG_NAME) \
279
		GENERATE_DOCS=false \
280 281 282 283 284
	        $(BOOT_CYCLE_DEBUG_SETTINGS) \
		generic_build_repo_series

build_debug_image:
	$(MAKE) DEBUG_NAME=debug generic_debug_build
D
duke 已提交
285

286 287
build_fastdebug_image:
	$(MAKE) DEBUG_NAME=fastdebug generic_debug_build
D
duke 已提交
288

289 290 291 292
# Build final image
product_build:: build_product_image
debug_build:: build_debug_image
fastdebug_build:: build_fastdebug_image
D
duke 已提交
293

294 295 296 297 298 299 300 301
# The source tips are stored with the relative path to the repo.
#   This file will be used when constructing the jdk image.
source_tips: $(SOURCE_TIPS)
	$(CAT) $<
$(SOURCE_TIPS): FRC
	@$(prep-target)
	@$(call GetSourceTips)

O
ohrstrom 已提交
302 303
clobber:: REPORT_BUILD_TIMES=
clobber:: 
D
duke 已提交
304 305 306 307 308
	$(RM) -r $(OUTPUTDIR)/*
	-($(RMDIR) -p $(OUTPUTDIR) > $(DEV_NULL) 2>&1; $(TRUE))

clean: clobber

309 310 311 312 313 314 315 316 317 318 319 320
#
# Dev builds
#

dev : dev-build

dev-build:
	$(MAKE) DEV_ONLY=true all
dev-sanity:
	$(MAKE) DEV_ONLY=true sanity
dev-clobber:
	$(MAKE) DEV_ONLY=true clobber
D
duke 已提交
321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344

#
# Quick jdk verification build
#
jdk_only:
	$(MAKE) SKIP_FASTDEBUG_BUILD=true BUILD_HOTSPOT=false all


#
# Quick jdk verification fastdebug build
#
jdk_fastdebug_only:
	$(MAKE) DEBUG_NAME=fastdebug BUILD_HOTSPOT=false BUILD_DEPLOY=false \
	    BUILD_INSTALL=false BUILD_SPONSORS=false generic_debug_build

#
# Quick deploy verification fastdebug build
#
deploy_fastdebug_only:
	$(MAKE) \
	    DEBUG_NAME=fastdebug \
	    BUILD_HOTSPOT=false \
	    BUILD_JDK=false \
	    BUILD_LANGTOOLS=false \
J
jjg 已提交
345
	    BUILD_NASHORN=false \
D
duke 已提交
346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481
	    BUILD_CORBA=false \
	    BUILD_JAXP=false \
	    BUILD_JAXWS=false \
	    BUILD_INSTALL=false \
	    BUILD_SPONSORS=false \
	    generic_debug_build

#
# Product build (skip debug builds)
#
product_only:
	$(MAKE) SKIP_FASTDEBUG_BUILD=true all

#
# Check target
#

check: variable_check

#
# Help target
#
help: intro_help target_help variable_help notes_help examples_help

# Intro help message
intro_help:
	@$(ECHO) "\
Makefile for the JDK builds (all the JDK). \n\
"

# Target help
target_help:
	@$(ECHO) "\
--- Common Targets ---  \n\
all               -- build the core JDK (default target) \n\
help              -- Print out help information \n\
check             -- Check make variable values for correctness \n\
sanity            -- Perform detailed sanity checks on system and settings \n\
fastdebug_build   -- build the core JDK in 'fastdebug' mode (-g -O) \n\
debug_build       -- build the core JDK in 'debug' mode (-g) \n\
clean             -- remove all built and imported files \n\
clobber           -- same as clean \n\
"

# Variable help (only common ones used by this Makefile)
variable_help: variable_help_intro variable_list variable_help_end
variable_help_intro:
	@$(ECHO) "--- Common Variables ---"
variable_help_end:
	@$(ECHO) " "

# One line descriptions for the variables
OUTPUTDIR.desc             = Output directory
PARALLEL_COMPILE_JOBS.desc = Solaris/Linux parallel compile run count
SLASH_JAVA.desc            = Root of all build tools, e.g. /java or J:
BOOTDIR.desc               = JDK used to boot the build
JDK_IMPORT_PATH.desc       = JDK used to import components of the build
COMPILER_PATH.desc         = Compiler install directory
CACERTS_FILE.desc          = Location of certificates file
DEVTOOLS_PATH.desc         = Directory containing zip and gnumake
CUPS_HEADERS_PATH.desc     = Include directory location for CUPS header files

# Make variables to print out (description and value)
VARIABLE_PRINTVAL_LIST +=       \
    OUTPUTDIR                   \
    PARALLEL_COMPILE_JOBS       \
    SLASH_JAVA                  \
    BOOTDIR                     \
    JDK_IMPORT_PATH             \
    COMPILER_PATH               \
    CACERTS_FILE                \
    DEVTOOLS_PATH

# Make variables that should refer to directories that exist
VARIABLE_CHECKDIR_LIST +=       \
    SLASH_JAVA                  \
    BOOTDIR                     \
    JDK_IMPORT_PATH             \
    COMPILER_PATH               \
    DEVTOOLS_PATH 

# Make variables that should refer to files that exist
VARIABLE_CHECKFIL_LIST +=       \
    CACERTS_FILE

# For pattern rules below, so all are treated the same
DO_PRINTVAL_LIST=$(VARIABLE_PRINTVAL_LIST:%=%.printval)
DO_CHECKDIR_LIST=$(VARIABLE_CHECKDIR_LIST:%=%.checkdir)
DO_CHECKFIL_LIST=$(VARIABLE_CHECKFIL_LIST:%=%.checkfil)

# Complete variable check
variable_check: $(DO_CHECKDIR_LIST) $(DO_CHECKFIL_LIST)
variable_list: $(DO_PRINTVAL_LIST) variable_check

# Pattern rule for printing out a variable
%.printval:
	@$(ECHO) "  ALT_$* - $($*.desc)"
	@$(ECHO) "  \t $*=$($*)"

# Pattern rule for checking to see if a variable with a directory exists
%.checkdir:
	@if [ ! -d $($*) ] ; then \
	    $(ECHO) "WARNING: $* does not exist, try $(MAKE) sanity"; \
	fi

# Pattern rule for checking to see if a variable with a file exists
%.checkfil:
	@if [ ! -f $($*) ] ; then \
	    $(ECHO) "WARNING: $* does not exist, try $(MAKE) sanity"; \
	fi

# Misc notes on help
notes_help:
	@$(ECHO) "\
--- Notes --- \n\
- All builds use same output directory unless overridden with \n\
 \t ALT_OUTPUTDIR=<dir>, changing from product to fastdebug you may want \n\
 \t to use the clean target first. \n\
- JDK_IMPORT_PATH must refer to a compatible build, not all past promoted \n\
 \t builds or previous release JDK builds will work. \n\
- The fastest builds have been when the sources and the BOOTDIR are on \n\
 \t local disk. \n\
"

examples_help:
	@$(ECHO) "\
--- Examples --- \n\
  $(MAKE) fastdebug_build \n\
  $(MAKE) ALT_OUTPUTDIR=/tmp/foobar all \n\
  $(MAKE) ALT_OUTPUTDIR=/tmp/foobar fastdebug_build \n\
  $(MAKE) ALT_OUTPUTDIR=/tmp/foobar all \n\
  $(MAKE) ALT_BOOTDIR=/opt/java/jdk1.5.0 \n\
  $(MAKE) ALT_JDK_IMPORT_PATH=/opt/java/jdk1.6.0 \n\
"

################################################################
482
# Source bundling
D
duke 已提交
483 484 485 486 487
################################################################
ifeq ($(BUNDLE_RULES_AVAILABLE), true)
  include $(BUNDLE_RULES)
endif

488 489 490 491
################################################################
# rule to test
################################################################

492
.NOTPARALLEL: test_run
493

494 495 496 497
test:
	$(MAKE) test_run

test_run: test_clean test_start test_summary
498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522

test_start:
	@$(ECHO) "Tests started at `$(DATE)`"

test_clean:
	$(RM) $(OUTPUTDIR)/test_failures.txt $(OUTPUTDIR)/test_log.txt

test_summary: $(OUTPUTDIR)/test_failures.txt
	@$(ECHO) "#################################################"
	@$(ECHO) "Tests completed at `$(DATE)`"
	@( $(EGREP) '^TEST STATS:' $(OUTPUTDIR)/test_log.txt \
          || $(ECHO) "No TEST STATS seen in log" )
	@$(ECHO) "For complete details see: $(OUTPUTDIR)/test_log.txt"
	@$(ECHO) "#################################################"
	@if [ -s $< ] ; then                                           \
          $(ECHO) "ERROR: Test failure count: `$(CAT) $< | $(WC) -l`"; \
          $(CAT) $<;                                                   \
          exit 1;                                                      \
        else                                                           \
          $(ECHO) "Success! No failures detected";                     \
        fi

# Get failure list from log
$(OUTPUTDIR)/test_failures.txt: $(OUTPUTDIR)/test_log.txt
	@$(RM) $@
523
	@( $(EGREP) '^FAILED:' $< || $(ECHO) "" ) | $(NAWK) 'length>0' > $@
524 525 526

# Get log file of all tests run
JDK_TO_TEST := $(shell 							\
O
ohair 已提交
527 528
  if [ -d "$(ABS_JDK_IMAGE_DIR)" ] ; then 				\
    $(ECHO) "$(ABS_JDK_IMAGE_DIR)"; 					\
529 530 531 532 533 534
  elif [ -d "$(ABS_OUTPUTDIR)/bin" ] ; then 				\
    $(ECHO) "$(ABS_OUTPUTDIR)"; 					\
  elif [ "$(PRODUCT_HOME)" != "" -a -d "$(PRODUCT_HOME)/bin" ] ; then 	\
    $(ECHO) "$(PRODUCT_HOME)"; 						\
  fi 									\
)
535
TEST_TARGETS=all
536 537
$(OUTPUTDIR)/test_log.txt:
	$(RM) $@
538 539
	( $(CD) test &&                                                     \
          $(MAKE) NO_STOPPING=- PRODUCT_HOME=$(JDK_TO_TEST) $(TEST_TARGETS) \
540 541
        ) | tee $@

D
duke 已提交
542 543 544 545 546 547 548 549 550 551
################################################################
# JPRT rule to build
################################################################

include ./make/jprt.gmk

################################################################
#  PHONY
################################################################

552
.PHONY: all  test test_run test_start test_summary test_clean \
553 554 555 556 557 558 559 560 561 562 563 564 565
	generic_build_repo_series \
	what clobber insane \
        dev dev-build dev-sanity dev-clobber \
        product_build \
        fastdebug_build \
        debug_build  \
        build_product_image  \
        build_debug_image  \
        build_fastdebug_image \
        create_fresh_product_bootdir \
        create_fresh_debug_bootdir \
        create_fresh_fastdebug_bootdir \
        generic_debug_build
D
duke 已提交
566

567 568 569
# Force target
FRC:

570 571
endif # Original Makefile logic