229 ifeq ($$(filter $$(notdir $2), $$($1_PRECOMPILED_HEADER_EXCLUDE)), ) |
229 ifeq ($$(filter $$(notdir $2), $$($1_PRECOMPILED_HEADER_EXCLUDE)), ) |
230 $1_$2_USE_PCH_FLAGS := $$($1_USE_PCH_FLAGS) |
230 $1_$2_USE_PCH_FLAGS := $$($1_USE_PCH_FLAGS) |
231 endif |
231 endif |
232 endif |
232 endif |
233 |
233 |
234 ifneq (,$$(filter %.c,$2)) |
234 ifneq ($$(filter %.c, $2), ) |
235 # Compile as a C file |
235 # Compile as a C file |
236 $1_$2_FLAGS=$(CFLAGS_CCACHE) $$($1_$2_USE_PCH_FLAGS) $4 \ |
236 $1_$2_FLAGS := $(CFLAGS_CCACHE) $$($1_$2_USE_PCH_FLAGS) $4 \ |
237 $$($1_$(notdir $2)_OPT_CFLAGS) \ |
237 $$($1_$(notdir $2)_OPT_CFLAGS) \ |
238 $$($1_$(notdir $2)_CFLAGS) $$($1_$2_THIS_FILE) -c |
238 $$($1_$(notdir $2)_CFLAGS) $$($1_$2_THIS_FILE) -c |
239 $1_$2_COMP=$5 |
239 $1_$2_COMP := $5 |
240 $1_$2_DEP_FLAG:=$(C_FLAG_DEPS) |
240 $1_$2_DEP_FLAG := $(C_FLAG_DEPS) |
241 else ifneq (,$$(filter %.m,$2)) |
241 else ifneq ($$(filter %.m, $2), ) |
242 # Compile as an Objective-C file |
242 # Compile as an Objective-C file |
243 $1_$2_FLAGS=-x objective-c $(CFLAGS_CCACHE) $$($1_$2_USE_PCH_FLAGS) $4 \ |
243 $1_$2_FLAGS := -x objective-c $(CFLAGS_CCACHE) $$($1_$2_USE_PCH_FLAGS) $4 \ |
244 $$($1_$(notdir $2)_OPT_CFLAGS) \ |
244 $$($1_$(notdir $2)_OPT_CFLAGS) \ |
245 $$($1_$(notdir $2)_CFLAGS) $$($1_$2_THIS_FILE) -c |
245 $$($1_$(notdir $2)_CFLAGS) $$($1_$2_THIS_FILE) -c |
246 $1_$2_COMP=$5 |
246 $1_$2_COMP := $5 |
247 $1_$2_DEP_FLAG:=$(C_FLAG_DEPS) |
247 $1_$2_DEP_FLAG := $(C_FLAG_DEPS) |
248 else ifneq (,$$(filter %.s %.S,$2)) |
248 else ifneq ($$(filter %.s %.S, $2), ) |
249 # Compile as assembler file |
249 # Compile as assembler file |
250 $1_$2_FLAGS=$8 |
250 $1_$2_FLAGS := $8 |
251 $1_$2_COMP=$(AS) |
251 $1_$2_COMP := $(AS) |
252 $1_$2_DEP_FLAG:= |
252 $1_$2_DEP_FLAG := |
253 else ifneq (,$$(filter %.cpp,$2)$$(filter %.cc,$2)$$(filter %.mm,$2)) |
253 else ifneq ($$(filter %.cpp, $2)$$(filter %.cc, $2)$$(filter %.mm, $2), ) |
254 # Compile as a C++ or Objective-C++ file |
254 # Compile as a C++ or Objective-C++ file |
255 $1_$2_FLAGS=$(CFLAGS_CCACHE) $$($1_$2_USE_PCH_FLAGS) $6 \ |
255 $1_$2_FLAGS := $(CFLAGS_CCACHE) $$($1_$2_USE_PCH_FLAGS) $6 \ |
256 $$($1_$(notdir $2)_OPT_CXXFLAGS) \ |
256 $$($1_$(notdir $2)_OPT_CXXFLAGS) \ |
257 $$($1_$(notdir $2)_CXXFLAGS) $$($1_$2_THIS_FILE) -c |
257 $$($1_$(notdir $2)_CXXFLAGS) $$($1_$2_THIS_FILE) -c |
258 $1_$2_COMP=$7 |
258 $1_$2_COMP := $7 |
259 $1_$2_DEP_FLAG:=$(CXX_FLAG_DEPS) |
259 $1_$2_DEP_FLAG := $(CXX_FLAG_DEPS) |
260 else |
260 else |
261 $$(error Internal error in NativeCompilation.gmk: no compiler for file $2) |
261 $$(error Internal error in NativeCompilation.gmk: no compiler for file $2) |
262 endif |
262 endif |
263 # Generate the .o (.obj) file name and place it in the bin dir. |
263 # Generate the .o (.obj) file name and place it in the bin dir. |
264 $1_$2_OBJ := $3/$$(call replace_with_obj_extension, $$(notdir $2)) |
264 $1_$2_OBJ := $3/$$(call replace_with_obj_extension, $$(notdir $2)) |
265 # Only continue if this object file hasn't been processed already. This lets the first found |
265 # Only continue if this object file hasn't been processed already. This lets the first found |
266 # source file override any other with the same name. |
266 # source file override any other with the same name. |
267 ifeq (,$$(findstring $$($1_$2_OBJ),$$($1_OBJS_SO_FAR))) |
267 ifeq ($$(findstring $$($1_$2_OBJ), $$($1_OBJS_SO_FAR)), ) |
268 $1_OBJS_SO_FAR+=$$($1_$2_OBJ) |
268 $1_OBJS_SO_FAR += $$($1_$2_OBJ) |
269 ifeq (,$$(filter %.s %.S,$2)) |
269 ifeq ($$(filter %.s %.S, $2), ) |
270 # And this is the dependency file for this obj file. |
270 # And this is the dependency file for this obj file. |
271 $1_$2_DEP:=$$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ)) |
271 $1_$2_DEP := $$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ)) |
272 # The dependency target file lists all dependencies as empty targets |
272 # The dependency target file lists all dependencies as empty targets |
273 # to avoid make error "No rule to make target" for removed files |
273 # to avoid make error "No rule to make target" for removed files |
274 $1_$2_DEP_TARGETS:=$$(patsubst %$(OBJ_SUFFIX),%.d.targets,$$($1_$2_OBJ)) |
274 $1_$2_DEP_TARGETS := $$(patsubst %$(OBJ_SUFFIX),%.d.targets,$$($1_$2_OBJ)) |
275 |
275 |
276 # Include previously generated dependency information. (if it exists) |
276 # Include previously generated dependency information. (if it exists) |
277 -include $$($1_$2_DEP) |
277 -include $$($1_$2_DEP) |
278 -include $$($1_$2_DEP_TARGETS) |
278 -include $$($1_$2_DEP_TARGETS) |
279 |
279 |
280 ifeq ($(TOOLCHAIN_TYPE), microsoft) |
280 ifeq ($(TOOLCHAIN_TYPE), microsoft) |
281 # To avoid name clashes between pdbs for objects and libs/execs, put |
281 # To avoid name clashes between pdbs for objects and libs/execs, put |
282 # object pdbs in a separate subdir. |
282 # object pdbs in a separate subdir. |
283 $1_$2_DEBUG_OUT_FLAGS:=-Fd$$(strip $$(patsubst $$($1_OBJECT_DIR)/%, \ |
283 $1_$2_DEBUG_OUT_FLAGS := -Fd$$(strip $$(patsubst $$($1_OBJECT_DIR)/%, \ |
284 $$($1_OBJECT_DIR)/pdb/%, $$(patsubst %$(OBJ_SUFFIX),%.pdb,$$($1_$2_OBJ)))) |
284 $$($1_OBJECT_DIR)/pdb/%, $$(patsubst %$(OBJ_SUFFIX),%.pdb,$$($1_$2_OBJ)))) |
285 endif |
285 endif |
286 endif |
286 endif |
287 |
287 |
288 ifneq ($$(strip $$($1_$(notdir $2)_CFLAGS) $$($1_$(notdir $2)_CXXFLAGS) \ |
288 ifneq ($$(strip $$($1_$(notdir $2)_CFLAGS) $$($1_$(notdir $2)_CXXFLAGS) \ |
383 # PRECOMPILED_HEADER Header file to use as precompiled header |
384 # PRECOMPILED_HEADER Header file to use as precompiled header |
384 # PRECOMPILED_HEADER_EXCLUDE List of source files that should not use PCH |
385 # PRECOMPILED_HEADER_EXCLUDE List of source files that should not use PCH |
385 SetupNativeCompilation = $(NamedParamsMacroTemplate) |
386 SetupNativeCompilation = $(NamedParamsMacroTemplate) |
386 define SetupNativeCompilationBody |
387 define SetupNativeCompilationBody |
387 |
388 |
|
389 # If type is unspecified, default to LIBRARY |
|
390 ifeq ($$($1_TYPE), ) |
|
391 $1_TYPE := LIBRARY |
|
392 endif |
|
393 |
388 # If we're doing a static build and producing a library |
394 # If we're doing a static build and producing a library |
389 # force it to be a static library and remove the -l libraries |
395 # force it to be a static library and remove the -l libraries |
390 ifeq ($(STATIC_BUILD), true) |
396 ifeq ($(STATIC_BUILD), true) |
391 ifneq ($$($1_LIBRARY),) |
397 ifeq ($$($1_TYPE), LIBRARY) |
392 $1_STATIC_LIBRARY := $$($1_LIBRARY) |
398 $1_TYPE := STATIC_LIBRARY |
393 $1_LIBRARY := |
399 endif |
394 endif |
400 endif |
395 endif |
401 |
396 |
402 ifeq ($$($1_TYPE), EXECUTABLE) |
397 ifneq (,$$($1_BIN)) |
403 $1_PREFIX := |
398 $$(error BIN has been replaced with OBJECT_DIR) |
|
399 endif |
|
400 |
|
401 ifneq (,$$($1_LIB)) |
|
402 $$(error LIB has been replaced with LIBRARY) |
|
403 endif |
|
404 |
|
405 ifneq (,$$($1_EXE)) |
|
406 $$(error EXE has been replaced with PROGRAM) |
|
407 endif |
|
408 |
|
409 ifneq (,$$($1_LIBRARY)) |
|
410 ifeq (,$$($1_OUTPUT_DIR)) |
|
411 $$(error LIBRARY requires OUTPUT_DIR) |
|
412 endif |
|
413 |
|
414 ifneq ($$($1_LIBRARY),$(basename $$($1_LIBRARY))) |
|
415 $$(error directory of LIBRARY should be specified using OUTPUT_DIR) |
|
416 endif |
|
417 |
|
418 ifneq (,$(findstring $(SHARED_LIBRARY_SUFFIX),$$($1_LIBRARY))) |
|
419 $$(error LIBRARY should be specified without SHARED_LIBRARY_SUFFIX: $(SHARED_LIBRARY_SUFFIX)) |
|
420 endif |
|
421 |
|
422 ifneq (,$(findstring $(LIBRARY_PREFIX),$$($1_LIBRARY))) |
|
423 $$(error LIBRARY should be specified without LIBRARY_PREFIX: $(LIBRARY_PREFIX)) |
|
424 endif |
|
425 |
|
426 ifeq ($$($1_SUFFIX), ) |
|
427 $1_SUFFIX := $(SHARED_LIBRARY_SUFFIX) |
|
428 endif |
|
429 |
|
430 $1_BASENAME:=$(LIBRARY_PREFIX)$$($1_LIBRARY)$$($1_SUFFIX) |
|
431 $1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME) |
|
432 $1_NOSUFFIX:=$(LIBRARY_PREFIX)$$($1_LIBRARY) |
|
433 endif |
|
434 |
|
435 ifneq (,$$($1_STATIC_LIBRARY)) |
|
436 ifeq (,$$($1_OUTPUT_DIR)) |
|
437 $$(error STATIC_LIBRARY requires OUTPUT_DIR) |
|
438 endif |
|
439 |
|
440 ifneq ($$($1_STATIC_LIBRARY),$(basename $$($1_STATIC_LIBRARY))) |
|
441 $$(error directory of STATIC_LIBRARY should be specified using OUTPUT_DIR) |
|
442 endif |
|
443 |
|
444 ifneq (,$(findstring $(STATIC_LIBRARY_SUFFIX),$$($1_STATIC_LIBRARY))) |
|
445 $$(error STATIC_LIBRARY should be specified without STATIC_LIBRARY_SUFFIX: $(STATIC_LIBRARY_SUFFIX)) |
|
446 endif |
|
447 |
|
448 ifneq (,$(findstring $(LIBRARY_PREFIX),$$($1_STATIC_LIBRARY))) |
|
449 $$(error STATIC_LIBRARY should be specified without LIBRARY_PREFIX: $(LIBRARY_PREFIX)) |
|
450 endif |
|
451 |
|
452 ifeq ($$($1_SUFFIX), ) |
|
453 $1_SUFFIX := $(STATIC_LIBRARY_SUFFIX) |
|
454 endif |
|
455 |
|
456 $1_BASENAME:=$(LIBRARY_PREFIX)$$($1_STATIC_LIBRARY)$$($1_SUFFIX) |
|
457 $1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME) |
|
458 $1_NOSUFFIX:=$(LIBRARY_PREFIX)$$($1_STATIC_LIBRARY) |
|
459 endif |
|
460 |
|
461 ifneq (,$$($1_PROGRAM)) |
|
462 ifeq (,$$($1_OUTPUT_DIR)) |
|
463 $$(error PROGRAM requires OUTPUT_DIR) |
|
464 endif |
|
465 |
|
466 ifneq ($$($1_PROGRAM),$(basename $$($1_PROGRAM))) |
|
467 $$(error directory of PROGRAM should be specified using OUTPUT_DIR) |
|
468 endif |
|
469 |
|
470 ifneq (,$(findstring $(EXE_SUFFIX),$$($1_PROGRAM))) |
|
471 $$(error PROGRAM should be specified without EXE_SUFFIX: $(EXE_SUFFIX)) |
|
472 endif |
|
473 |
|
474 ifeq ($$($1_SUFFIX), ) |
404 ifeq ($$($1_SUFFIX), ) |
475 $1_SUFFIX := $(EXE_SUFFIX) |
405 $1_SUFFIX := $(EXE_SUFFIX) |
476 endif |
406 endif |
477 |
407 else |
478 $1_BASENAME:=$$($1_PROGRAM)$$($1_SUFFIX) |
408 $1_PREFIX := $(LIBRARY_PREFIX) |
479 $1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME) |
409 ifeq ($$($1_TYPE), LIBRARY) |
480 $1_NOSUFFIX:=$$($1_PROGRAM) |
410 ifeq ($$($1_SUFFIX), ) |
481 endif |
411 $1_SUFFIX := $(SHARED_LIBRARY_SUFFIX) |
|
412 endif |
|
413 else ifeq ($$($1_TYPE), STATIC_LIBRARY) |
|
414 ifeq ($$($1_SUFFIX), ) |
|
415 $1_SUFFIX := $(STATIC_LIBRARY_SUFFIX) |
|
416 endif |
|
417 endif |
|
418 endif |
|
419 |
|
420 ifneq ($$($1_NAME), $(basename $$($1_NAME))) |
|
421 $$(error NAME must not contain any directory path in $1) |
|
422 endif |
|
423 ifneq ($(findstring $$($1_SUFFIX), $$($1_NAME)), ) |
|
424 $$(error NAME should be specified without suffix: $$($1_SUFFIX) in $1) |
|
425 endif |
|
426 ifneq ($(findstring $$($1_PREFIX), $$($1_NAME)), ) |
|
427 $$(error NAME should be specified without prefix: $$($1_PREFIX) in $1) |
|
428 endif |
|
429 ifeq ($$($1_OUTPUT_DIR), ) |
|
430 $$(error OUTPUT_DIR is missing in $1) |
|
431 endif |
|
432 ifneq ($$($1_MANIFEST), ) |
|
433 ifeq ($$($1_MANIFEST_VERSION), ) |
|
434 $$(error If MANIFEST is provided, then MANIFEST_VERSION is required in $1) |
|
435 endif |
|
436 endif |
|
437 |
|
438 $1_BASENAME := $$($1_PREFIX)$$($1_NAME)$$($1_SUFFIX) |
|
439 $1_TARGET := $$($1_OUTPUT_DIR)/$$($1_BASENAME) |
|
440 $1_NOSUFFIX := $$($1_PREFIX)$$($1_NAME) |
482 $1_SAFE_NAME := $$(strip $$(subst /,_, $1)) |
441 $1_SAFE_NAME := $$(strip $$(subst /,_, $1)) |
483 |
|
484 ifeq (,$$($1_TARGET)) |
|
485 $$(error Neither PROGRAM, LIBRARY nor STATIC_LIBRARY has been specified for SetupNativeCompilation) |
|
486 endif |
|
487 |
442 |
488 # Setup the toolchain to be used |
443 # Setup the toolchain to be used |
489 $$(call SetIfEmpty, $1_TOOLCHAIN, TOOLCHAIN_DEFAULT) |
444 $$(call SetIfEmpty, $1_TOOLCHAIN, TOOLCHAIN_DEFAULT) |
490 $$(call SetIfEmpty, $1_CC, $$($$($1_TOOLCHAIN)_CC)) |
445 $$(call SetIfEmpty, $1_CC, $$($$($1_TOOLCHAIN)_CC)) |
491 $$(call SetIfEmpty, $1_CXX, $$($$($1_TOOLCHAIN)_CXX)) |
446 $$(call SetIfEmpty, $1_CXX, $$($$($1_TOOLCHAIN)_CXX)) |
497 $$(call SetIfEmpty, $1_OBJCOPY, $$($$($1_TOOLCHAIN)_OBJCOPY)) |
452 $$(call SetIfEmpty, $1_OBJCOPY, $$($$($1_TOOLCHAIN)_OBJCOPY)) |
498 $$(call SetIfEmpty, $1_STRIP, $$($$($1_TOOLCHAIN)_STRIP)) |
453 $$(call SetIfEmpty, $1_STRIP, $$($$($1_TOOLCHAIN)_STRIP)) |
499 $$(call SetIfEmpty, $1_SYSROOT_CFLAGS, $$($$($1_TOOLCHAIN)_SYSROOT_CFLAGS)) |
454 $$(call SetIfEmpty, $1_SYSROOT_CFLAGS, $$($$($1_TOOLCHAIN)_SYSROOT_CFLAGS)) |
500 $$(call SetIfEmpty, $1_SYSROOT_LDFLAGS, $$($$($1_TOOLCHAIN)_SYSROOT_LDFLAGS)) |
455 $$(call SetIfEmpty, $1_SYSROOT_LDFLAGS, $$($$($1_TOOLCHAIN)_SYSROOT_LDFLAGS)) |
501 |
456 |
502 ifneq ($$($1_MANIFEST), ) |
|
503 ifeq ($$($1_MANIFEST_VERSION), ) |
|
504 $$(error If MANIFEST is provided, then MANIFEST_VERSION is required in $1) |
|
505 endif |
|
506 endif |
|
507 |
|
508 # Make sure the dirs exist. |
457 # Make sure the dirs exist. |
509 $$(call MakeDir,$$($1_OBJECT_DIR) $$($1_OUTPUT_DIR)) |
458 $$(call MakeDir, $$($1_OBJECT_DIR) $$($1_OUTPUT_DIR)) |
510 $$(foreach d,$$($1_SRC), $$(if $$(wildcard $$d),, \ |
459 $$(foreach d, $$($1_SRC), $$(if $$(wildcard $$d), , \ |
511 $$(error SRC specified to SetupNativeCompilation $1 contains missing directory $$d))) |
460 $$(error SRC specified to SetupNativeCompilation $1 contains missing directory $$d))) |
512 |
461 |
513 # Find all files in the source trees. Preserve order. |
462 # Find all files in the source trees. Preserve order. |
514 $1_SRCS := $$(foreach s, $$($1_SRC), $$(call CacheFind,$$(s))) |
463 $1_SRCS := $$(foreach s, $$($1_SRC), $$(call CacheFind, $$(s))) |
515 $1_SRCS := $$(filter $$(NATIVE_SOURCE_EXTENSIONS), $$($1_SRCS)) |
464 $1_SRCS := $$(filter $$(NATIVE_SOURCE_EXTENSIONS), $$($1_SRCS)) |
516 # Extract the C/C++ files. |
465 # Extract the C/C++ files. |
517 ifneq ($$($1_EXCLUDE_PATTERNS), ) |
466 ifneq ($$($1_EXCLUDE_PATTERNS), ) |
518 # We must not match the exclude pattern against the src root(s). |
467 # We must not match the exclude pattern against the src root(s). |
519 $1_SRCS_WITHOUT_ROOTS := $$($1_SRCS) |
468 $1_SRCS_WITHOUT_ROOTS := $$($1_SRCS) |
520 $$(foreach i,$$($1_SRC),$$(eval $1_SRCS_WITHOUT_ROOTS := $$(patsubst \ |
469 $$(foreach i, $$($1_SRC), $$(eval $1_SRCS_WITHOUT_ROOTS := $$(patsubst \ |
521 $$i/%,%, $$($1_SRCS_WITHOUT_ROOTS)))) |
470 $$i/%,%, $$($1_SRCS_WITHOUT_ROOTS)))) |
522 $1_ALL_EXCLUDE_FILES := $$(call containing, $$($1_EXCLUDE_PATTERNS), \ |
471 $1_ALL_EXCLUDE_FILES := $$(call containing, $$($1_EXCLUDE_PATTERNS), \ |
523 $$($1_SRCS_WITHOUT_ROOTS)) |
472 $$($1_SRCS_WITHOUT_ROOTS)) |
524 endif |
473 endif |
525 ifneq ($$($1_EXCLUDE_FILES),) |
474 ifneq ($$($1_EXCLUDE_FILES), ) |
526 $1_ALL_EXCLUDE_FILES += $$($1_EXCLUDE_FILES) |
475 $1_ALL_EXCLUDE_FILES += $$($1_EXCLUDE_FILES) |
527 endif |
476 endif |
528 ifneq ($$($1_ALL_EXCLUDE_FILES),) |
477 ifneq ($$($1_ALL_EXCLUDE_FILES), ) |
529 $1_EXCLUDE_FILES_PAT := $$($1_ALL_EXCLUDE_FILES) \ |
478 $1_EXCLUDE_FILES_PAT := $$($1_ALL_EXCLUDE_FILES) \ |
530 $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$($1_ALL_EXCLUDE_FILES))) |
479 $$(foreach i, $$($1_SRC), $$(addprefix $$i/, $$($1_ALL_EXCLUDE_FILES))) |
531 $1_EXCLUDE_FILES_PAT := $$(addprefix %,$$($1_EXCLUDE_FILES_PAT)) |
480 $1_EXCLUDE_FILES_PAT := $$(addprefix %, $$($1_EXCLUDE_FILES_PAT)) |
532 $1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES_PAT),$$($1_SRCS)) |
481 $1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES_PAT), $$($1_SRCS)) |
533 endif |
482 endif |
534 ifneq ($$($1_INCLUDE_FILES), ) |
483 ifneq ($$($1_INCLUDE_FILES), ) |
535 $1_INCLUDE_FILES_PAT := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$($1_INCLUDE_FILES))) |
484 $1_INCLUDE_FILES_PAT := $$(foreach i, $$($1_SRC), $$(addprefix $$i/, $$($1_INCLUDE_FILES))) |
536 $1_SRCS := $$(filter $$($1_INCLUDE_FILES_PAT),$$($1_SRCS)) |
485 $1_SRCS := $$(filter $$($1_INCLUDE_FILES_PAT), $$($1_SRCS)) |
537 endif |
486 endif |
538 # There can be only a single bin dir root, no need to foreach over the roots. |
487 # There can be only a single bin dir root, no need to foreach over the roots. |
539 $1_BINS := $$(wildcard $$($1_OBJECT_DIR)/*$(OBJ_SUFFIX)) |
488 $1_BINS := $$(wildcard $$($1_OBJECT_DIR)/*$(OBJ_SUFFIX)) |
540 # Now we have a list of all c/c++ files to compile: $$($1_SRCS) |
489 # Now we have a list of all c/c++ files to compile: $$($1_SRCS) |
541 # and we have a list of all existing object files: $$($1_BINS) |
490 # and we have a list of all existing object files: $$($1_BINS) |
542 |
491 |
543 # Prepend the source/bin path to the filter expressions. Then do the filtering. |
492 # Prepend the source/bin path to the filter expressions. Then do the filtering. |
544 ifneq ($$($1_INCLUDES),) |
493 ifneq ($$($1_INCLUDES), ) |
545 $1_SRC_INCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_INCLUDES)))) |
494 $1_SRC_INCLUDES := $$(foreach i, $$($1_SRC), $$(addprefix $$i/, $$(addsuffix /%, $$($1_INCLUDES)))) |
546 $1_SRCS := $$(filter $$($1_SRC_INCLUDES),$$($1_SRCS)) |
495 $1_SRCS := $$(filter $$($1_SRC_INCLUDES), $$($1_SRCS)) |
547 endif |
496 endif |
548 ifneq ($$($1_EXCLUDES),) |
497 ifneq ($$($1_EXCLUDES), ) |
549 $1_SRC_EXCLUDES := $$(addsuffix /%,$$($1_EXCLUDES)) |
498 $1_SRC_EXCLUDES := $$(addsuffix /%, $$($1_EXCLUDES)) |
550 $1_SRC_EXCLUDES += $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_EXCLUDES)))) |
499 $1_SRC_EXCLUDES += $$(foreach i, $$($1_SRC), $$(addprefix $$i/, $$(addsuffix /%, $$($1_EXCLUDES)))) |
551 $1_SRCS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_SRCS)) |
500 $1_SRCS := $$(filter-out $$($1_SRC_EXCLUDES), $$($1_SRCS)) |
552 endif |
501 endif |
553 |
502 |
554 $1_SRCS += $$($1_EXTRA_FILES) |
503 $1_SRCS += $$($1_EXTRA_FILES) |
555 |
504 |
556 ifeq (,$$($1_SRCS)) |
505 ifeq ($$($1_SRCS), ) |
557 $$(error No sources found for $1 when looking inside the dirs $$($1_SRC)) |
506 $$(error No sources found for $1 when looking inside the dirs $$($1_SRC)) |
558 endif |
507 endif |
559 |
508 |
560 # Calculate the expected output from compiling the sources |
509 # Calculate the expected output from compiling the sources |
561 $1_EXPECTED_OBJS_FILENAMES := $$(call replace_with_obj_extension, $$(notdir $$($1_SRCS))) |
510 $1_EXPECTED_OBJS_FILENAMES := $$(call replace_with_obj_extension, $$(notdir $$($1_SRCS))) |
562 $1_EXPECTED_OBJS := $$(addprefix $$($1_OBJECT_DIR)/,$$($1_EXPECTED_OBJS_FILENAMES)) |
511 $1_EXPECTED_OBJS := $$(addprefix $$($1_OBJECT_DIR)/, $$($1_EXPECTED_OBJS_FILENAMES)) |
563 # Are there too many object files on disk? Perhaps because some source file was removed? |
512 # Are there too many object files on disk? Perhaps because some source file was removed? |
564 $1_SUPERFLOUS_OBJS:=$$(sort $$(filter-out $$($1_EXPECTED_OBJS),$$($1_BINS))) |
513 $1_SUPERFLOUS_OBJS := $$(sort $$(filter-out $$($1_EXPECTED_OBJS), $$($1_BINS))) |
565 # Clean out the superfluous object files. |
514 # Clean out the superfluous object files. |
566 ifneq ($$($1_SUPERFLUOUS_OBJS),) |
515 ifneq ($$($1_SUPERFLUOUS_OBJS), ) |
567 $$(shell $(RM) -f $$($1_SUPERFLUOUS_OBJS)) |
516 $$(shell $(RM) -f $$($1_SUPERFLUOUS_OBJS)) |
568 endif |
517 endif |
569 # Sort to remove dupliates and provide a reproducable order on the input files to the linker. |
518 # Sort to remove dupliates and provide a reproducable order on the input files to the linker. |
570 $1_ALL_OBJS := $$(sort $$($1_EXPECTED_OBJS) $$($1_EXTRA_OBJECT_FILES)) |
519 $1_ALL_OBJS := $$(sort $$($1_EXPECTED_OBJS) $$($1_EXTRA_OBJECT_FILES)) |
571 |
520 |
572 # Pickup extra OPENJDK_TARGET_OS_TYPE, OPENJDK_TARGET_OS, and/or OPENJDK_TARGET_OS plus |
521 # Pickup extra OPENJDK_TARGET_OS_TYPE, OPENJDK_TARGET_OS, and/or OPENJDK_TARGET_OS plus |
573 # OPENJDK_TARGET_CPU pair dependent variables for CFLAGS. |
522 # OPENJDK_TARGET_CPU pair dependent variables for CFLAGS. |
574 $1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_CFLAGS_$(OPENJDK_TARGET_OS)) \ |
523 $1_EXTRA_CFLAGS := $$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_CFLAGS_$(OPENJDK_TARGET_OS)) \ |
575 $$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU)) |
524 $$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU)) |
576 ifneq ($(DEBUG_LEVEL),release) |
525 ifneq ($(DEBUG_LEVEL), release) |
577 # Pickup extra debug dependent variables for CFLAGS |
526 # Pickup extra debug dependent variables for CFLAGS |
578 $1_EXTRA_CFLAGS+=$$($1_CFLAGS_debug) |
527 $1_EXTRA_CFLAGS += $$($1_CFLAGS_debug) |
579 $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)_debug) |
528 $1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)_debug) |
580 $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_debug) |
529 $1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS)_debug) |
581 $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU)_debug) |
530 $1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU)_debug) |
582 else |
531 else |
583 $1_EXTRA_CFLAGS+=$$($1_CFLAGS_release) |
532 $1_EXTRA_CFLAGS += $$($1_CFLAGS_release) |
584 $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)_release) |
533 $1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)_release) |
585 $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_release) |
534 $1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS)_release) |
586 $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU)_release) |
535 $1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU)_release) |
587 endif |
536 endif |
588 |
537 |
589 # Pickup extra OPENJDK_TARGET_OS_TYPE and/or OPENJDK_TARGET_OS dependent variables for CXXFLAGS. |
538 # Pickup extra OPENJDK_TARGET_OS_TYPE and/or OPENJDK_TARGET_OS dependent variables for CXXFLAGS. |
590 $1_EXTRA_CXXFLAGS:=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)) |
539 $1_EXTRA_CXXFLAGS := $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)) |
591 ifneq ($(DEBUG_LEVEL),release) |
540 ifneq ($(DEBUG_LEVEL), release) |
592 # Pickup extra debug dependent variables for CXXFLAGS |
541 # Pickup extra debug dependent variables for CXXFLAGS |
593 $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_debug) |
542 $1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_debug) |
594 $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_TYPE)_debug) |
543 $1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_TYPE)_debug) |
595 $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_debug) |
544 $1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_debug) |
596 else |
545 else |
597 $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_release) |
546 $1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_release) |
598 $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_TYPE)_release) |
547 $1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_TYPE)_release) |
599 $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_release) |
548 $1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_release) |
600 endif |
549 endif |
601 |
550 |
602 # If no C++ flags are explicitly set, default to using the C flags. |
551 # If no C++ flags are explicitly set, default to using the C flags. |
603 # After that, we can set additional C++ flags that should not interfere |
552 # After that, we can set additional C++ flags that should not interfere |
604 # with the mechanism for copying the C flags by default. |
553 # with the mechanism for copying the C flags by default. |
605 ifeq ($$($1_CXXFLAGS),) |
554 ifeq ($$($1_CXXFLAGS), ) |
606 $1_CXXFLAGS:=$$($1_CFLAGS) |
555 $1_CXXFLAGS := $$($1_CFLAGS) |
607 endif |
556 endif |
608 ifeq ($$(strip $$($1_EXTRA_CXXFLAGS)),) |
557 ifeq ($$(strip $$($1_EXTRA_CXXFLAGS)), ) |
609 $1_EXTRA_CXXFLAGS:=$$($1_EXTRA_CFLAGS) |
558 $1_EXTRA_CXXFLAGS := $$($1_EXTRA_CFLAGS) |
610 endif |
559 endif |
611 |
560 |
612 ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true) |
561 ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true) |
613 $$(call SetIfEmpty, $1_CFLAGS_DEBUG_SYMBOLS, $(CFLAGS_DEBUG_SYMBOLS)) |
562 $$(call SetIfEmpty, $1_CFLAGS_DEBUG_SYMBOLS, $(CFLAGS_DEBUG_SYMBOLS)) |
614 $$(call SetIfEmpty, $1_CXXFLAGS_DEBUG_SYMBOLS, $(CXXFLAGS_DEBUG_SYMBOLS)) |
563 $$(call SetIfEmpty, $1_CXXFLAGS_DEBUG_SYMBOLS, $(CXXFLAGS_DEBUG_SYMBOLS)) |
615 $1_EXTRA_CFLAGS += $$($1_CFLAGS_DEBUG_SYMBOLS) |
564 $1_EXTRA_CFLAGS += $$($1_CFLAGS_DEBUG_SYMBOLS) |
616 $1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_DEBUG_SYMBOLS) |
565 $1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_DEBUG_SYMBOLS) |
617 endif |
566 endif |
618 |
567 |
619 ifneq (,$$($1_REORDER)) |
568 ifneq ($$($1_REORDER), ) |
620 $1_EXTRA_CFLAGS += $$(C_FLAG_REORDER) |
569 $1_EXTRA_CFLAGS += $$(C_FLAG_REORDER) |
621 $1_EXTRA_CXXFLAGS += $$(C_FLAG_REORDER) |
570 $1_EXTRA_CXXFLAGS += $$(C_FLAG_REORDER) |
622 endif |
571 endif |
623 |
572 |
624 # Pass the library name for static JNI library naming |
573 # Pass the library name for static JNI library naming |
625 ifneq ($$($1_STATIC_LIBRARY),) |
574 ifeq ($$($1_TYPE), STATIC_LIBRARY) |
626 $1_EXTRA_CFLAGS += -DLIBRARY_NAME=$$($1_STATIC_LIBRARY) |
575 $1_EXTRA_CFLAGS += -DLIBRARY_NAME=$$($1_NAME) |
627 $1_EXTRA_CXXFLAGS += -DLIBRARY_NAME=$$($1_STATIC_LIBRARY) |
576 $1_EXTRA_CXXFLAGS += -DLIBRARY_NAME=$$($1_NAME) |
628 endif |
577 endif |
629 |
578 |
630 # Pick up disabled warnings, if possible on this platform. |
579 # Pick up disabled warnings, if possible on this platform. |
631 ifneq ($(DISABLE_WARNING_PREFIX),) |
580 ifneq ($(DISABLE_WARNING_PREFIX), ) |
632 $1_EXTRA_CFLAGS += $$(addprefix $(DISABLE_WARNING_PREFIX), \ |
581 $1_EXTRA_CFLAGS += $$(addprefix $(DISABLE_WARNING_PREFIX), \ |
633 $$($1_DISABLED_WARNINGS_$(TOOLCHAIN_TYPE)) \ |
582 $$($1_DISABLED_WARNINGS_$(TOOLCHAIN_TYPE)) \ |
634 $$($1_DISABLED_WARNINGS_C_$(TOOLCHAIN_TYPE))) |
583 $$($1_DISABLED_WARNINGS_C_$(TOOLCHAIN_TYPE))) |
635 $1_EXTRA_CXXFLAGS += $$(addprefix $(DISABLE_WARNING_PREFIX), \ |
584 $1_EXTRA_CXXFLAGS += $$(addprefix $(DISABLE_WARNING_PREFIX), \ |
636 $$($1_DISABLED_WARNINGS_$(TOOLCHAIN_TYPE)) \ |
585 $$($1_DISABLED_WARNINGS_$(TOOLCHAIN_TYPE)) \ |
637 $$($1_DISABLED_WARNINGS_CXX_$(TOOLCHAIN_TYPE))) |
586 $$($1_DISABLED_WARNINGS_CXX_$(TOOLCHAIN_TYPE))) |
638 endif |
587 endif |
639 |
588 |
640 # Check if warnings should be considered errors. |
589 # Check if warnings should be considered errors. |
641 # Pick first binary and toolchain specific, then binary specific, then general setting. |
590 # Pick first binary and toolchain specific, then binary specific, then general setting. |
642 ifeq ($$($1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE)),) |
591 ifeq ($$($1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE)), ) |
643 ifeq ($$($1_WARNINGS_AS_ERRORS),) |
592 ifeq ($$($1_WARNINGS_AS_ERRORS), ) |
644 $1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE) := $$(WARNINGS_AS_ERRORS) |
593 $1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE) := $$(WARNINGS_AS_ERRORS) |
645 else |
594 else |
646 $1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE) := $$($1_WARNINGS_AS_ERRORS) |
595 $1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE) := $$($1_WARNINGS_AS_ERRORS) |
647 endif |
596 endif |
648 endif |
597 endif |