mk: Refactor platform.mk a bit

This commit is contained in:
Brian Anderson 2013-02-21 19:10:16 -08:00
parent 15c0c35352
commit 42be216848

View File

@ -19,6 +19,13 @@ endef
$(foreach t,$(CFG_TARGET_TRIPLES),$(eval $(call DEF_HOST_VAR,$(t)))) $(foreach t,$(CFG_TARGET_TRIPLES),$(eval $(call DEF_HOST_VAR,$(t))))
$(foreach t,$(CFG_TARGET_TRIPLES),$(info cfg: host for $(t) is $(HOST_$(t)))) $(foreach t,$(CFG_TARGET_TRIPLES),$(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_TRIPLES),$(eval $(call DEF_OSTYPE_VAR,$(t))))
$(foreach t,$(CFG_TARGET_TRIPLES),$(info cfg: os for $(t) is $(OSTYPE_$(t))))
# FIXME: no-omit-frame-pointer is just so that task_start_wrapper # FIXME: no-omit-frame-pointer is just so that task_start_wrapper
# has a frame pointer and the stack walker can understand it. Turning off # has a frame pointer and the stack walker can understand it. Turning off
# frame pointers everywhere is overkill # frame pointers everywhere is overkill
@ -33,6 +40,21 @@ CFG_DSYMUTIL := true
# non-Darwin platforms; omitting it causes a full -R copy of lib/ # non-Darwin platforms; omitting it causes a full -R copy of lib/
CFG_LIB_DSYM_GLOB=lib$(1)-*.dylib.dSYM CFG_LIB_DSYM_GLOB=lib$(1)-*.dylib.dSYM
# 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*))
ifneq ($(findstring mingw,$(CFG_OSTYPE)),)
CFG_WINDOWSY := 1
endif
ifdef CFG_DISABLE_OPTIMIZE_CXX
$(info cfg: disabling C++ optimization (CFG_DISABLE_OPTIMIZE_CXX))
CFG_GCCISH_CFLAGS += -O0
else
CFG_GCCISH_CFLAGS += -O2
endif
ifneq ($(findstring freebsd,$(CFG_OSTYPE)),) ifneq ($(findstring freebsd,$(CFG_OSTYPE)),)
CFG_LIB_NAME=lib$(1).so CFG_LIB_NAME=lib$(1).so
CFG_LIB_GLOB=lib$(1)-*.so CFG_LIB_GLOB=lib$(1)-*.so
@ -112,32 +134,6 @@ ifneq ($(findstring darwin,$(CFG_OSTYPE)),)
CFG_INSTALL_NAME = -Wl,-install_name,@rpath/$(1) CFG_INSTALL_NAME = -Wl,-install_name,@rpath/$(1)
endif endif
# 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*))
ifneq ($(findstring mingw,$(CFG_OSTYPE)),)
CFG_WINDOWSY := 1
endif
ifdef CFG_DISABLE_OPTIMIZE_CXX
$(info cfg: disabling C++ optimization (CFG_DISABLE_OPTIMIZE_CXX))
CFG_GCCISH_CFLAGS += -O0
else
CFG_GCCISH_CFLAGS += -O2
endif
CFG_TESTLIB=$(CFG_BUILD_DIR)/$(2)/$(strip \
$(if $(findstring stage0,$(1)), \
stage0/$(CFG_LIBDIR), \
$(if $(findstring stage1,$(1)), \
stage1/$(CFG_LIBDIR), \
$(if $(findstring stage2,$(1)), \
stage2/$(CFG_LIBDIR), \
$(if $(findstring stage3,$(1)), \
stage3/$(CFG_LIBDIR), \
)))))/rustc/$(CFG_BUILD_TRIPLE)/$(CFG_LIBDIR)
ifdef CFG_UNIXY ifdef CFG_UNIXY
CFG_INFO := $(info cfg: unix-y environment) CFG_INFO := $(info cfg: unix-y environment)
@ -152,25 +148,26 @@ ifdef CFG_UNIXY
CFG_LIBUV_LINK_FLAGS=-lpthread -lkvm CFG_LIBUV_LINK_FLAGS=-lpthread -lkvm
endif endif
ifdef CFG_ENABLE_MINGW_CROSS # FIXME: This is surely super broken
CFG_WINDOWSY := 1 # ifdef CFG_ENABLE_MINGW_CROSS
CFG_INFO := $(info cfg: mingw-cross) # CFG_WINDOWSY := 1
CFG_GCCISH_CROSS := i586-mingw32msvc- # CFG_INFO := $(info cfg: mingw-cross)
ifdef CFG_VALGRIND # CFG_GCCISH_CROSS := i586-mingw32msvc-
CFG_VALGRIND += wine # ifdef CFG_VALGRIND
endif # CFG_VALGRIND += wine
# endif
CFG_GCCISH_CFLAGS := -march=i586 # CFG_GCCISH_CFLAGS := -march=i586
CFG_GCCISH_PRE_LIB_FLAGS := # CFG_GCCISH_PRE_LIB_FLAGS :=
CFG_GCCISH_POST_LIB_FLAGS := # CFG_GCCISH_POST_LIB_FLAGS :=
CFG_GCCISH_DEF_FLAG := # CFG_GCCISH_DEF_FLAG :=
CFG_GCCISH_LINK_FLAGS := -shared # CFG_GCCISH_LINK_FLAGS := -shared
ifeq ($(CFG_CPUTYPE), x86_64) # ifeq ($(CFG_CPUTYPE), x86_64)
CFG_GCCISH_CFLAGS += -m32 # CFG_GCCISH_CFLAGS += -m32
CFG_GCCISH_LINK_FLAGS += -m32 # CFG_GCCISH_LINK_FLAGS += -m32
endif # endif
endif # endif
ifdef CFG_VALGRIND ifdef CFG_VALGRIND
CFG_VALGRIND += --error-exitcode=100 \ CFG_VALGRIND += --error-exitcode=100 \
--quiet \ --quiet \
@ -200,6 +197,18 @@ else
CFG_LDPATH := CFG_LDPATH :=
CFG_RUN=$(2) CFG_RUN=$(2)
endif endif
CFG_TESTLIB=$(CFG_BUILD_DIR)/$(2)/$(strip \
$(if $(findstring stage0,$(1)), \
stage0/$(CFG_LIBDIR), \
$(if $(findstring stage1,$(1)), \
stage1/$(CFG_LIBDIR), \
$(if $(findstring stage2,$(1)), \
stage2/$(CFG_LIBDIR), \
$(if $(findstring stage3,$(1)), \
stage3/$(CFG_LIBDIR), \
)))))/rustc/$(CFG_BUILD_TRIPLE)/$(CFG_LIBDIR)
CFG_RUN_TARG=$(call CFG_RUN,$(HLIB$(1)_H_$(CFG_BUILD_TRIPLE)),$(2)) CFG_RUN_TARG=$(call CFG_RUN,$(HLIB$(1)_H_$(CFG_BUILD_TRIPLE)),$(2))
CFG_RUN_TEST=$(call CFG_RUN,$(call CFG_TESTLIB,$(1),$(3)),$(1)) CFG_RUN_TEST=$(call CFG_RUN,$(call CFG_TESTLIB,$(1),$(3)),$(1))
CFG_LIBUV_LINK_FLAGS=-lWs2_32 -lpsapi -liphlpapi CFG_LIBUV_LINK_FLAGS=-lWs2_32 -lpsapi -liphlpapi
@ -233,34 +242,13 @@ ifeq ($(CFG_C_COMPILER),clang)
# next to the .o file that lists header deps. # next to the .o file that lists header deps.
CFG_DEPEND_FLAGS = -MMD -MP -MT $(1) -MF $(1:%.o=%.d) CFG_DEPEND_FLAGS = -MMD -MP -MT $(1) -MF $(1:%.o=%.d)
define CFG_MAKE_CC CFG_SPECIFIC_CC_CFLAGS = $(CFG_CLANG_CFLAGS)
CFG_COMPILE_C_$(1) = $$(CFG_GCCISH_CROSS)$$(CC) \ define MAKE_CLANG_SPECIFIC_CFLAGS
$$(CFG_GCCISH_CFLAGS) $$(CFG_CLANG_CFLAGS) \ CFG_SPECIFIC_CC_CFLAGS_$$(HOST_$(target)) = $(CFG_CLANG_CFLAGS_$$(HOST_$(target)))
$$(CFG_GCCISH_CFLAGS_$$(HOST_$(1))) \
$$(CFG_CLANG_CFLAGS_$$(HOST_$(1))) \
$$(CFG_DEPEND_FLAGS) \
-c -o $$(1) $$(2)
CFG_LINK_C_$(1) = $$(CFG_GCCISH_CROSS)$$(CC) \
$$(CFG_GCCISH_LINK_FLAGS) -o $$(1) \
$$(CFG_GCCISH_LINK_FLAGS_$$(HOST_$(1))) \
$$(CFG_GCCISH_DEF_FLAG)$$(3) $$(2) \
$$(call CFG_INSTALL_NAME,$$(4))
CFG_COMPILE_CXX_$(1) = $$(CFG_GCCISH_CROSS)$$(CXX) \
$$(CFG_GCCISH_CFLAGS) $$(CFG_CLANG_CFLAGS) \
$$(CFG_GCCISH_CXXFLAGS) \
$$(CFG_GCCISH_CFLAGS_$$(HOST_$(1))) \
$$(CFG_CLANG_CFLAGS_$$(HOST_$(1))) \
$$(CFG_DEPEND_FLAGS) \
-c -o $$(1) $$(2)
CFG_LINK_CXX_$(1) = $$(CFG_GCCISH_CROSS)$$(CXX) \
$$(CFG_GCCISH_LINK_FLAGS) -o $$(1) \
$$(CFG_GCCISH_LINK_FLAGS_$$(HOST_$(1))) \
$$(CFG_GCCISH_DEF_FLAG)$$(3) $$(2) \
$$(call CFG_INSTALL_NAME,$$(4))
endef endef
$(foreach target,$(CFG_TARGET_TRIPLES), \ $(foreach target,$(CFG_TARGET_TRIPLES), \
$(eval $(call CFG_MAKE_CC,$(target)))) $(eval $(call MAKE_CLANG_SPECIFIC_CFLAGS,$(target))))
else else
ifeq ($(CFG_C_COMPILER),gcc) ifeq ($(CFG_C_COMPILER),gcc)
ifeq ($(origin CC),default) ifeq ($(origin CC),default)
@ -279,12 +267,24 @@ ifeq ($(CFG_C_COMPILER),gcc)
# next to the .o file that lists header deps. # next to the .o file that lists header deps.
CFG_DEPEND_FLAGS = -MMD -MP -MT $(1) -MF $(1:%.o=%.d) CFG_DEPEND_FLAGS = -MMD -MP -MT $(1) -MF $(1:%.o=%.d)
define CFG_MAKE_CC CFG_SPECIFIC_CC_CFLAGS = $(CFG_GCC_CFLAGS)
define MAKE_GCC_SPECIFIC_CFLAGS
CFG_SPECIFIC_CC_CFLAGS_$$(HOST_$(target)) = $(CFG_GCC_CFLAGS_$$(HOST_$(target)))
endef
$(foreach target,$(CFG_TARGET_TRIPLES), \
$(eval $(call MAKE_GCC_SPECIFIC_CFLAGS,$(target))))
else
CFG_ERR := $(error please try on a system with gcc or clang)
endif
endif
define CFG_MAKE_CC
CFG_COMPILE_C_$(1) = $$(CFG_GCCISH_CROSS)$$(CC) \ CFG_COMPILE_C_$(1) = $$(CFG_GCCISH_CROSS)$$(CC) \
$$(CFG_GCCISH_CFLAGS) \ $$(CFG_GCCISH_CFLAGS) \
$$(CFG_GCCISH_CFLAGS_$$(HOST_$(1))) \ $$(CFG_GCCISH_CFLAGS_$$(HOST_$(1))) \
$$(CFG_GCC_CFLAGS) \ $$(CFG_SPECIFIC_CC_CFLAGS) \
$$(CFG_GCC_CFLAGS_$$(HOST_$(1))) \ $$(CFG_SPECIFIC_CC_CFLAGS_$$(HOST_$(1))) \
$$(CFG_DEPEND_FLAGS) \ $$(CFG_DEPEND_FLAGS) \
-c -o $$(1) $$(2) -c -o $$(1) $$(2)
CFG_LINK_C_$(1) = $$(CFG_GCCISH_CROSS)$$(CC) \ CFG_LINK_C_$(1) = $$(CFG_GCCISH_CROSS)$$(CC) \
@ -296,8 +296,8 @@ ifeq ($(CFG_C_COMPILER),gcc)
$$(CFG_GCCISH_CFLAGS) \ $$(CFG_GCCISH_CFLAGS) \
$$(CFG_GCCISH_CXXFLAGS) \ $$(CFG_GCCISH_CXXFLAGS) \
$$(CFG_GCCISH_CFLAGS_$$(HOST_$(1))) \ $$(CFG_GCCISH_CFLAGS_$$(HOST_$(1))) \
$$(CFG_GCC_CFLAGS) \ $$(CFG_SPECIFIC_CC_CFLAGS) \
$$(CFG_GCC_CFLAGS_$$(HOST_$(1))) \ $$(CFG_SPECIFIC_CC_CFLAGS_$$(HOST_$(1))) \
$$(CFG_DEPEND_FLAGS) \ $$(CFG_DEPEND_FLAGS) \
-c -o $$(1) $$(2) -c -o $$(1) $$(2)
CFG_LINK_CXX_$(1) = $$(CFG_GCCISH_CROSS)$$(CXX) \ CFG_LINK_CXX_$(1) = $$(CFG_GCCISH_CROSS)$$(CXX) \
@ -305,14 +305,10 @@ ifeq ($(CFG_C_COMPILER),gcc)
$$(CFG_GCCISH_LINK_FLAGS_$$(HOST_$(1))) \ $$(CFG_GCCISH_LINK_FLAGS_$$(HOST_$(1))) \
$$(CFG_GCCISH_DEF_FLAG)$$(3) $$(2) \ $$(CFG_GCCISH_DEF_FLAG)$$(3) $$(2) \
$$(call CFG_INSTALL_NAME,$$(4)) $$(call CFG_INSTALL_NAME,$$(4))
endef endef
$(foreach target,$(CFG_TARGET_TRIPLES), \ $(foreach target,$(CFG_TARGET_TRIPLES), \
$(eval $(call CFG_MAKE_CC,$(target)))) $(eval $(call CFG_MAKE_CC,$(target))))
else
CFG_ERR := $(error please try on a system with gcc or clang)
endif
endif
# We're using llvm-mc as our assembler because it supports # We're using llvm-mc as our assembler because it supports
# .cfi pseudo-ops on mac # .cfi pseudo-ops on mac