b8e7c4fcb9
When building for multiple targets, the initial 'make' invocation always fails. The missing build stamp causes clean-llvm to be invoked, but clean-llvm cleans *all* llvm builds. So what happens is that 1) all llvm's are cleaned (a no-op), 2) llvm-${target1} builds, 3) all llvm's are cleaned (deleting llvm-${target1}), 4) llvm-${target2} is built, 5) the remaining build for ${target1} fails because llvm does not exist. This makes the clean operation only clean the correct llvm build. Should greatly reduce bot failures.
67 lines
2.1 KiB
Makefile
67 lines
2.1 KiB
Makefile
# Copyright 2012 The Rust Project Developers. See the COPYRIGHT
|
|
# file at the top-level directory of this distribution and at
|
|
# http://rust-lang.org/COPYRIGHT.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
# option. This file may not be copied, modified, or distributed
|
|
# except according to those terms.
|
|
|
|
|
|
ifdef CFG_ENABLE_FAST_MAKE
|
|
LLVM_DEPS := $(S)/.gitmodules
|
|
else
|
|
|
|
# This is just a rough approximation of LLVM deps
|
|
LLVM_DEPS_SRC=$(call rwildcard,$(CFG_LLVM_SRC_DIR)lib,*cpp *hpp)
|
|
LLVM_DEPS_INC=$(call rwildcard,$(CFG_LLVM_SRC_DIR)include,*cpp *hpp)
|
|
LLVM_DEPS=$(LLVM_DEPS_SRC) $(LLVM_DEPS_INC)
|
|
endif
|
|
|
|
define DEF_LLVM_RULES
|
|
|
|
# If CFG_LLVM_ROOT is defined then we don't build LLVM ourselves
|
|
ifeq ($(CFG_LLVM_ROOT),)
|
|
|
|
LLVM_STAMP_$(1) = $$(CFG_LLVM_BUILD_DIR_$(1))/llvm-auto-clean-stamp
|
|
|
|
$$(LLVM_CONFIG_$(1)): $$(LLVM_DEPS) $$(LLVM_STAMP_$(1))
|
|
@$$(call E, make: llvm)
|
|
$$(Q)$$(MAKE) -C $$(CFG_LLVM_BUILD_DIR_$(1)) $$(CFG_LLVM_BUILD_ENV_$(1)) ONLY_TOOLS="$$(LLVM_TOOLS)"
|
|
$$(Q)touch $$(LLVM_CONFIG_$(1))
|
|
endif
|
|
|
|
# This is used to independently force an LLVM clean rebuild
|
|
# when we changed something not otherwise captured by builtin
|
|
# dependencies. In these cases, commit a change that touches
|
|
# the stamp in the source dir.
|
|
$$(LLVM_STAMP_$(1)): $(S)src/rustllvm/llvm-auto-clean-trigger
|
|
@$$(call E, make: cleaning llvm)
|
|
$(Q)$(MAKE) clean-llvm$(1)
|
|
@$$(call E, make: done cleaning llvm)
|
|
touch $$@
|
|
|
|
ifeq ($$(CFG_ENABLE_LLVM_STATIC_STDCPP),1)
|
|
LLVM_STDCPP_LOCATION_$(1) = $$(shell $$(CC_$(1)) $$(CFG_GCCISH_CFLAGS_$(1)) \
|
|
-print-file-name=libstdc++.a)
|
|
else
|
|
LLVM_STDCPP_LOCATION_$(1) =
|
|
endif
|
|
|
|
endef
|
|
|
|
$(foreach host,$(CFG_HOST), \
|
|
$(eval $(call DEF_LLVM_RULES,$(host))))
|
|
|
|
$(foreach host,$(CFG_HOST), \
|
|
$(eval LLVM_CONFIGS := $(LLVM_CONFIGS) $(LLVM_CONFIG_$(host))))
|
|
|
|
$(S)src/librustc_llvm/llvmdeps.rs: \
|
|
$(LLVM_CONFIGS) \
|
|
$(S)src/etc/mklldeps.py \
|
|
$(MKFILE_DEPS)
|
|
$(Q)$(CFG_PYTHON) $(S)src/etc/mklldeps.py \
|
|
"$@" "$(LLVM_COMPONENTS)" "$(CFG_ENABLE_LLVM_STATIC_STDCPP)" \
|
|
$(LLVM_CONFIGS)
|