mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
mk: Enable building LLVM targeting MSVC
This commit modifies the makefiles to enable building LLVM with cmake and Visual Studio to generate an LLVM that targets MSVC. Rust's configure script requires cmake to be installed when targeting MSVC and will configure LLVM with cmake instead of the normal `./configure` script LLVM provides. The build will then run cmake to execute the build instead of the normal `make`. Currently `make clean-llvm` isn't supported on MSVC as I can't figure out how to run a "clean" target for the Visual Studio files.
This commit is contained in:
parent
7cf0b1798b
commit
b56d47cc80
34
configure
vendored
34
configure
vendored
@ -1348,7 +1348,39 @@ do
|
||||
done
|
||||
fi
|
||||
|
||||
if [ ${do_reconfigure} -ne 0 ]
|
||||
use_cmake=0
|
||||
case "$t" in
|
||||
(*-msvc)
|
||||
use_cmake=1
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ ${do_reconfigure} -ne 0 ] && [ ${use_cmake} -ne 0 ]
|
||||
then
|
||||
msg "configuring LLVM for $t with cmake"
|
||||
|
||||
CMAKE_ARGS="-DLLVM_INCLUDE_TESTS=OFF"
|
||||
if [ ! -z "$CFG_DISABLE_OPTIMIZE_LLVM" ]; then
|
||||
CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_BUILD_TYPE=Debug"
|
||||
else
|
||||
CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release"
|
||||
fi
|
||||
if [ -z "$CFG_ENABLE_LLVM_ASSERTIONS" ]
|
||||
then
|
||||
CMAKE_ARGS="$CMAKE_ARGS -DLLVM_ENABLE_ASSERTIONS=OFF"
|
||||
else
|
||||
CMAKE_ARGS="$CMAKE_ARGS -DLLVM_ENABLE_ASSERTIONS=ON"
|
||||
fi
|
||||
|
||||
msg "configuring LLVM with:"
|
||||
msg "$CMAKE_ARGS"
|
||||
(cd $LLVM_BUILD_DIR && "$CFG_CMAKE" $CFG_LLVM_SRC_DIR \
|
||||
-G "Visual Studio 12 2013 Win64" \
|
||||
$CMAKE_ARGS)
|
||||
need_ok "LLVM cmake configure failed"
|
||||
fi
|
||||
|
||||
if [ ${do_reconfigure} -ne 0 ] && [ ${use_cmake} -eq 0 ]
|
||||
then
|
||||
# LLVM's configure doesn't recognize the new Windows triples yet
|
||||
gnu_t=$(to_gnu_triple $t)
|
||||
|
13
mk/clean.mk
13
mk/clean.mk
@ -118,16 +118,3 @@ $(foreach host, $(CFG_HOST), \
|
||||
$(eval $(foreach target, $(CFG_TARGET), \
|
||||
$(eval $(foreach stage, 0 1 2 3, \
|
||||
$(eval $(call CLEAN_TARGET_STAGE_N,$(stage),$(target),$(host))))))))
|
||||
|
||||
define DEF_CLEAN_LLVM_HOST
|
||||
ifeq ($(CFG_LLVM_ROOT),)
|
||||
clean-llvm$(1):
|
||||
$$(Q)$$(MAKE) -C $$(CFG_LLVM_BUILD_DIR_$(1)) clean
|
||||
else
|
||||
clean-llvm$(1): ;
|
||||
|
||||
endif
|
||||
endef
|
||||
|
||||
$(foreach host, $(CFG_HOST), \
|
||||
$(eval $(call DEF_CLEAN_LLVM_HOST,$(host))))
|
||||
|
26
mk/llvm.mk
26
mk/llvm.mk
@ -19,6 +19,12 @@ LLVM_DEPS_INC=$(call rwildcard,$(CFG_LLVM_SRC_DIR)include,*cpp *hpp)
|
||||
LLVM_DEPS=$(LLVM_DEPS_SRC) $(LLVM_DEPS_INC)
|
||||
endif
|
||||
|
||||
ifdef CFG_DISABLE_OPTIMIZE_LLVM
|
||||
LLVM_BUILD_CONFIG_MODE := Debug
|
||||
else
|
||||
LLVM_BUILD_CONFIG_MODE := Release
|
||||
endif
|
||||
|
||||
define DEF_LLVM_RULES
|
||||
|
||||
# If CFG_LLVM_ROOT is defined then we don't build LLVM ourselves
|
||||
@ -26,10 +32,30 @@ ifeq ($(CFG_LLVM_ROOT),)
|
||||
|
||||
LLVM_STAMP_$(1) = $$(CFG_LLVM_BUILD_DIR_$(1))/llvm-auto-clean-stamp
|
||||
|
||||
ifeq ($$(findstring msvc,$(1)),msvc)
|
||||
|
||||
$$(LLVM_CONFIG_$(1)): $$(LLVM_DEPS) $$(LLVM_STAMP_$(1))
|
||||
@$$(call E, cmake: llvm)
|
||||
$$(Q)$$(CFG_CMAKE) --build $$(CFG_LLVM_BUILD_DIR_$(1)) \
|
||||
--config $$(LLVM_BUILD_CONFIG_MODE)
|
||||
$$(Q)touch $$(LLVM_CONFIG_$(1))
|
||||
|
||||
clean-llvm$(1):
|
||||
|
||||
else
|
||||
|
||||
$$(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))
|
||||
|
||||
clean-llvm$(1):
|
||||
$$(Q)$$(MAKE) -C $$(CFG_LLVM_BUILD_DIR_$(1)) clean
|
||||
|
||||
endif
|
||||
|
||||
else
|
||||
clean-llvm$(1):
|
||||
endif
|
||||
|
||||
# This is used to independently force an LLVM clean rebuild
|
||||
|
@ -299,9 +299,13 @@ LLVM_LIBDIR_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --libdir)
|
||||
LLVM_LIBDIR_RUSTFLAGS_$(1)=-L "$$(LLVM_LIBDIR_$(1))"
|
||||
LLVM_LIBS_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --libs $$(LLVM_COMPONENTS))
|
||||
LLVM_LDFLAGS_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --ldflags)
|
||||
ifeq ($$(findstring freebsd,$(1)),freebsd)
|
||||
# On FreeBSD, it may search wrong headers (that are for pre-installed LLVM),
|
||||
# so we replace -I with -iquote to ensure that it searches bundled LLVM first.
|
||||
LLVM_CXXFLAGS_$(1)=$$(subst -I, -iquote , $$(shell "$$(LLVM_CONFIG_$(1))" --cxxflags))
|
||||
else
|
||||
LLVM_CXXFLAGS_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --cxxflags)
|
||||
endif
|
||||
LLVM_HOST_TRIPLE_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --host-target)
|
||||
|
||||
LLVM_AS_$(1)=$$(CFG_LLVM_INST_DIR_$(1))/bin/llvm-as$$(X_$(1))
|
||||
|
Loading…
Reference in New Issue
Block a user