diff --git a/mk/cfg/mips-unknown-linux-gnu.mk b/mk/cfg/mips-unknown-linux-gnu.mk index ba5f6d0e75634..65b08774d49a0 100644 --- a/mk/cfg/mips-unknown-linux-gnu.mk +++ b/mk/cfg/mips-unknown-linux-gnu.mk @@ -7,8 +7,8 @@ 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_JEMALLOC_CFLAGS_mips-unknown-linux-gnu := -mips32r2 -msoft-float -mabi=32 -mno-compact-eh $(CFLAGS) -CFG_GCCISH_CFLAGS_mips-unknown-linux-gnu := -Wall -g -fPIC -mips32r2 -msoft-float -mabi=32 -mno-compact-eh $(CFLAGS) +CFG_JEMALLOC_CFLAGS_mips-unknown-linux-gnu := -mips32r2 -msoft-float -mabi=32 $(CFLAGS) +CFG_GCCISH_CFLAGS_mips-unknown-linux-gnu := -Wall -g -fPIC -mips32r2 -msoft-float -mabi=32 $(CFLAGS) CFG_GCCISH_CXXFLAGS_mips-unknown-linux-gnu := -fno-rtti $(CXXFLAGS) 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= @@ -20,5 +20,5 @@ CFG_UNIXY_mips-unknown-linux-gnu := 1 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 +RUSTC_FLAGS_mips-unknown-linux-gnu := -C target-cpu=mips32r2 -C target-feature="+mips32r2" -C soft-float CFG_GNU_TRIPLE_mips-unknown-linux-gnu := mips-unknown-linux-gnu diff --git a/mk/cfg/mipsel-unknown-linux-gnu.mk b/mk/cfg/mipsel-unknown-linux-gnu.mk index 539038c743460..4dadfc275d3c5 100644 --- a/mk/cfg/mipsel-unknown-linux-gnu.mk +++ b/mk/cfg/mipsel-unknown-linux-gnu.mk @@ -1,8 +1,8 @@ # mipsel-unknown-linux-gnu configuration -CC_mipsel-unknown-linux-gnu=mipsel-unknown-linux-gnu-gcc -CXX_mipsel-unknown-linux-gnu=mipsel-unknown-linux-gnu-g++ -CPP_mipsel-unknown-linux-gnu=mipsel-unknown-linux-gnu-gcc -AR_mipsel-unknown-linux-gnu=mipsel-unknown-linux-gnu-ar +CC_mipsel-unknown-linux-gnu=mipsel-linux-gnu-gcc +CXX_mipsel-unknown-linux-gnu=mipsel-linux-gnu-g++ +CPP_mipsel-unknown-linux-gnu=mipsel-linux-gnu-gcc +AR_mipsel-unknown-linux-gnu=mipsel-linux-gnu-ar CFG_LIB_NAME_mipsel-unknown-linux-gnu=lib$(1).so CFG_STATIC_LIB_NAME_mipsel-unknown-linux-gnu=lib$(1).a CFG_LIB_GLOB_mipsel-unknown-linux-gnu=lib$(1)-*.so @@ -20,5 +20,5 @@ CFG_UNIXY_mipsel-unknown-linux-gnu := 1 CFG_LDPATH_mipsel-unknown-linux-gnu := CFG_RUN_mipsel-unknown-linux-gnu= CFG_RUN_TARG_mipsel-unknown-linux-gnu= -RUSTC_FLAGS_mipsel-unknown-linux-gnu := -C target-cpu=mips32 -C target-feature="+mips32,+o32" +RUSTC_FLAGS_mipsel-unknown-linux-gnu := -C target-cpu=mips32 -C target-feature="+mips32" CFG_GNU_TRIPLE_mipsel-unknown-linux-gnu := mipsel-unknown-linux-gnu diff --git a/mk/dist.mk b/mk/dist.mk index 125141c1830d2..eb94760e248f6 100644 --- a/mk/dist.mk +++ b/mk/dist.mk @@ -21,6 +21,7 @@ # * dist-docs - Stage docs for upload PKG_NAME := $(CFG_PACKAGE_NAME) +STD_PKG_NAME := rust-std-$(CFG_PACKAGE_VERS) DOC_PKG_NAME := rust-docs-$(CFG_PACKAGE_VERS) MINGW_PKG_NAME := rust-mingw-$(CFG_PACKAGE_VERS) @@ -112,19 +113,25 @@ distcheck-tar-src: dist-tar-src # Unix binary installer tarballs ###################################################################### -define DEF_INSTALLER +define DEF_START_INSTALLER +dist-install-dir-$(1)-%: PREPARE_DIR_CMD=$(DEFAULT_PREPARE_DIR_CMD) +dist-install-dir-$(1)-%: PREPARE_BIN_CMD=$(DEFAULT_PREPARE_BIN_CMD) +dist-install-dir-$(1)-%: PREPARE_LIB_CMD=$(DEFAULT_PREPARE_LIB_CMD) +dist-install-dir-$(1)-%: PREPARE_MAN_CMD=$(DEFAULT_PREPARE_MAN_CMD) +dist-install-dir-$(1)-%: PREPARE_CLEAN=true $$(eval $$(call DEF_PREPARE,dir-$(1))) +endef + +$(foreach target,$(CFG_TARGET),\ + $(eval $(call DEF_START_INSTALLER,$(target)))) -dist-install-dir-$(1): PREPARE_HOST=$(1) -dist-install-dir-$(1): PREPARE_TARGETS=$(2) -dist-install-dir-$(1): PREPARE_DEST_DIR=tmp/dist/$$(PKG_NAME)-$(1)-image -dist-install-dir-$(1): PREPARE_DIR_CMD=$(DEFAULT_PREPARE_DIR_CMD) -dist-install-dir-$(1): PREPARE_BIN_CMD=$(DEFAULT_PREPARE_BIN_CMD) -dist-install-dir-$(1): PREPARE_LIB_CMD=$(DEFAULT_PREPARE_LIB_CMD) -dist-install-dir-$(1): PREPARE_MAN_CMD=$(DEFAULT_PREPARE_MAN_CMD) -dist-install-dir-$(1): PREPARE_CLEAN=true -dist-install-dir-$(1): prepare-base-dir-$(1) docs +define DEF_INSTALLER + +dist-install-dir-$(1)-host: PREPARE_HOST=$(1) +dist-install-dir-$(1)-host: PREPARE_TARGETS=$(2) +dist-install-dir-$(1)-host: PREPARE_DEST_DIR=tmp/dist/$$(PKG_NAME)-$(1)-image +dist-install-dir-$(1)-host: prepare-base-dir-$(1)-host docs $$(Q)mkdir -p $$(PREPARE_DEST_DIR)/share/doc/rust $$(Q)$$(PREPARE_MAN_CMD) $$(S)COPYRIGHT $$(PREPARE_DEST_DIR)/share/doc/rust $$(Q)$$(PREPARE_MAN_CMD) $$(S)LICENSE-APACHE $$(PREPARE_DEST_DIR)/share/doc/rust @@ -141,14 +148,27 @@ prepare-overlay-$(1): # This tiny morsel of metadata is used by rust-packaging $$(Q)echo "$(CFG_VERSION)" > tmp/dist/$$(PKG_NAME)-$(1)-overlay/version -dist/$$(PKG_NAME)-$(1).tar.gz: dist-install-dir-$(1) prepare-overlay-$(1) +dist/$$(PKG_NAME)-$(1).tar.gz: dist-install-dir-$(1)-host prepare-overlay-$(1) @$(call E, build: $$@) -# Copy essential gcc components into installer -ifdef CFG_WINDOWSY_$(1) -ifeq ($$(findstring gnu,$(1)),gnu) - $$(Q)rm -Rf tmp/dist/win-rust-gcc-$(1) - $$(Q)$$(CFG_PYTHON) $$(S)src/etc/make-win-dist.py tmp/dist/$$(PKG_NAME)-$(1)-image tmp/dist/win-rust-gcc-$(1) $(1) - $$(Q)cp -r $$(S)src/etc/third-party tmp/dist/$$(PKG_NAME)-$(1)-image/share/doc/ +# On a 32-bit MinGW target we've got a few runtime DLL dependencies that we need +# to include. THe first argument to `make-win-dist` is where to put these DLLs +# (the image we're creating) and the second argument is a junk directory to +# ignore all the other MinGW stuff the script creates. +ifeq ($(2),i686-pc-windows-gnu) + $$(Q)rm -Rf tmp/dist/win-rust-gcc-$(2) + $$(Q)$$(CFG_PYTHON) $$(S)src/etc/make-win-dist.py \ + tmp/dist/$$(STD_PKG_NAME)-$(2)-image \ + tmp/dist/win-rust-gcc-$(2) $(2) +endif +# On 32-bit MinGW we're always including a DLL which needs some extra licenses +# to distribute. On 64-bit MinGW we don't actually distribute anything requiring +# us to distribute a license but it's likely that the install will *also* +# include the rust-mingw package down below, which also need licenses, so to be +# safe we just inlude it here in all MinGW packages. +ifdef CFG_WINDOWSY_$(2) +ifeq ($$(findstring $(2),gnu),gnu) + $$(Q)cp -r $$(S)src/etc/third-party \ + tmp/dist/$$(STD_PKG_NAME)-$(2)-image/share/doc/ endif endif $$(Q)$$(S)src/rust-installer/gen-installer.sh \ @@ -183,11 +203,16 @@ dist/$$(DOC_PKG_NAME)-$(1).tar.gz: dist-doc-install-dir-$(1) --bulk-dirs=share/doc/rust/html $$(Q)rm -R tmp/dist/$$(DOC_PKG_NAME)-$(1)-image +# Creates the rust-mingw package, and the first argument to make-win-dist is a +# "temporary directory" which is just thrown away (this contains the runtime +# DLLs included in the rustc package above) and the second argument is where to +# place all the MinGW components (which is what we want). dist-mingw-install-dir-$(1): $$(Q)mkdir -p tmp/dist/rust-mingw-tmp-$(1)-image $$(Q)rm -Rf tmp/dist/$$(MINGW_PKG_NAME)-$(1)-image $$(Q)$$(CFG_PYTHON) $$(S)src/etc/make-win-dist.py \ - tmp/dist/rust-mingw-tmp-$(1)-image tmp/dist/$$(MINGW_PKG_NAME)-$(1)-image $(1) + tmp/dist/rust-mingw-tmp-$(1)-image \ + tmp/dist/$$(MINGW_PKG_NAME)-$(1)-image $(1) dist/$$(MINGW_PKG_NAME)-$(1).tar.gz: dist-mingw-install-dir-$(1) @$(call E, build: $$@) @@ -205,15 +230,34 @@ dist/$$(MINGW_PKG_NAME)-$(1).tar.gz: dist-mingw-install-dir-$(1) endef -ifneq ($(CFG_ENABLE_DIST_HOST_ONLY),) -$(foreach host,$(CFG_HOST),\ - $(eval $(call DEF_INSTALLER,$(host),$(host)))) -else -$(foreach host,$(CFG_HOST),\ - $(eval $(call DEF_INSTALLER,$(host),$(CFG_TARGET)))) -endif +# $(1) - host +# $(2) - target +define DEF_INSTALLER_TARGETS + +dist-install-dir-$(2)-target: PREPARE_HOST=$(1) +dist-install-dir-$(2)-target: PREPARE_TARGETS=$(2) +dist-install-dir-$(2)-target: PREPARE_DEST_DIR=tmp/dist/$$(STD_PKG_NAME)-$(2)-image +dist-install-dir-$(2)-target: prepare-base-dir-$(2)-target -dist-install-dirs: $(foreach host,$(CFG_HOST),dist-install-dir-$(host)) +dist/$$(STD_PKG_NAME)-$(2).tar.gz: dist-install-dir-$(2)-target + @$$(call E, build: $$@) + $$(Q)$$(S)src/rust-installer/gen-installer.sh \ + --product-name=Rust \ + --rel-manifest-dir=rustlib \ + --success-message=std-is-standing-at-the-ready. \ + --image-dir=tmp/dist/$$(STD_PKG_NAME)-$(2)-image \ + --work-dir=tmp/dist \ + --output-dir=dist \ + --package-name=$$(STD_PKG_NAME)-$(2) \ + --component-name=rust-std-$(2) \ + --legacy-manifest-dirs=rustlib,cargo + $$(Q)rm -R tmp/dist/$$(STD_PKG_NAME)-$(2)-image +endef + +$(foreach host,$(CFG_HOST),\ + $(eval $(call DEF_INSTALLER,$(host)))) +$(foreach target,$(CFG_TARGET),\ + $(eval $(call DEF_INSTALLER_TARGETS,$(CFG_BUILD),$(target)))) ifdef CFG_WINDOWSY_$(CFG_BUILD) define BUILD_MINGW_TARBALL @@ -230,7 +274,9 @@ ifeq ($(CFG_DISABLE_DOCS),) MAYBE_DOC_TARBALLS=$(foreach host,$(CFG_HOST),dist/$(DOC_PKG_NAME)-$(host).tar.gz) endif -dist-tar-bins: $(foreach host,$(CFG_HOST),dist/$(PKG_NAME)-$(host).tar.gz) \ +dist-tar-bins: \ + $(foreach host,$(CFG_HOST),dist/$(PKG_NAME)-$(host).tar.gz) \ + $(foreach target,$(CFG_TARGET),dist/$(STD_PKG_NAME)-$(target).tar.gz) \ $(MAYBE_DOC_TARBALLS) $(MAYBE_MINGW_TARBALLS) # Just try to run the compiler for the build host diff --git a/mk/install.mk b/mk/install.mk index cabc97a1e4912..8b8170220c916 100644 --- a/mk/install.mk +++ b/mk/install.mk @@ -8,6 +8,12 @@ # option. This file may not be copied, modified, or distributed # except according to those terms. +RUN_INSALLER = cd tmp/empty_dir && \ + sh ../../tmp/dist/$(1)/install.sh \ + --prefix="$(DESTDIR)$(CFG_PREFIX)" \ + --libdir="$(DESTDIR)$(CFG_LIBDIR)" \ + --mandir="$(DESTDIR)$(CFG_MANDIR)" + install: ifeq (root user, $(USER) $(patsubst %,user,$(SUDO_USER))) # Build the dist as the original user @@ -16,9 +22,11 @@ else $(Q)$(MAKE) prepare_install endif ifeq ($(CFG_DISABLE_DOCS),) - $(Q)cd tmp/empty_dir && sh ../../tmp/dist/$(DOC_PKG_NAME)-$(CFG_BUILD)/install.sh --prefix="$(DESTDIR)$(CFG_PREFIX)" --libdir="$(DESTDIR)$(CFG_LIBDIR)" --mandir="$(DESTDIR)$(CFG_MANDIR)" + $(Q)$(call RUN_INSALLER,$(DOC_PKG_NAME)-$(CFG_BUILD)) --disable-ldconfig endif - $(Q)cd tmp/empty_dir && sh ../../tmp/dist/$(PKG_NAME)-$(CFG_BUILD)/install.sh --prefix="$(DESTDIR)$(CFG_PREFIX)" --libdir="$(DESTDIR)$(CFG_LIBDIR)" --mandir="$(DESTDIR)$(CFG_MANDIR)" + $(Q)$(foreach target,$(CFG_TARGET),\ + ($(call RUN_INSALLER,$(STD_PKG_NAME)-$(target)) --disable-ldconfig);) + $(Q)$(call RUN_INSALLER,$(PKG_NAME)-$(CFG_BUILD)) # Remove tmp files because it's a decent amount of disk space $(Q)rm -R tmp/dist @@ -32,9 +40,11 @@ else $(Q)$(MAKE) prepare_uninstall endif ifeq ($(CFG_DISABLE_DOCS),) - $(Q)cd tmp/empty_dir && sh ../../tmp/dist/$(DOC_PKG_NAME)-$(CFG_BUILD)/install.sh --uninstall --prefix="$(DESTDIR)$(CFG_PREFIX)" --libdir="$(DESTDIR)$(CFG_LIBDIR)" --mandir="$(DESTDIR)$(CFG_MANDIR)" + $(Q)$(call RUN_INSALLER,$(DOC_PKG_NAME)-$(CFG_BUILD)) --uninstall endif - $(Q)cd tmp/empty_dir && sh ../../tmp/dist/$(PKG_NAME)-$(CFG_BUILD)/install.sh --uninstall --prefix="$(DESTDIR)$(CFG_PREFIX)" --libdir="$(DESTDIR)$(CFG_LIBDIR)" --mandir="$(DESTDIR)$(CFG_MANDIR)" + $(Q)$(call RUN_INSALLER,$(PKG_NAME)-$(CFG_BUILD)) --uninstall + $(Q)$(foreach target,$(CFG_TARGET),\ + ($(call RUN_INSALLER,$(STD_PKG_NAME)-$(target)) --uninstall);) # Remove tmp files because it's a decent amount of disk space $(Q)rm -R tmp/dist diff --git a/mk/prepare.mk b/mk/prepare.mk index fe619cc7caec7..e263a6d2e4d32 100644 --- a/mk/prepare.mk +++ b/mk/prepare.mk @@ -185,16 +185,16 @@ INSTALL_DEBUGGER_SCRIPT_COMMANDS=$(if $(findstring windows,$(1)),\ define DEF_PREPARE -prepare-base-$(1): PREPARE_SOURCE_DIR=$$(PREPARE_HOST)/stage$$(PREPARE_STAGE) -prepare-base-$(1): PREPARE_SOURCE_BIN_DIR=$$(PREPARE_SOURCE_DIR)/bin -prepare-base-$(1): PREPARE_SOURCE_LIB_DIR=$$(PREPARE_SOURCE_DIR)/$$(CFG_LIBDIR_RELATIVE) -prepare-base-$(1): PREPARE_SOURCE_MAN_DIR=$$(S)/man -prepare-base-$(1): PREPARE_DEST_BIN_DIR=$$(PREPARE_DEST_DIR)/bin -prepare-base-$(1): PREPARE_DEST_LIB_DIR=$$(PREPARE_DEST_DIR)/$$(CFG_LIBDIR_RELATIVE) -prepare-base-$(1): PREPARE_DEST_MAN_DIR=$$(PREPARE_DEST_DIR)/share/man/man1 -prepare-base-$(1): prepare-everything-$(1) +prepare-base-$(1)-%: PREPARE_SOURCE_DIR=$$(PREPARE_HOST)/stage$$(PREPARE_STAGE) +prepare-base-$(1)-%: PREPARE_SOURCE_BIN_DIR=$$(PREPARE_SOURCE_DIR)/bin +prepare-base-$(1)-%: PREPARE_SOURCE_LIB_DIR=$$(PREPARE_SOURCE_DIR)/$$(CFG_LIBDIR_RELATIVE) +prepare-base-$(1)-%: PREPARE_SOURCE_MAN_DIR=$$(S)/man +prepare-base-$(1)-%: PREPARE_DEST_BIN_DIR=$$(PREPARE_DEST_DIR)/bin +prepare-base-$(1)-%: PREPARE_DEST_LIB_DIR=$$(PREPARE_DEST_DIR)/$$(CFG_LIBDIR_RELATIVE) +prepare-base-$(1)-%: PREPARE_DEST_MAN_DIR=$$(PREPARE_DEST_DIR)/share/man/man1 -prepare-everything-$(1): prepare-host-$(1) prepare-targets-$(1) prepare-debugger-scripts-$(1) +prepare-base-$(1)-target: prepare-target-$(1) +prepare-base-$(1)-host: prepare-host-$(1) prepare-debugger-scripts-$(1) prepare-host-$(1): prepare-host-tools-$(1) @@ -222,7 +222,7 @@ $$(foreach lib,$$(CRATES), \ $$(foreach host,$$(CFG_HOST), \ $$(eval $$(call DEF_PREPARE_HOST_LIB,$$(lib),$$(PREPARE_STAGE),$$(host),$(1))))) -prepare-targets-$(1): \ +prepare-target-$(1): \ $$(foreach host,$$(CFG_HOST), \ $$(foreach target,$$(CFG_TARGET), \ prepare-target-$$(target)-host-$$(host)-$$(PREPARE_STAGE)-$(1)))