80bd176432
Instead of passing through CC which may have things like ccache and other arguments (when using clang) this commit filters out the necessary arguments from CC to pass the right linker to rustc. Closes #13562
606 lines
25 KiB
Makefile
606 lines
25 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.
|
|
|
|
|
|
# Create variables HOST_<triple> containing the host part
|
|
# of each target triple. For example, the triple i686-darwin-macos
|
|
# would create a variable HOST_i686-darwin-macos with the value
|
|
# i386.
|
|
define DEF_HOST_VAR
|
|
HOST_$(1) = $(subst i686,i386,$(word 1,$(subst -, ,$(1))))
|
|
endef
|
|
$(foreach t,$(CFG_TARGET),$(eval $(call DEF_HOST_VAR,$(t))))
|
|
$(foreach t,$(CFG_TARGET),$(info cfg: host for $(t) is $(HOST_$(t))))
|
|
|
|
# Ditto for OSTYPE
|
|
define DEF_OSTYPE_VAR
|
|
OSTYPE_$(1) = $(subst $(firstword $(subst -, ,$(1)))-,,$(1))
|
|
endef
|
|
$(foreach t,$(CFG_TARGET),$(eval $(call DEF_OSTYPE_VAR,$(t))))
|
|
$(foreach t,$(CFG_TARGET),$(info cfg: os for $(t) is $(OSTYPE_$(t))))
|
|
|
|
# On Darwin, we need to run dsymutil so the debugging information ends
|
|
# up in the right place. On other platforms, it automatically gets
|
|
# embedded into the executable, so use a no-op command.
|
|
CFG_DSYMUTIL := true
|
|
|
|
# Hack: not sure how to test if a file exists in make other than this
|
|
OS_SUPP = $(patsubst %,--suppressions=%,\
|
|
$(wildcard $(CFG_SRC_DIR)src/etc/$(CFG_OSTYPE).supp*))
|
|
|
|
ifdef CFG_DISABLE_OPTIMIZE_CXX
|
|
$(info cfg: disabling C++ optimization (CFG_DISABLE_OPTIMIZE_CXX))
|
|
CFG_GCCISH_CFLAGS += -O0
|
|
else
|
|
CFG_GCCISH_CFLAGS += -O2
|
|
endif
|
|
|
|
# The soname thing is for supporting a statically linked jemalloc.
|
|
# see https://blog.mozilla.org/jseward/2012/06/05/valgrind-now-supports-jemalloc-builds-directly/
|
|
ifdef CFG_VALGRIND
|
|
CFG_VALGRIND += --error-exitcode=100 \
|
|
--soname-synonyms=somalloc=NONE \
|
|
--quiet \
|
|
--suppressions=$(CFG_SRC_DIR)src/etc/x86.supp \
|
|
$(OS_SUPP)
|
|
ifdef CFG_ENABLE_HELGRIND
|
|
CFG_VALGRIND += --tool=helgrind
|
|
else
|
|
CFG_VALGRIND += --tool=memcheck \
|
|
--leak-check=full
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(findstring linux,$(CFG_OSTYPE)),)
|
|
ifdef CFG_PERF
|
|
ifneq ($(CFG_PERF_WITH_LOGFD),)
|
|
CFG_PERF_TOOL := $(CFG_PERF) stat -r 3 --log-fd 2
|
|
else
|
|
CFG_PERF_TOOL := $(CFG_PERF) stat -r 3
|
|
endif
|
|
else
|
|
ifdef CFG_VALGRIND
|
|
CFG_PERF_TOOL :=\
|
|
$(CFG_VALGRIND) --tool=cachegrind --cache-sim=yes --branch-sim=yes
|
|
else
|
|
CFG_PERF_TOOL := /usr/bin/time --verbose
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# These flags will cause the compiler to produce a .d file
|
|
# next to the .o file that lists header deps.
|
|
CFG_DEPEND_FLAGS = -MMD -MP -MT $(1) -MF $(1:%.o=%.d)
|
|
|
|
AR := ar
|
|
|
|
CFG_INFO := $(info cfg: using $(CFG_C_COMPILER))
|
|
ifeq ($(CFG_C_COMPILER),clang)
|
|
# The -Qunused-arguments sidesteps spurious warnings from clang
|
|
ifeq ($(origin CC),default)
|
|
CC=clang -Qunused-arguments
|
|
endif
|
|
ifeq ($(origin CXX),default)
|
|
CXX=clang++ -Qunused-arguments
|
|
endif
|
|
ifeq ($(origin CPP),default)
|
|
CPP=clang -Qunused-arguments
|
|
endif
|
|
else
|
|
ifeq ($(CFG_C_COMPILER),gcc)
|
|
ifeq ($(origin CC),default)
|
|
CC=gcc
|
|
endif
|
|
ifeq ($(origin CXX),default)
|
|
CXX=g++
|
|
endif
|
|
ifeq ($(origin CPP),default)
|
|
CPP=gcc
|
|
endif
|
|
else
|
|
ifeq ($(CFG_C_COMPILER),ccache clang)
|
|
# The -Qunused-arguments sidesteps spurious warnings from clang
|
|
ifeq ($(origin CC),default)
|
|
CC=ccache clang -Qunused-arguments
|
|
endif
|
|
ifeq ($(origin CXX),default)
|
|
CXX=ccache clang++ -Qunused-arguments
|
|
endif
|
|
ifeq ($(origin CPP),default)
|
|
CPP=ccache clang -Qunused-arguments
|
|
endif
|
|
else
|
|
ifeq ($(CFG_C_COMPILER),ccache gcc)
|
|
ifeq ($(origin CC),default)
|
|
CC=ccache gcc
|
|
endif
|
|
ifeq ($(origin CXX),default)
|
|
CXX=ccache g++
|
|
endif
|
|
ifeq ($(origin CPP),default)
|
|
CPP=ccache gcc
|
|
endif
|
|
else
|
|
CFG_ERR := $(error please try on a system with gcc or clang)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
CFG_RLIB_GLOB=lib$(1)-*.rlib
|
|
|
|
# x86_64-unknown-linux-gnu configuration
|
|
CC_x86_64-unknown-linux-gnu=$(CC)
|
|
CXX_x86_64-unknown-linux-gnu=$(CXX)
|
|
CPP_x86_64-unknown-linux-gnu=$(CPP)
|
|
AR_x86_64-unknown-linux-gnu=$(AR)
|
|
CFG_LIB_NAME_x86_64-unknown-linux-gnu=lib$(1).so
|
|
CFG_STATIC_LIB_NAME_x86_64-unknown-linux-gnu=lib$(1).a
|
|
CFG_LIB_GLOB_x86_64-unknown-linux-gnu=lib$(1)-*.so
|
|
CFG_LIB_DSYM_GLOB_x86_64-unknown-linux-gnu=lib$(1)-*.dylib.dSYM
|
|
CFG_GCCISH_CFLAGS_x86_64-unknown-linux-gnu := -Wall -Werror -g -fPIC -m64
|
|
CFG_GCCISH_CXXFLAGS_x86_64-unknown-linux-gnu := -fno-rtti
|
|
CFG_GCCISH_LINK_FLAGS_x86_64-unknown-linux-gnu := -shared -fPIC -ldl -pthread -lrt -g -m64
|
|
CFG_GCCISH_DEF_FLAG_x86_64-unknown-linux-gnu := -Wl,--export-dynamic,--dynamic-list=
|
|
CFG_GCCISH_PRE_LIB_FLAGS_x86_64-unknown-linux-gnu := -Wl,-whole-archive
|
|
CFG_GCCISH_POST_LIB_FLAGS_x86_64-unknown-linux-gnu := -Wl,-no-whole-archive
|
|
CFG_DEF_SUFFIX_x86_64-unknown-linux-gnu := .linux.def
|
|
CFG_LLC_FLAGS_x86_64-unknown-linux-gnu :=
|
|
CFG_INSTALL_NAME_x86_64-unknown-linux-gnu =
|
|
CFG_LIBUV_LINK_FLAGS_x86_64-unknown-linux-gnu =
|
|
CFG_EXE_SUFFIX_x86_64-unknown-linux-gnu =
|
|
CFG_WINDOWSY_x86_64-unknown-linux-gnu :=
|
|
CFG_UNIXY_x86_64-unknown-linux-gnu := 1
|
|
CFG_PATH_MUNGE_x86_64-unknown-linux-gnu := true
|
|
CFG_LDPATH_x86_64-unknown-linux-gnu :=
|
|
CFG_RUN_x86_64-unknown-linux-gnu=$(2)
|
|
CFG_RUN_TARG_x86_64-unknown-linux-gnu=$(call CFG_RUN_x86_64-unknown-linux-gnu,,$(2))
|
|
|
|
# i686-unknown-linux-gnu configuration
|
|
CC_i686-unknown-linux-gnu=$(CC)
|
|
CXX_i686-unknown-linux-gnu=$(CXX)
|
|
CPP_i686-unknown-linux-gnu=$(CPP)
|
|
AR_i686-unknown-linux-gnu=$(AR)
|
|
CFG_LIB_NAME_i686-unknown-linux-gnu=lib$(1).so
|
|
CFG_STATIC_LIB_NAME_i686-unknown-linux-gnu=lib$(1).a
|
|
CFG_LIB_GLOB_i686-unknown-linux-gnu=lib$(1)-*.so
|
|
CFG_LIB_DSYM_GLOB_i686-unknown-linux-gnu=lib$(1)-*.dylib.dSYM
|
|
CFG_GCCISH_CFLAGS_i686-unknown-linux-gnu := -Wall -Werror -g -fPIC -m32
|
|
CFG_GCCISH_CXXFLAGS_i686-unknown-linux-gnu := -fno-rtti
|
|
CFG_GCCISH_LINK_FLAGS_i686-unknown-linux-gnu := -shared -fPIC -ldl -pthread -lrt -g -m32
|
|
CFG_GCCISH_DEF_FLAG_i686-unknown-linux-gnu := -Wl,--export-dynamic,--dynamic-list=
|
|
CFG_GCCISH_PRE_LIB_FLAGS_i686-unknown-linux-gnu := -Wl,-whole-archive
|
|
CFG_GCCISH_POST_LIB_FLAGS_i686-unknown-linux-gnu := -Wl,-no-whole-archive
|
|
CFG_DEF_SUFFIX_i686-unknown-linux-gnu := .linux.def
|
|
CFG_LLC_FLAGS_i686-unknown-linux-gnu :=
|
|
CFG_INSTALL_NAME_i686-unknown-linux-gnu =
|
|
CFG_LIBUV_LINK_FLAGS_i686-unknown-linux-gnu =
|
|
CFG_EXE_SUFFIX_i686-unknown-linux-gnu =
|
|
CFG_WINDOWSY_i686-unknown-linux-gnu :=
|
|
CFG_UNIXY_i686-unknown-linux-gnu := 1
|
|
CFG_PATH_MUNGE_i686-unknown-linux-gnu := true
|
|
CFG_LDPATH_i686-unknown-linux-gnu :=
|
|
CFG_RUN_i686-unknown-linux-gnu=$(2)
|
|
CFG_RUN_TARG_i686-unknown-linux-gnu=$(call CFG_RUN_i686-unknown-linux-gnu,,$(2))
|
|
|
|
# arm-apple-darwin configuration
|
|
ifeq ($(CFG_OSTYPE),apple-darwin)
|
|
CFG_IOS_SDK = $(shell xcrun --show-sdk-path -sdk iphoneos 2>/dev/null)
|
|
CFG_IOS_FLAGS = -target arm-apple-darwin -isysroot $(CFG_IOS_SDK) -I$(CFG_IOS_SDK)/usr/include -I$(CFG_IOS_SDK)/usr/include/c++/4.2.1
|
|
CC_arm-apple-darwin = $(shell xcrun -find -sdk iphoneos clang)
|
|
CXX_arm-apple-darwin = $(shell xcrun -find -sdk iphoneos clang++)
|
|
CPP_arm-apple-darwin = $(shell xcrun -find -sdk iphoneos clang++)
|
|
AR_arm-apple-darwin = $(shell xcrun -find -sdk iphoneos ar)
|
|
CFG_LIB_NAME_arm-apple-darwin = lib$(1).dylib
|
|
CFG_LIB_GLOB_arm-apple-darwin = lib$(1)-*.dylib
|
|
CFG_LIB_DSYM_GLOB_arm-apple-darwin = lib$(1)-*.dylib.dSYM
|
|
CFG_GCCISH_CFLAGS_arm-apple-darwin := -Wall -Werror -g -fPIC $(CFG_IOS_FLAGS)
|
|
CFG_GCCISH_CXXFLAGS_arm-apple-darwin := -fno-rtti $(CFG_IOS_FLAGS)
|
|
CFG_GCCISH_LINK_FLAGS_arm-apple-darwin := -dynamiclib -lpthread -framework CoreServices -Wl,-no_compact_unwind
|
|
CFG_GCCISH_DEF_FLAG_arm-apple-darwin := -Wl,-exported_symbols_list,
|
|
CFG_GCCISH_PRE_LIB_FLAGS_arm-apple-darwin :=
|
|
CFG_GCCISH_POST_LIB_FLAGS_arm-apple-darwin :=
|
|
CFG_DEF_SUFFIX_arm-apple-darwin := .darwin.def
|
|
CFG_LLC_FLAGS_arm-apple-darwin :=
|
|
CFG_INSTALL_NAME_arm-apple-darwin = -Wl,-install_name,@rpath/$(1)
|
|
CFG_LIBUV_LINK_FLAGS_arm-apple-darwin =
|
|
CFG_EXE_SUFFIX_arm-apple-darwin :=
|
|
CFG_WINDOWSY_arm-apple-darwin :=
|
|
CFG_UNIXY_arm-apple-darwin := 1
|
|
CFG_PATH_MUNGE_arm-apple-darwin := true
|
|
CFG_LDPATH_arm-apple-darwin :=
|
|
CFG_RUN_arm-apple-darwin = $(2)
|
|
CFG_RUN_TARG_arm-apple-darwin = $(call CFG_RUN_arm-apple-darwin,,$(2))
|
|
endif
|
|
|
|
# x86_64-apple-darwin configuration
|
|
CC_x86_64-apple-darwin=$(CC)
|
|
CXX_x86_64-apple-darwin=$(CXX)
|
|
CPP_x86_64-apple-darwin=$(CPP)
|
|
AR_x86_64-apple-darwin=$(AR)
|
|
CFG_LIB_NAME_x86_64-apple-darwin=lib$(1).dylib
|
|
CFG_STATIC_LIB_NAME_x86_64-apple-darwin=lib$(1).a
|
|
CFG_LIB_GLOB_x86_64-apple-darwin=lib$(1)-*.dylib
|
|
CFG_LIB_DSYM_GLOB_x86_64-apple-darwin=lib$(1)-*.dylib.dSYM
|
|
CFG_GCCISH_CFLAGS_x86_64-apple-darwin := -Wall -Werror -g -fPIC -m64 -arch x86_64
|
|
CFG_GCCISH_CXXFLAGS_x86_64-apple-darwin := -fno-rtti
|
|
CFG_GCCISH_LINK_FLAGS_x86_64-apple-darwin := -dynamiclib -pthread -framework CoreServices -m64
|
|
CFG_GCCISH_DEF_FLAG_x86_64-apple-darwin := -Wl,-exported_symbols_list,
|
|
CFG_GCCISH_PRE_LIB_FLAGS_x86_64-apple-darwin :=
|
|
CFG_GCCISH_POST_LIB_FLAGS_x86_64-apple-darwin :=
|
|
CFG_DEF_SUFFIX_x86_64-apple-darwin := .darwin.def
|
|
CFG_LLC_FLAGS_x86_64-apple-darwin :=
|
|
CFG_INSTALL_NAME_x86_64-apple-darwin = -Wl,-install_name,@rpath/$(1)
|
|
CFG_LIBUV_LINK_FLAGS_x86_64-apple-darwin =
|
|
CFG_EXE_SUFFIX_x86_64-apple-darwin :=
|
|
CFG_WINDOWSY_x86_64-apple-darwin :=
|
|
CFG_UNIXY_x86_64-apple-darwin := 1
|
|
CFG_PATH_MUNGE_x86_64-apple-darwin := true
|
|
CFG_LDPATH_x86_64-apple-darwin :=
|
|
CFG_RUN_x86_64-apple-darwin=$(2)
|
|
CFG_RUN_TARG_x86_64-apple-darwin=$(call CFG_RUN_x86_64-apple-darwin,,$(2))
|
|
|
|
# i686-apple-darwin configuration
|
|
CC_i686-apple-darwin=$(CC)
|
|
CXX_i686-apple-darwin=$(CXX)
|
|
CPP_i686-apple-darwin=$(CPP)
|
|
AR_i686-apple-darwin=$(AR)
|
|
CFG_LIB_NAME_i686-apple-darwin=lib$(1).dylib
|
|
CFG_STATIC_LIB_NAME_i686-apple-darwin=lib$(1).a
|
|
CFG_LIB_GLOB_i686-apple-darwin=lib$(1)-*.dylib
|
|
CFG_LIB_DSYM_GLOB_i686-apple-darwin=lib$(1)-*.dylib.dSYM
|
|
CFG_GCCISH_CFLAGS_i686-apple-darwin := -Wall -Werror -g -fPIC -m32 -arch i386
|
|
CFG_GCCISH_CXXFLAGS_i686-apple-darwin := -fno-rtti
|
|
CFG_GCCISH_LINK_FLAGS_i686-apple-darwin := -dynamiclib -pthread -framework CoreServices -m32
|
|
CFG_GCCISH_DEF_FLAG_i686-apple-darwin := -Wl,-exported_symbols_list,
|
|
CFG_GCCISH_PRE_LIB_FLAGS_i686-apple-darwin :=
|
|
CFG_GCCISH_POST_LIB_FLAGS_i686-apple-darwin :=
|
|
CFG_DEF_SUFFIX_i686-apple-darwin := .darwin.def
|
|
CFG_LLC_FLAGS_i686-apple-darwin :=
|
|
CFG_INSTALL_NAME_i686-apple-darwin = -Wl,-install_name,@rpath/$(1)
|
|
CFG_LIBUV_LINK_FLAGS_i686-apple-darwin =
|
|
CFG_EXE_SUFFIX_i686-apple-darwin :=
|
|
CFG_WINDOWSY_i686-apple-darwin :=
|
|
CFG_UNIXY_i686-apple-darwin := 1
|
|
CFG_PATH_MUNGE_i686-apple-darwin := true
|
|
CFG_LDPATH_i686-apple-darwin :=
|
|
CFG_RUN_i686-apple-darwin=$(2)
|
|
CFG_RUN_TARG_i686-apple-darwin=$(call CFG_RUN_i686-apple-darwin,,$(2))
|
|
|
|
# arm-linux-androideabi configuration
|
|
CC_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-gcc
|
|
CXX_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-g++
|
|
CPP_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-gcc -E
|
|
AR_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-ar
|
|
CFG_LIB_NAME_arm-linux-androideabi=lib$(1).so
|
|
CFG_STATIC_LIB_NAME_arm-linux-androideabi=lib$(1).a
|
|
CFG_LIB_GLOB_arm-linux-androideabi=lib$(1)-*.so
|
|
CFG_LIB_DSYM_GLOB_arm-linux-androideabi=lib$(1)-*.dylib.dSYM
|
|
CFG_GCCISH_CFLAGS_arm-linux-androideabi := -Wall -g -fPIC -D__arm__ -DANDROID -D__ANDROID__
|
|
CFG_GCCISH_CXXFLAGS_arm-linux-androideabi := -fno-rtti
|
|
CFG_GCCISH_LINK_FLAGS_arm-linux-androideabi := -shared -fPIC -ldl -g -lm -lsupc++
|
|
CFG_GCCISH_DEF_FLAG_arm-linux-androideabi := -Wl,--export-dynamic,--dynamic-list=
|
|
CFG_GCCISH_PRE_LIB_FLAGS_arm-linux-androideabi := -Wl,-whole-archive
|
|
CFG_GCCISH_POST_LIB_FLAGS_arm-linux-androideabi := -Wl,-no-whole-archive
|
|
CFG_DEF_SUFFIX_arm-linux-androideabi := .android.def
|
|
CFG_LLC_FLAGS_arm-linux-androideabi :=
|
|
CFG_INSTALL_NAME_arm-linux-androideabi =
|
|
CFG_LIBUV_LINK_FLAGS_arm-linux-androideabi =
|
|
CFG_EXE_SUFFIX_arm-linux-androideabi :=
|
|
CFG_WINDOWSY_arm-linux-androideabi :=
|
|
CFG_UNIXY_arm-linux-androideabi := 1
|
|
CFG_PATH_MUNGE_arm-linux-androideabi := true
|
|
CFG_LDPATH_arm-linux-androideabi :=
|
|
CFG_RUN_arm-linux-androideabi=
|
|
CFG_RUN_TARG_arm-linux-androideabi=
|
|
RUSTC_FLAGS_arm-linux-androideabi :=
|
|
RUSTC_CROSS_FLAGS_arm-linux-androideabi :=-C android-cross-path=$(CFG_ANDROID_CROSS_PATH)
|
|
|
|
# arm-unknown-linux-gnueabihf configuration
|
|
CROSS_PREFIX_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-
|
|
CC_arm-unknown-linux-gnueabihf=gcc
|
|
CXX_arm-unknown-linux-gnueabihf=g++
|
|
CPP_arm-unknown-linux-gnueabihf=gcc -E
|
|
AR_arm-unknown-linux-gnueabihf=ar
|
|
CFG_LIB_NAME_arm-unknown-linux-gnueabihf=lib$(1).so
|
|
CFG_STATIC_LIB_NAME_arm-unknown-linux-gnueabihf=lib$(1).a
|
|
CFG_LIB_GLOB_arm-unknown-linux-gnueabihf=lib$(1)-*.so
|
|
CFG_LIB_DSYM_GLOB_arm-unknown-linux-gnueabihf=lib$(1)-*.dylib.dSYM
|
|
CFG_GCCISH_CFLAGS_arm-unknown-linux-gnueabihf := -Wall -g -fPIC -D__arm__
|
|
CFG_GCCISH_CXXFLAGS_arm-unknown-linux-gnueabihf := -fno-rtti
|
|
CFG_GCCISH_LINK_FLAGS_arm-unknown-linux-gnueabihf := -shared -fPIC -g
|
|
CFG_GCCISH_DEF_FLAG_arm-unknown-linux-gnueabihf := -Wl,--export-dynamic,--dynamic-list=
|
|
CFG_GCCISH_PRE_LIB_FLAGS_arm-unknown-linux-gnueabihf := -Wl,-whole-archive
|
|
CFG_GCCISH_POST_LIB_FLAGS_arm-unknown-linux-gnueabihf := -Wl,-no-whole-archive
|
|
CFG_DEF_SUFFIX_arm-unknown-linux-gnueabihf := .linux.def
|
|
CFG_LLC_FLAGS_arm-unknown-linux-gnueabihf :=
|
|
CFG_INSTALL_NAME_ar,-unknown-linux-gnueabihf =
|
|
CFG_LIBUV_LINK_FLAGS_arm-unknown-linux-gnueabihf =
|
|
CFG_EXE_SUFFIX_arm-unknown-linux-gnueabihf :=
|
|
CFG_WINDOWSY_arm-unknown-linux-gnueabihf :=
|
|
CFG_UNIXY_arm-unknown-linux-gnueabihf := 1
|
|
CFG_PATH_MUNGE_arm-unknown-linux-gnueabihf := true
|
|
CFG_LDPATH_arm-unknown-linux-gnueabihf :=
|
|
CFG_RUN_arm-unknown-linux-gnueabihf=$(2)
|
|
CFG_RUN_TARG_arm-unknown-linux-gnueabihf=$(call CFG_RUN_arm-unknown-linux-gnueabihf,,$(2))
|
|
RUSTC_FLAGS_arm-unknown-linux-gnueabihf := -C target-feature=+v7,+vfp3
|
|
RUSTC_CROSS_FLAGS_arm-unknown-linux-gnueabihf :=
|
|
|
|
# arm-unknown-linux-gnueabi configuration
|
|
CROSS_PREFIX_arm-unknown-linux-gnueabi=arm-linux-gnueabi-
|
|
CC_arm-unknown-linux-gnueabi=gcc
|
|
CXX_arm-unknown-linux-gnueabi=g++
|
|
CPP_arm-unknown-linux-gnueabi=gcc -E
|
|
AR_arm-unknown-linux-gnueabi=ar
|
|
CFG_LIB_NAME_arm-unknown-linux-gnueabi=lib$(1).so
|
|
CFG_STATIC_LIB_NAME_arm-unknown-linux-gnueabi=lib$(1).a
|
|
CFG_LIB_GLOB_arm-unknown-linux-gnueabi=lib$(1)-*.so
|
|
CFG_LIB_DSYM_GLOB_arm-unknown-linux-gnueabi=lib$(1)-*.dylib.dSYM
|
|
CFG_GCCISH_CFLAGS_arm-unknown-linux-gnueabi := -Wall -g -fPIC -D__arm__ -mfpu=vfp
|
|
CFG_GCCISH_CXXFLAGS_arm-unknown-linux-gnueabi := -fno-rtti
|
|
CFG_GCCISH_LINK_FLAGS_arm-unknown-linux-gnueabi := -shared -fPIC -g
|
|
CFG_GCCISH_DEF_FLAG_arm-unknown-linux-gnueabi := -Wl,--export-dynamic,--dynamic-list=
|
|
CFG_GCCISH_PRE_LIB_FLAGS_arm-unknown-linux-gnueabi := -Wl,-whole-archive
|
|
CFG_GCCISH_POST_LIB_FLAGS_arm-unknown-linux-gnueabi := -Wl,-no-whole-archive
|
|
CFG_DEF_SUFFIX_arm-unknown-linux-gnueabi := .linux.def
|
|
CFG_LLC_FLAGS_arm-unknown-linux-gnueabi :=
|
|
CFG_INSTALL_NAME_arm-unknown-linux-gnueabi =
|
|
CFG_LIBUV_LINK_FLAGS_arm-unknown-linux-gnueabi =
|
|
CFG_EXE_SUFFIX_arm-unknown-linux-gnueabi :=
|
|
CFG_WINDOWSY_arm-unknown-linux-gnueabi :=
|
|
CFG_UNIXY_arm-unknown-linux-gnueabi := 1
|
|
CFG_PATH_MUNGE_arm-unknown-linux-gnueabi := true
|
|
CFG_LDPATH_arm-unknown-linux-gnueabi :=
|
|
CFG_RUN_arm-unknown-linux-gnueabi=$(2)
|
|
CFG_RUN_TARG_arm-unknown-linux-gnueabi=$(call CFG_RUN_arm-unknown-linux-gnueabi,,$(2))
|
|
RUSTC_FLAGS_arm-unknown-linux-gnueabi :=
|
|
RUSTC_CROSS_FLAGS_arm-unknown-linux-gnueabi :=
|
|
|
|
# mips-unknown-linux-gnu configuration
|
|
CC_mips-unknown-linux-gnu=mips-linux-gnu-gcc
|
|
CXX_mips-unknown-linux-gnu=mips-linux-gnu-g++
|
|
CPP_mips-unknown-linux-gnu=mips-linux-gnu-gcc -E
|
|
AR_mips-unknown-linux-gnu=mips-linux-gnu-ar
|
|
CFG_LIB_NAME_mips-unknown-linux-gnu=lib$(1).so
|
|
CFG_STATIC_LIB_NAME_mips-unknown-linux-gnu=lib$(1).a
|
|
CFG_LIB_GLOB_mips-unknown-linux-gnu=lib$(1)-*.so
|
|
CFG_LIB_DSYM_GLOB_mips-unknown-linux-gnu=lib$(1)-*.dylib.dSYM
|
|
CFG_GCCISH_CFLAGS_mips-unknown-linux-gnu := -Wall -g -fPIC -mips32r2 -msoft-float -mabi=32 -mno-compact-eh
|
|
CFG_GCCISH_CXXFLAGS_mips-unknown-linux-gnu := -fno-rtti
|
|
CFG_GCCISH_LINK_FLAGS_mips-unknown-linux-gnu := -shared -fPIC -g -mips32r2 -msoft-float -mabi=32
|
|
CFG_GCCISH_DEF_FLAG_mips-unknown-linux-gnu := -Wl,--export-dynamic,--dynamic-list=
|
|
CFG_GCCISH_PRE_LIB_FLAGS_mips-unknown-linux-gnu := -Wl,-whole-archive
|
|
CFG_GCCISH_POST_LIB_FLAGS_mips-unknown-linux-gnu := -Wl,-no-whole-archive
|
|
CFG_DEF_SUFFIX_mips-unknown-linux-gnu := .linux.def
|
|
CFG_LLC_FLAGS_mips-unknown-linux-gnu :=
|
|
CFG_INSTALL_NAME_mips-unknown-linux-gnu =
|
|
CFG_LIBUV_LINK_FLAGS_mips-unknown-linux-gnu =
|
|
CFG_EXE_SUFFIX_mips-unknown-linux-gnu :=
|
|
CFG_WINDOWSY_mips-unknown-linux-gnu :=
|
|
CFG_UNIXY_mips-unknown-linux-gnu := 1
|
|
CFG_PATH_MUNGE_mips-unknown-linux-gnu := true
|
|
CFG_LDPATH_mips-unknown-linux-gnu :=
|
|
CFG_RUN_mips-unknown-linux-gnu=
|
|
CFG_RUN_TARG_mips-unknown-linux-gnu=
|
|
RUSTC_FLAGS_mips-unknown-linux-gnu := -C target-cpu=mips32r2 -C target-feature="+mips32r2,+o32" -C soft-float
|
|
|
|
# i686-pc-mingw32 configuration
|
|
CC_i686-pc-mingw32=$(CC)
|
|
CXX_i686-pc-mingw32=$(CXX)
|
|
CPP_i686-pc-mingw32=$(CPP)
|
|
AR_i686-pc-mingw32=$(AR)
|
|
CFG_LIB_NAME_i686-pc-mingw32=$(1).dll
|
|
CFG_STATIC_LIB_NAME_i686-pc-mingw32=$(1).lib
|
|
CFG_LIB_GLOB_i686-pc-mingw32=$(1)-*.dll
|
|
CFG_LIB_DSYM_GLOB_i686-pc-mingw32=$(1)-*.dylib.dSYM
|
|
CFG_GCCISH_CFLAGS_i686-pc-mingw32 := -Wall -Werror -g -m32 -march=i686 -D_WIN32_WINNT=0x0600 -I$(CFG_SRC_DIR)src/etc/mingw-fix-include
|
|
CFG_GCCISH_CXXFLAGS_i686-pc-mingw32 := -fno-rtti
|
|
CFG_GCCISH_LINK_FLAGS_i686-pc-mingw32 := -shared -fPIC -g -m32
|
|
CFG_GCCISH_DEF_FLAG_i686-pc-mingw32 :=
|
|
CFG_GCCISH_PRE_LIB_FLAGS_i686-pc-mingw32 :=
|
|
CFG_GCCISH_POST_LIB_FLAGS_i686-pc-mingw32 :=
|
|
CFG_DEF_SUFFIX_i686-pc-mingw32 := .mingw32.def
|
|
CFG_LLC_FLAGS_i686-pc-mingw32 :=
|
|
CFG_INSTALL_NAME_i686-pc-mingw32 =
|
|
CFG_LIBUV_LINK_FLAGS_i686-pc-mingw32 := -lws2_32 -lpsapi -liphlpapi
|
|
CFG_LLVM_BUILD_ENV_i686-pc-mingw32 := CPATH=$(CFG_SRC_DIR)src/etc/mingw-fix-include
|
|
CFG_EXE_SUFFIX_i686-pc-mingw32 := .exe
|
|
CFG_WINDOWSY_i686-pc-mingw32 := 1
|
|
CFG_UNIXY_i686-pc-mingw32 :=
|
|
CFG_PATH_MUNGE_i686-pc-mingw32 :=
|
|
CFG_LDPATH_i686-pc-mingw32 :=$(CFG_LDPATH_i686-pc-mingw32):$(PATH)
|
|
CFG_RUN_i686-pc-mingw32=PATH="$(CFG_LDPATH_i686-pc-mingw32):$(1)" $(2)
|
|
CFG_RUN_TARG_i686-pc-mingw32=$(call CFG_RUN_i686-pc-mingw32,$(HLIB$(1)_H_$(CFG_BUILD)),$(2))
|
|
|
|
# i586-mingw32msvc configuration
|
|
CC_i586-mingw32msvc=$(CFG_MINGW32_CROSS_PATH)/bin/i586-mingw32msvc-gcc
|
|
CXX_i586-mingw32msvc=$(CFG_MINGW32_CROSS_PATH)/bin/i586-mingw32msvc-g++
|
|
CPP_i586-mingw32msvc=$(CFG_MINGW32_CROSS_PATH)/bin/i586-mingw32msvc-cpp
|
|
AR_i586-mingw32msvc=$(CFG_MINGW32_CROSS_PATH)/bin/i586-mingw32msvc-ar
|
|
CFG_LIB_NAME_i586-mingw32msvc=$(1).dll
|
|
CFG_STATIC_LIB_NAME_i586-mingw32msvc=$(1).lib
|
|
CFG_LIB_GLOB_i586-mingw32msvc=$(1)-*.dll
|
|
CFG_LIB_DSYM_GLOB_i586-mingw32msvc=$(1)-*.dylib.dSYM
|
|
CFG_GCCISH_CFLAGS_i586-mingw32msvc := -Wall -Werror -g -march=i586 -m32
|
|
CFG_GCCISH_CXXFLAGS_i586-mingw32msvc := -fno-rtti
|
|
CFG_GCCISH_LINK_FLAGS_i586-mingw32msvc := -shared -g -m32
|
|
CFG_GCCISH_DEF_FLAG_i586-mingw32msvc :=
|
|
CFG_GCCISH_PRE_LIB_FLAGS_i586-mingw32msvc :=
|
|
CFG_GCCISH_POST_LIB_FLAGS_i586-mingw32msvc :=
|
|
CFG_DEF_SUFFIX_i586-mingw32msvc := .mingw32.def
|
|
CFG_LLC_FLAGS_i586-mingw32msvc :=
|
|
CFG_INSTALL_NAME_i586-mingw32msvc =
|
|
CFG_LIBUV_LINK_FLAGS_i586-mingw32msvc := -L$(CFG_MINGW32_CROSS_PATH)/i586-mingw32msvc/lib -lws2_32 -lpsapi -liphlpapi
|
|
CFG_EXE_SUFFIX_i586-mingw32msvc := .exe
|
|
CFG_WINDOWSY_i586-mingw32msvc := 1
|
|
CFG_UNIXY_i586-mingw32msvc :=
|
|
CFG_PATH_MUNGE_i586-mingw32msvc := $(strip perl -i.bak -p \
|
|
-e 's@\\(\S)@/\1@go;' \
|
|
-e 's@^/([a-zA-Z])/@\1:/@o;')
|
|
CFG_LDPATH_i586-mingw32msvc :=
|
|
CFG_RUN_i586-mingw32msvc=
|
|
CFG_RUN_TARG_i586-mingw32msvc=
|
|
|
|
# i686-w64-mingw32 configuration
|
|
CROSS_PREFIX_i686-w64-mingw32=i686-w64-mingw32-
|
|
CC_i686-w64-mingw32=gcc
|
|
CXX_i686-w64-mingw32=g++
|
|
CPP_i686-w64-mingw32=gcc -E
|
|
AR_i686-w64-mingw32=ar
|
|
CFG_LIB_NAME_i686-w64-mingw32=$(1).dll
|
|
CFG_STATIC_LIB_NAME_i686-w64-mingw32=$(1).lib
|
|
CFG_LIB_GLOB_i686-w64-mingw32=$(1)-*.dll
|
|
CFG_LIB_DSYM_GLOB_i686-w64-mingw32=$(1)-*.dylib.dSYM
|
|
CFG_GCCISH_CFLAGS_i686-w64-mingw32 := -Wall -Werror -g -m32 -D_WIN32_WINNT=0x0600
|
|
CFG_GCCISH_CXXFLAGS_i686-w64-mingw32 := -fno-rtti
|
|
CFG_GCCISH_LINK_FLAGS_i686-w64-mingw32 := -shared -g -m32
|
|
CFG_GCCISH_DEF_FLAG_i686-w64-mingw32 :=
|
|
CFG_GCCISH_PRE_LIB_FLAGS_i686-w64-mingw32 :=
|
|
CFG_GCCISH_POST_LIB_FLAGS_i686-w64-mingw32 :=
|
|
CFG_DEF_SUFFIX_i686-w64-mingw32 := .mingw32.def
|
|
CFG_LLC_FLAGS_i686-w64-mingw32 :=
|
|
CFG_INSTALL_NAME_i686-w64-mingw32 =
|
|
CFG_LIBUV_LINK_FLAGS_i686-w64-mingw32 := -lws2_32 -lpsapi -liphlpapi
|
|
CFG_EXE_SUFFIX_i686-w64-mingw32 := .exe
|
|
CFG_WINDOWSY_i686-w64-mingw32 := 1
|
|
CFG_UNIXY_i686-w64-mingw32 :=
|
|
CFG_PATH_MUNGE_i686-w64-mingw32 :=
|
|
CFG_LDPATH_i686-w64-mingw32 :=$(CFG_LDPATH_i686-w64-mingw32):$(PATH)
|
|
CFG_RUN_i686-w64-mingw32=PATH="$(CFG_LDPATH_i686-w64-mingw32):$(1)" $(2)
|
|
CFG_RUN_TARG_i686-w64-mingw32=$(call CFG_RUN_i686-w64-mingw32,$(HLIB$(1)_H_$(CFG_BUILD)),$(2))
|
|
RUSTC_CROSS_FLAGS_i686-w64-mingw32 :=
|
|
|
|
# x86_64-w64-mingw32 configuration
|
|
CROSS_PREFIX_x86_64-w64-mingw32=x86_64-w64-mingw32-
|
|
CC_x86_64-w64-mingw32=gcc
|
|
CXX_x86_64-w64-mingw32=g++
|
|
CPP_x86_64-w64-mingw32=gcc -E
|
|
AR_x86_64-w64-mingw32=ar
|
|
CFG_LIB_NAME_x86_64-w64-mingw32=$(1).dll
|
|
CFG_STATIC_LIB_NAME_x86_64-w64-mingw32=$(1).lib
|
|
CFG_LIB_GLOB_x86_64-w64-mingw32=$(1)-*.dll
|
|
CFG_LIB_DSYM_GLOB_x86_64-w64-mingw32=$(1)-*.dylib.dSYM
|
|
CFG_GCCISH_CFLAGS_x86_64-w64-mingw32 := -Wall -Werror -g -m64 -D_WIN32_WINNT=0x0600
|
|
CFG_GCCISH_CXXFLAGS_x86_64-w64-mingw32 := -fno-rtti
|
|
CFG_GCCISH_LINK_FLAGS_x86_64-w64-mingw32 := -shared -g -m64
|
|
CFG_GCCISH_DEF_FLAG_x86_64-w64-mingw32 :=
|
|
CFG_GCCISH_PRE_LIB_FLAGS_x86_64-w64-mingw32 :=
|
|
CFG_GCCISH_POST_LIB_FLAGS_x86_64-w64-mingw32 :=
|
|
CFG_DEF_SUFFIX_x86_64-w64-mingw32 := .mingw32.def
|
|
CFG_LLC_FLAGS_x86_64-w64-mingw32 :=
|
|
CFG_INSTALL_NAME_x86_64-w64-mingw32 =
|
|
CFG_LIBUV_LINK_FLAGS_x86_64-w64-mingw32 := -lws2_32 -lpsapi -liphlpapi
|
|
CFG_EXE_SUFFIX_x86_64-w64-mingw32 := .exe
|
|
CFG_WINDOWSY_x86_64-w64-mingw32 := 1
|
|
CFG_UNIXY_x86_64-w64-mingw32 :=
|
|
CFG_PATH_MUNGE_x86_64-w64-mingw32 :=
|
|
CFG_LDPATH_x86_64-w64-mingw32 :=$(CFG_LDPATH_x86_64-w64-mingw32):$(PATH)
|
|
CFG_RUN_x86_64-w64-mingw32=PATH="$(CFG_LDPATH_x86_64-w64-mingw32):$(1)" $(2)
|
|
CFG_RUN_TARG_x86_64-w64-mingw32=$(call CFG_RUN_x86_64-w64-mingw32,$(HLIB$(1)_H_$(CFG_BUILD)),$(2))
|
|
RUSTC_CROSS_FLAGS_x86_64-w64-mingw32 :=
|
|
|
|
# x86_64-unknown-freebsd configuration
|
|
CC_x86_64-unknown-freebsd=$(CC)
|
|
CXX_x86_64-unknown-freebsd=$(CXX)
|
|
CPP_x86_64-unknown-freebsd=$(CPP)
|
|
AR_x86_64-unknown-freebsd=$(AR)
|
|
CFG_LIB_NAME_x86_64-unknown-freebsd=lib$(1).so
|
|
CFG_STATIC_LIB_NAME_x86_64-unknown-freebsd=lib$(1).a
|
|
CFG_LIB_GLOB_x86_64-unknown-freebsd=lib$(1)-*.so
|
|
CFG_LIB_DSYM_GLOB_x86_64-unknown-freebsd=$(1)-*.dylib.dSYM
|
|
CFG_GCCISH_CFLAGS_x86_64-unknown-freebsd := -Wall -Werror -g -fPIC -I/usr/local/include
|
|
CFG_GCCISH_LINK_FLAGS_x86_64-unknown-freebsd := -shared -fPIC -g -pthread -lrt
|
|
CFG_GCCISH_DEF_FLAG_x86_64-unknown-freebsd := -Wl,--export-dynamic,--dynamic-list=
|
|
CFG_GCCISH_PRE_LIB_FLAGS_x86_64-unknown-freebsd := -Wl,-whole-archive
|
|
CFG_GCCISH_POST_LIB_FLAGS_x86_64-unknown-freebsd := -Wl,-no-whole-archive
|
|
CFG_DEF_SUFFIX_x86_64-unknown-freebsd := .bsd.def
|
|
CFG_LLC_FLAGS_x86_64-unknown-freebsd :=
|
|
CFG_INSTALL_NAME_x86_64-unknown-freebsd =
|
|
CFG_LIBUV_LINK_FLAGS_x86_64-unknown-freebsd := -pthread -lkvm
|
|
CFG_EXE_SUFFIX_x86_64-unknown-freebsd :=
|
|
CFG_WINDOWSY_x86_64-unknown-freebsd :=
|
|
CFG_UNIXY_x86_64-unknown-freebsd := 1
|
|
CFG_PATH_MUNGE_x86_64-unknown-freebsd :=
|
|
CFG_LDPATH_x86_64-unknown-freebsd :=
|
|
CFG_RUN_x86_64-unknown-freebsd=$(2)
|
|
CFG_RUN_TARG_x86_64-unknown-freebsd=$(call CFG_RUN_x86_64-unknown-freebsd,,$(2))
|
|
|
|
ifeq ($(CFG_CCACHE_CPP2),1)
|
|
CCACHE_CPP2=1
|
|
export CCACHE_CPP
|
|
endif
|
|
|
|
ifdef CFG_CCACHE_BASEDIR
|
|
CCACHE_BASEDIR=$(CFG_CCACHE_BASEDIR)
|
|
export CCACHE_BASEDIR
|
|
endif
|
|
|
|
FIND_COMPILER = $(word 1,$(1:ccache=))
|
|
|
|
define CFG_MAKE_TOOLCHAIN
|
|
# Prepend the tools with their prefix if cross compiling
|
|
ifneq ($(CFG_BUILD),$(1))
|
|
CC_$(1)=$(CROSS_PREFIX_$(1))$(CC_$(1))
|
|
CXX_$(1)=$(CROSS_PREFIX_$(1))$(CXX_$(1))
|
|
CPP_$(1)=$(CROSS_PREFIX_$(1))$(CPP_$(1))
|
|
AR_$(1)=$(CROSS_PREFIX_$(1))$(AR_$(1))
|
|
RUSTC_CROSS_FLAGS_$(1)=-C linker=$$(call FIND_COMPILER,$$(CXX_$(1))) \
|
|
-C ar=$$(call FIND_COMPILER,$$(AR_$(1))) $(RUSTC_CROSS_FLAGS_$(1))
|
|
|
|
RUSTC_FLAGS_$(1)=$$(RUSTC_CROSS_FLAGS_$(1)) $(RUSTC_FLAGS_$(1))
|
|
endif
|
|
|
|
CFG_COMPILE_C_$(1) = $$(CC_$(1)) \
|
|
$$(CFG_GCCISH_CFLAGS) \
|
|
$$(CFG_GCCISH_CFLAGS_$(1)) \
|
|
$$(CFG_DEPEND_FLAGS) \
|
|
-c -o $$(1) $$(2)
|
|
CFG_LINK_C_$(1) = $$(CC_$(1)) \
|
|
$$(CFG_GCCISH_LINK_FLAGS) -o $$(1) \
|
|
$$(CFG_GCCISH_LINK_FLAGS_$(1)) \
|
|
$$(CFG_GCCISH_DEF_FLAG_$(1))$$(3) $$(2) \
|
|
$$(call CFG_INSTALL_NAME_$(1),$$(4))
|
|
CFG_COMPILE_CXX_$(1) = $$(CXX_$(1)) \
|
|
$$(CFG_GCCISH_CFLAGS) \
|
|
$$(CFG_GCCISH_CXXFLAGS) \
|
|
$$(CFG_GCCISH_CFLAGS_$(1)) \
|
|
$$(CFG_GCCISH_CXXFLAGS_$(1)) \
|
|
$$(CFG_DEPEND_FLAGS) \
|
|
-c -o $$(1) $$(2)
|
|
CFG_LINK_CXX_$(1) = $$(CXX_$(1)) \
|
|
$$(CFG_GCCISH_LINK_FLAGS) -o $$(1) \
|
|
$$(CFG_GCCISH_LINK_FLAGS_$(1)) \
|
|
$$(CFG_GCCISH_DEF_FLAG_$(1))$$(3) $$(2) \
|
|
$$(call CFG_INSTALL_NAME_$(1),$$(4))
|
|
|
|
ifeq ($$(findstring $(HOST_$(1)),arm mips),)
|
|
|
|
# We're using llvm-mc as our assembler because it supports
|
|
# .cfi pseudo-ops on mac
|
|
CFG_ASSEMBLE_$(1)=$$(CPP_$(1)) -E $$(CFG_DEPEND_FLAGS) $$(2) | \
|
|
$$(LLVM_MC_$$(CFG_BUILD)) \
|
|
-assemble \
|
|
-filetype=obj \
|
|
-triple=$(1) \
|
|
-o=$$(1)
|
|
else
|
|
|
|
# For the ARM and MIPS crosses, use the toolchain assembler
|
|
# FIXME: We should be able to use the LLVM assembler
|
|
CFG_ASSEMBLE_$(1)=$$(CC_$(1)) $$(CFG_GCCISH_CFLAGS_$(1)) \
|
|
$$(CFG_DEPEND_FLAGS) $$(2) -c -o $$(1)
|
|
|
|
endif
|
|
|
|
endef
|
|
|
|
$(foreach target,$(CFG_TARGET),\
|
|
$(eval $(call CFG_MAKE_TOOLCHAIN,$(target))))
|