mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 07:14:28 +00:00
7cf0b1798b
This commit starts to add MSVC support to the ./configure script to enable the build system to detect and build an MSVC target with the cl.exe compiler and toolchain. The primary change here is a large sanity check when an MSVC target is requested (and currently only `x86_64-pc-windows-msvc` is recognized). When building an MSVC target, the configure script either requires the `--msvc-root` argument or for `cl.exe` to be in `PATH`. It also requires that if in the path `cl.exe` is the 64-bit version of the compiler. Once detected the configure script will run the `vcvarsall.bat` script provided by Visual Studio to learn about the `INCLUDE` and `LIB` variables needed by the `cl.exe` compiler to run (the default include/lib paths for the compiler/linker). These variables are then reexported when running `make` to ensure that our own compiles are running the same toolchain. The purpose of this detection and environment variable scraping is to avoid requiring the build itself to be run inside of a `cmd.exe` shell but rather allow it to run in the currently expected MinGW/MSYS shell.
42 lines
1.7 KiB
Makefile
42 lines
1.7 KiB
Makefile
# x86_64-pc-windows-msvc configuration
|
|
CC_x86_64-pc-windows-msvc="$(CFG_MSVC_CL)" -nologo
|
|
LINK_x86_64-pc-windows-msvc="$(CFG_MSVC_LINK)" -nologo
|
|
CXX_x86_64-pc-windows-msvc="$(CFG_MSVC_CL)" -nologo
|
|
CPP_x86_64-pc-windows-msvc="$(CFG_MSVC_CL)" -nologo
|
|
AR_x86_64-pc-windows-msvc="$(CFG_MSVC_LIB)" -nologo
|
|
CFG_LIB_NAME_x86_64-pc-windows-msvc=$(1).dll
|
|
CFG_STATIC_LIB_NAME_x86_64-pc-windows-msvc=$(1).lib
|
|
CFG_LIB_GLOB_x86_64-pc-windows-msvc=$(1)-*.dll
|
|
CFG_LIB_DSYM_GLOB_x86_64-pc-windows-msvc=$(1)-*.dylib.dSYM
|
|
CFG_JEMALLOC_CFLAGS_x86_64-pc-windows-msvc :=
|
|
CFG_GCCISH_CFLAGS_x86_64-pc-windows-msvc :=
|
|
CFG_GCCISH_CXXFLAGS_x86_64-pc-windows-msvc :=
|
|
CFG_GCCISH_LINK_FLAGS_x86_64-pc-windows-msvc :=
|
|
CFG_GCCISH_DEF_FLAG_x86_64-pc-windows-msvc :=
|
|
CFG_LLC_FLAGS_x86_64-pc-windows-msvc :=
|
|
CFG_INSTALL_NAME_x86_64-pc-windows-msvc =
|
|
CFG_EXE_SUFFIX_x86_64-pc-windows-msvc := .exe
|
|
CFG_WINDOWSY_x86_64-pc-windows-msvc := 1
|
|
CFG_UNIXY_x86_64-pc-windows-msvc :=
|
|
CFG_LDPATH_x86_64-pc-windows-msvc :=
|
|
CFG_RUN_x86_64-pc-windows-msvc=$(2)
|
|
CFG_RUN_TARG_x86_64-pc-windows-msvc=$(call CFG_RUN_x86_64-pc-windows-msvc,,$(2))
|
|
CFG_GNU_TRIPLE_x86_64-pc-windows-msvc := x86_64-pc-win32
|
|
|
|
# These two environment variables are scraped by the `./configure` script and
|
|
# are necessary for `cl.exe` to find standard headers (the INCLUDE variable) and
|
|
# for `link.exe` to find standard libraries (the LIB variable).
|
|
ifdef CFG_MSVC_INCLUDE_PATH
|
|
export INCLUDE := $(CFG_MSVC_INCLUDE_PATH)
|
|
endif
|
|
ifdef CFG_MSVC_LIB_PATH
|
|
export LIB := $(CFG_MSVC_LIB_PATH)
|
|
endif
|
|
|
|
# Unfortunately `link.exe` is also a program in `/usr/bin` on MinGW installs,
|
|
# but it's not the one that we want. As a result we make sure that our detected
|
|
# `link.exe` shows up in PATH first.
|
|
ifdef CFG_MSVC_LINK
|
|
export PATH := $(CFG_MSVC_ROOT)/VC/bin/amd64:$(PATH)
|
|
endif
|