aboutsummaryrefslogtreecommitdiff
path: root/mk/platform.mk
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2011-05-01 20:18:52 +0000
committerGraydon Hoare <[email protected]>2011-05-01 20:20:25 +0000
commit40624e35d74e5d200ae689c02753f0d60924e668 (patch)
treee1e259098d5c49cd49844b40abd46ec35219d94a /mk/platform.mk
parentrustc: Preserve dots in input path when using an implicit output path (diff)
downloadrust-40624e35d74e5d200ae689c02753f0d60924e668.tar.xz
rust-40624e35d74e5d200ae689c02753f0d60924e668.zip
Start splitting up Makefile.in
Diffstat (limited to 'mk/platform.mk')
-rw-r--r--mk/platform.mk144
1 files changed, 144 insertions, 0 deletions
diff --git a/mk/platform.mk b/mk/platform.mk
new file mode 100644
index 00000000..ecf486f7
--- /dev/null
+++ b/mk/platform.mk
@@ -0,0 +1,144 @@
+CFG_GCC_CFLAGS := -fno-strict-aliasing
+CFG_GCC_LINK_FLAGS :=
+
+# 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
+
+ifeq ($(CFG_OSTYPE), FreeBSD)
+ CFG_LIB_NAME=lib$(1).so
+ CFG_GCC_CFLAGS += -fPIC -march=i686 -I/usr/local/include -O2
+ CFG_GCC_LINK_FLAGS += -shared -fPIC -lpthread -lrt
+ ifeq ($(CFG_CPUTYPE), x86_64)
+ CFG_GCC_CFLAGS += -m32
+ CFG_GCC_LINK_FLAGS += -m32
+ endif
+ CFG_UNIXY := 1
+ CFG_LDENV := LD_LIBRARY_PATH
+ CFG_DEF_SUFFIX := .bsd.def
+endif
+
+ifeq ($(CFG_OSTYPE), Linux)
+ CFG_LIB_NAME=lib$(1).so
+ CFG_GCC_CFLAGS += -fPIC -march=i686 -O2
+ CFG_GCC_LINK_FLAGS += -shared -fPIC -ldl -lpthread -lrt
+ CFG_GCC_DEF_FLAG := -Wl,--export-dynamic,--dynamic-list=
+ CFG_GCC_PRE_LIB_FLAGS := -Wl,-whole-archive
+ CFG_GCC_POST_LIB_FLAGS := -Wl,-no-whole-archive
+ ifeq ($(CFG_CPUTYPE), x86_64)
+ CFG_GCC_CFLAGS += -m32
+ CFG_GCC_LINK_FLAGS += -m32
+ endif
+ CFG_UNIXY := 1
+ CFG_LDENV := LD_LIBRARY_PATH
+ CFG_DEF_SUFFIX := .linux.def
+endif
+
+ifeq ($(CFG_OSTYPE), Darwin)
+ CFG_LIB_NAME=lib$(1).dylib
+ CFG_UNIXY := 1
+ CFG_LDENV := DYLD_LIBRARY_PATH
+ CFG_GCC_LINK_FLAGS += -dynamiclib -lpthread
+ CFG_GCC_DEF_FLAG := -Wl,-exported_symbols_list,
+ # Darwin has a very blurry notion of "64 bit", and claims it's running
+ # "on an i386" when the whole userspace is 64-bit and the compiler
+ # emits 64-bit binaries by default. So we just force -m32 here. Smarter
+ # approaches welcome!
+ #
+ # NB: Currently GCC's optimizer breaks rustrt (task-comm-1 hangs) on Darwin.
+ CFG_GCC_CFLAGS += -m32 -O0
+ CFG_GCC_LINK_FLAGS += -m32
+ CFG_DSYMUTIL := dsymutil
+ CFG_DEF_SUFFIX := .darwin.def
+endif
+
+ifneq ($(findstring MINGW,$(CFG_OSTYPE)),)
+ CFG_WINDOWSY := 1
+endif
+
+CFG_LDPATH :=$(CFG_BUILD_DIR)/rt
+CFG_LDPATH :=$(CFG_LDPATH):$(CFG_BUILD_DIR)/rustllvm
+CFG_TESTLIB=$(CFG_BUILD_DIR)/$(strip \
+ $(if $(findstring stage0,$(1)), \
+ stage1 \
+ $(if $(findstring stage1,$(1)), \
+ stage2 \
+ $(if $(findstring stage2,$(1)),\
+ stage3 \
+ ))))
+
+ifdef CFG_WINDOWSY
+ CFG_INFO := $(info cfg: windows-y environment)
+
+ CFG_EXE_SUFFIX := .exe
+ CFG_LIB_NAME=$(1).dll
+ CFG_LDPATH :=$(CFG_LDPATH):$(CFG_LLVM_BINDIR)
+ CFG_LDPATH :=$(CFG_LDPATH):$$PATH
+ CFG_RUN_TEST=PATH="$(CFG_LDPATH):$(call CFG_TESTLIB,$(1))" $(1)
+ CFG_RUN_TARG=PATH="$(CFG_BUILD_DIR)/$(1):$(CFG_LDPATH)" $(2)
+
+ CFG_PATH_MUNGE := $(strip perl -i.bak -p \
+ -e 's@\\(\S)@/\1@go;' \
+ -e 's@^/([a-zA-Z])/@\1:/@o;')
+ ifdef CFG_FLEXLINK
+ CFG_BOOT_NATIVE := 1
+ endif
+ CFG_GCC_CFLAGS += -march=i686 -O2
+ CFG_GCC_LINK_FLAGS += -shared -fPIC
+ CFG_DEF_SUFFIX := .def
+endif
+
+ifdef CFG_UNIXY
+ CFG_INFO := $(info cfg: unix-y environment)
+
+ CFG_PATH_MUNGE := true
+ CFG_EXE_SUFFIX :=
+ CFG_LDPATH :=$(CFG_LDPATH):$(CFG_LLVM_LIBDIR)
+ CFG_RUN_TARG=$(CFG_LDENV)=$(CFG_BUILD_DIR)/$(1):$(CFG_LDPATH) $(2)
+ CFG_RUN_TEST=\
+ $(CFG_LDENV)=$(call CFG_TESTLIB,$(1)):$(CFG_LDPATH) \
+ $(CFG_VALGRIND) $(1)
+
+ CFG_BOOT_NATIVE := 1
+
+ ifdef MINGW_CROSS
+ CFG_EXE_SUFFIX := .exe
+ CFG_LIB_NAME=$(1).dll
+ CFG_LDPATH :=$(CFG_LDPATH):$(CFG_LLVM_BINDIR)
+ CFG_LDPATH :=$(CFG_LDPATH):$$PATH
+ CFG_RUN_TARG=PATH=$(CFG_BUILD_DIR)/$(1):$(CFG_LDPATH) $(2)
+ CFG_RUN_TEST=PATH=$(CFG_LDPATH):$(call CFG_TESTLIB,$(1)) $(1)
+
+ CFG_INFO := $(info cfg: mingw-cross)
+ CFG_GCC_CROSS := i586-mingw32msvc-
+ CFG_BOOT_FLAGS += -t win32-x86-pe
+ ifdef CFG_VALGRIND
+ CFG_VALGRIND += wine
+ endif
+ CFG_GCC_CFLAGS := -march=i686
+ CFG_GCC_LINK_FLAGS := -shared
+ ifeq ($(CFG_CPUTYPE), x86_64)
+ CFG_GCC_CFLAGS += -m32
+ CFG_GCC_LINK_FLAGS += -m32
+ endif
+ endif
+ ifdef CFG_VALGRIND
+ CFG_VALGRIND += --leak-check=full \
+ --error-exitcode=1 \
+ --quiet --vex-iropt-level=0 \
+ --suppressions=$(CFG_SRC_DIR)src/etc/x86.supp
+ endif
+endif
+
+ifdef CFG_GCC
+ CFG_INFO := $(info cfg: using gcc)
+ CFG_GCC_CFLAGS += -Wall -Werror -fno-rtti -fno-exceptions -g
+ CFG_GCC_LINK_FLAGS += -g
+ CFG_COMPILE_C = $(CFG_GCC_CROSS)g++ $(CFG_GCC_CFLAGS) -c -o $(1) $(2)
+ CFG_DEPEND_C = $(CFG_GCC_CROSS)g++ $(CFG_GCC_CFLAGS) -MT "$(1)" -MM $(2)
+ CFG_LINK_C = $(CFG_GCC_CROSS)g++ $(CFG_GCC_LINK_FLAGS) -o $(1) \
+ $(CFG_GCC_DEF_FLAG)$(3) $(2)
+else
+ CFG_ERR := $(error please try on a system with gcc)
+endif