1 # Copyright 2012 The Rust Project Developers. See the COPYRIGHT
2 # file at the top-level directory of this distribution and at
3 # http://rust-lang.org/COPYRIGHT.
5 # Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 # http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 # <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 # option. This file may not be copied, modified, or distributed
9 # except according to those terms.
11 ######################################################################
12 # rustc LLVM-extensions (C++) library variables and rules
13 ######################################################################
15 define DEF_RUSTLLVM_TARGETS
17 # FIXME: Lately, on windows, llvm-config --includedir is not enough
18 # to find the llvm includes (probably because we're not actually installing
19 # llvm, but using it straight out of the build directory)
20 ifdef CFG_WINDOWSY_
$(1)
21 LLVM_EXTRA_INCDIRS_
$(1)= $$(call CFG_CC_INCLUDE_
$(1),$(S
)src
/llvm
/include) \
22 $$(call CFG_CC_INCLUDE_
$(1),\
23 $$(CFG_LLVM_BUILD_DIR_
$(1))/include)
26 RUSTLLVM_OBJS_CS_
$(1) := $$(addprefix rustllvm
/, \
27 RustWrapper.
cpp PassWrapper.
cpp \
30 RUSTLLVM_INCS_
$(1) = $$(LLVM_EXTRA_INCDIRS_
$(1)) \
31 $$(call CFG_CC_INCLUDE_
$(1),$$(LLVM_INCDIR_
$(1))) \
32 $$(call CFG_CC_INCLUDE_
$(1),$$(S
)src
/rustllvm
/include)
33 RUSTLLVM_OBJS_OBJS_
$(1) := $$(RUSTLLVM_OBJS_CS_
$(1):rustllvm
/%.
cpp=$(1)/rustllvm
/%.o
)
35 # Flag that we are building with Rust's llvm fork
36 ifeq ($(CFG_LLVM_ROOT
),)
37 RUSTLLVM_CXXFLAGS_
$(1) := -DLLVM_RUSTLLVM
40 # Note that we appease `cl.exe` and its need for some sort of exception
41 # handling flag with the `EHsc` argument here as well.
42 ifeq ($$(findstring msvc
,$(1)),msvc
)
43 EXTRA_RUSTLLVM_CXXFLAGS_
$(1) := //EHsc
46 $$(RT_OUTPUT_DIR_
$(1))/$$(call CFG_STATIC_LIB_NAME_
$(1),rustllvm
): \
47 $$(RUSTLLVM_OBJS_OBJS_
$(1))
48 @
$$(call E
, link
: $$@
)
49 $$(Q
)$$(call CFG_CREATE_ARCHIVE_
$(1),$$@
) $$^
51 RUSTLLVM_COMPONENTS_
$(1) = $$(shell echo
$$(LLVM_ALL_COMPONENTS_
$(1)) |\
52 tr
'a-z-' 'A-Z_'| sed
-e
's/^ //;s/\([^ ]*\)/\-DLLVM_COMPONENT_\1/g')
54 # On MSVC we need to double-escape arguments that llvm-config printed which
55 # start with a '/'. The shell we're running in will auto-translate the argument
56 # `/foo` to `C:/msys64/foo` but we really want it to be passed through as `/foo`
57 # so the argument passed to our shell must be `//foo`.
58 $(1)/rustllvm
/%.o
: $(S
)src
/rustllvm
/%.
cpp $$(MKFILE_DEPS
) $$(LLVM_CONFIG_
$(1))
59 @
$$(call E
, compile
: $$@
)
60 $$(Q
)$$(call CFG_COMPILE_CXX_
$(1), $$@
,) \
61 $$(subst /,//,$$(LLVM_CXXFLAGS_
$(1))) \
62 $$(RUSTLLVM_COMPONENTS_
$(1)) \
63 $$(RUSTLLVM_CXXFLAGS_
$(1)) \
64 $$(EXTRA_RUSTLLVM_CXXFLAGS_
$(1)) \
65 $$(RUSTLLVM_INCS_
$(1)) \
69 # Instantiate template for all stages
70 $(foreach host
,$(CFG_HOST
), \
71 $(eval
$(call DEF_RUSTLLVM_TARGETS
,$(host
))))