diff --git a/.makefile b/.makefile index 2ebdf5125a..03b1a9d9cb 100644 --- a/.makefile +++ b/.makefile @@ -72,6 +72,9 @@ VM = cs # Target selector: `minimal` or `skip` INITIAL_SETUP_MODE = minimal +# Target selector: `` or `-as-is` +AS_IS= + in-place: if [ "$(CPUS)" = "" ] ; \ then $(MAKE) plain-in-place ; \ @@ -118,8 +121,8 @@ plain-in-place-setup: as-is: if [ "$(CPUS)" = "" ] ; \ - then $(MAKE) plain-as-is ; \ - else $(MAKE) -j $(CPUS) plain-as-is JOB_OPTIONS="-j $(CPUS)" ; fi + then $(MAKE) plain-as-is AS_IS="-as-is" ; \ + else $(MAKE) -j $(CPUS) plain-as-is JOB_OPTIONS="-j $(CPUS)" AS_IS="-as-is" ; fi plain-as-is: $(MAKE) plain-base @@ -335,7 +338,7 @@ RACKET_FOR_BOOTFILES = $(RACKET) RACKET_FOR_BUILD = $(RACKET) # This branch name changes each time the pb boot files are updated: -PB_BRANCH == circa-7.8.0.10-2 +PB_BRANCH == circa-7.8.0.10-6 PB_REPO == https://github.com/racket/pb # Alternative source for Chez Scheme boot files, normally set by @@ -392,7 +395,7 @@ win-cs-in-place-setup: $(MAKE) plain-in-place-setup PLAIN_RACKET=racket\racket$(RACKETCS_SUFFIX) cs-base: - $(MAKE) maybe-fetch-pb + $(MAKE) maybe-fetch-pb$(AS_IS) if [ "$(RACKETCS_SUFFIX)" = "" ] ; \ then $(MAKE) cs-configure MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS) --enable-csdefault" ; \ else $(MAKE) cs-configure MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS) --disable-csdefault" ; fi @@ -418,9 +421,6 @@ cs-minimal-in-place-after-base-cross: $(MAKE) plain-minimal-in-place-after-base PLAIN_RACKET="$(RACKET_FOR_BUILD)" PLT_SETUP_OPTIONS="--no-pkg-deps $(PLT_SETUP_OPTIONS)" -no-fetch-pb: - echo done - fetch-pb: if [ "$(EXTRA_REPOS_BASE)" = "" ] ; \ then $(MAKE) fetch-pb-from ; \ @@ -430,6 +430,9 @@ maybe-fetch-pb: if [ "$(RACKET_FOR_BOOTFILES)" = "" ] ; \ then $(MAKE) fetch-pb ; fi +maybe-fetch-pb-as-is: + echo done + PB_DIR == racket/src/ChezScheme/boot/pb fetch-pb-from: diff --git a/Makefile b/Makefile index f31da3645e..41e2c18170 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ # Generated from ".makefile" # Target values for VM: ("cs" "bc") # Target values for INITIAL_SETUP_MODE: ("minimal" "skip") +# Target values for AS_IS: ("" "-as-is") # Target values for CS_CROSS_SUFFIX: ("-cross" "") # Target values for NEXT_TARGET: ("plain-server" "plain-client-from-site" "plain-installers-from-built" "plain-site-from-installers" "plain-snapshot-at-site") # Target values for CLIENT_BASE: ("base" "cs-base" "bc-base") @@ -18,6 +19,7 @@ PLT_SETUP_OPTIONS = CPUS = VM = cs INITIAL_SETUP_MODE = minimal +AS_IS= ALL_PKG_UPDATE_OPTIONS = --all --auto --no-setup --scope installation $(PKG_UPDATE_OPTIONS) ALL_PKG_INSTALL_OPTIONS = $(JOB_OPTIONS) --no-setup --pkgs --skip-installed --scope installation --deps search-auto $(REQUIRED_PKGS) $(PKGS) ALL_PLT_SETUP_OPTIONS = $(JOB_OPTIONS) $(PLT_SETUP_OPTIONS) @@ -45,7 +47,7 @@ RACKETCS_SUFFIX = RACKET = RACKET_FOR_BOOTFILES = $(RACKET) RACKET_FOR_BUILD = $(RACKET) -PB_BRANCH = circa-7.8.0.10-2 +PB_BRANCH = circa-7.8.0.10-6 PB_REPO = https://github.com/racket/pb EXTRA_REPOS_BASE = CS_CROSS_SUFFIX = @@ -133,14 +135,14 @@ DRIVE_DESCRIBE = DRIVE_CMD_q = -l- distro-build/drive-clients $(DRIVE_DESCRIBE) $(RELEASE_MODE) $(VERSIONLESS_MODE) $(SOURCE_MODE) $(CLEAN_MODE) $(SERVER_COMPILE_MACHINE) "$(CONFIG)" "$(CONFIG_MODE)" $(SERVER) $(SERVER_PORT) "$(SERVER_HOSTS)" "$(PKGS)" "$(DOC_SEARCH)" "$(DIST_NAME)" $(DIST_BASE) $(DIST_DIR) DOC_CATALOGS = build/built/catalog build/native/catalog main: - $(MAKE) in-place CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" VM="$(VM)" + $(MAKE) in-place AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" VM="$(VM)" win: $(MAKE) win-in-place DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" VM="$(VM)" WIN32_BUILD_LEVEL="$(WIN32_BUILD_LEVEL)" in-place: - if [ "$(CPUS)" = "" ] ; then $(MAKE) plain-in-place CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" VM="$(VM)" ; else $(MAKE) -j $(CPUS) plain-in-place JOB_OPTIONS="-j $(CPUS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" VM="$(VM)" ; fi + if [ "$(CPUS)" = "" ] ; then $(MAKE) plain-in-place AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" VM="$(VM)" ; else $(MAKE) -j $(CPUS) plain-in-place JOB_OPTIONS="-j $(CPUS)" AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" VM="$(VM)" ; fi plain-in-place: $(MAKE) base-config - $(MAKE) $(VM)-$(INITIAL_SETUP_MODE)-in-place CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) $(VM)-$(INITIAL_SETUP_MODE)-in-place AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" $(MAKE) $(VM)-in-place-setup IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" win-in-place: $(MAKE) win-base-config @@ -154,18 +156,18 @@ plain-minimal-in-place-after-base: plain-in-place-setup: $(PLAIN_RACKET) $(SETUP_MACHINE_FLAGS) -G racket/etc -X racket/collects -N raco -l- raco setup $(JOB_OPTIONS) $(PLT_SETUP_OPTIONS) $(IN_PLACE_SETUP_OPTIONS) as-is: - if [ "$(CPUS)" = "" ] ; then $(MAKE) plain-as-is CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" VM="$(VM)" ; else $(MAKE) -j $(CPUS) plain-as-is JOB_OPTIONS="-j $(CPUS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" VM="$(VM)" ; fi + if [ "$(CPUS)" = "" ] ; then $(MAKE) plain-as-is AS_IS="-as-is" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" VM="$(VM)" ; else $(MAKE) -j $(CPUS) plain-as-is JOB_OPTIONS="-j $(CPUS)" AS_IS="-as-is" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" VM="$(VM)" ; fi plain-as-is: - $(MAKE) plain-base CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" VM="$(VM)" + $(MAKE) plain-base AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" VM="$(VM)" $(MAKE) $(VM)-in-place-setup IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" win-as-is: $(MAKE) win-base DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" VM="$(VM)" WIN32_BUILD_LEVEL="$(WIN32_BUILD_LEVEL)" $(MAKE) win-$(VM)-in-place-setup IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" unix-style: - if [ "$(CPUS)" = "" ] ; then $(MAKE) plain-unix-style CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DESTDIR="$(DESTDIR)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PREFIX="$(PREFIX)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" REQUIRED_PKGS="$(REQUIRED_PKGS)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" VM="$(VM)" ; else $(MAKE) -j $(CPUS) plain-unix-style JOB_OPTIONS="-j $(CPUS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DESTDIR="$(DESTDIR)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PREFIX="$(PREFIX)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" REQUIRED_PKGS="$(REQUIRED_PKGS)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" VM="$(VM)" ; fi + if [ "$(CPUS)" = "" ] ; then $(MAKE) plain-unix-style AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DESTDIR="$(DESTDIR)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PREFIX="$(PREFIX)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" REQUIRED_PKGS="$(REQUIRED_PKGS)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" VM="$(VM)" ; else $(MAKE) -j $(CPUS) plain-unix-style JOB_OPTIONS="-j $(CPUS)" AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DESTDIR="$(DESTDIR)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PREFIX="$(PREFIX)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" REQUIRED_PKGS="$(REQUIRED_PKGS)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" VM="$(VM)" ; fi plain-unix-style: if [ "$(PREFIX)" = "" ] ; then $(MAKE) error-need-prefix ; fi - $(MAKE) $(VM)-base MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS) --prefix=$(PREFIX) --enable-macprefix" CONFIG_IN_PLACE_ARGS="" SELF_ROOT_CONFIG_FLAG="-Z" SKIP_DESTDIR_FIX="skip" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" + $(MAKE) $(VM)-base MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS) --prefix=$(PREFIX) --enable-macprefix" CONFIG_IN_PLACE_ARGS="" SELF_ROOT_CONFIG_FLAG="-Z" SKIP_DESTDIR_FIX="skip" AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" $(MAKE) set-src-catalog DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DESTDIR="$(DESTDIR)" PREFIX="$(PREFIX)" SRC_CATALOG="$(SRC_CATALOG)" $(MAKE) local-catalog DESTDIR="$(DESTDIR)" PREFIX="$(PREFIX)" "$(DESTDIR)$(PREFIX)/bin/raco" pkg install $(JOB_OPTIONS) --catalog build/local/catalog --auto -i $(REQUIRED_PKGS) $(PKGS) @@ -181,10 +183,10 @@ local-catalog: set-src-catalog: if [ ! "$(SRC_CATALOG)" = "$(DEFAULT_SRC_CATALOG)" ] ; then "$(DESTDIR)$(PREFIX)/bin/raco" pkg config -i --set catalogs "$(SRC_CATALOG)" ""; fi base: - if [ "$(CPUS)" = "" ] ; then $(MAKE) plain-base CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" VM="$(VM)" ; else $(MAKE) -j $(CPUS) plain-base JOB_OPTIONS="-j $(CPUS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" VM="$(VM)" ; fi + if [ "$(CPUS)" = "" ] ; then $(MAKE) plain-base AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" VM="$(VM)" ; else $(MAKE) -j $(CPUS) plain-base JOB_OPTIONS="-j $(CPUS)" AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" VM="$(VM)" ; fi plain-base: $(MAKE) base-config - $(MAKE) $(VM)-base CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" + $(MAKE) $(VM)-base AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" win-base: $(MAKE) win-base-config $(MAKE) win-$(VM)-base DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" WIN32_BUILD_LEVEL="$(WIN32_BUILD_LEVEL)" @@ -195,11 +197,11 @@ win-base-config: IF NOT EXIST build\config cmd /c mkdir build\config cmd /c echo #hash((links-search-files . ())) > build\config\config.rktd bc: - $(MAKE) bc-in-place CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) bc-in-place AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" win-bc: $(MAKE) win-bc-in-place DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" WIN32_BUILD_LEVEL="$(WIN32_BUILD_LEVEL)" bc-in-place: - $(MAKE) in-place VM=bc CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) in-place VM=bc AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" win-bc-in-place: $(MAKE) win-in-place VM=bc DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" WIN32_BUILD_LEVEL="$(WIN32_BUILD_LEVEL)" bc-as-is: @@ -207,7 +209,7 @@ bc-as-is: win-bc-as-is: $(MAKE) win-as-is VM=bc DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" WIN32_BUILD_LEVEL="$(WIN32_BUILD_LEVEL)" bc-unix-style: - $(MAKE) unix-style VM=bc CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DESTDIR="$(DESTDIR)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PREFIX="$(PREFIX)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) unix-style VM=bc AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DESTDIR="$(DESTDIR)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PREFIX="$(PREFIX)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" bc-minimal-in-place: $(MAKE) bc-base CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" $(MAKE) plain-minimal-in-place-after-base PLAIN_RACKET=racket/bin/racket$(RACKETBC_SUFFIX) DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" JOB_OPTIONS="$(JOB_OPTIONS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" REQUIRED_PKGS="$(REQUIRED_PKGS)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" @@ -252,11 +254,11 @@ racket/src/build/cross/bc/Makefile: racket/src/bc/configure racket/src/cfg-bc ra native-for-cross: $(MAKE) native-bc-for-cross MORE_CROSS_CONFIGURE_ARGS="$(MORE_CROSS_CONFIGURE_ARGS)" cs: - $(MAKE) cs-in-place CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) cs-in-place AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" win-cs: $(MAKE) win-cs-in-place DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" WIN32_BUILD_LEVEL="$(WIN32_BUILD_LEVEL)" cs-in-place: - $(MAKE) in-place VM=cs CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) in-place VM=cs AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" win-cs-in-place: $(MAKE) win-in-place VM=cs DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" WIN32_BUILD_LEVEL="$(WIN32_BUILD_LEVEL)" cs-as-is: @@ -264,15 +266,15 @@ cs-as-is: win-cs-as-is: $(MAKE) win-as-is VM=cs DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" WIN32_BUILD_LEVEL="$(WIN32_BUILD_LEVEL)" cs-unix-style: - $(MAKE) unix-style VM=cs CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DESTDIR="$(DESTDIR)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PREFIX="$(PREFIX)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) unix-style VM=cs AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DESTDIR="$(DESTDIR)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PREFIX="$(PREFIX)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" cs-minimal-in-place: - $(MAKE) cs-base CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" + $(MAKE) cs-base AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" $(MAKE) cs-minimal-in-place-after-base$(CS_CROSS_SUFFIX) DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" JOB_OPTIONS="$(JOB_OPTIONS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" win-cs-minimal-in-place: $(MAKE) win-cs-base DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" $(MAKE) plain-minimal-in-place-after-base PLAIN_RACKET=racket\racket$(RACKETCS_SUFFIX) DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" JOB_OPTIONS="$(JOB_OPTIONS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" REQUIRED_PKGS="$(REQUIRED_PKGS)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" cs-skip-in-place: - $(MAKE) cs-base CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" + $(MAKE) cs-base AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" win-cs-skip-in-place: $(MAKE) win-cs-base DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" cs-in-place-setup: @@ -280,7 +282,7 @@ cs-in-place-setup: win-cs-in-place-setup: $(MAKE) plain-in-place-setup PLAIN_RACKET=racket\racket$(RACKETCS_SUFFIX) IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" cs-base: - $(MAKE) maybe-fetch-pb EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" + $(MAKE) maybe-fetch-pb$(AS_IS) EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" if [ "$(RACKETCS_SUFFIX)" = "" ] ; then $(MAKE) cs-configure MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS) --enable-csdefault" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" ; else $(MAKE) cs-configure MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS) --disable-csdefault" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" ; fi cd racket/src/build/cs/c && $(MAKE) CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" $(MAKE) base-config @@ -296,22 +298,22 @@ cs-minimal-in-place-after-base: $(MAKE) plain-minimal-in-place-after-base PLAIN_RACKET=racket/bin/racket$(RACKETCS_SUFFIX) DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" JOB_OPTIONS="$(JOB_OPTIONS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" REQUIRED_PKGS="$(REQUIRED_PKGS)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" cs-minimal-in-place-after-base-cross: $(MAKE) plain-minimal-in-place-after-base PLAIN_RACKET="$(RACKET_FOR_BUILD)" PLT_SETUP_OPTIONS="--no-pkg-deps $(PLT_SETUP_OPTIONS)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" JOB_OPTIONS="$(JOB_OPTIONS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" REQUIRED_PKGS="$(REQUIRED_PKGS)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" -no-fetch-pb: - echo done fetch-pb: if [ "$(EXTRA_REPOS_BASE)" = "" ] ; then $(MAKE) fetch-pb-from ; else $(MAKE) fetch-pb-from PB_REPO="$(EXTRA_REPOS_BASE)pb/.git" ; fi maybe-fetch-pb: if [ "$(RACKET_FOR_BOOTFILES)" = "" ] ; then $(MAKE) fetch-pb EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" ; fi +maybe-fetch-pb-as-is: + echo done fetch-pb-from: mkdir -p racket/src/ChezScheme/boot - if [ ! -d racket/src/ChezScheme/boot/pb ] ; then git clone -q -b circa-7.8.0.10-2 https://github.com/racket/pb racket/src/ChezScheme/boot/pb ; else cd racket/src/ChezScheme/boot/pb && git fetch -q origin circa-7.8.0.10-2:remotes/origin/circa-7.8.0.10-2 ; fi - cd racket/src/ChezScheme/boot/pb && git checkout -q circa-7.8.0.10-2 + if [ ! -d racket/src/ChezScheme/boot/pb ] ; then git clone -q -b circa-7.8.0.10-6 https://github.com/racket/pb racket/src/ChezScheme/boot/pb ; else cd racket/src/ChezScheme/boot/pb && git fetch -q origin circa-7.8.0.10-6:remotes/origin/circa-7.8.0.10-6 ; fi + cd racket/src/ChezScheme/boot/pb && git checkout -q circa-7.8.0.10-6 pb-stage: - cd racket/src/ChezScheme/boot/pb && git branch circa-7.8.0.10-2 - cd racket/src/ChezScheme/boot/pb && git checkout circa-7.8.0.10-2 + cd racket/src/ChezScheme/boot/pb && git branch circa-7.8.0.10-6 + cd racket/src/ChezScheme/boot/pb && git checkout circa-7.8.0.10-6 cd racket/src/ChezScheme/boot/pb && git add . && git commit --amend -m "new build" pb-push: - cd racket/src/ChezScheme/boot/pb && git push -u origin circa-7.8.0.10-2 + cd racket/src/ChezScheme/boot/pb && git push -u origin circa-7.8.0.10-6 win-cs-base: IF "$(RACKET_FOR_BUILD)" == "" $(MAKE) win-bc-then-cs-base SETUP_BOOT_MODE=--boot WIN32_BUILD_LEVEL=bc PLAIN_RACKET=racket\racketbc DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" IF not "$(RACKET_FOR_BUILD)" == "" $(MAKE) win-just-cs-base SETUP_BOOT_MODE=--chain DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" @@ -333,23 +335,23 @@ native-cs-for-cross: racket/src/build/cross/cs/c/Makefile: racket/src/cs/c/configure racket/src/cs/c/Makefile.in cd racket/src/build/cross/cs/c; ../../../../cs/c/configure --enable-csdefault $(MORE_CROSS_CONFIGURE_ARGS) both: - $(MAKE) cs IN_PLACE_SETUP_OPTIONS="--error-out build/step" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" - $(MAKE) also-bc IN_PLACE_SETUP_OPTIONS="--error-in build/step" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) cs IN_PLACE_SETUP_OPTIONS="--error-out build/step" AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) also-bc IN_PLACE_SETUP_OPTIONS="--error-in build/step" AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" plain-also: - $(MAKE) $(VM) INITIAL_SETUP_MODE=skip PLT_SETUP_OPTIONS="-D $(PLT_SETUP_OPTIONS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) $(VM) INITIAL_SETUP_MODE=skip PLT_SETUP_OPTIONS="-D $(PLT_SETUP_OPTIONS)" AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" also-cs: - $(MAKE) plain-also VM=cs CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) plain-also VM=cs AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" also-bc: - $(MAKE) plain-also VM=bc CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) plain-also VM=bc AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" win-both: $(MAKE) win-cs DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" WIN32_BUILD_LEVEL="$(WIN32_BUILD_LEVEL)" - $(MAKE) win-also-bc CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) win-also-bc AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" win-plain-also: - $(MAKE) $(VM) INITIAL_SETUP_MODE=skip PLT_SETUP_OPTIONS="-D $(PLT_SETUP_OPTIONS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) $(VM) INITIAL_SETUP_MODE=skip PLT_SETUP_OPTIONS="-D $(PLT_SETUP_OPTIONS)" AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" win-also-cs: - $(MAKE) win-plain-also VM=cs CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) win-plain-also VM=cs AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" win-also-bc: - $(MAKE) win-plain-also VM=bc CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) win-plain-also VM=bc AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" bootstrapped-repo: if [ "$(EXTRA_REPOS_BASE)" = "" ] ; then $(MAKE) update-bootstrapped-normal GIT_UPDATE_ARGS_qq="$(GIT_UPDATE_ARGS_qq)" ; else $(MAKE) update-bootstrapped-as-extra GIT_CLONE_ARGS_qq="" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_PULL_ARGS_qq="$(GIT_PULL_ARGS_qq)" ; fi update-bootstrapped-normal: @@ -366,14 +368,14 @@ pkgs-catalog: $(PLAIN_RACKET) $(SETUP_MACHINE_FLAGS) -G racket/etc -X racket/collects -U -G build/config racket/src/pkgs-config.rkt "$(DEFAULT_SRC_CATALOG)" "$(SRC_CATALOG)" $(PLAIN_RACKET) $(SETUP_MACHINE_FLAGS) -G racket/etc -X racket/collects racket/src/pkgs-check.rkt racket/share/pkgs-catalog with-setup-flags: - if [ "$(SERVER_COMPILE_MACHINE)" = "-M" ] ; then $(MAKE) $(NEXT_TARGET) SETUP_MACHINE_FLAGS="-MCR `pwd`/build/zo:" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS) --enable-crossany" BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" ; else $(MAKE) $(NEXT_TARGET) BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" ; fi + if [ "$(SERVER_COMPILE_MACHINE)" = "-M" ] ; then $(MAKE) $(NEXT_TARGET) SETUP_MACHINE_FLAGS="-MCR `pwd`/build/zo:" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS) --enable-crossany" AS_IS="$(AS_IS)" BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" ; else $(MAKE) $(NEXT_TARGET) AS_IS="$(AS_IS)" BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" ; fi random: echo $(MORE_CONFIGURE_ARGS) server: - $(MAKE) with-setup-flags NEXT_TARGET=plain-server BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" + $(MAKE) with-setup-flags NEXT_TARGET=plain-server AS_IS="$(AS_IS)" BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" plain-server: rm -rf build/zo - $(MAKE) plain-base CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" VM="$(VM)" + $(MAKE) plain-base AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" VM="$(VM)" $(MAKE) server-from-base BUILD_STAMP="$(BUILD_STAMP)" CONFIG="$(CONFIG)" CONFIG_MODE="$(CONFIG_MODE)" DOC_SEARCH="$(DOC_SEARCH)" JOB_OPTIONS="$(JOB_OPTIONS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" server-from-base: $(MAKE) build/site.rkt @@ -425,7 +427,7 @@ binary-catalog-server: $(PLAIN_RACKET) -G build/user/config -X racket/collects -A build/user $(SETUP_MACHINE_FLAGS) -l- distro-build/serve-catalog --mode binary "$(CONFIG)" "$(CONFIG_MODE)" "$(SERVER_HOSTS)" $(SERVER_PORT) client: if [ ! -d build/log ] ; then rm -rf build/user ; fi - $(MAKE) $(CLIENT_BASE) MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS) $(DISABLE_STATIC_LIBS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" VM="$(VM)" + $(MAKE) $(CLIENT_BASE) MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS) $(DISABLE_STATIC_LIBS)" AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" VM="$(VM)" $(MAKE) distro-build-from-server JOB_OPTIONS="$(JOB_OPTIONS)" PLAIN_RACKET="$(PLAIN_RACKET)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SVR_CAT="$(SVR_CAT)" $(MAKE) $(BUNDLE_FROM_SERVER_TARGET) COPY_ARGS="$(COPY_ARGS)" IN_BUNDLE_RACO="$(IN_BUNDLE_RACO)" JOB_OPTIONS="$(JOB_OPTIONS)" PKGS="$(PKGS)" PKG_INSTALL_OPTIONS="$(PKG_INSTALL_OPTIONS)" PKG_SOURCE_MODE="$(PKG_SOURCE_MODE)" PLAIN_RACKET="$(PLAIN_RACKET)" SERVER_COLLECTS_PATH="$(SERVER_COLLECTS_PATH)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SOURCE_MODE="$(SOURCE_MODE)" SVR_CAT="$(SVR_CAT)" SVR_PRT="$(SVR_PRT)" UNPACK_COLLECTS_FLAGS="$(UNPACK_COLLECTS_FLAGS)" $(PLAIN_RACKET) -G build/user/config -X racket/collects -A build/user $(SETUP_MACHINE_FLAGS) -l distro-build/set-config bundle/racket/etc/config.rktd "$(INSTALL_NAME)" "$(BUILD_STAMP)" "$(DOC_SEARCH)" $(DIST_CATALOGS_q) @@ -438,7 +440,7 @@ win-client: $(WIN32_PLAIN_RACKET) -G build/user/config -X racket/collects -A build/user $(SETUP_MACHINE_FLAGS) -l distro-build/set-config bundle/racket/etc/config.rktd "$(INSTALL_NAME)" "$(BUILD_STAMP)" "$(DOC_SEARCH)" $(DIST_CATALOGS_q) $(MAKE) win-installer-from-bundle DIST_BASE="$(DIST_BASE)" DIST_DESC="$(DIST_DESC)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DIST_SUFFIX="$(DIST_SUFFIX)" INSTALLER_OPTIONS="$(INSTALLER_OPTIONS)" INSTALLER_POST_PROCESS_BASE64="$(INSTALLER_POST_PROCESS_BASE64)" INSTALLER_PRE_PROCESS_BASE64="$(INSTALLER_PRE_PROCESS_BASE64)" MAC_PKG_MODE="$(MAC_PKG_MODE)" OSSLSIGNCODE_ARGS_BASE64="$(OSSLSIGNCODE_ARGS_BASE64)" README="$(README)" RELEASE_MODE="$(RELEASE_MODE)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SIGN_IDENTITY="$(SIGN_IDENTITY)" SOURCE_MODE="$(SOURCE_MODE)" TGZ_MODE="$(TGZ_MODE)" UPLOAD="$(UPLOAD)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" WIN32_PLAIN_RACKET="$(WIN32_PLAIN_RACKET)" client-compile-any: - $(MAKE) client SETUP_MACHINE_FLAGS="-MCR `pwd`/build/zo:" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS) --enable-crossany" BUNDLE_FROM_SERVER_TARGET=bundle-cross-from-server BUILD_STAMP="$(BUILD_STAMP)" CLIENT_BASE="$(CLIENT_BASE)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" COPY_ARGS="$(COPY_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" DIST_BASE="$(DIST_BASE)" DIST_CATALOGS_q="$(DIST_CATALOGS_q)" DIST_DESC="$(DIST_DESC)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DIST_SUFFIX="$(DIST_SUFFIX)" DOC_SEARCH="$(DOC_SEARCH)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INSTALLER_OPTIONS="$(INSTALLER_OPTIONS)" INSTALLER_POST_PROCESS_BASE64="$(INSTALLER_POST_PROCESS_BASE64)" INSTALLER_PRE_PROCESS_BASE64="$(INSTALLER_PRE_PROCESS_BASE64)" INSTALL_NAME="$(INSTALL_NAME)" IN_BUNDLE_RACO="$(IN_BUNDLE_RACO)" JOB_OPTIONS="$(JOB_OPTIONS)" MAC_PKG_MODE="$(MAC_PKG_MODE)" OSSLSIGNCODE_ARGS_BASE64="$(OSSLSIGNCODE_ARGS_BASE64)" PKGS="$(PKGS)" PKG_INSTALL_OPTIONS="$(PKG_INSTALL_OPTIONS)" PKG_SOURCE_MODE="$(PKG_SOURCE_MODE)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" README="$(README)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER_COLLECTS_PATH="$(SERVER_COLLECTS_PATH)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SIGN_IDENTITY="$(SIGN_IDENTITY)" SOURCE_MODE="$(SOURCE_MODE)" SVR_CAT="$(SVR_CAT)" SVR_PRT="$(SVR_PRT)" TGZ_MODE="$(TGZ_MODE)" UNPACK_COLLECTS_FLAGS="$(UNPACK_COLLECTS_FLAGS)" UPLOAD="$(UPLOAD)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" + $(MAKE) client SETUP_MACHINE_FLAGS="-MCR `pwd`/build/zo:" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS) --enable-crossany" BUNDLE_FROM_SERVER_TARGET=bundle-cross-from-server AS_IS="$(AS_IS)" BUILD_STAMP="$(BUILD_STAMP)" CLIENT_BASE="$(CLIENT_BASE)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" COPY_ARGS="$(COPY_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" DIST_BASE="$(DIST_BASE)" DIST_CATALOGS_q="$(DIST_CATALOGS_q)" DIST_DESC="$(DIST_DESC)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DIST_SUFFIX="$(DIST_SUFFIX)" DOC_SEARCH="$(DOC_SEARCH)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INSTALLER_OPTIONS="$(INSTALLER_OPTIONS)" INSTALLER_POST_PROCESS_BASE64="$(INSTALLER_POST_PROCESS_BASE64)" INSTALLER_PRE_PROCESS_BASE64="$(INSTALLER_PRE_PROCESS_BASE64)" INSTALL_NAME="$(INSTALL_NAME)" IN_BUNDLE_RACO="$(IN_BUNDLE_RACO)" JOB_OPTIONS="$(JOB_OPTIONS)" MAC_PKG_MODE="$(MAC_PKG_MODE)" OSSLSIGNCODE_ARGS_BASE64="$(OSSLSIGNCODE_ARGS_BASE64)" PKGS="$(PKGS)" PKG_INSTALL_OPTIONS="$(PKG_INSTALL_OPTIONS)" PKG_SOURCE_MODE="$(PKG_SOURCE_MODE)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" README="$(README)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER_COLLECTS_PATH="$(SERVER_COLLECTS_PATH)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SIGN_IDENTITY="$(SIGN_IDENTITY)" SOURCE_MODE="$(SOURCE_MODE)" SVR_CAT="$(SVR_CAT)" SVR_PRT="$(SVR_PRT)" TGZ_MODE="$(TGZ_MODE)" UNPACK_COLLECTS_FLAGS="$(UNPACK_COLLECTS_FLAGS)" UPLOAD="$(UPLOAD)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" distro-build-from-server: $(PLAIN_RACKET) -G build/user/config -X racket/collects -A build/user $(SETUP_MACHINE_FLAGS) -N raco -l- raco pkg install --catalog $(SVR_CAT) --scope user --skip-installed --deps search-auto --pkgs $(JOB_OPTIONS) distro-build-client bundle-from-server: @@ -480,14 +482,14 @@ win-test-client: $(WIN32_PLAIN_RACKET) -G bundle/racket/etc -X bundle/racket/collects -C -A bundle/user -l raco pkg install --catalog $(SVR_CAT) --scope installation --skip-installed --deps search-auto --pkgs $(JOB_OPTIONS) $(PKG_INSTALL_OPTIONS) --recompile-only $(PKG_SOURCE_MODE) $(TEST_PKGS) bundle\racket\raco test $(TEST_ARGS_q) client-from-site: - $(MAKE) with-setup-flags NEXT_TARGET=plain-client-from-site BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" + $(MAKE) with-setup-flags NEXT_TARGET=plain-client-from-site AS_IS="$(AS_IS)" BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" plain-client-from-site: make client SERVER_CATALOG_PATH=$(SITE_PATH)catalog/ SERVER_COLLECTS_PATH=$(SITE_PATH)origin/ DIST_CATALOGS_q='$(SERVER_URL_SCHEME)://$(SERVER):$(SERVER_PORT)/$(SITE_PATH)catalog/ ""' DOC_SEARCH="$(SERVER_URL_SCHEME)://$(SERVER):$(SERVER_PORT)/$(SITE_PATH)doc/local-redirect/index.html" $(PROP_ARGS) installers: rm -rf build/installers - $(MAKE) server SERVE_DURING_CMD_qq='-l- distro-build/drive-clients $(DRIVE_DESCRIBE) $(RELEASE_MODE) $(VERSIONLESS_MODE) $(SOURCE_MODE) $(CLEAN_MODE) $(SERVER_COMPILE_MACHINE) "$(CONFIG)" "$(CONFIG_MODE)" $(SERVER) $(SERVER_PORT) "$(SERVER_HOSTS)" "$(PKGS)" "$(DOC_SEARCH)" "$(DIST_NAME)" $(DIST_BASE) $(DIST_DIR)' BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" + $(MAKE) server SERVE_DURING_CMD_qq='-l- distro-build/drive-clients $(DRIVE_DESCRIBE) $(RELEASE_MODE) $(VERSIONLESS_MODE) $(SOURCE_MODE) $(CLEAN_MODE) $(SERVER_COMPILE_MACHINE) "$(CONFIG)" "$(CONFIG_MODE)" $(SERVER) $(SERVER_PORT) "$(SERVER_HOSTS)" "$(PKGS)" "$(DOC_SEARCH)" "$(DIST_NAME)" $(DIST_BASE) $(DIST_DIR)' AS_IS="$(AS_IS)" BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" installers-from-built: - $(MAKE) with-setup-flags NEXT_TARGET=plain-installers-from-built BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" + $(MAKE) with-setup-flags NEXT_TARGET=plain-installers-from-built AS_IS="$(AS_IS)" BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" plain-installers-from-built: $(MAKE) built-catalog-server SERVE_DURING_CMD_qq='-l- distro-build/drive-clients $(DRIVE_DESCRIBE) $(RELEASE_MODE) $(VERSIONLESS_MODE) $(SOURCE_MODE) $(CLEAN_MODE) $(SERVER_COMPILE_MACHINE) "$(CONFIG)" "$(CONFIG_MODE)" $(SERVER) $(SERVER_PORT) "$(SERVER_HOSTS)" "$(PKGS)" "$(DOC_SEARCH)" "$(DIST_NAME)" $(DIST_BASE) $(DIST_DIR)' CONFIG="$(CONFIG)" CONFIG_MODE="$(CONFIG_MODE)" PLAIN_RACKET="$(PLAIN_RACKET)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PORT="$(SERVER_PORT)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" drive-clients: @@ -495,20 +497,20 @@ drive-clients: describe-clients: $(MAKE) drive-clients DRIVE_DESCRIBE=--describe CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIG_MODE="$(CONFIG_MODE)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_SEARCH="$(DOC_SEARCH)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" RELEASE_MODE="$(RELEASE_MODE)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PORT="$(SERVER_PORT)" SOURCE_MODE="$(SOURCE_MODE)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" site: - $(MAKE) installers BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" - $(MAKE) site-from-installers BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" + $(MAKE) installers AS_IS="$(AS_IS)" BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" + $(MAKE) site-from-installers AS_IS="$(AS_IS)" BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" site-from-installers: - $(MAKE) with-setup-flags NEXT_TARGET=plain-site-from-installers BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" + $(MAKE) with-setup-flags NEXT_TARGET=plain-site-from-installers AS_IS="$(AS_IS)" BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" plain-site-from-installers: rm -rf build/docs rm -rf "build/zo`pwd`/build/docs" $(PLAIN_RACKET) -G build/user/config -X racket/collects -A build/user $(SETUP_MACHINE_FLAGS) -l- distro-build/install-for-docs build/docs "$(CONFIG)" "$(CONFIG_MODE)" "$(PKGS)" $(DOC_CATALOGS) $(PLAIN_RACKET) -G build/user/config -X racket/collects -A build/user $(SETUP_MACHINE_FLAGS) -l- distro-build/assemble-site "$(CONFIG)" "$(CONFIG_MODE)" "$(DIST_BASE)" snapshot-site: - $(MAKE) site BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" - $(MAKE) snapshot-at-site BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" + $(MAKE) site AS_IS="$(AS_IS)" BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" + $(MAKE) snapshot-at-site AS_IS="$(AS_IS)" BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" snapshot-at-site: - $(MAKE) with-setup-flags NEXT_TARGET=plain-snapshot-at-site BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" + $(MAKE) with-setup-flags NEXT_TARGET=plain-snapshot-at-site AS_IS="$(AS_IS)" BUILD_STAMP="$(BUILD_STAMP)" CLEAN_MODE="$(CLEAN_MODE)" CONFIG="$(CONFIG)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CONFIG_MODE="$(CONFIG_MODE)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DIST_BASE="$(DIST_BASE)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DOC_CATALOGS="$(DOC_CATALOGS)" DOC_SEARCH="$(DOC_SEARCH)" DRIVE_DESCRIBE="$(DRIVE_DESCRIBE)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PACK_BUILT_OPTIONS="$(PACK_BUILT_OPTIONS)" PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" PROP_ARGS="$(PROP_ARGS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RELEASE_MODE="$(RELEASE_MODE)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SERVER="$(SERVER)" SERVER_COMPILE_MACHINE="$(SERVER_COMPILE_MACHINE)" SERVER_HOSTS="$(SERVER_HOSTS)" SERVER_PKG_INSTALL_OPTIONS="$(SERVER_PKG_INSTALL_OPTIONS)" SERVER_PORT="$(SERVER_PORT)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SITE_PATH="$(SITE_PATH)" SOURCE_MODE="$(SOURCE_MODE)" SRC_CATALOG="$(SRC_CATALOG)" TEST_PKGS="$(TEST_PKGS)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" plain-snapshot-at-site: $(PLAIN_RACKET) -G build/user/config -X racket/collects -A build/user $(SETUP_MACHINE_FLAGS) -l- distro-build/manage-snapshots "$(CONFIG)" "$(CONFIG_MODE)" "$(DIST_BASE)" win32-in-place: @@ -526,9 +528,9 @@ win32-cs-as-is: win32-cs-base: $(MAKE) win-cs-base DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" win32-both: - $(MAKE) win-both CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" WIN32_BUILD_LEVEL="$(WIN32_BUILD_LEVEL)" + $(MAKE) win-both AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" WIN32_BUILD_LEVEL="$(WIN32_BUILD_LEVEL)" win32-also-cs: - $(MAKE) win-also-cs CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" + $(MAKE) win-also-cs AS_IS="$(AS_IS)" CONFIGURE_ARGS="$(CONFIGURE_ARGS)" CONFIG_IN_PLACE_ARGS="$(CONFIG_IN_PLACE_ARGS)" CPUS="$(CPUS)" CS_CONFIGURE_ARGS="$(CS_CONFIGURE_ARGS)" CS_CROSS_SUFFIX="$(CS_CROSS_SUFFIX)" CS_HOST_WORKAREA_PREFIX="$(CS_HOST_WORKAREA_PREFIX)" DEFAULT_SRC_CATALOG="$(DEFAULT_SRC_CATALOG)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" INITIAL_SETUP_MODE="$(INITIAL_SETUP_MODE)" IN_PLACE_SETUP_OPTIONS="$(IN_PLACE_SETUP_OPTIONS)" JOB_OPTIONS="$(JOB_OPTIONS)" MORE_CONFIGURE_ARGS="$(MORE_CONFIGURE_ARGS)" PKGS="$(PKGS)" PKG_UPDATE_OPTIONS="$(PKG_UPDATE_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BOOTFILES="$(RACKET_FOR_BOOTFILES)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" SELF_ROOT_CONFIG_FLAG="$(SELF_ROOT_CONFIG_FLAG)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SRC_CATALOG="$(SRC_CATALOG)" win32-client: $(MAKE) win-client BUILD_STAMP="$(BUILD_STAMP)" DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" DIST_BASE="$(DIST_BASE)" DIST_CATALOGS_q="$(DIST_CATALOGS_q)" DIST_DESC="$(DIST_DESC)" DIST_DIR="$(DIST_DIR)" DIST_NAME="$(DIST_NAME)" DIST_SUFFIX="$(DIST_SUFFIX)" DOC_SEARCH="$(DOC_SEARCH)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" GIT_CLONE_ARGS_qq="$(GIT_CLONE_ARGS_qq)" INSTALLER_OPTIONS="$(INSTALLER_OPTIONS)" INSTALLER_POST_PROCESS_BASE64="$(INSTALLER_POST_PROCESS_BASE64)" INSTALLER_PRE_PROCESS_BASE64="$(INSTALLER_PRE_PROCESS_BASE64)" INSTALL_NAME="$(INSTALL_NAME)" JOB_OPTIONS="$(JOB_OPTIONS)" MAC_PKG_MODE="$(MAC_PKG_MODE)" OSSLSIGNCODE_ARGS_BASE64="$(OSSLSIGNCODE_ARGS_BASE64)" PKGS="$(PKGS)" PKG_INSTALL_OPTIONS="$(PKG_INSTALL_OPTIONS)" PKG_SOURCE_MODE="$(PKG_SOURCE_MODE)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" README="$(README)" RELEASE_MODE="$(RELEASE_MODE)" SERVER_COLLECTS_PATH="$(SERVER_COLLECTS_PATH)" SERVER_URL_SCHEME="$(SERVER_URL_SCHEME)" SETUP_MACHINE_FLAGS="$(SETUP_MACHINE_FLAGS)" SIGN_IDENTITY="$(SIGN_IDENTITY)" SOURCE_MODE="$(SOURCE_MODE)" SVR_CAT="$(SVR_CAT)" SVR_PRT="$(SVR_PRT)" TGZ_MODE="$(TGZ_MODE)" UNPACK_COLLECTS_FLAGS="$(UNPACK_COLLECTS_FLAGS)" UPLOAD="$(UPLOAD)" VERSIONLESS_MODE="$(VERSIONLESS_MODE)" VM="$(VM)" WIN32_BUILD_LEVEL="$(WIN32_BUILD_LEVEL)" WIN32_CLIENT_BASE="$(WIN32_CLIENT_BASE)" WIN32_PLAIN_RACKET="$(WIN32_PLAIN_RACKET)" win32-distro-build-from-server: diff --git a/racket/src/ChezScheme/c/Makefile.a6nt b/racket/src/ChezScheme/c/Makefile.a6nt index 325b703204..17f242e0e8 100644 --- a/racket/src/ChezScheme/c/Makefile.a6nt +++ b/racket/src/ChezScheme/c/Makefile.a6nt @@ -47,19 +47,19 @@ MTZlibLib=..\zlib\zlibmt.lib MDLZ4Lib=..\lz4\lib\liblz4.lib MTLZ4Lib=..\lz4\lib\liblz4mt.lib -csrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-011.c gc-oce.c gc-ocd.c\ +csrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-011.c gc-par.c gc-oce.c gc-ocd.c\ number.c schsig.c io.c new-io.c print.c fasl.c vfasl.c stats.c\ foreign.c prim.c prim5.c flushcache.c\ windows.c\ schlib.c thread.c expeditor.c scheme.c compress-io.c random.c -cobj=statics.obj segment.obj alloc.obj symbol.obj intern.obj gcwrapper.obj gc-011.obj gc-oce.obj gc-ocd.obj\ +cobj=statics.obj segment.obj alloc.obj symbol.obj intern.obj gcwrapper.obj gc-011.obj gc-par.obj gc-oce.obj gc-ocd.obj\ number.obj schsig.obj io.obj new-io.obj print.obj fasl.obj vfasl.obj stats.obj\ foreign.obj prim.obj prim5.obj flushcache.obj\ windows.obj\ schlib.obj thread.obj expeditor.obj scheme.obj compress-io.obj random.obj -hsrc=system.h types.h version.h globals.h externs.h compress-io.h segment.h gc.c thread.h sort.h itest.c +hsrc=system.h types.h version.h globals.h externs.h compress-io.h segment.h atomic.h gc.c thread.h sort.h itest.c .SUFFIXES: diff --git a/racket/src/ChezScheme/c/Makefile.i3nt b/racket/src/ChezScheme/c/Makefile.i3nt index 9b0adce871..8f91283c1b 100644 --- a/racket/src/ChezScheme/c/Makefile.i3nt +++ b/racket/src/ChezScheme/c/Makefile.i3nt @@ -46,19 +46,19 @@ MTZlibLib=..\zlib\zlibmt.lib MDLZ4Lib=..\lz4\lib\liblz4.lib MTLZ4Lib=..\lz4\lib\liblz4mt.lib -csrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-011.c gc-oce.c gc-ocd.c\ +csrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-011.c gc-par.c gc-oce.c gc-ocd.c\ number.c schsig.c io.c new-io.c print.c fasl.c vfasl.c stats.c\ foreign.c prim.c prim5.c flushcache.c\ windows.c\ schlib.c thread.c expeditor.c scheme.c compress-io.c random.c -cobj=statics.obj segment.obj alloc.obj symbol.obj intern.obj gcwrapper.obj gc-011.obj gc-oce.obj gc-ocd.obj\ +cobj=statics.obj segment.obj alloc.obj symbol.obj intern.obj gcwrapper.obj gc-011.obj gc-par.obj gc-oce.obj gc-ocd.obj\ number.obj schsig.obj io.obj new-io.obj print.obj fasl.obj vfasl.obj stats.obj\ foreign.obj prim.obj prim5.obj flushcache.obj\ windows.obj\ schlib.obj thread.obj expeditor.obj scheme.obj compress-io.obj random.obj -hsrc=system.h types.h version.h globals.h externs.h compress-io.h segment.h gc.c thread.h sort.h itest.c +hsrc=system.h types.h version.h globals.h externs.h compress-io.h segment.h atomic.h gc.c thread.h sort.h itest.c .SUFFIXES: diff --git a/racket/src/ChezScheme/c/Makefile.ta6nt b/racket/src/ChezScheme/c/Makefile.ta6nt index 1f19d6c1d8..55285a9e48 100644 --- a/racket/src/ChezScheme/c/Makefile.ta6nt +++ b/racket/src/ChezScheme/c/Makefile.ta6nt @@ -47,19 +47,19 @@ MTZlibLib=..\zlib\zlibmt.lib MDLZ4Lib=..\lz4\lib\liblz4.lib MTLZ4Lib=..\lz4\lib\liblz4mt.lib -csrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-011.c gc-oce.c gc-ocd.c\ +csrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-011.c gc-par.c gc-oce.c gc-ocd.c\ number.c schsig.c io.c new-io.c print.c fasl.c vfasl.c stats.c\ foreign.c prim.c prim5.c flushcache.c\ windows.c\ schlib.c thread.c expeditor.c scheme.c compress-io.c random.c -cobj=statics.obj segment.obj alloc.obj symbol.obj intern.obj gcwrapper.obj gc-011.obj gc-oce.obj gc-ocd.obj\ +cobj=statics.obj segment.obj alloc.obj symbol.obj intern.obj gcwrapper.obj gc-011.obj gc-par.obj gc-oce.obj gc-ocd.obj\ number.obj schsig.obj io.obj new-io.obj print.obj fasl.obj vfasl.obj stats.obj\ foreign.obj prim.obj prim5.obj flushcache.obj\ windows.obj\ schlib.obj thread.obj expeditor.obj scheme.obj compress-io.obj random.obj -hsrc=system.h types.h version.h globals.h externs.h compress-io.h segment.h gc.c thread.h sort.h itest.c +hsrc=system.h types.h version.h globals.h externs.h compress-io.h segment.h atomic.h gc.c thread.h sort.h itest.c .SUFFIXES: diff --git a/racket/src/ChezScheme/c/Makefile.ti3nt b/racket/src/ChezScheme/c/Makefile.ti3nt index c912e65b50..09beea9841 100644 --- a/racket/src/ChezScheme/c/Makefile.ti3nt +++ b/racket/src/ChezScheme/c/Makefile.ti3nt @@ -47,19 +47,19 @@ MTZlibLib=..\zlib\zlibmt.lib MDLZ4Lib=..\lz4\lib\liblz4.lib MTLZ4Lib=..\lz4\lib\liblz4mt.lib -csrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-011.c gc-oce.c gc-ocd.c\ +csrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-011.c gc-par.c gc-oce.c gc-ocd.c\ number.c schsig.c io.c new-io.c print.c fasl.c vfasl.c stats.c\ foreign.c prim.c prim5.c flushcache.c\ windows.c\ schlib.c thread.c expeditor.c scheme.c compress-io.c random.c -cobj=statics.obj segment.obj alloc.obj symbol.obj intern.obj gcwrapper.obj gc-011.c gc-oce.obj gc-ocd.obj\ +cobj=statics.obj segment.obj alloc.obj symbol.obj intern.obj gcwrapper.obj gc-011.c gc-par.obj gc-oce.obj gc-ocd.obj\ number.obj schsig.obj io.obj new-io.obj print.obj fasl.obj vfasl.obj stats.obj\ foreign.obj prim.obj prim5.obj flushcache.obj\ windows.obj\ schlib.obj thread.obj expeditor.obj scheme.obj compress-io.obj random.obj -hsrc=system.h types.h version.h globals.h externs.h compress-io.h segment.h gc.c thread.h sort.h itest.c +hsrc=system.h types.h version.h globals.h externs.h compress-io.h segment.h atomic.h gc.c thread.h sort.h itest.c .SUFFIXES: diff --git a/racket/src/ChezScheme/c/Mf-base b/racket/src/ChezScheme/c/Mf-base index aa6c033fc0..c537529a2c 100644 --- a/racket/src/ChezScheme/c/Mf-base +++ b/racket/src/ChezScheme/c/Mf-base @@ -35,13 +35,13 @@ KernelLib=../boot/$m/libkernel.a KernelLibLinkDeps=${zlibDep} ${LZ4Dep} KernelLibLinkLibs=${zlibLib} ${LZ4Lib} -kernelsrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-011.c gc-ocd.c gc-oce.c\ +kernelsrc=statics.c segment.c alloc.c symbol.c intern.c gcwrapper.c gc-011.c gc-par.c gc-ocd.c gc-oce.c\ number.c schsig.c io.c new-io.c print.c fasl.c vfasl.c stats.c foreign.c prim.c prim5.c flushcache.c\ schlib.c thread.c expeditor.c scheme.c compress-io.c random.c kernelobj=${kernelsrc:%.c=%.$o} ${mdobj} -kernelhdr=system.h types.h version.h globals.h externs.h segment.h gc.c sort.h thread.h config.h compress-io.h itest.c nocurses.h popcount.h +kernelhdr=system.h types.h version.h globals.h externs.h segment.h atomic.h gc.c sort.h thread.h config.h compress-io.h itest.c nocurses.h popcount.h mainsrc=main.c @@ -64,12 +64,12 @@ endif scheme.o: itest.c scheme.o main.o: config.h -${kernelobj}: system.h types.h version.h externs.h globals.h segment.h thread.h config.h sort.h compress-io.h nocurses.h popcount.h +${kernelobj}: system.h types.h version.h externs.h globals.h segment.h atomic.h thread.h config.h sort.h compress-io.h nocurses.h popcount.h ${kernelobj}: ${Include}/equates.h ${Include}/scheme.h ${mainobj}: ${Include}/scheme.h ${kernelobj}: ${zlibHeaderDep} ${LZ4HeaderDep} -gc-011.o gc-ocd.o gc-oce.o: gc.c -gc-011.o gc-ocd.o: ${Include}/gc-ocd.inc +gc-011.o gc-par.o gc-ocd.o gc-oce.o: gc.c +gc-011.o gc-par.o gc-ocd.o: ${Include}/gc-ocd.inc gc-oce.o: ${Include}/gc-oce.inc vfasl.o: ${Include}/vfasl.inc diff --git a/racket/src/ChezScheme/c/alloc.c b/racket/src/ChezScheme/c/alloc.c index 18f2a3b3fd..77fb5f2af4 100644 --- a/racket/src/ChezScheme/c/alloc.c +++ b/racket/src/ChezScheme/c/alloc.c @@ -24,14 +24,16 @@ void S_alloc_init() { ISPC s; IGEN g; UINT i; if (S_boot_time) { + ptr tc = TO_PTR(S_G.thread_context); + /* reset the allocation tables */ for (g = 0; g <= static_generation; g++) { S_G.bytes_of_generation[g] = 0; for (s = 0; s <= max_real_space; s++) { - S_G.base_loc[g][s] = FIX(0); - S_G.next_loc[g][s] = FIX(0); - S_G.bytes_left[g][s] = 0; - S_G.bytes_of_space[g][s] = 0; + BASELOC_AT(tc, s, g) = FIX(0); + NEXTLOC_AT(tc, s, g) = FIX(0); + BYTESLEFT_AT(tc, s, g) = 0; + S_G.bytes_of_space[g][s] = 0; } } @@ -48,35 +50,35 @@ void S_alloc_init() { S_G.nonprocedure_code = FIX(0); S_protect(&S_G.null_vector); - find_room(space_new, 0, type_typed_object, size_vector(0), S_G.null_vector); + find_room(tc, space_new, 0, type_typed_object, size_vector(0), S_G.null_vector); VECTTYPE(S_G.null_vector) = (0 << vector_length_offset) | type_vector; S_protect(&S_G.null_fxvector); - find_room(space_new, 0, type_typed_object, size_fxvector(0), S_G.null_fxvector); + find_room(tc, space_new, 0, type_typed_object, size_fxvector(0), S_G.null_fxvector); FXVECTOR_TYPE(S_G.null_fxvector) = (0 << fxvector_length_offset) | type_fxvector; S_protect(&S_G.null_bytevector); - find_room(space_new, 0, type_typed_object, size_bytevector(0), S_G.null_bytevector); + find_room(tc, space_new, 0, type_typed_object, size_bytevector(0), S_G.null_bytevector); BYTEVECTOR_TYPE(S_G.null_bytevector) = (0 << bytevector_length_offset) | type_bytevector; S_protect(&S_G.null_string); - find_room(space_new, 0, type_typed_object, size_string(0), S_G.null_string); + find_room(tc, space_new, 0, type_typed_object, size_string(0), S_G.null_string); STRTYPE(S_G.null_string) = (0 << string_length_offset) | type_string; S_protect(&S_G.null_immutable_vector); - find_room(space_new, 0, type_typed_object, size_vector(0), S_G.null_immutable_vector); + find_room(tc, space_new, 0, type_typed_object, size_vector(0), S_G.null_immutable_vector); VECTTYPE(S_G.null_immutable_vector) = (0 << vector_length_offset) | type_vector | vector_immutable_flag; S_protect(&S_G.null_immutable_fxvector); - find_room(space_new, 0, type_typed_object, size_fxvector(0), S_G.null_immutable_fxvector); + find_room(tc, space_new, 0, type_typed_object, size_fxvector(0), S_G.null_immutable_fxvector); FXVECTOR_TYPE(S_G.null_immutable_fxvector) = (0 << fxvector_length_offset) | type_fxvector | fxvector_immutable_flag; S_protect(&S_G.null_immutable_bytevector); - find_room(space_new, 0, type_typed_object, size_bytevector(0), S_G.null_immutable_bytevector); + find_room(tc, space_new, 0, type_typed_object, size_bytevector(0), S_G.null_immutable_bytevector); BYTEVECTOR_TYPE(S_G.null_immutable_bytevector) = (0 << bytevector_length_offset) | type_bytevector | bytevector_immutable_flag; S_protect(&S_G.null_immutable_string); - find_room(space_new, 0, type_typed_object, size_string(0), S_G.null_immutable_string); + find_room(tc, space_new, 0, type_typed_object, size_string(0), S_G.null_immutable_string); STRTYPE(S_G.null_immutable_string) = (0 << string_length_offset) | type_string | string_immutable_flag; } } @@ -101,7 +103,7 @@ void S_reset_scheme_stack(tc, n) ptr tc; iptr n; { if (*x == snil) { if (n < default_stack_size) n = default_stack_size; /* stacks are untyped objects */ - find_room(space_new, 0, typemod, n, SCHEMESTACK(tc)); + find_room(tc, space_new, 0, typemod, n, SCHEMESTACK(tc)); break; } if ((m = CACHEDSTACKSIZE(*x)) >= n) { @@ -150,12 +152,10 @@ ptr S_compute_bytes_allocated(xg, xs) ptr xg; ptr xs; { while (g <= gmax) { n += S_G.bytesof[g][countof_phantom]; for (s = smin; s <= smax; s++) { - ptr next_loc = S_G.next_loc[g][s]; + ptr next_loc; /* add in bytes previously recorded */ n += S_G.bytes_of_space[g][s]; /* add in bytes in active segments */ - if (next_loc != FIX(0)) - n += (uptr)next_loc - (uptr)S_G.base_loc[g][s]; next_loc = NEXTLOC_AT(tc, s, g); if (next_loc != FIX(0)) n += (uptr)next_loc - (uptr)BASELOC_AT(tc, s, g); @@ -186,27 +186,8 @@ static void maybe_fire_collector() { S_fire_collector(); } -static ptr more_room_segment(ISPC s, IGEN g, iptr n, iptr *_new_bytes) -{ - iptr nsegs, seg; - ptr new; - - S_pants_down += 1; - - nsegs = (uptr)(n + ptr_bytes + bytes_per_segment - 1) >> segment_offset_bits; - - /* block requests to minimize fragmentation and improve cache locality */ - if (s == space_code && nsegs < 16) nsegs = 16; - - seg = S_find_segments(s, g, nsegs); - new = build_ptr(seg, 0); - - *_new_bytes = nsegs * bytes_per_segment; - - return new; -} - -static void close_off_segment(ptr old, ptr base_loc, ptr sweep_loc, ISPC s, IGEN g) +/* suitable mutex (either tc_mutex or gc_tc_mutex) must be held */ +static void close_off_segment(ptr tc, ptr old, ptr base_loc, ptr sweep_loc, ISPC s, IGEN g) { if (base_loc) { seginfo *si; @@ -219,84 +200,66 @@ static void close_off_segment(ptr old, ptr base_loc, ptr sweep_loc, ISPC s, IGEN /* lay down an end-of-segment marker */ *(ptr*)TO_VOIDP(old) = forward_marker; - /* add to sweep list */ + /* in case this is during a GC, add to sweep list */ si = SegInfo(addr_get_segment(base_loc)); - si->sweep_next = S_G.to_sweep[g][s]; si->sweep_start = sweep_loc; - S_G.to_sweep[g][s] = si; + si->sweep_next = TO_VOIDP(SWEEPNEXT_AT(tc, s, g)); + SWEEPNEXT_AT(tc, s, g) = TO_PTR(si); } } -static void more_room_done(IGEN g) -{ - if (g == 0 && S_pants_down == 1) maybe_fire_collector(); - - S_pants_down -= 1; -} - -/* find_more_room - * S_find_more_room is called from the macro find_room when - * the current segment is too full to fit the allocation. - * - * A forward_marker followed by a pointer to - * the newly obtained segment is placed at next_loc to show - * gc where the end of this segment is and where the next - * segment of this type resides. Allocation occurs from the - * beginning of the newly obtained segment. The need for the - * eos marker explains the ptr_bytes byte factor in - * S_find_more_room. - */ -/* S_find_more_room is always called with mutex */ -ptr S_find_more_room(s, g, n, old) ISPC s; IGEN g; iptr n; ptr old; { - ptr new; - iptr new_bytes; - - close_off_segment(old, S_G.base_loc[g][s], S_G.sweep_loc[g][s], s, g); - - new = more_room_segment(s, g, n, &new_bytes); - - /* base address of current block of segments to track amount of allocation - and to register a closed-off segment in the sweep list */ - S_G.base_loc[g][s] = new; - - /* in case a GC has started: */ - S_G.sweep_loc[g][s] = new; - - S_G.next_loc[g][s] = (ptr)((uptr)new + n); - S_G.bytes_left[g][s] = (new_bytes - n) - ptr_bytes; - - more_room_done(g); - - return new; -} - ptr S_find_more_thread_room(ptr tc, ISPC s, IGEN g, iptr n, ptr old) { + iptr nsegs, seg; ptr new; iptr new_bytes; - tc_mutex_acquire() +#ifdef PTHREADS + if (S_use_gc_tc_mutex) + gc_tc_mutex_acquire(); + else + tc_mutex_acquire(); +#else + tc_mutex_acquire(); +#endif + + close_off_segment(tc, old, BASELOC_AT(tc, s, g), SWEEPLOC_AT(tc, s, g), s, g); - /* closing off segment effectively moves to global space: */ - close_off_segment(old, BASELOC_AT(tc, s, g), SWEEPLOC_AT(tc, s, g), s, g); + S_pants_down += 1; - new = more_room_segment(s, g, n, &new_bytes); + nsegs = (uptr)(n + ptr_bytes + bytes_per_segment - 1) >> segment_offset_bits; + + /* block requests to minimize fragmentation and improve cache locality */ + if (s == space_code && nsegs < 16) nsegs = 16; + + seg = S_find_segments(tc, s, g, nsegs); + new = build_ptr(seg, 0); + + new_bytes = nsegs * bytes_per_segment; BASELOC_AT(tc, s, g) = new; SWEEPLOC_AT(tc, s, g) = new; BYTESLEFT_AT(tc, s, g) = (new_bytes - n) - ptr_bytes; NEXTLOC_AT(tc, s, g) = (ptr)((uptr)new + n); - more_room_done(g); + if (g == 0 && S_pants_down == 1) maybe_fire_collector(); - tc_mutex_release() + S_pants_down -= 1; +#ifdef PTHREADS + if (S_use_gc_tc_mutex) + gc_tc_mutex_release(); + else + tc_mutex_release(); +#else + tc_mutex_release(); +#endif + return new; } /* tc_mutex must be held */ void S_close_off_thread_local_segment(ptr tc, ISPC s, IGEN g) { - /* closing off segment effectively moves to global space: */ - close_off_segment(NEXTLOC_AT(tc, s, g), BASELOC_AT(tc, s, g), SWEEPLOC_AT(tc, s, g), s, g); + close_off_segment(tc, NEXTLOC_AT(tc, s, g), BASELOC_AT(tc, s, g), SWEEPLOC_AT(tc, s, g), s, g); BASELOC_AT(tc, s, g) = (ptr)0; BYTESLEFT_AT(tc, s, g) = 0; @@ -319,14 +282,14 @@ void S_reset_allocation_pointer(tc) ptr tc; { S_pants_down += 1; - seg = S_find_segments(space_new, 0, 1); + seg = S_find_segments(tc, space_new, 0, 1); /* NB: if allocate_segments didn't already ensure we don't use the last segment of memory, we'd have to reject it here so cp2-alloc can avoid a carry check for small allocation requests, using something like this: if (seg == (((uptr)1 << (ptr_bits - segment_offset_bits)) - 1)) - seg = S_find_segments(space_new, 0, 1); + seg = S_find_segments(tc, space_new, 0, 1); */ S_G.bytes_of_space[0][space_new] += bytes_per_segment; @@ -340,20 +303,23 @@ void S_reset_allocation_pointer(tc) ptr tc; { S_pants_down -= 1; } -void S_record_new_dirty_card(ptr *ppp, IGEN to_g) { +void S_record_new_dirty_card(ptr tc, ptr *ppp, IGEN to_g) { uptr card = (uptr)TO_PTR(ppp) >> card_offset_bits; + dirtycardinfo *ndc; - dirtycardinfo *ndc = S_G.new_dirty_cards; + gc_tc_mutex_acquire(); + ndc = S_G.new_dirty_cards; if (ndc != NULL && ndc->card == card) { if (to_g < ndc->youngest) ndc->youngest = to_g; } else { dirtycardinfo *next = ndc; - find_room_voidp(space_new, 0, ptr_align(sizeof(dirtycardinfo)), ndc); + find_room_voidp(tc, space_new, 0, ptr_align(sizeof(dirtycardinfo)), ndc); ndc->card = card; ndc->youngest = to_g; ndc->next = next; S_G.new_dirty_cards = ndc; } + gc_tc_mutex_release(); } FORCEINLINE void mark_segment_dirty(seginfo *si, IGEN from_g, IGEN to_g) { @@ -384,7 +350,7 @@ void S_dirty_set(ptr *loc, ptr x) { if (!IMMEDIATE(x)) { seginfo *t_si = SegInfo(ptr_get_segment(x)); if (t_si->generation < si->generation) - S_record_new_dirty_card(loc, t_si->generation); + S_record_new_dirty_card(get_thread_context(), loc, t_si->generation); } } else { IGEN from_g = si->generation; @@ -445,7 +411,7 @@ void S_scan_remembered_set() { ptr tc = get_thread_context(); uptr ap, eap, real_eap; - tc_mutex_acquire() + tc_mutex_acquire(); ap = (uptr)AP(tc); eap = (uptr)EAP(tc); @@ -464,7 +430,7 @@ void S_scan_remembered_set() { S_reset_allocation_pointer(tc); } - tc_mutex_release() + tc_mutex_release(); } /* S_get_more_room is called from genereated machine code when there is @@ -492,7 +458,14 @@ ptr S_get_more_room_help(ptr tc, uptr ap, uptr type, uptr size) { eap = (uptr)EAP(tc); real_eap = (uptr)REAL_EAP(tc); - tc_mutex_acquire() +#ifdef PTHREADS + if (S_use_gc_tc_mutex) + gc_tc_mutex_acquire(); + else + tc_mutex_acquire(); +#else + tc_mutex_acquire(); +#endif S_scan_dirty(TO_VOIDP(eap), TO_VOIDP(real_eap)); eap = real_eap; @@ -512,7 +485,7 @@ ptr S_get_more_room_help(ptr tc, uptr ap, uptr type, uptr size) { } else if (eap - ap > alloc_waste_maximum) { AP(tc) = (ptr)ap; EAP(tc) = (ptr)eap; - find_room(space_new, 0, type, size, x); + find_room(tc, space_new, 0, type, size, x); } else { uptr bytes = eap - ap; S_G.bytes_of_space[0][space_new] -= bytes; @@ -523,11 +496,18 @@ ptr S_get_more_room_help(ptr tc, uptr ap, uptr type, uptr size) { x = TYPE(ap, type); AP(tc) = (ptr)(ap + size); } else { - find_room(space_new, 0, type, size, x); + find_room(tc, space_new, 0, type, size, x); } } - tc_mutex_release() +#ifdef PTHREADS + if (S_use_gc_tc_mutex) + gc_tc_mutex_release(); + else + tc_mutex_release(); +#else + tc_mutex_release(); +#endif return x; } @@ -550,16 +530,12 @@ void S_list_bits_set(p, bits) ptr p; iptr bits; { if (!si->list_bits) { void *list_bits; + ptr tc = get_thread_context(); - if (si->generation == 0) { - ptr tc = get_thread_context(); - thread_find_room_voidp(tc, ptr_align(segment_bitmap_bytes), list_bits); - } else { - tc_mutex_acquire() - - find_room_voidp(space_data, si->generation, ptr_align(segment_bitmap_bytes), list_bits); - tc_mutex_release() - } + if (si->generation == 0) + newspace_find_room_voidp(tc, ptr_align(segment_bitmap_bytes), list_bits); + else + find_room_voidp(tc, space_data, si->generation, ptr_align(segment_bitmap_bytes), list_bits); memset(list_bits, 0, segment_bitmap_bytes); @@ -576,21 +552,10 @@ void S_list_bits_set(p, bits) ptr p; iptr bits; { si->list_bits[segment_bitmap_byte(p)] |= segment_bitmap_bits(p, bits); } -/* tc_mutex must be held */ -ptr S_cons_in_global(s, g, car, cdr) ISPC s; IGEN g; ptr car, cdr; { +ptr S_cons_in(tc, s, g, car, cdr) ptr tc; ISPC s; IGEN g; ptr car, cdr; { ptr p; - find_room(s, g, type_pair, size_pair, p); - INITCAR(p) = car; - INITCDR(p) = cdr; - return p; -} - -ptr S_cons_in(s, g, car, cdr) ISPC s; IGEN g; ptr car, cdr; { - ptr tc = get_thread_context(); - ptr p; - - thread_find_room_g(tc, s, g, type_pair, size_pair, p); + find_room(tc, s, g, type_pair, size_pair, p); INITCAR(p) = car; INITCDR(p) = cdr; return p; @@ -600,7 +565,7 @@ ptr Scons(car, cdr) ptr car, cdr; { ptr tc = get_thread_context(); ptr p; - thread_find_room(tc, type_pair, size_pair, p); + newspace_find_room(tc, type_pair, size_pair, p); INITCAR(p) = car; INITCDR(p) = cdr; return p; @@ -610,7 +575,7 @@ ptr S_ephemeron_cons_in(gen, car, cdr) IGEN gen; ptr car, cdr; { ptr p; ptr tc = get_thread_context(); - thread_find_room_g(tc, space_ephemeron, gen, type_pair, size_ephemeron, p); + find_room(tc, space_ephemeron, gen, type_pair, size_ephemeron, p); INITCAR(p) = car; INITCDR(p) = cdr; EPHEMERONPREVREF(p) = 0; @@ -623,12 +588,10 @@ ptr S_box2(ref, immobile) ptr ref; IBOOL immobile; { ptr tc = get_thread_context(); ptr p; - if (immobile) { - tc_mutex_acquire() - find_room(space_immobile_impure, 0, type_typed_object, size_box, p); - tc_mutex_release() - } else - thread_find_room(tc, type_typed_object, size_box, p); + if (immobile) + find_room(tc, space_immobile_impure, 0, type_typed_object, size_box, p); + else + newspace_find_room(tc, type_typed_object, size_box, p); BOXTYPE(p) = type_box; INITBOXREF(p) = ref; return p; @@ -642,7 +605,7 @@ ptr S_symbol(name) ptr name; { ptr tc = get_thread_context(); ptr p; - thread_find_room(tc, type_symbol, size_symbol, p); + newspace_find_room(tc, type_symbol, size_symbol, p); /* changes here should be reflected in the oblist collection code in gc.c */ INITSYMVAL(p) = sunbound; INITSYMCODE(p,S_G.nonprocedure_code); @@ -659,7 +622,7 @@ ptr S_rational(n, d) ptr n, d; { ptr tc = get_thread_context(); ptr p; - thread_find_room(tc, type_typed_object, size_ratnum, p); + newspace_find_room(tc, type_typed_object, size_ratnum, p); RATTYPE(p) = type_ratnum; RATNUM(p) = n; RATDEN(p) = d; @@ -671,7 +634,7 @@ ptr S_tlc(ptr keyval, ptr ht, ptr next) { ptr tc = get_thread_context(); ptr p; - thread_find_room(tc, type_typed_object, size_tlc, p); + newspace_find_room(tc, type_typed_object, size_tlc, p); TLCTYPE(p) = type_tlc; INITTLCKEYVAL(p) = keyval; INITTLCHT(p) = ht; @@ -679,8 +642,7 @@ ptr S_tlc(ptr keyval, ptr ht, ptr next) { return p; } -/* S_vector_in is always called with mutex */ -ptr S_vector_in(s, g, n) ISPC s; IGEN g; iptr n; { +ptr S_vector_in(tc, s, g, n) ptr tc; ISPC s; IGEN g; iptr n; { ptr p; iptr d; if (n == 0) return S_G.null_vector; @@ -689,8 +651,7 @@ ptr S_vector_in(s, g, n) ISPC s; IGEN g; iptr n; { S_error("", "invalid vector size request"); d = size_vector(n); - /* S_vector_in always called with mutex */ - find_room(s, g, type_typed_object, d, p); + find_room(tc, s, g, type_typed_object, d, p); VECTTYPE(p) = (n << vector_length_offset) | type_vector; return p; } @@ -707,7 +668,7 @@ ptr S_vector(n) iptr n; { tc = get_thread_context(); d = size_vector(n); - thread_find_room(tc, type_typed_object, d, p); + newspace_find_room(tc, type_typed_object, d, p); VECTTYPE(p) = (n << vector_length_offset) | type_vector; return p; } @@ -724,7 +685,7 @@ ptr S_fxvector(n) iptr n; { tc = get_thread_context(); d = size_fxvector(n); - thread_find_room(tc, type_typed_object, d, p); + newspace_find_room(tc, type_typed_object, d, p); FXVECTOR_TYPE(p) = (n << fxvector_length_offset) | type_fxvector; return p; } @@ -745,40 +706,42 @@ ptr S_bytevector2(n, immobile) iptr n; IBOOL immobile; { tc = get_thread_context(); d = size_bytevector(n); - if (immobile) { - tc_mutex_acquire() - find_room(space_immobile_data, 0, type_typed_object, d, p); - tc_mutex_release() - } else - thread_find_room(tc, type_typed_object, d, p); + if (immobile) + find_room(tc, space_immobile_data, 0, type_typed_object, d, p); + else + newspace_find_room(tc, type_typed_object, d, p); BYTEVECTOR_TYPE(p) = (n << bytevector_length_offset) | type_bytevector; return p; } ptr S_null_immutable_vector() { + ptr tc = get_thread_context(); ptr v; - find_room(space_new, 0, type_typed_object, size_vector(0), v); + find_room(tc, space_new, 0, type_typed_object, size_vector(0), v); VECTTYPE(v) = (0 << vector_length_offset) | type_vector | vector_immutable_flag; return v; } ptr S_null_immutable_fxvector() { + ptr tc = get_thread_context(); ptr v; - find_room(space_new, 0, type_typed_object, size_fxvector(0), v); + find_room(tc, space_new, 0, type_typed_object, size_fxvector(0), v); VECTTYPE(v) = (0 << fxvector_length_offset) | type_fxvector | fxvector_immutable_flag; return v; } ptr S_null_immutable_bytevector() { + ptr tc = get_thread_context(); ptr v; - find_room(space_new, 0, type_typed_object, size_bytevector(0), v); + find_room(tc, space_new, 0, type_typed_object, size_bytevector(0), v); VECTTYPE(v) = (0 << bytevector_length_offset) | type_bytevector | bytevector_immutable_flag; return v; } ptr S_null_immutable_string() { + ptr tc = get_thread_context(); ptr v; - find_room(space_new, 0, type_typed_object, size_string(0), v); + find_room(tc, space_new, 0, type_typed_object, size_string(0), v); VECTTYPE(v) = (0 << string_length_offset) | type_string | string_immutable_flag; return v; } @@ -791,7 +754,7 @@ ptr S_stencil_vector(mask) uptr mask; { tc = get_thread_context(); d = size_stencil_vector(n); - thread_find_room(tc, type_typed_object, d, p); + newspace_find_room(tc, type_typed_object, d, p); VECTTYPE(p) = (mask << stencil_vector_mask_offset) | type_stencil_vector; return p; } @@ -800,7 +763,7 @@ ptr S_record(n) iptr n; { ptr tc = get_thread_context(); ptr p; - thread_find_room(tc, type_typed_object, n, p); + newspace_find_room(tc, type_typed_object, n, p); return p; } @@ -809,7 +772,7 @@ ptr S_closure(cod, n) ptr cod; iptr n; { ptr p; iptr d; d = size_closure(n); - thread_find_room(tc, type_closure, d, p); + newspace_find_room(tc, type_closure, d, p); CLOSENTRY(p) = cod; return p; } @@ -820,7 +783,7 @@ ptr S_mkcontinuation(s, g, nuate, stack, length, clength, link, ret, winders, at ptr p; ptr tc = get_thread_context(); - thread_find_room_g(tc, s, g, type_closure, size_continuation, p); + find_room(tc, s, g, type_closure, size_continuation, p); CLOSENTRY(p) = nuate; CONTSTACK(p) = stack; CONTLENGTH(p) = length; @@ -836,7 +799,7 @@ ptr Sflonum(x) double x; { ptr tc = get_thread_context(); ptr p; - thread_find_room(tc, type_flonum, size_flonum, p); + newspace_find_room(tc, type_flonum, size_flonum, p); FLODAT(p) = x; return p; } @@ -845,21 +808,19 @@ ptr S_inexactnum(rp, ip) double rp, ip; { ptr tc = get_thread_context(); ptr p; - thread_find_room(tc, type_typed_object, size_inexactnum, p); + newspace_find_room(tc, type_typed_object, size_inexactnum, p); INEXACTNUM_TYPE(p) = type_inexactnum; INEXACTNUM_REAL_PART(p) = rp; INEXACTNUM_IMAG_PART(p) = ip; return p; } -/* S_thread is always called with mutex */ -ptr S_thread(xtc) ptr xtc; { +ptr S_thread(tc) ptr tc; { ptr p; - /* don't use thread_find_room since we may be building the current thread */ - find_room(space_new, 0, type_typed_object, size_thread, p); + find_room(tc, space_new, 0, type_typed_object, size_thread, p); TYPEFIELD(p) = (ptr)type_thread; - THREADTC(p) = (uptr)xtc; + THREADTC(p) = (uptr)tc; return p; } @@ -867,7 +828,7 @@ ptr S_exactnum(a, b) ptr a, b; { ptr tc = get_thread_context(); ptr p; - thread_find_room(tc, type_typed_object, size_exactnum, p); + newspace_find_room(tc, type_typed_object, size_exactnum, p); EXACTNUM_TYPE(p) = type_exactnum; EXACTNUM_REAL_PART(p) = a; EXACTNUM_IMAG_PART(p) = b; @@ -892,7 +853,7 @@ ptr S_string(s, n) const char *s; iptr n; { tc = get_thread_context(); d = size_string(n); - thread_find_room(tc, type_typed_object, d, p); + newspace_find_room(tc, type_typed_object, d, p); STRTYPE(p) = (n << string_length_offset) | type_string; /* fill the string with valid characters */ @@ -971,7 +932,7 @@ ptr Sstring_utf8(s, n) const char *s; iptr n; { tc = get_thread_context(); d = size_string(cc); - thread_find_room(tc, type_typed_object, d, p); + newspace_find_room(tc, type_typed_object, d, p); STRTYPE(p) = (cc << string_length_offset) | type_string; /* fill the string */ @@ -1041,7 +1002,7 @@ ptr S_bignum(tc, n, sign) ptr tc; iptr n; IBOOL sign; { S_error("", "invalid bignum size request"); d = size_bignum(n); - thread_find_room(tc, type_typed_object, d, p); + newspace_find_room(tc, type_typed_object, d, p); BIGTYPE(p) = (uptr)n << bignum_length_offset | sign << bignum_sign_offset | type_bignum; return p; } @@ -1050,7 +1011,7 @@ ptr S_code(tc, type, n) ptr tc; iptr type, n; { ptr p; iptr d; d = size_code(n); - thread_find_room_g(tc, space_code, 0, type_typed_object, d, p); + find_room(tc, space_code, 0, type_typed_object, d, p); CODETYPE(p) = type; CODELEN(p) = n; /* we record the code modification here, even though we haven't @@ -1065,20 +1026,21 @@ ptr S_relocation_table(n) iptr n; { ptr p; iptr d; d = size_reloc_table(n); - thread_find_room(tc, typemod, d, p); + newspace_find_room(tc, typemod, d, p); RELOCSIZE(p) = n; return p; } ptr S_weak_cons(ptr car, ptr cdr) { - return S_cons_in(space_weakpair, 0, car, cdr); + ptr tc = get_thread_context(); + return S_cons_in(tc, space_weakpair, 0, car, cdr); } ptr S_phantom_bytevector(sz) uptr sz; { ptr tc = get_thread_context(); ptr p; - thread_find_room(tc, type_typed_object, size_phantom, p); + newspace_find_room(tc, type_typed_object, size_phantom, p); PHANTOMTYPE(p) = type_phantom; PHANTOMLEN(p) = 0; @@ -1093,7 +1055,7 @@ void S_phantom_bytevector_adjust(ph, new_sz) ptr ph; uptr new_sz; { seginfo *si; IGEN g; - tc_mutex_acquire() + tc_mutex_acquire(); si = SegInfo(ptr_get_segment(ph)); g = si->generation; @@ -1102,5 +1064,5 @@ void S_phantom_bytevector_adjust(ph, new_sz) ptr ph; uptr new_sz; { S_adjustmembytes(new_sz - old_sz); PHANTOMLEN(ph) = new_sz; - tc_mutex_release() + tc_mutex_release(); } diff --git a/racket/src/ChezScheme/c/atomic.h b/racket/src/ChezScheme/c/atomic.h new file mode 100644 index 0000000000..ade52a72fa --- /dev/null +++ b/racket/src/ChezScheme/c/atomic.h @@ -0,0 +1,124 @@ +#if !defined(PTHREADS) +# define STORE_FENCE() do { } while (0) +#elif defined(__arm64__) +# define STORE_FENCE() __asm__ __volatile__ ("dmb ishst" : : : "memory") +# define ACQUIRE_FENCE() __asm__ __volatile__ ("dmb ish" : : : "memory") +# define RELEASE_FENCE() ACQUIRE_FENCE() +#elif defined(__arm__) +# if arm_isa_version == 7 +# define STORE_FENCE() __asm__ __volatile__ ("dmb ishst" : : : "memory") +# define ACQUIRE_FENCE() __asm__ __volatile__ ("dmb ish" : : : "memory") +# define RELEASE_FENCE() ACQUIRE_FENCE() +# else +# define STORE_FENCE() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r" (0) : "memory") +# define ACQUIRE_FENCE() STORE_FENCE() +# define RELEASE_FENCE() STORE_FENCE() +# endif +#elif defined(__powerpc64__) +# define STORE_FENCE() __asm__ __volatile__ ("lwsync" : : : "memory") +# define ACQUIRE_FENCE() __asm__ __volatile__ ("sync" : : : "memory") +# define RELEASE_FENCE() ACQUIRE_FENCE() +#elif defined(__powerpc__) || defined(__POWERPC__) +# define STORE_FENCE() __asm__ __volatile__ ("sync" : : : "memory") +# define ACQUIRE_FENCE() STORE_FENCE() +# define RELEASE_FENCE() STORE_FENCE() +#else +# define STORE_FENCE() do { } while (0) +#endif + +#ifndef ACQUIRE_FENCE +# define ACQUIRE_FENCE() do { } while (0) +#endif +#ifndef RELEASE_FENCE +# define RELEASE_FENCE() do { } while (0) +#endif + +#if !defined(PTHREADS) +# define CAS_ANY_FENCE(a, old, new) ((*(a) == (old)) ? (*(a) = (new), 1) : 0) +#elif defined(__arm64__) +FORCEINLINE int CAS_LOAD_ACQUIRE(volatile void *addr, void *old_val, void *new_val) { + int ret; + __asm__ __volatile__ ("mov %0, #0\n\t" + "0:\n\t" + "ldaxr r12, [%1, #0]\n\t" + "cmp r12, %2\n\t" + "bne 1f\n\t" + "stxr r7, %3, [%1, #0]\n\t" + "cmp r7, #0\n\t" + "bne 1f\n\t" + "moveq %0, #1\n\t" + "1:\n\t" + : "=&r" (ret) + : "r" (addr), "r" (old_val), "r" (new_val) + : "cc", "memory", "r12", "r7"); + return ret; +} +/* same as above, but ldaxr -> ldxr and stxr -> stlxr */ +FORCEINLINE int CAS_STORE_RELEASE(volatile void *addr, void *old_val, void *new_val) { + int ret; + __asm__ __volatile__ ("mov %0, #0\n\t" + "0:\n\t" + "ldxr r12, [%1, #0]\n\t" + "cmp r12, %2\n\t" + "bne 1f\n\t" + "stlxr r7, %3, [%1, #0]\n\t" + "cmp r7, #0\n\t" + "bne 1f\n\t" + "moveq %0, #1\n\t" + "1:\n\t" + : "=&r" (ret) + : "r" (addr), "r" (old_val), "r" (new_val) + : "cc", "memory", "r12", "r7"); + return ret; +} +#elif defined(__arm__) +FORCEINLINE int S_cas_any_fence(volatile void *addr, void *old_val, void *new_val) { + int ret; + __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5\n\t" + "mov %0, #0\n\t" + "0:\n\t" + "ldrex r12, [%1, #0]\n\t" + "cmp r12, %2\n\t" + "bne 1f\n\t" + "strex r7, %3, [%1, #0]\n\t" + "cmp r7, #0\n\t" + "bne 1f\n\t" + "moveq %0, #1\n\t" + "1:\n\t" + : "=&r" (ret) + : "r" (addr), "r" (old_val), "r" (new_val) + : "cc", "memory", "r12", "r7"); + return ret; +} +# define CAS_ANY_FENCE(a, old, new) S_cas_any_fence(a, old, new) +#elif (__GNUC__ >= 5) || defined(__clang__) +# define CAS_ANY_FENCE(a, old, new) __sync_bool_compare_and_swap(a, old, new) +#elif defined(_MSC_VER) +# if ptr_bits == 64 +# define CAS_ANY_FENCE(a, old, new) (_InterlockedCompareExchange64((__int64 *)(a), (__int64)(new), (__int64)(old)) == (__int64)(old)) +# else +# define CAS_ANY_FENCE(a, old, new) (_InterlockedCompareExchange64((long *)(a), (long)(new), (long)(old)) == (long)(old)) +# endif +#elif defined(__i386__) || defined(__x86_64__) +# if ptr_bits == 64 +# define CAS_OP_SIZE "q" +# else +# define CAS_OP_SIZE "" +# endif +FORCEINLINE int S_cas_any_fence(volatile void *addr, void *old_val, void *new_val) { + char result; + __asm__ __volatile__("lock; cmpxchg" CAS_OP_SIZE " %3, %0; setz %1" + : "=m"(*(void **)addr), "=q"(result) + : "m"(*(void **)addr), "r" (new_val), "a"(old_val) + : "memory"); + return (int) result; +} +# define CAS_ANY_FENCE(a, old, new) S_cas_any_fence(a, old, new) +#else +# define CAS_ANY_FENCE(a, old, new) ((*(a) == (old)) ? (*(a) = (new), 1) : 0) +#endif + +#ifdef CAS_ANY_FENCE +# define CAS_LOAD_ACQUIRE(a, old, new) CAS_ANY_FENCE(a, old, new) +# define CAS_STORE_RELEASE(a, old, new) CAS_ANY_FENCE(a, old, new) +#endif diff --git a/racket/src/ChezScheme/c/externs.h b/racket/src/ChezScheme/c/externs.h index 173995b87a..7727f90b8a 100644 --- a/racket/src/ChezScheme/c/externs.h +++ b/racket/src/ChezScheme/c/externs.h @@ -66,7 +66,7 @@ extern void S_reset_allocation_pointer PROTO((ptr tc)); extern ptr S_compute_bytes_allocated PROTO((ptr xg, ptr xs)); extern ptr S_bytes_finalized PROTO(()); extern ptr S_find_more_room PROTO((ISPC s, IGEN g, iptr n, ptr old)); -extern void S_record_new_dirty_card PROTO((ptr *ppp, IGEN to_g)); +extern void S_record_new_dirty_card PROTO((ptr tc, ptr *ppp, IGEN to_g)); extern ptr S_find_more_thread_room PROTO((ptr tc, IGEN g, ISPC s, iptr n, ptr old)); extern void S_close_off_thread_local_segment PROTO((ptr tc, ISPC s, IGEN g)); extern void S_dirty_set PROTO((ptr *loc, ptr x)); @@ -77,13 +77,12 @@ extern void S_get_more_room PROTO((void)); extern ptr S_get_more_room_help PROTO((ptr tc, uptr ap, uptr type, uptr size)); extern ptr S_list_bits_ref PROTO((ptr p)); extern void S_list_bits_set PROTO((ptr p, iptr bits)); -extern ptr S_cons_in PROTO((ISPC s, IGEN g, ptr car, ptr cdr)); -extern ptr S_cons_in_global PROTO((ISPC s, IGEN g, ptr car, ptr cdr)); +extern ptr S_cons_in PROTO((ptr tc, ISPC s, IGEN g, ptr car, ptr cdr)); extern ptr S_ephemeron_cons_in PROTO((IGEN g, ptr car, ptr cdr)); extern ptr S_symbol PROTO((ptr name)); extern ptr S_rational PROTO((ptr n, ptr d)); extern ptr S_tlc PROTO((ptr keyval, ptr tconc, ptr next)); -extern ptr S_vector_in PROTO((ISPC s, IGEN g, iptr n)); +extern ptr S_vector_in PROTO((ptr tc, ISPC s, IGEN g, iptr n)); extern ptr S_vector PROTO((iptr n)); extern ptr S_fxvector PROTO((iptr n)); extern ptr S_bytevector PROTO((iptr n)); @@ -180,6 +179,9 @@ extern void S_check_heap PROTO((IBOOL aftergc, IGEN target_gen)); /* gc-011.c */ extern void S_gc_011 PROTO((ptr tc)); +/* gc-par.c */ +extern ptr S_gc_par PROTO((ptr tc, IGEN max_cg, IGEN min_tg, IGEN max_tg, ptr count_roots)); + /* gc-ocd.c */ extern ptr S_gc_ocd PROTO((ptr tc, IGEN max_cg, IGEN min_tg, IGEN max_tg, ptr count_roots)); @@ -380,7 +382,7 @@ extern INT matherr PROTO((struct exception *x)); extern void S_segment_init PROTO((void)); extern void *S_getmem PROTO((iptr bytes, IBOOL zerofill)); extern void S_freemem PROTO((void *addr, iptr bytes)); -extern iptr S_find_segments PROTO((ISPC s, IGEN g, iptr n)); +extern iptr S_find_segments PROTO((ptr tc, ISPC s, IGEN g, iptr n)); extern void S_free_chunk PROTO((chunkinfo *chunk)); extern void S_free_chunks PROTO((void)); extern uptr S_curmembytes PROTO((void)); diff --git a/racket/src/ChezScheme/c/fasl.c b/racket/src/ChezScheme/c/fasl.c index 61da3ae21c..6f157bc699 100644 --- a/racket/src/ChezScheme/c/fasl.c +++ b/racket/src/ChezScheme/c/fasl.c @@ -809,7 +809,7 @@ static void faslin(ptr tc, ptr *x, ptr t, ptr *pstrbuf, faslFile f) { faslin(tc, &rtd_uid, t, pstrbuf, f); - tc_mutex_acquire() + tc_mutex_acquire(); /* look for rtd on uid's property list */ plist = SYMSPLIST(rtd_uid); @@ -824,7 +824,7 @@ static void faslin(ptr tc, ptr *x, ptr t, ptr *pstrbuf, faslFile f) { if (!rtd_equiv(tmp, rtd)) S_error2("", "incompatible record type ~s in ~a", RECORDDESCNAME(tmp), f->uf->path); } - tc_mutex_release() + tc_mutex_release(); return; } } @@ -838,7 +838,7 @@ static void faslin(ptr tc, ptr *x, ptr t, ptr *pstrbuf, faslFile f) { /* register rtd on uid's property list */ SETSYMSPLIST(rtd_uid, Scons(S_G.rtd_key, Scons(rtd, plist))); - tc_mutex_release() + tc_mutex_release(); return; } @@ -879,7 +879,7 @@ static void faslin(ptr tc, ptr *x, ptr t, ptr *pstrbuf, faslFile f) { keyval = Scons(FIX(0), FIX(0)); break; case eq_hashtable_subtype_weak: - keyval = S_cons_in(space_weakpair, 0, FIX(0), FIX(0)); + keyval = S_cons_in(tc, space_weakpair, 0, FIX(0), FIX(0)); break; case eq_hashtable_subtype_ephemeron: default: @@ -1001,7 +1001,7 @@ static void faslin(ptr tc, ptr *x, ptr t, ptr *pstrbuf, faslFile f) { return; } case fasl_type_weak_pair: - *x = S_cons_in(space_weakpair, 0, FIX(0), FIX(0)); + *x = S_cons_in(tc, space_weakpair, 0, FIX(0), FIX(0)); faslin(tc, &INITCAR(*x), t, pstrbuf, f); faslin(tc, &INITCDR(*x), t, pstrbuf, f); return; diff --git a/racket/src/ChezScheme/c/flushcache.c b/racket/src/ChezScheme/c/flushcache.c index 63a7ea5222..d273363087 100644 --- a/racket/src/ChezScheme/c/flushcache.c +++ b/racket/src/ChezScheme/c/flushcache.c @@ -59,7 +59,7 @@ void S_record_code_mod(ptr tc, uptr addr, uptr bytes) { #ifdef DEBUG printf(" record_code_mod new range %x to %x\n", addr, end); fflush(stdout); #endif - CODERANGESTOFLUSH(tc) = S_cons_in(space_new, 0, make_mod_range(addr, end), ls); + CODERANGESTOFLUSH(tc) = S_cons_in(tc, space_new, 0, make_mod_range(addr, end), ls); return; } diff --git a/racket/src/ChezScheme/c/foreign.c b/racket/src/ChezScheme/c/foreign.c index 590f92427e..318b2c7be6 100644 --- a/racket/src/ChezScheme/c/foreign.c +++ b/racket/src/ChezScheme/c/foreign.c @@ -141,7 +141,7 @@ static ptr lookup(s) const char *s; { x = lookup_static(s); if (x == addr_to_ptr(0)) return x; - tc_mutex_acquire() + tc_mutex_acquire(); b = ptrhash(x); for (p = Svector_ref(S_G.foreign_names, b); p != Snil; p = Scdr(p)) { @@ -154,14 +154,14 @@ static ptr lookup(s) const char *s; { Svector_ref(S_G.foreign_names, b))); quit: - tc_mutex_release() + tc_mutex_release(); return x; } void Sforeign_symbol(s, v) const char *s; void *v; { iptr b; ptr x; - tc_mutex_acquire() + tc_mutex_acquire(); #ifdef HPUX v = proc2entry(v,name); @@ -174,7 +174,7 @@ void Sforeign_symbol(s, v) const char *s; void *v; { } else if (ptr_to_addr(x) != v) S_error1("Sforeign_symbol", "duplicate symbol entry for ~s", Sstring_utf8(s, -1)); - tc_mutex_release() + tc_mutex_release(); } /* like Sforeign_symbol except it silently redefines the symbol @@ -182,7 +182,7 @@ void Sforeign_symbol(s, v) const char *s; void *v; { void Sregister_symbol(s, v) const char* s; void *v; { iptr b; ptr p; - tc_mutex_acquire() + tc_mutex_acquire(); b = symhash(s); for (p = Svector_ref(S_G.foreign_static, b); p != Snil; p = Scdr(p)) @@ -194,14 +194,14 @@ void Sregister_symbol(s, v) const char* s; void *v; { Svector_ref(S_G.foreign_static, b))); quit: - tc_mutex_release() + tc_mutex_release(); } static ptr remove_foreign_entry(s) const char *s; { iptr b; ptr tbl, p1, p2; - tc_mutex_acquire() + tc_mutex_acquire(); b = symhash(s); tbl = S_G.foreign_static; @@ -214,11 +214,11 @@ static ptr remove_foreign_entry(s) const char *s; { } else { SETCDR(p1, Scdr(p2)) } - tc_mutex_release() + tc_mutex_release(); return Strue; } } - tc_mutex_release() + tc_mutex_release(); return Sfalse; } @@ -226,7 +226,7 @@ static ptr remove_foreign_entry(s) const char *s; { static void load_shared_object(path) const char *path; { void *handle; - tc_mutex_acquire() + tc_mutex_acquire(); handle = dlopen(path, RTLD_NOW); if (handle == (void *)NULL) @@ -234,7 +234,7 @@ static void load_shared_object(path) const char *path; { Sstring_utf8(dlerror(), -1)); S_foreign_dynamic = Scons(addr_to_ptr(handle), S_foreign_dynamic); - tc_mutex_release() + tc_mutex_release(); return; } diff --git a/racket/src/ChezScheme/c/gc-par.c b/racket/src/ChezScheme/c/gc-par.c new file mode 100644 index 0000000000..7c427428ba --- /dev/null +++ b/racket/src/ChezScheme/c/gc-par.c @@ -0,0 +1,14 @@ +/* gc-par.c + */ + +#define GCENTRY S_gc_par_entry +#define ENABLE_PARALLEL +#include "gc.c" + +ptr S_gc_par(ptr tc, IGEN max_cg, IGEN min_tg, IGEN max_tg, ptr count_roots) { + MAX_CG = max_cg; + MIN_TG = min_tg; + MAX_TG = max_tg; + + return S_gc_par_entry(tc, count_roots); +} diff --git a/racket/src/ChezScheme/c/gc.c b/racket/src/ChezScheme/c/gc.c index f7b1dd2581..8b12da9a93 100644 --- a/racket/src/ChezScheme/c/gc.c +++ b/racket/src/ChezScheme/c/gc.c @@ -120,6 +120,53 @@ to be reachable (i.e., copied or marked), the guardian/ephemeron is put into a list of things to check again. + Parallel Collection + ------------------- + + Parallel mode runs `sweep_generation` concurrently in multiple + threads. It relies on a number of invariants: + + * There are no attempts to take tc_mutex suring sweeping. To the + degree that locking is needed (e.g., to allocate new segments), + `S_use_gc_tc_mutex` redirects to gc_tc_mutex. No other locks + can be taken while that one is held. + + * To copy from or mark on a segment, a segment-specific lock must + be taken. + + The lock must be taken before checking anything about objects on + the page, including whether the object starts with a forwarding + pointer. If a lock acquisition fails, everything must be + retryable as the level of the object or segment sweep. For a + segment sweep, objects may end up being swept multiple times. + + The lock is re-entrant, but re-locking information is held + outside the locak in a local variable, instead of being part of + the lock state. (That's why an ENABLE_LOCK_ACQUIRE declaration + is required in functions that take locks.) + + * Lock acquisition must be failable everywhere, with one + exception: when an object spans multiple segments, then `mark` + may need to set mark bits on multiple segments. In that case, it + can wait on locks for the extra pages, because there's an order + for the lock-taking: the first segment's lock followed by each + later segment. + + * A segment in the target generation is exposed to the pool of + collecting threads only after a copy to the target segment is + complete. That's a consequence of keeping segments to sweep in a + thread-specific list. + + * The segment-table lock is required only for writing. When a + thread allocates a new segment, that segment becomes relevant + only to other threads at the point where an object in the new + segment is exposed to the other threads. So, for example, the + fence associated with taking a segment lock doubles to ensure + that a write has exposed the object. + + Currently, counting and backreference modes do not support + parallelism. + */ @@ -170,7 +217,7 @@ static uptr list_length PROTO((ptr ls)); static uptr target_generation_space_so_far(ptr tc); #ifdef ENABLE_MEASURE -static void init_measure(IGEN min_gen, IGEN max_gen); +static void init_measure(ptr tc, IGEN min_gen, IGEN max_gen); static void finish_measure(); static void measure(ptr tc_in, ptr p); static IBOOL flush_measure_stack(ptr tc_in); @@ -193,7 +240,6 @@ static void check_pending_measure_ephemerons(ptr tc_in); /* #define DEBUG */ /* initialized and used each gc cycle. any others should be defined in globals.h */ -static IBOOL change; static ptr tlcs_to_rehash; static ptr conts_to_promote; static ptr recheck_guardians_ls; @@ -252,8 +298,8 @@ static ptr sweep_from; # define ADD_BACKREFERENCE_FROM(p, from_p, tg) do { \ IGEN TG = tg; \ if ((S_G.enable_object_backreferences) && (TG < static_generation)) \ - S_G.gcbackreference[TG] = S_cons_in(space_impure, TG, \ - S_cons_in(space_impure, TG, p, from_p), \ + S_G.gcbackreference[TG] = S_cons_in(tc_in, space_impure, TG, \ + S_cons_in(tc_in, space_impure, TG, p, from_p), \ S_G.gcbackreference[TG]); \ } while (0) # define ADD_BACKREFERENCE(p, tg) ADD_BACKREFERENCE_FROM(p, sweep_from, tg) @@ -267,6 +313,78 @@ static ptr sweep_from; # define ADD_BACKREFERENCE(p, from_g) #endif +#if !defined(PTHREADS) +# undef ENABLE_PARALLEL +#endif + +#ifdef ENABLE_PARALLEL + +# define ENABLE_LOCK_ACQUIRE int old_lock_state; +# define SEGMENT_LOCK_ACQUIRE(si) \ + ((si->lock == tc_in) \ + ? (old_lock_state = 0, 1) \ + : (old_lock_state = 1, AS_IMPLICIT_ATOMIC(int, S_cas_load_acquire_ptr(&si->lock, (ptr)0, tc_in)))) +# define SEGMENT_LOCK_RELEASE(si) do { \ + if (old_lock_state) { \ + S_store_release(); \ + BEGIN_IMPLICIT_ATOMIC(); \ + si->lock = (ptr)0; \ + END_IMPLICIT_ATOMIC(); \ + } \ + } while (0) +# define SEGMENT_LOCK_MUST_ACQUIRE(si) do { } while (!SEGMENT_LOCK_ACQUIRE(si)) +# define RECORD_LOCK_FAILED(tc, si) LOCKSTATUS(tc) = Sfalse +# define CLEAR_LOCK_FAILED(tc) LOCKSTATUS(tc) = Strue +# define CHECK_LOCK_FAILED(tc) (LOCKSTATUS(tc) == Sfalse) +# define SAVE_SWEEP_RANGE_FOR_LATER(tc, s, g, slp, sl, nl) save_sweep_range_for_later(tc, s, g, slp, sl, nl) +# define SAVE_SWEEP_SEGMENT_FOR_LATER(tc, si) save_sweep_segment_for_later(tc, si) +# define LOCK_CAS_LOAD_ACQUIRE(a, old, new) S_cas_load_acquire_ptr(a, old, new) +# define GC_TC_MUTEX_ACQUIRE() gc_tc_mutex_acquire() +# define GC_TC_MUTEX_RELEASE() gc_tc_mutex_release() + +static void gather_active_sweepers(); +static IBOOL sweeper_started(int i); +static void parallel_sweep_generation(ptr tc); +static void save_sweep_range_for_later(ptr tc_in, ISPC s, IGEN g, ptr *slp, ptr *sl, ptr *nl); +static void save_sweep_segment_for_later(ptr tc_in, seginfo *si); +static int gate_postponed(ptr tc, int status); + +#define SWEEPER_NONE 0 +#define SWEEPER_READY 1 +#define SWEEPER_SWEEPING 2 + +typedef struct { + int status; + s_thread_cond_t sweep_cond; + s_thread_cond_t done_cond; + ptr sweep_tc; + ptr thread; /* not 0 => thread to sweep on start */ +} gc_thread_data; + +static gc_thread_data sweepers[maximum_parallel_collect_threads]; +static int num_sweepers; + +#else +# define ENABLE_LOCK_ACQUIRE /* empty */ +# define SEGMENT_LOCK_ACQUIRE(si) 1 +# define SEGMENT_LOCK_MUST_ACQUIRE(si) do { } while (0) +# define SEGMENT_LOCK_RELEASE(si) do { } while (0) +# define RECORD_LOCK_FAILED(tc, si) do { } while (0) +# define CLEAR_LOCK_FAILED(tc) do { } while (0) +# define CHECK_LOCK_FAILED(tc) 0 +# define SAVE_SWEEP_RANGE_FOR_LATER(tc, s, g, slp, sl, nl) do { } while (0) +# define SAVE_SWEEP_SEGMENT_FOR_LATER(tc, si) do { } while (0) +# define LOCK_CAS_LOAD_ACQUIRE(a, old, new) (*(a) = new, 1) +# define GC_TC_MUTEX_ACQUIRE() do { } while (0) +# define GC_TC_MUTEX_RELEASE() do { } while (0) +# define gather_active_sweepers() do { } while (0) +# define parallel_sweep_generation(tc) sweep_generation(tc) +#endif + +#define SWEEP_NO_CHANGE 0 +#define SWEEP_CHANGE_PROGRESS 1 +#define SWEEP_CHANGE_POSTPONED 2 + #if ptr_alignment == 2 # define record_full_marked_mask 0x55 # define record_high_marked_bit 0x40 @@ -296,7 +414,7 @@ uptr list_length(ptr ls) { #endif #define init_mask(tc, dest, tg, init) { \ - thread_find_room_g_voidp(tc, space_data, tg, ptr_align(segment_bitmap_bytes), dest); \ + find_room_voidp(tc, space_data, tg, ptr_align(segment_bitmap_bytes), dest); \ memset(dest, init, segment_bitmap_bytes); \ S_G.bitmask_overhead[tg] += ptr_align(segment_bitmap_bytes); \ } @@ -312,7 +430,11 @@ uptr list_length(ptr ls) { #endif static void init_fully_marked_mask(ptr tc_in, IGEN g) { - init_mask(tc_in, fully_marked_mask[g], g, 0xFF); + GC_TC_MUTEX_ACQUIRE(); + if (!fully_marked_mask[g]) { + init_mask(tc_in, fully_marked_mask[g], g, 0xFF); + } + GC_TC_MUTEX_RELEASE(); } #ifdef PRESERVE_FLONUM_EQ @@ -364,20 +486,28 @@ static int flonum_is_forwarded_p(ptr p, seginfo *si) { } \ } while (0) -#define relocate_pure_help_help(ppp, pp, si) do { \ - if (FORWARDEDP(pp, si)) \ - *ppp = GET_FWDADDRESS(pp); \ - else if (!new_marked(si, pp)) \ - mark_or_copy_pure(ppp, pp, si); \ +#define relocate_pure_help_help(ppp, pp, si) do { \ + if (SEGMENT_LOCK_ACQUIRE(si)) { \ + if (FORWARDEDP(pp, si)) \ + *ppp = GET_FWDADDRESS(pp); \ + else if (!new_marked(si, pp)) \ + mark_or_copy_pure(ppp, pp, si); \ + SEGMENT_LOCK_RELEASE(si); \ + } else \ + RECORD_LOCK_FAILED(tc_in, si); \ } while (0) -#define relocate_code(pp, si) do { \ - if (FWDMARKER(pp) == forward_marker) \ - pp = GET_FWDADDRESS(pp); \ - else if (si->old_space) { \ - if (!new_marked(si, pp)) \ - mark_or_copy_pure(&pp, pp, si); \ - } ELSE_MEASURE_NONOLDSPACE(pp) \ +#define relocate_code(pp, si) do { \ + if (si->old_space) { \ + if (SEGMENT_LOCK_ACQUIRE(si)) { \ + if (FWDMARKER(pp) == forward_marker) \ + pp = GET_FWDADDRESS(pp); \ + else if (!new_marked(si, pp)) \ + mark_or_copy_pure(&pp, pp, si); \ + SEGMENT_LOCK_RELEASE(si); \ + } else \ + RECORD_LOCK_FAILED(tc_in, si); \ + } ELSE_MEASURE_NONOLDSPACE(pp) \ } while (0) #define mark_or_copy_pure(dest, p, si) do { \ @@ -413,14 +543,18 @@ static int flonum_is_forwarded_p(ptr p, seginfo *si) { #define relocate_impure_help_help(ppp, pp, from_g, si) do { \ IGEN __to_g; \ - if (FORWARDEDP(pp, si)) { \ - *ppp = GET_FWDADDRESS(pp); \ - __to_g = TARGET_GENERATION(si); \ - if (__to_g < from_g) S_record_new_dirty_card(ppp, __to_g); \ - } else if (!new_marked(si, pp)) { \ - mark_or_copy_impure(__to_g, ppp, pp, from_g, si); \ - if (__to_g < from_g) S_record_new_dirty_card(ppp, __to_g); \ - } \ + if (SEGMENT_LOCK_ACQUIRE(si)) { \ + if (FORWARDEDP(pp, si)) { \ + *ppp = GET_FWDADDRESS(pp); \ + __to_g = TARGET_GENERATION(si); \ + if (__to_g < from_g) S_record_new_dirty_card(tc_in, ppp, __to_g); \ + } else if (!new_marked(si, pp)) { \ + mark_or_copy_impure(__to_g, ppp, pp, from_g, si); \ + if (__to_g < from_g) S_record_new_dirty_card(tc_in, ppp, __to_g); \ + } \ + SEGMENT_LOCK_RELEASE(si); \ + } else \ + RECORD_LOCK_FAILED(tc_in, si); \ } while (0) #define mark_or_copy_impure(to_g, dest, p, from_g, si) do { \ @@ -443,9 +577,9 @@ static int flonum_is_forwarded_p(ptr p, seginfo *si) { } else if (new_marked(_si, _pp)) { \ _pg = TARGET_GENERATION(_si); \ } else if (CAN_MARK_AND(_si->use_marks)) { \ - _pg = mark_object(tc_in, _pp, _si); \ + _pg = mark_object_now(tc_in, _pp, _si); \ } else { \ - _pg = copy(tc_in, _pp, _si, _ppp); \ + _pg = copy_now(tc_in, _pp, _si, _ppp); \ } \ if (_pg < YOUNGEST) YOUNGEST = _pg; \ } \ @@ -456,10 +590,82 @@ static int flonum_is_forwarded_p(ptr p, seginfo *si) { #endif static void do_relocate_indirect(ptr tc_in, ptr p) { + ENABLE_LOCK_ACQUIRE relocate_pure(&p); } #define relocate_indirect(p) do_relocate_indirect(tc_in, p) +#ifdef ENABLE_PARALLEL + +/* The `_now` variants of various functions/macros handle the possibly + of a lock failure by retrying immediately. A lock failure really + shouldn't happend where the `_now` forms are used, but because + locking may be implemented with a CAS that can fail spuriously on + processors like Arm, the lock can fail, anyway. */ + +static IGEN mark_object_now(ptr tc_in, ptr pp, seginfo *si) { + IGEN g; + do { + CLEAR_LOCK_FAILED(tc_in); + g = mark_object(tc_in, pp, si); + } while (CHECK_LOCK_FAILED(tc_in)); + return g; +} + +static IGEN copy_now(ptr tc_in, ptr pp, seginfo *si, ptr *ppp) { + IGEN g; + do { + CLEAR_LOCK_FAILED(tc_in); + g = copy(tc_in, pp, si, ppp); + } while (CHECK_LOCK_FAILED(tc_in)); + return g; +} + +static void do_relocate_pure_now(ptr tc_in, ptr *pp) { + ENABLE_LOCK_ACQUIRE + relocate_pure(pp); + while (CHECK_LOCK_FAILED(tc_in)) { + CLEAR_LOCK_FAILED(tc_in); + relocate_pure(pp); + } +} + +static void do_relocate_impure_now(ptr tc_in, ptr *pp, IGEN g) { + ENABLE_LOCK_ACQUIRE + relocate_impure(pp, g); + while (CHECK_LOCK_FAILED(tc_in)) { + CLEAR_LOCK_FAILED(tc_in); + relocate_impure(pp, g); + } +} + +static void do_mark_or_copy_pure_now(ptr tc_in, ptr *dest, ptr pp, seginfo *si) { + do { + CLEAR_LOCK_FAILED(tc_in); + mark_or_copy_pure(dest, pp, si); + } while (CHECK_LOCK_FAILED(tc_in)); +} + +# define relocate_pure_now(pp) do_relocate_pure_now(tc_in, pp) +# define relocate_impure_now(pp, g) do_relocate_impure_now(tc_in, pp, g) +# define mark_or_copy_pure_now(dest, pp, si) do_mark_or_copy_pure_now(tc, dest, pp, si) + +static void sweep_thread_now(ptr tc_in, ptr p) { + do { + CLEAR_LOCK_FAILED(tc_in); + sweep_thread(tc_in, p); + } while (CHECK_LOCK_FAILED(tc_in)); +} + +#else +# define mark_object_now(tc, pp, si) mark_object(tc, pp, si) +# define copy_now(tc, pp, si, ppp) copy(tc, pp, si, ppp) +# define relocate_pure_now(pp) relocate_pure(pp) +# define relocate_impure_now(pp, g) relocate_impure(pp, g) +# define mark_or_copy_pure_now(tc, pp, si) mark_or_copy_pure(tc, pp, si) +# define sweep_thread_now(tc, thread) sweep_thread(tc, thread) +#endif + FORCEINLINE void check_triggers(seginfo *si) { /* Registering ephemerons and guardians to recheck at the granularity of a segment means that the worst-case complexity of @@ -498,7 +704,7 @@ static void sweep_in_old(ptr tc_in, ptr p) { /* Detect all the cases when we need to give up on in-place sweeping: */ if (object_directly_refers_to_self(p)) { - relocate_pure(&p); + relocate_pure_now(&p); return; } @@ -557,7 +763,7 @@ static ptr copy_stack(ptr tc_in, ptr old, iptr *length, iptr clength) { if (n == 0) { return (ptr)0; } else { - thread_find_room_g(tc_in, space_data, newg, typemod, n, new); + find_room(tc_in, space_data, newg, typemod, n, new); n = ptr_align(clength); /* warning: stack may have been left non-double-aligned by split_and_resize */ memcpy_aligned(TO_VOIDP(new), TO_VOIDP(old), n); @@ -633,11 +839,24 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { #endif /* !NO_DIRTY_NEWSPACE_POINTERS */ S_G.must_mark_gen0 = 0; + /* map `tc`s of rendezvous threads to sweeping threads */ + gather_active_sweepers(); + for (ls = S_threads; ls != Snil; ls = Scdr(ls)) { ptr t_tc = (ptr)THREADTC(Scar(ls)); S_scan_dirty(TO_VOIDP(EAP(t_tc)), TO_VOIDP(REAL_EAP(t_tc))); EAP(t_tc) = REAL_EAP(t_tc) = AP(t_tc) = (ptr)0; +#ifdef ENABLE_PARALLEL + if (SWEEPER(t_tc) != -1) { + if ((SWEEPER(t_tc) >= num_sweepers) + || (sweepers[SWEEPER(t_tc)].sweep_tc != t_tc)) + SWEEPER(t_tc) = -1; + } +#else + SWEEPER(t_tc) = -1; +#endif + /* clear thread-local allocation: */ for (g = 0; g <= MAX_CG; g++) { for (s = 0; s <= max_real_space; s++) { @@ -650,7 +869,7 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { } } - if (t_tc != tc) { + if ((t_tc != tc) && (SWEEPER(t_tc) == -1)) { /* close off any current allocation in MAX_TG, and ensure that end-of-segment markers are otherwise set (in case that's needed for dirty-byte sweeping) */ @@ -664,8 +883,16 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { } } } else { - for (s = 0; s <= max_real_space; s++) - SWEEPLOC_AT(t_tc, s, MAX_TG) = BASELOC_AT(t_tc, s, MAX_TG); + /* set up context for sweeping --- effectively remembering the current + allocation state so anything new is recognized as needing sweeping */ + SWEEPSTACKSTART(t_tc) = SWEEPSTACK(t_tc) = SWEEPSTACKLIMIT(t_tc) = (ptr)0; + for (s = 0; s <= max_real_space; s++) { + SWEEPLOC_AT(t_tc, s, MAX_TG) = NEXTLOC_AT(t_tc, s, MAX_TG); + for (g = MIN_TG; g <= MAX_TG; g++) + SWEEPNEXT_AT(t_tc, s, g) = (ptr)0; + } + /* for t_tc != tc, we add terminators to allocation pages just + before sweep_dirty() */ } } @@ -676,7 +903,6 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { (void)printf("max_cg = %x; go? ", MAX_CG); (void)fflush(stdout); (void)getc(stdin); #endif - SWEEPSTACKSTART(tc_in) = SWEEPSTACK(tc_in) = SWEEPSTACKLIMIT(tc_in) = (ptr)0; resweep_weak_segments = NULL; for (g = MIN_TG; g <= MAX_TG; g++) fully_marked_mask[g] = NULL; @@ -684,10 +910,6 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { for (g = 0; g <= MAX_CG; g++) { S_G.bytes_of_generation[g] = 0; for (s = 0; s <= max_real_space; s++) { - S_G.base_loc[g][s] = FIX(0); - S_G.to_sweep[g][s] = NULL; - S_G.next_loc[g][s] = FIX(0); - S_G.bytes_left[g][s] = 0; S_G.bytes_of_space[g][s] = 0; S_G.bitmask_overhead[g] = 0; } @@ -703,16 +925,6 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { pre_phantom_bytes += S_G.bytesof[g][countof_phantom]; } - /* set up target generation sweep_loc pointers */ - for (g = MIN_TG; g <= MAX_TG; g += 1) { - for (s = 0; s <= max_real_space; s++) { - /* for all but max_tg (and max_tg as well, if max_tg == max_cg), this - will set sweep_loc to 0 */ - S_G.sweep_loc[g][s] = S_G.next_loc[g][s]; - S_G.to_sweep[g][s] = NULL; - } - } - /* mark segments from which objects are to be copied or marked */ oldspacesegments = oldweakspacesegments = (seginfo *)NULL; for (g = 0; g <= MAX_CG; g += 1) { @@ -809,7 +1021,7 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { iptr i; count_roots_len = list_length(count_roots_ls); - find_room_voidp(space_data, 0, ptr_align(count_roots_len*sizeof(count_root_t)), count_roots); + find_room_voidp(tc, space_data, 0, ptr_align(count_roots_len*sizeof(count_root_t)), count_roots); for (ls = count_roots_ls, i = 0; ls != Snil; ls = Scdr(ls), i++) { ptr p = Scar(ls); @@ -843,7 +1055,7 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { iptr i; # ifdef ENABLE_MEASURE - init_measure(MAX_TG+1, static_generation); + init_measure(tc, MAX_TG+1, static_generation); # endif for (i = 0; i < count_roots_len; i++) { @@ -859,7 +1071,7 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { if (!si->old_space || FORWARDEDP(p, si) || marked(si, p) || !count_roots[i].weak) { /* reached or older; sweep transitively */ - relocate_pure(&p); + relocate_pure_now(&p); sweep(tc, p, TARGET_GENERATION(si)); ADD_BACKREFERENCE(p, si->generation); sweep_generation(tc); @@ -877,7 +1089,7 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { } total = total_size_so_far(); - p = S_cons_in(space_new, 0, FIX(total-prev_total), Snil); + p = S_cons_in(tc, space_new, 0, FIX(total-prev_total), Snil); if (prev != 0) Scdr(prev) = p; else @@ -901,15 +1113,6 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { } #endif - /* sweep older locked and unlocked objects that are on `space_new` segments, - because we can't find dirty writes there */ - for (g = MAX_CG + 1; g <= static_generation; INCRGEN(g)) { - for (ls = S_G.locked_objects[g]; ls != Snil; ls = Scdr(ls)) - sweep_dirty_object_if_space_new(tc, Scar(ls)); - for (ls = S_G.unlocked_objects[g]; ls != Snil; ls = Scdr(ls)) - sweep_dirty_object_if_space_new(tc, Scar(ls)); - } - /* Gather and mark all younger locked objects. Any object on a `space_new` segment is already marked, but still needs to be swept. */ @@ -933,7 +1136,7 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { mark_object(tc, p, si); } /* non-`space_new` objects will be swept via new pair */ - locked_objects = S_cons_in(space_impure, tg, p, locked_objects); + locked_objects = S_cons_in(tc, space_impure, tg, p, locked_objects); #ifdef ENABLE_OBJECT_COUNTS S_G.countof[tg][countof_pair] += 1; S_G.countof[tg][countof_locked] += 1; @@ -944,17 +1147,39 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { } } - /* sweep non-oldspace threads, since any thread may have an active stack */ + /* for each thread with a sweeper, sweep in that thread's context to + make sure the sweeper will perform that thread's work; otherwise, + sweep non-oldspace threads, since any thread may have an active + stack */ for (ls = S_threads; ls != Snil; ls = Scdr(ls)) { ptr thread; +#ifdef ENABLE_PARALLEL + ptr t_tc; +#endif /* someone may have their paws on the list */ if (FWDMARKER(ls) == forward_marker) ls = FWDADDRESS(ls); thread = Scar(ls); - if (!OLDSPACE(thread)) sweep_thread(tc, thread); + +#ifdef ENABLE_PARALLEL + t_tc = (ptr)THREADTC(Scar(ls)); + if (SWEEPER(t_tc) != -1) { + if (!OLDSPACE(thread)) { + /* sweep in sweeper thread: */ + sweepers[SWEEPER(t_tc)].thread = thread; + } else { + /* relocate now, so main sweeping will happen in + sweeper thread */ + ptr tc_in = t_tc; /* shadows enclosing `tc_in` binding */ + relocate_pure_now(&thread); + } + } else +#endif + if (!OLDSPACE(thread)) + sweep_thread_now(tc, thread); } - relocate_pure(&S_threads); + relocate_pure_now(&S_threads); /* relocate nonempty oldspace symbols and set up list of buckets to rebuild later */ buckets_to_rebuild = NULL; @@ -983,7 +1208,7 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { (SYMVAL(sym) != sunbound || SYMPLIST(sym) != Snil || SYMSPLIST(sym) != Snil)) { seginfo *sym_si = SegInfo(ptr_get_segment(sym)); if (!new_marked(sym_si, sym)) - mark_or_copy_pure(&sym, sym, sym_si); + mark_or_copy_pure_now(&sym, sym, sym_si); } } S_G.buckets_of_generation[g] = NULL; @@ -992,13 +1217,39 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { /* relocate the protected C pointers */ {uptr i; for (i = 0; i < S_G.protect_next; i++) - relocate_pure(S_G.protected[i]); + relocate_pure_now(S_G.protected[i]); + } + +#ifdef ENABLE_PARALLEL + /* make sure threads with sweepers have terminated older-generation + pages before sweeping dirty objects */ + { int i; + for (i = 0; i < num_sweepers; i++) { + ptr t_tc = sweepers[i].sweep_tc; + for (s = 0; s <= max_real_space; s++) { + for (g = MAX_TG; g <= static_generation; g++) { + ptr old = NEXTLOC_AT(t_tc, s, g); + if (old != (ptr)0) + *(ptr*)TO_VOIDP(old) = forward_marker; + } + } + } + } +#endif + + /* sweep older locked and unlocked objects that are on `space_new` segments, + because we can't find dirty writes there */ + for (g = MAX_CG + 1; g <= static_generation; INCRGEN(g)) { + for (ls = S_G.locked_objects[g]; ls != Snil; ls = Scdr(ls)) + sweep_dirty_object_if_space_new(tc, Scar(ls)); + for (ls = S_G.unlocked_objects[g]; ls != Snil; ls = Scdr(ls)) + sweep_dirty_object_if_space_new(tc, Scar(ls)); } /* sweep areas marked dirty by assignments into older generations */ sweep_dirty(tc); - sweep_generation(tc); + parallel_sweep_generation(tc); /* since we will later resweep dirty weak pairs, make sure sweep_generation ends with a terminator in place for space_weakpair, at least in all threads other than this one that may have allocated there during sweep_generation */ @@ -1101,10 +1352,10 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { /* if tconc was old it's been forwarded */ tconc = GUARDIANTCONC(ls); - WITH_TOP_BACKREFERENCE(tconc, relocate_pure(&rep)); + WITH_TOP_BACKREFERENCE(tconc, relocate_pure_now(&rep)); old_end = Scdr(tconc); - new_end = S_cons_in(space_impure, 0, FIX(0), FIX(0)); + new_end = S_cons_in(tc, space_impure, 0, FIX(0), FIX(0)); #ifdef ENABLE_OBJECT_COUNTS S_G.countof[0][countof_pair] += 1; #endif /* ENABLE_OBJECT_COUNTS */ @@ -1149,7 +1400,7 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { } rep = GUARDIANREP(ls); - WITH_TOP_BACKREFERENCE(tconc, relocate_pure(&rep)); + WITH_TOP_BACKREFERENCE(tconc, relocate_pure_now(&rep)); relocate_rep = 1; #ifdef ENABLE_OBJECT_COUNTS @@ -1159,7 +1410,7 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { /* In backreference mode, we rely on sweep of the guardian entry not registering any backreferences. Otherwise, bogus pair pointers would get created. */ - find_room(space_pure, g, typemod, size_guardian_entry, p); + find_room(tc, space_pure, g, typemod, size_guardian_entry, p); INITGUARDIANOBJ(p) = GUARDIANOBJ(ls); INITGUARDIANREP(p) = rep; INITGUARDIANTCONC(p) = tconc; @@ -1261,7 +1512,7 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { si = SegInfo(ptr_get_segment(sym)); if (new_marked(si, sym) || (FWDMARKER(sym) == forward_marker && ((sym = FWDADDRESS(sym)) || 1))) { IGEN g = si->generation; - find_room_voidp(space_data, g, ptr_align(sizeof(bucket)), b); + find_room_voidp(tc, space_data, g, ptr_align(sizeof(bucket)), b); #ifdef ENABLE_OBJECT_COUNTS S_G.countof[g][countof_oblist] += 1; S_G.bytesof[g][countof_oblist] += sizeof(bucket); @@ -1270,7 +1521,7 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { *pb = b; pb = &b->next; if (g != static_generation) { - find_room_voidp(space_data, g, ptr_align(sizeof(bucket_list)), bl); + find_room_voidp(tc, space_data, g, ptr_align(sizeof(bucket_list)), bl); #ifdef ENABLE_OBJECT_COUNTS S_G.countof[g][countof_oblist] += 1; S_G.bytesof[g][countof_oblist] += sizeof(bucket_list); @@ -1297,14 +1548,14 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { si = SegInfo(ptr_get_segment(p)); if (!si->old_space || new_marked(si, p)) { newg = TARGET_GENERATION(si); - S_G.rtds_with_counts[newg] = S_cons_in(space_impure, newg, p, S_G.rtds_with_counts[newg]); + S_G.rtds_with_counts[newg] = S_cons_in(tc, space_impure, newg, p, S_G.rtds_with_counts[newg]); #ifdef ENABLE_OBJECT_COUNTS S_G.countof[newg][countof_pair] += 1; #endif } else if (FWDMARKER(p) == forward_marker) { p = FWDADDRESS(p); newg = GENERATION(p); - S_G.rtds_with_counts[newg] = S_cons_in(space_impure, newg, p, S_G.rtds_with_counts[newg]); + S_G.rtds_with_counts[newg] = S_cons_in(tc, space_impure, newg, p, S_G.rtds_with_counts[newg]); #ifdef ENABLE_OBJECT_COUNTS S_G.countof[newg][countof_pair] += 1; #endif @@ -1325,7 +1576,7 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { INT pid = UNFIX(Scar(ls)), status, retpid; retpid = waitpid(pid, &status, WNOHANG); if (retpid == 0 || (retpid == pid && !(WIFEXITED(status) || WIFSIGNALED(status)))) { - newls = S_cons_in(space_impure, newg, FIX(pid), newls); + newls = S_cons_in(tc, space_impure, newg, FIX(pid), newls); #ifdef ENABLE_OBJECT_COUNTS S_G.countof[newg][countof_pair] += 1; #endif /* ENABLE_OBJECT_COUNTS */ @@ -1415,7 +1666,7 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { ptr vec = PTRFIELD(ht,eq_hashtable_vec_disp); uptr veclen = Svector_length(vec); ptr key = Scar(TLCKEYVAL(tlc)); - + /* scan to end of bucket to find the index */ for (b = TLCNEXT(tlc); !Sfixnump(b); b = TLCNEXT(b)); old_idx = UNFIX(b); @@ -1473,54 +1724,124 @@ ptr GCENTRY(ptr tc_in, ptr count_roots_ls) { return Svoid; } -#define save_resweep(s, si) do { \ - if (s == space_weakpair) { \ - si->sweep_next = resweep_weak_segments; \ - resweep_weak_segments = si; \ - } \ - } while (0) +#define sweep_space(s, from_g, body) { \ + while ((si = (seginfo *)TO_VOIDP(SWEEPNEXT_AT(tc_in, s, from_g))) != NULL) { \ + SWEEPNEXT_AT(tc_in, s, from_g) = TO_PTR(si->sweep_next); \ + pp = TO_VOIDP(si->sweep_start); \ + while ((p = *pp) != forward_marker) \ + body \ + if (CHECK_LOCK_FAILED(tc_in)) { \ + SAVE_SWEEP_SEGMENT_FOR_LATER(tc_in, si); \ + break; \ + } else { \ + COUNT_SWEPT_BYTES(si->sweep_start, pp); \ + save_resweep(s, si); \ + } \ + } \ + slp = &SWEEPLOC_AT(tc_in, s, from_g); \ + nlp = &NEXTLOC_AT(tc_in, s, from_g); \ + sweep_space_range(s, from_g, body) \ + } #define sweep_space_range(s, from_g, body) { \ - while ((pp = TO_VOIDP(*slp)) != (nl = TO_VOIDP(*nlp))) { \ + while ((sl = TO_VOIDP(*slp)) != (nl = TO_VOIDP(*nlp))) { \ *slp = TO_PTR(nl); \ + pp = sl; \ while (pp != nl) { \ p = *pp; \ body \ } \ + if (CHECK_LOCK_FAILED(tc_in)) { \ + SAVE_SWEEP_RANGE_FOR_LATER(tc_in, s, from_g, slp, sl, nl); \ + break; \ + } else { \ + COUNT_SWEPT_BYTES(sl, nl); \ + } \ } \ } -#define sweep_space(s, from_g, body) { \ - while ((si = S_G.to_sweep[from_g][s]) != NULL) { \ - S_G.to_sweep[from_g][s] = si->sweep_next; \ - save_resweep(s, si); \ - pp = TO_VOIDP(si->sweep_start); \ - while ((p = *pp) != forward_marker) \ - body \ - } \ - slp = &S_G.sweep_loc[from_g][s]; \ - nlp = &S_G.next_loc[from_g][s]; \ - sweep_space_range(s, from_g, body) \ - slp = &SWEEPLOC_AT(tc_in, s, from_g); \ - nlp = &NEXTLOC_AT(tc_in, s, from_g); \ - sweep_space_range(s, from_g, body) \ - } +#define save_resweep(s, si) do { \ + if (s == space_weakpair) { \ + GC_TC_MUTEX_ACQUIRE(); \ + si->sweep_next = resweep_weak_segments; \ + resweep_weak_segments = si; \ + GC_TC_MUTEX_RELEASE(); \ + } \ + } while (0) +#if 1 +# define COUNT_SWEPT_BYTES(start, end) num_swept_bytes += ((uptr)TO_PTR(end) - (uptr)TO_PTR(start)) +#else +# define COUNT_SWEPT_BYTES(start, end) do { } while (0); +#endif + +#ifdef ENABLE_PARALLEL + +static void save_sweep_segment_for_later(ptr tc_in, seginfo *si) { + ISPC s = si->space; IGEN g = si->generation; + CLEAR_LOCK_FAILED(tc_in); + SWEEPCHANGE(tc_in) = SWEEP_CHANGE_POSTPONED; + si->sweep_next = TO_VOIDP(SWEEPNEXT_AT(tc_in, s, g)); + SWEEPNEXT_AT(tc_in, s, g) = TO_PTR(si); +} + +static void save_sweep_range_for_later(ptr tc_in, ISPC s, IGEN g, ptr *slp, ptr *sl, ptr *nl) { + CLEAR_LOCK_FAILED(tc_in); + SWEEPCHANGE(tc_in) = SWEEP_CHANGE_POSTPONED; + /* check whether this segment is still the thread-local allocation segment: */ + if (TO_VOIDP(*slp) == nl) { + *slp = sl; + } else { + /* need to set the sweep pointer in the segment, which must be one + of the ones queued to sweep */ + seginfo *si; + si = SWEEPNEXT_AT(tc_in, s, g); + while (1) { + if (si == NULL) S_error_abort("could not find segment for sweep range"); + if (TO_VOIDP(si->sweep_start) == nl) { + si->sweep_start = TO_PTR(sl); + return; + } + si = si->sweep_next; + } + } +} + +#endif + static void resweep_weak_pairs(ptr tc_in, seginfo *oldweakspacesegments) { IGEN from_g; - ptr *slp, *nlp; ptr *pp, p, *nl; + ptr *pp, p, *nl; seginfo *si; - + for (from_g = MIN_TG; from_g <= MAX_TG; from_g += 1) { /* By starting from `base_loc`, we may needlessly sweep pairs in `MAX_TG` that were allocated before the GC, but that's ok. */ - S_G.sweep_loc[from_g][space_weakpair] = S_G.base_loc[from_g][space_weakpair]; - SWEEPLOC_AT(tc_in, space_weakpair, from_g) = BASELOC_AT(tc_in, space_weakpair, from_g); - S_G.to_sweep[space_weakpair][from_g] = NULL; /* in case there was new allocation */ - sweep_space(space_weakpair, from_g, { - forward_or_bwp(pp, p); - pp += 2; - }) + pp = TO_VOIDP(BASELOC_AT(tc_in, space_weakpair, from_g)); + nl = TO_VOIDP(NEXTLOC_AT(tc_in, space_weakpair, from_g)); + while (pp != nl) { + p = *pp; + forward_or_bwp(pp, p); + pp += 2; + } + +#ifdef ENABLE_PARALLEL + /* For each tc used by a sweeper thread, we need to similarly + sweep from thread-local regions that are not closed off. */ + { + int i; + for (i = 0; i < num_sweepers; i++) { + ptr tc = sweepers[i].sweep_tc; + pp = TO_VOIDP(BASELOC_AT(tc, space_weakpair, from_g)); + nl = TO_VOIDP(NEXTLOC_AT(tc, space_weakpair, from_g)); + while (pp != nl) { + p = *pp; + forward_or_bwp(pp, p); + pp += 2; + } + } + } +#endif } for (si = resweep_weak_segments; si != NULL; si = si->sweep_next) { @@ -1570,12 +1891,14 @@ static void forward_or_bwp(pp, p) ptr *pp; ptr p; { } } -static void sweep_generation(ptr tc_in) { - ptr *slp, *nlp; ptr *pp, p, *nl; IGEN from_g; +static iptr sweep_generation_pass(ptr tc_in) { + ENABLE_LOCK_ACQUIRE + ptr *slp, *nlp; ptr *pp, p, *nl, *sl; IGEN from_g; seginfo *si; - + iptr num_swept_bytes = 0; + do { - change = 0; + SWEEPCHANGE(tc_in) = SWEEP_NO_CHANGE; sweep_from_stack(tc_in); @@ -1665,20 +1988,28 @@ static void sweep_generation(ptr tc_in) { /* don't sweep from space_count_pure or space_count_impure */ } + } while (SWEEPCHANGE(tc_in) == SWEEP_CHANGE_PROGRESS); + + return num_swept_bytes; +} + +static void sweep_generation(ptr tc_in) { + do { + sweep_generation_pass(tc_in); + /* Waiting until sweeping doesn't trigger a change reduces the chance that an ephemeron must be reigistered as a segment-specific trigger or gets triggered for recheck, but it doesn't change the worst-case complexity. */ - if (!change) - check_pending_ephemerons(tc_in); - } while (change); + check_pending_ephemerons(tc_in); + } while (SWEEPCHANGE(tc_in) != SWEEP_NO_CHANGE); } void enlarge_sweep_stack(ptr tc_in) { uptr sz = ((uptr)SWEEPSTACKLIMIT(tc_in) - (uptr)SWEEPSTACKSTART(tc_in)); uptr new_sz = 2 * ((sz == 0) ? 256 : sz); ptr new_sweep_stack; - thread_find_room_g(tc_in, space_data, 0, typemod, ptr_align(new_sz), new_sweep_stack); + find_room(tc_in, space_data, 0, typemod, ptr_align(new_sz), new_sweep_stack); if (sz != 0) memcpy(TO_VOIDP(new_sweep_stack), TO_VOIDP(SWEEPSTACKSTART(tc_in)), sz); S_G.bitmask_overhead[0] += ptr_align(new_sz); @@ -1689,8 +2020,6 @@ void enlarge_sweep_stack(ptr tc_in) { void sweep_from_stack(ptr tc_in) { if (SWEEPSTACK(tc_in) > SWEEPSTACKSTART(tc_in)) { - change = 1; - while (SWEEPSTACK(tc_in) > SWEEPSTACKSTART(tc_in)) { ptr p; seginfo *si; @@ -1700,6 +2029,13 @@ void sweep_from_stack(ptr tc_in) { for objects that have impure fields */ si = SegInfo(ptr_get_segment(p)); sweep(tc_in, p, si->generation); + if (CHECK_LOCK_FAILED(tc_in)) { + /* try doing something else for now and sweep `p` later */ + CLEAR_LOCK_FAILED(tc_in); + SWEEPCHANGE(tc_in) = SWEEP_CHANGE_POSTPONED; + push_sweep(p) + break; + } } } } @@ -1744,8 +2080,8 @@ static void record_dirty_segment(IGEN from_g, IGEN to_g, seginfo *si) { } } -static void sweep_dirty(ptr tc_in) { - ptr tc = tc_in; +static void sweep_dirty(ptr tc) { + ptr tc_in; IGEN youngest, min_youngest; ptr *pp, *ppend, *nl, start, next_loc; uptr seg, d; @@ -1782,23 +2118,34 @@ static void sweep_dirty(ptr tc_in) { continue; } + tc_in = tc; +#ifdef ENABLE_PARALLEL + { + int i; + for (i = 0; i < num_sweepers; i++) + if (sweepers[i].sweep_tc == dirty_si->creator_tc) { + tc_in = sweepers[i].sweep_tc; + break; + } + } +#endif + min_youngest = 0xff; start = build_ptr(seg, 0); ppend = TO_VOIDP(start); - /* The current allocation pointer, either global or thread-local, - may be relevant as the ending point. We assume that thread-local - regions for all other threads aer terminated and won't get new - allocations while dirty sweeping runs. */ - next_loc = S_G.next_loc[from_g][s]; - if (((uptr)next_loc < (uptr)start) - || ((uptr)next_loc >= ((uptr)start + bytes_per_segment))) - next_loc = NEXTLOC_AT(tc, s, from_g); + /* The current allocation pointer may be relevant as the + ending point. We assume that thread-local regions for all + threads without a sweeper are terminated and won't get new + allocations while dirty sweeping runs, while all + allocations for a thread with a sweeper will be only using + that tc. */ + next_loc = NEXTLOC_AT(tc_in, s, from_g); nl = TO_VOIDP(next_loc); if (s == space_weakpair) { weakseginfo *next = weaksegments_to_resweep; - find_room_voidp(space_data, 0, ptr_align(sizeof(weakseginfo)), weaksegments_to_resweep); + find_room_voidp(tc, space_data, 0, ptr_align(sizeof(weakseginfo)), weaksegments_to_resweep); S_G.bitmask_overhead[0] += ptr_align(sizeof(weakseginfo)); weaksegments_to_resweep->si = dirty_si; weaksegments_to_resweep->next = next; @@ -1862,7 +2209,7 @@ static void sweep_dirty(ptr tc_in) { ptr p = TYPE(TO_PTR(pp), type_symbol); if (!dirty_si->marked_mask || marked(dirty_si, p)) - youngest = sweep_dirty_symbol(tc, p, youngest); + youngest = sweep_dirty_symbol(tc_in, p, youngest); pp += size_symbol / sizeof(ptr); } @@ -1882,7 +2229,7 @@ static void sweep_dirty(ptr tc_in) { ptr p = TYPE(TO_PTR(pp), type_typed_object); if (!dirty_si->marked_mask || marked(dirty_si, p)) - youngest = sweep_dirty_port(tc, p, youngest); + youngest = sweep_dirty_port(tc_in, p, youngest); pp += size_port / sizeof(ptr); } @@ -1965,7 +2312,7 @@ static void sweep_dirty(ptr tc_in) { /* skip unmarked words */ p = (ptr)((uptr)p + byte_alignment); } else { - youngest = sweep_dirty_record(tc, p, youngest); + youngest = sweep_dirty_record(tc_in, p, youngest); p = (ptr)((iptr)p + size_record_inst(UNFIX(RECORDDESCSIZE( RECORDINSTTYPE(p))))); @@ -2011,7 +2358,7 @@ static void sweep_dirty(ptr tc_in) { /* quit on end of segment */ if (FWDMARKER(p) == forward_marker) break; - youngest = sweep_dirty_record(tc, p, youngest); + youngest = sweep_dirty_record(tc_in, p, youngest); p = (ptr)((iptr)p + size_record_inst(UNFIX(RECORDDESCSIZE( RECORDINSTTYPE(p))))); @@ -2031,7 +2378,7 @@ static void sweep_dirty(ptr tc_in) { while (pp < ppend && (dirty_si->marked_mask || (*pp != forward_marker))) { ptr p = TYPE(TO_PTR(pp), type_pair); if (!dirty_si->marked_mask || marked(dirty_si, p)) - youngest = check_dirty_ephemeron(tc, p, youngest); + youngest = check_dirty_ephemeron(tc_in, p, youngest); pp += size_ephemeron / sizeof(ptr); } } else { @@ -2070,9 +2417,6 @@ static void resweep_dirty_weak_pairs(ptr tc) { /* Make sure terminator is in place for allocation areas relevant to this thread */ for (from_g = MIN_TG; from_g <= static_generation; from_g++) { ptr old; - old = S_G.next_loc[from_g][space_weakpair]; - if (old != (ptr)0) - *(ptr*)TO_VOIDP(old) = forward_marker; old = NEXTLOC_AT(tc, space_weakpair, from_g); if (old != (ptr)0) *(ptr*)TO_VOIDP(old) = forward_marker; @@ -2151,13 +2495,19 @@ static void add_pending_guardian(ptr gdn, ptr tconc) static void add_trigger_guardians_to_recheck(ptr ls) { - ptr last = ls, next = GUARDIANNEXT(ls); + ptr last = ls, next; + + GC_TC_MUTEX_ACQUIRE(); + + next = GUARDIANNEXT(ls); while (next != 0) { last = next; next = GUARDIANNEXT(next); } INITGUARDIANNEXT(last) = recheck_guardians_ls; recheck_guardians_ls = ls; + + GC_TC_MUTEX_RELEASE(); } static ptr pending_ephemerons = 0; @@ -2192,12 +2542,16 @@ static void add_ephemeron_to_pending(ptr pe) { of times that we have to trigger re-checking, especially since check_pending_pehemerons() is run only after all other sweep opportunities are exhausted. */ + GC_TC_MUTEX_ACQUIRE(); if (EPHEMERONPREVREF(pe)) ephemeron_remove(pe); ephemeron_add(&pending_ephemerons, pe); + GC_TC_MUTEX_RELEASE(); } static void add_trigger_ephemerons_to_pending(ptr pe) { + GC_TC_MUTEX_ACQUIRE(); ephemeron_add(&pending_ephemerons, pe); + GC_TC_MUTEX_RELEASE(); } static void check_ephemeron(ptr tc_in, ptr pe) { @@ -2208,41 +2562,43 @@ static void check_ephemeron(ptr tc_in, ptr pe) { EPHEMERONNEXT(pe) = 0; EPHEMERONPREVREF(pe) = 0; - + from_g = GENERATION(pe); - + p = Scar(pe); if (!IMMEDIATE(p) && (si = MaybeSegInfo(ptr_get_segment(p))) != NULL && si->old_space) { if (new_marked(si, p)) { #ifndef NO_DIRTY_NEWSPACE_POINTERS IGEN tg = TARGET_GENERATION(si); - if (tg < from_g) S_record_new_dirty_card(&INITCAR(pe), tg); + if (tg < from_g) S_record_new_dirty_card(tc_in, &INITCAR(pe), tg); #endif - relocate_impure(&INITCDR(pe), from_g); + relocate_impure_now(&INITCDR(pe), from_g); } else if (FORWARDEDP(p, si)) { #ifndef NO_DIRTY_NEWSPACE_POINTERS IGEN tg = TARGET_GENERATION(si); - if (tg < from_g) S_record_new_dirty_card(&INITCAR(pe), tg); + if (tg < from_g) S_record_new_dirty_card(tc_in, &INITCAR(pe), tg); #endif INITCAR(pe) = FWDADDRESS(p); - relocate_impure(&INITCDR(pe), from_g); + relocate_impure_now(&INITCDR(pe), from_g); } else { /* Not reached, so far; install as trigger */ ephemeron_add(&si->trigger_ephemerons, pe); si->has_triggers = 1; } } else { - relocate_impure(&INITCDR(pe), from_g); + relocate_impure_now(&INITCDR(pe), from_g); } - + POP_BACKREFERENCE(); } +/* non-parallel: */ static void check_pending_ephemerons(ptr tc_in) { ptr pe, next_pe; pe = pending_ephemerons; pending_ephemerons = 0; + while (pe != 0) { next_pe = EPHEMERONNEXT(pe); check_ephemeron(tc_in, pe); @@ -2346,8 +2702,6 @@ static uptr target_generation_space_so_far(ptr tc) { for (s = 0; s <= max_real_space; s++) { sz += S_G.bytes_of_space[g][s]; - if (S_G.next_loc[g][s] != FIX(0)) - sz += (uptr)S_G.next_loc[g][s] - (uptr)S_G.base_loc[g][s]; if (NEXTLOC_AT(tc, s, g) != FIX(0)) sz += (uptr)NEXTLOC_AT(tc, s, g) - (uptr)BASELOC_AT(tc, s, g); } @@ -2381,7 +2735,7 @@ void copy_and_clear_list_bits(ptr tc_in, seginfo *oldspacesegments) { bits_si->marked_mask[segment_bitmap_byte(TO_PTR(si->list_bits))] |= segment_bitmap_bit(TO_PTR(si->list_bits)); } else { octet *copied_bits; - thread_find_room_g_voidp(tc_in, space_data, bits_si->generation, ptr_align(segment_bitmap_bytes), copied_bits); + find_room_voidp(tc_in, space_data, bits_si->generation, ptr_align(segment_bitmap_bytes), copied_bits); memcpy_aligned(copied_bits, si->list_bits, segment_bitmap_bytes); si->list_bits = copied_bits; S_G.bitmask_overhead[bits_si->generation] += ptr_align(segment_bitmap_bytes); @@ -2425,15 +2779,206 @@ void copy_and_clear_list_bits(ptr tc_in, seginfo *oldspacesegments) { /* **************************************** */ +#ifdef ENABLE_PARALLEL + +static int sweep_mutex_initialized = 0; +static s_thread_mutex_t sweep_mutex; + +static int num_running_sweepers; +static s_thread_cond_t postpone_cond; + +static void gather_active_sweepers() { + int i, n; + + /* assign a tc for each sweeper to run in parallel */ + for (n = 0, i = 0; (n < maximum_parallel_collect_threads) && (i < S_collect_waiting_threads); i++) { + if ((i < maximum_parallel_collect_threads) && (S_collect_waiting_tcs[i] != (ptr)0)) { + ptr tc = S_collect_waiting_tcs[i]; + if (sweeper_started(n)) { + sweepers[n].sweep_tc = tc; + SWEEPER(tc) = n; + n++; + } else + break; + } + } + + num_sweepers = n; +} + +static s_thread_rv_t start_sweeper(void *_data) { + gc_thread_data *data = _data; + ptr tc; + int status; + iptr num_swept_bytes; + + s_thread_mutex_lock(&sweep_mutex); + while (1) { + while (data->status != SWEEPER_SWEEPING) { + s_thread_cond_wait(&data->sweep_cond, &sweep_mutex); + } + num_running_sweepers++; + s_thread_mutex_unlock(&sweep_mutex); + + tc = data->sweep_tc; + s_thread_setspecific(S_tc_key, tc); + + if (data->thread) { + /* sweep tc in this sweeper, so that things it references are + more likely handled in this sweeper: */ + sweep_thread_now(tc, data->thread); + data->thread = (ptr)0; + } + + status = 0; + num_swept_bytes = 0; + do { + num_swept_bytes += sweep_generation_pass(tc); + status = gate_postponed(tc, status); + } while (SWEEPCHANGE(tc) != SWEEP_NO_CHANGE); + + /* ensure terminators on any segment where sweeper may have allocated: */ + { + ISPC s; IGEN g; + for (s = 0; s <= max_real_space; s++) { + for (g = MIN_TG; g <= MAX_TG; g++) { + ptr old = NEXTLOC_AT(tc, s, g); + if (old != (ptr)0) + *(ptr*)TO_VOIDP(old) = forward_marker; + } + } + } + + s_thread_mutex_lock(&sweep_mutex); + --num_running_sweepers; + if (!num_running_sweepers) + s_thread_cond_broadcast(&postpone_cond); + data->status = SWEEPER_READY; + /* fprintf(stderr, "%d: %p swept %ld\n", MAX_CG, TO_VOIDP(tc), num_swept_bytes); */ + s_thread_cond_signal(&data->done_cond); + } + + s_thread_return; +} + +static IBOOL sweeper_started(int i) { + if (!sweep_mutex_initialized) { + s_thread_mutex_init(&sweep_mutex); + s_thread_cond_init(&postpone_cond); + sweep_mutex_initialized = 1; + } + + if (sweepers[i].status == SWEEPER_NONE) { + int status; + + sweepers[i].status = SWEEPER_READY; + s_thread_cond_init(&sweepers[i].sweep_cond); + s_thread_cond_init(&sweepers[i].done_cond); + + if ((status = s_thread_create(start_sweeper, &sweepers[i])) != 0) { + /* eror creating a thread; just go with as many as we have */ + sweepers[i].status = SWEEPER_NONE; + s_thread_cond_destroy(&sweepers[i].sweep_cond); + s_thread_cond_destroy(&sweepers[i].done_cond); + return 0; + } + } + + return 1; +} + +static void parallel_sweep_generation(ptr tc) { + int i, status; + iptr num_swept_bytes; + + S_use_gc_tc_mutex = 1; + + while (1) { + /* start other sweepers */ + s_thread_mutex_lock(&sweep_mutex); + for (i = 0; i < num_sweepers; i++) { + sweepers[i].status = SWEEPER_SWEEPING; + s_thread_cond_signal(&sweepers[i].sweep_cond); + } + num_running_sweepers++; + s_thread_mutex_unlock(&sweep_mutex); + + /* sweep in the main thread */ + status = 0; + num_swept_bytes = 0; + do { + num_swept_bytes += sweep_generation_pass(tc); + status = gate_postponed(tc, status); + } while (SWEEPCHANGE(tc) != SWEEP_NO_CHANGE); + + /* wait for other sweepers */ + s_thread_mutex_lock(&sweep_mutex); + --num_running_sweepers; + if (!num_running_sweepers) + s_thread_cond_broadcast(&postpone_cond); + for (i = 0; i < num_sweepers; i++) { + while (sweepers[i].status != SWEEPER_READY) { + s_thread_cond_wait(&sweepers[i].done_cond, &sweep_mutex); + } + S_flush_instruction_cache(sweepers[i].sweep_tc); + } + /* fprintf(stderr, "%d: main swept %ld\n", MAX_CG, num_swept_bytes); */ + s_thread_mutex_unlock(&sweep_mutex); + + /* check epehemerons in non-parallel mode */ + check_pending_ephemerons(tc); + + /* if this thread is still done, then all threads are done */ + if (SWEEPCHANGE(tc) == SWEEP_NO_CHANGE) + break; + } + + S_use_gc_tc_mutex = 0; +} + +#define WAIT_AFTER_POSTPONES 100 + +static int gate_postponed(ptr tc, int status) { + if (SWEEPCHANGE(tc) == SWEEP_CHANGE_POSTPONED) { + if (status < WAIT_AFTER_POSTPONES) + return status + 1; + else { + s_thread_mutex_lock(&sweep_mutex); + /* This thread wasn't able to make progress after a lock conflict. + Instead of spinning, which could create livelock, wait until + some thread makes progress. */ + if (num_running_sweepers == 1) { + /* All other threads postponed, so this one should be able to + make progress after all. */ + } else { + --num_running_sweepers; + s_thread_cond_wait(&postpone_cond, &sweep_mutex); + num_running_sweepers++; + } + s_thread_mutex_unlock(&sweep_mutex); + } + } else { + s_thread_mutex_lock(&sweep_mutex); + s_thread_cond_broadcast(&postpone_cond); + s_thread_mutex_unlock(&sweep_mutex); + } + + return 0; +} + +#endif + +/* **************************************** */ + #ifdef ENABLE_MEASURE -static void init_measure(IGEN min_gen, IGEN max_gen) { +static void init_measure(ptr tc, IGEN min_gen, IGEN max_gen) { uptr init_stack_len = 1024; min_measure_generation = min_gen; max_measure_generation = max_gen; - find_room_voidp(space_data, 0, ptr_align(init_stack_len), measure_stack_start); + find_room_voidp(tc, space_data, 0, ptr_align(init_stack_len), measure_stack_start); S_G.bitmask_overhead[0] += ptr_align(init_stack_len); measure_stack = TO_VOIDP(measure_stack_start); measure_stack_limit = TO_VOIDP((uptr)TO_PTR(measure_stack_start) + init_stack_len); @@ -2467,7 +3012,7 @@ static void init_counting_mask(ptr tc_in, seginfo *si) { static void init_measure_mask(ptr tc_in, seginfo *si) { init_mask(tc_in, si->measured_mask, 0, 0); - measured_seginfos = S_cons_in(space_new, 0, TO_PTR(si), measured_seginfos); + measured_seginfos = S_cons_in(tc_in, space_new, 0, TO_PTR(si), measured_seginfos); } #define measure_unreached(si, p) \ @@ -2518,7 +3063,7 @@ static void push_measure(ptr tc_in, ptr p) uptr sz = ptr_bytes * (measure_stack_limit - measure_stack_start); uptr new_sz = 2*sz; ptr *new_measure_stack; - thread_find_room_g_voidp(tc_in, space_data, 0, ptr_align(new_sz), new_measure_stack); + find_room_voidp(tc_in, space_data, 0, ptr_align(new_sz), new_measure_stack); S_G.bitmask_overhead[0] += ptr_align(new_sz); memcpy(new_measure_stack, measure_stack_start, sz); measure_stack_start = new_measure_stack; @@ -2632,7 +3177,7 @@ ptr S_count_size_increments(ptr ls, IGEN generation) { tc_mutex_acquire(); - init_measure(0, generation); + init_measure(tc, 0, generation); for (l = ls; l != Snil; l = Scdr(l)) { ptr p = Scar(l); diff --git a/racket/src/ChezScheme/c/gcwrapper.c b/racket/src/ChezScheme/c/gcwrapper.c index 3c60a90946..bf48a423d3 100644 --- a/racket/src/ChezScheme/c/gcwrapper.c +++ b/racket/src/ChezScheme/c/gcwrapper.c @@ -188,7 +188,7 @@ void S_immobilize_object(x) ptr x; { si = MaybeSegInfo(ptr_get_segment(x)); if ((si != NULL) && (si->generation != static_generation)) { - tc_mutex_acquire() + tc_mutex_acquire(); /* Try a little to to support cancellation of segment-level * immobilzation --- but we don't try too hard */ @@ -202,7 +202,7 @@ void S_immobilize_object(x) ptr x; { objects must be marked; only those in the locked list must be marked. Non-locked objects on `space_new` cannot be immobilized. */ - tc_mutex_release() + tc_mutex_release(); } } @@ -215,7 +215,7 @@ void S_mobilize_object(x) ptr x; { si = MaybeSegInfo(ptr_get_segment(x)); if ((si != NULL) && (si->generation != static_generation)) { - tc_mutex_acquire() + tc_mutex_acquire(); if (si->must_mark == 0) S_error_abort("S_mobilize_object(): object was definitely not immobilzed"); @@ -224,7 +224,7 @@ void S_mobilize_object(x) ptr x; { if (si->must_mark < MUST_MARK_INFINITY) --si->must_mark; - tc_mutex_release() + tc_mutex_release(); } } @@ -260,7 +260,7 @@ IBOOL Slocked_objectp(x) ptr x; { if (IMMEDIATE(x) || (si = MaybeSegInfo(ptr_get_segment(x))) == NULL || (g = si->generation) == static_generation) return 1; - tc_mutex_acquire() + tc_mutex_acquire(); ans = 0; for (ls = S_G.locked_objects[g]; ls != Snil; ls = Scdr(ls)) { @@ -270,7 +270,7 @@ IBOOL Slocked_objectp(x) ptr x; { } } - tc_mutex_release() + tc_mutex_release(); return ans; } @@ -278,7 +278,7 @@ IBOOL Slocked_objectp(x) ptr x; { ptr S_locked_objects(void) { IGEN g; ptr ans; ptr ls; - tc_mutex_acquire() + tc_mutex_acquire(); ans = Snil; for (g = 0; g <= static_generation; INCRGEN(g)) { @@ -287,7 +287,7 @@ ptr S_locked_objects(void) { } } - tc_mutex_release() + tc_mutex_release(); return ans; } @@ -297,7 +297,8 @@ void Slock_object(x) ptr x; { /* weed out pointers that won't be relocated */ if (!IMMEDIATE(x) && (si = MaybeSegInfo(ptr_get_segment(x))) != NULL && (g = si->generation) != static_generation) { - tc_mutex_acquire() + ptr tc = get_thread_context(); + tc_mutex_acquire(); S_pants_down += 1; /* immobilize */ if (si->must_mark < MUST_MARK_INFINITY) { @@ -306,13 +307,13 @@ void Slock_object(x) ptr x; { S_G.must_mark_gen0 = 1; } /* add x to locked list. remove from unlocked list */ - S_G.locked_objects[g] = S_cons_in((g == 0 ? space_new : space_impure), g, x, S_G.locked_objects[g]); + S_G.locked_objects[g] = S_cons_in(tc, (g == 0 ? space_new : space_impure), g, x, S_G.locked_objects[g]); if (S_G.enable_object_counts) { if (g != 0) S_G.countof[g][countof_pair] += 1; } (void)remove_first_nomorep(x, &S_G.unlocked_objects[g], 0); S_pants_down -= 1; - tc_mutex_release() + tc_mutex_release(); } } @@ -320,7 +321,8 @@ void Sunlock_object(x) ptr x; { seginfo *si; IGEN g; if (!IMMEDIATE(x) && (si = MaybeSegInfo(ptr_get_segment(x))) != NULL && (g = si->generation) != static_generation) { - tc_mutex_acquire() + ptr tc = get_thread_context(); + tc_mutex_acquire(); S_pants_down += 1; /* mobilize, if we haven't lost track */ if (si->must_mark < MUST_MARK_INFINITY) @@ -328,13 +330,13 @@ void Sunlock_object(x) ptr x; { /* remove first occurrence of x from locked list. if there are no others, add x to unlocked list */ if (remove_first_nomorep(x, &S_G.locked_objects[g], (si->space == space_new) && (si->generation > 0))) { - S_G.unlocked_objects[g] = S_cons_in((g == 0 ? space_new : space_impure), g, x, S_G.unlocked_objects[g]); + S_G.unlocked_objects[g] = S_cons_in(tc, (g == 0 ? space_new : space_impure), g, x, S_G.unlocked_objects[g]); if (S_G.enable_object_counts) { if (g != 0) S_G.countof[g][countof_pair] += 1; } } S_pants_down -= 1; - tc_mutex_release() + tc_mutex_release(); } } @@ -353,7 +355,7 @@ ptr s_help_unregister_guardian(ptr *pls, ptr tconc, ptr result) { ptr S_unregister_guardian(ptr tconc) { ptr result, tc; IGEN g; - tc_mutex_acquire() + tc_mutex_acquire(); tc = get_thread_context(); /* in the interest of thread safety, gather entries only in the current thread, ignoring any others */ result = s_help_unregister_guardian(&GUARDIANENTRIES(tc), tconc, Snil); @@ -361,15 +363,15 @@ ptr S_unregister_guardian(ptr tconc) { for (g = 0; g <= static_generation; INCRGEN(g)) { result = s_help_unregister_guardian(&S_G.guardians[g], tconc, result); } - tc_mutex_release() + tc_mutex_release(); return result; } #ifndef WIN32 void S_register_child_process(INT child) { - tc_mutex_acquire() + tc_mutex_acquire(); S_child_processes[0] = Scons(FIX(child), S_child_processes[0]); - tc_mutex_release() + tc_mutex_release(); } #endif /* WIN32 */ @@ -384,7 +386,7 @@ void S_set_enable_object_counts(IBOOL eoc) { ptr S_object_counts(void) { IGEN grtd, g; ptr ls; iptr i; ptr outer_alist; - tc_mutex_acquire() + tc_mutex_acquire(); outer_alist = Snil; @@ -441,7 +443,7 @@ ptr S_object_counts(void) { } } - tc_mutex_release() + tc_mutex_release(); return outer_alist; } @@ -457,12 +459,12 @@ void S_set_enable_object_backreferences(IBOOL eoc) { ptr S_object_backreferences(void) { IGEN g; ptr ls = Snil; - tc_mutex_acquire() + tc_mutex_acquire(); for (g = S_G.max_nonstatic_generation+1; g--; ) ls = Scons(S_G.gcbackreference[g], ls); - tc_mutex_release() + tc_mutex_release(); return ls; } @@ -564,6 +566,22 @@ void S_check_heap(aftergc, mcg) IBOOL aftergc; IGEN mcg; { check_dirty(); + { + ptr ls; + for (ls = S_threads; ls != Snil; ls = Scdr(ls)) { + ptr t_tc = (ptr)THREADTC(Scar(ls)); + for (s = 0; s <= max_real_space; s += 1) { + for (g = 0; g <= static_generation; INCRGEN(g)) { + if ((NEXTLOC_AT(t_tc, s, g) == (ptr)0) != (BASELOC_AT(t_tc, s, g) == (ptr)0)) { + S_checkheap_errors += 1; + printf("!!! inconsistent thread NEXT %p and BASE %p\n", + TO_VOIDP(NEXTLOC_AT(t_tc, s, g)), TO_VOIDP(BASELOC_AT(t_tc, s, g))); + } + } + } + } + } + for (i = PARTIAL_CHUNK_POOLS; i >= -1; i -= 1) { chunkinfo *chunk = i == -1 ? S_chunks_full : S_chunks[i]; while (chunk != NULL) { @@ -658,8 +676,8 @@ void S_check_heap(aftergc, mcg) IBOOL aftergc; IGEN mcg; { pp1 = TO_VOIDP(build_ptr(seg, 0)); pp2 = TO_VOIDP(build_ptr(seg + 1, 0)); - nl = TO_VOIDP(S_G.next_loc[g][s]); - if (!(pp1 <= nl && nl < pp2)) { + nl = NULL; + { ptr ls; for (ls = S_threads; ls != Snil; ls = Scdr(ls)) { ptr t_tc = (ptr)THREADTC(Scar(ls)); @@ -978,11 +996,6 @@ ptr S_do_gc(IGEN max_cg, IGEN min_tg, IGEN max_tg, ptr count_roots) { /* now transfer old_g info to new_g, and clear old_g info */ S_G.bytes_of_generation[new_g] = S_G.bytes_of_generation[old_g]; S_G.bytes_of_generation[old_g] = 0; for (s = 0; s <= max_real_space; s += 1) { - S_G.to_sweep[new_g][s] = S_G.to_sweep[old_g][s]; S_G.to_sweep[old_g][s] = NULL; - S_G.base_loc[new_g][s] = S_G.base_loc[old_g][s]; S_G.base_loc[old_g][s] = FIX(0); - S_G.next_loc[new_g][s] = S_G.next_loc[old_g][s]; S_G.next_loc[old_g][s] = FIX(0); - S_G.sweep_loc[new_g][s] = S_G.sweep_loc[old_g][s]; S_G.sweep_loc[old_g][s] = FIX(0); - S_G.bytes_left[new_g][s] = S_G.bytes_left[old_g][s]; S_G.bytes_left[old_g][s] = 0; S_G.bytes_of_space[new_g][s] = S_G.bytes_of_space[old_g][s]; S_G.bytes_of_space[old_g][s] = 0; S_G.occupied_segments[new_g][s] = S_G.occupied_segments[old_g][s]; S_G.occupied_segments[old_g][s] = NULL; for (si = S_G.occupied_segments[new_g][s]; si != NULL; si = si->next) { @@ -996,6 +1009,7 @@ ptr S_do_gc(IGEN max_cg, IGEN min_tg, IGEN max_tg, ptr count_roots) { NEXTLOC_AT(t_tc, s, new_g) = NEXTLOC_AT(t_tc, s, old_g); NEXTLOC_AT(t_tc, s, old_g) = (ptr)0; BYTESLEFT_AT(t_tc, s, new_g) = BYTESLEFT_AT(t_tc, s, old_g); BYTESLEFT_AT(t_tc, s, old_g) = 0; SWEEPLOC_AT(t_tc, s, new_g) = SWEEPLOC_AT(t_tc, s, old_g); SWEEPLOC_AT(t_tc, s, old_g) = 0; + SWEEPNEXT_AT(t_tc, s, new_g) = SWEEPNEXT_AT(t_tc, s, old_g); SWEEPNEXT_AT(t_tc, s, old_g) = 0; } } } @@ -1091,13 +1105,18 @@ ptr S_do_gc(IGEN max_cg, IGEN min_tg, IGEN max_tg, ptr count_roots) { ptr S_gc(ptr tc, IGEN max_cg, IGEN min_tg, IGEN max_tg, ptr count_roots) { if (min_tg == static_generation || S_G.enable_object_counts || S_G.enable_object_backreferences - || (count_roots != Sfalse)) + || (count_roots != Sfalse)) { return S_gc_oce(tc, max_cg, min_tg, max_tg, count_roots); - else if (max_cg == 0 && min_tg == 1 && max_tg == 1 +#if defined(PTHREADS) + } else if (S_collect_waiting_threads != 0) { + return S_gc_par(tc, max_cg, min_tg, max_tg, Sfalse); +#endif + } else if (max_cg == 0 && min_tg == 1 && max_tg == 1 && !S_G.must_mark_gen0 && S_G.locked_objects[0] == Snil && (S_G.min_mark_gen > 0)) { S_gc_011(tc); return Svoid; - } else + } else { return S_gc_ocd(tc, max_cg, min_tg, max_tg, Sfalse); + } } diff --git a/racket/src/ChezScheme/c/globals.h b/racket/src/ChezScheme/c/globals.h index e05a1873b8..afc31c14e7 100644 --- a/racket/src/ChezScheme/c/globals.h +++ b/racket/src/ChezScheme/c/globals.h @@ -40,6 +40,13 @@ EXTERN scheme_mutex_t S_tc_mutex; EXTERN s_thread_cond_t S_collect_cond; EXTERN s_thread_cond_t S_collect_thread0_cond; EXTERN INT S_tc_mutex_depth; +EXTERN scheme_mutex_t S_gc_tc_mutex; +EXTERN IBOOL S_use_gc_tc_mutex; +EXTERN int S_collect_waiting_threads; +EXTERN ptr S_collect_waiting_tcs[maximum_parallel_collect_threads]; +# ifdef IMPLICIT_ATOMIC_AS_EXPLICIT +EXTERN s_thread_mutex_t S_implicit_mutex; +# endif #endif /* segment.c */ @@ -96,11 +103,6 @@ EXTERN struct S_G_struct { /* alloc.c */ ptr *protected[max_protected]; uptr protect_next; - seginfo *to_sweep[static_generation+1][max_real_space+1]; - ptr base_loc[static_generation+1][max_real_space+1]; - ptr next_loc[static_generation+1][max_real_space+1]; - ptr sweep_loc[static_generation+1][max_real_space+1]; - iptr bytes_left[static_generation+1][max_real_space+1]; uptr bytes_of_space[static_generation+1][max_real_space+1]; uptr bytes_of_generation[static_generation+1]; uptr bitmask_overhead[static_generation+1]; diff --git a/racket/src/ChezScheme/c/intern.c b/racket/src/ChezScheme/c/intern.c index 8bf951842e..3b83cbeef7 100644 --- a/racket/src/ChezScheme/c/intern.c +++ b/racket/src/ChezScheme/c/intern.c @@ -38,9 +38,10 @@ void S_intern_init() { } static void oblist_insert(ptr sym, iptr idx, IGEN g) { + ptr tc = get_thread_context(); bucket *b, *oldb, **pb; - find_room_voidp(g == 0 ? space_new : space_data, g, ptr_align(sizeof(bucket)), b); + find_room_voidp(tc, g == 0 ? space_new : space_data, g, ptr_align(sizeof(bucket)), b); b->sym = sym; if (g == 0) { b->next = S_G.oblist[idx]; @@ -53,7 +54,7 @@ static void oblist_insert(ptr sym, iptr idx, IGEN g) { if (g != static_generation) { bucket_list *bl; - find_room_voidp(g == 0 ? space_new : space_data, g, ptr_align(sizeof(bucket_list)), bl); + find_room_voidp(tc, g == 0 ? space_new : space_data, g, ptr_align(sizeof(bucket_list)), bl); bl->car = b; bl->cdr = S_G.buckets_of_generation[g]; S_G.buckets_of_generation[g] = bl; @@ -155,7 +156,7 @@ ptr S_intern(const unsigned char *s) { ptr sym; bucket *b; - tc_mutex_acquire() + tc_mutex_acquire(); b = S_G.oblist[idx]; while (b != NULL) { @@ -166,7 +167,7 @@ ptr S_intern(const unsigned char *s) { iptr i; for (i = 0; ; i += 1) { if (i == n) { - tc_mutex_release() + tc_mutex_release(); return sym; } if (Sstring_ref(str, i) != s[i]) break; @@ -180,7 +181,7 @@ ptr S_intern(const unsigned char *s) { INITSYMHASH(sym) = FIX(hc); oblist_insert(sym, idx, 0); - tc_mutex_release() + tc_mutex_release(); return sym; } @@ -191,7 +192,7 @@ ptr S_intern_sc(const string_char *name, iptr n, ptr name_str) { ptr sym; bucket *b; - tc_mutex_acquire() + tc_mutex_acquire(); b = S_G.oblist[idx]; while (b != NULL) { @@ -202,7 +203,7 @@ ptr S_intern_sc(const string_char *name, iptr n, ptr name_str) { iptr i; for (i = 0; ; i += 1) { if (i == n) { - tc_mutex_release() + tc_mutex_release(); return sym; } if (STRIT(str, i) != name[i]) break; @@ -218,7 +219,7 @@ ptr S_intern_sc(const string_char *name, iptr n, ptr name_str) { INITSYMHASH(sym) = FIX(hc); oblist_insert(sym, idx, 0); - tc_mutex_release() + tc_mutex_release(); return sym; } @@ -228,7 +229,7 @@ ptr S_intern3(const string_char *pname, iptr plen, const string_char *uname, ipt ptr sym; bucket *b; - tc_mutex_acquire() + tc_mutex_acquire(); b = S_G.oblist[idx]; while (b != NULL) { @@ -239,7 +240,7 @@ ptr S_intern3(const string_char *pname, iptr plen, const string_char *uname, ipt iptr i; for (i = 0; ; i += 1) { if (i == ulen) { - tc_mutex_release() + tc_mutex_release(); return sym; } if (STRIT(str, i) != uname[i]) break; @@ -257,7 +258,7 @@ ptr S_intern3(const string_char *pname, iptr plen, const string_char *uname, ipt INITSYMHASH(sym) = FIX(hc); oblist_insert(sym, idx, 0); - tc_mutex_release() + tc_mutex_release(); return sym; } @@ -269,7 +270,7 @@ void S_intern_gensym(sym) ptr sym; { iptr idx = OBINDEX(hc, S_G.oblist_length); bucket *b; - tc_mutex_acquire() + tc_mutex_acquire(); b = S_G.oblist[idx]; while (b != NULL) { @@ -280,7 +281,7 @@ void S_intern_gensym(sym) ptr sym; { iptr i; for (i = 0; ; i += 1) { if (i == ulen) { - tc_mutex_release() + tc_mutex_release(); S_error1("intern-gensym", "unique name ~s already interned", uname_str); } if (STRIT(str, i) != uname[i]) break; @@ -293,7 +294,7 @@ void S_intern_gensym(sym) ptr sym; { INITSYMHASH(sym) = FIX(hc); oblist_insert(sym, idx, GENERATION(sym)); - tc_mutex_release() + tc_mutex_release(); } /* must hold mutex */ diff --git a/racket/src/ChezScheme/c/pb.c b/racket/src/ChezScheme/c/pb.c index f561d2a50e..a865f5ab62 100644 --- a/racket/src/ChezScheme/c/pb.c +++ b/racket/src/ChezScheme/c/pb.c @@ -57,7 +57,7 @@ void S_machine_init() {} #define SIGN_FLIP(r, a, b) ((~((a ^ b) | (r ^ ~b))) >> (ptr_bits-1)) -#if __GNUC__ >= 5 +#if (__GNUC__ >= 5) || defined(__clang__) # define USE_OVERFLOW_INTRINSICS 1 #else # define USE_OVERFLOW_INTRINSICS 0 diff --git a/racket/src/ChezScheme/c/prim.c b/racket/src/ChezScheme/c/prim.c index 4798fd67fd..e6ffca80d6 100644 --- a/racket/src/ChezScheme/c/prim.c +++ b/racket/src/ChezScheme/c/prim.c @@ -224,9 +224,7 @@ static void s_instantiate_code_object() { cookie = S_get_scheme_arg(tc, 2); proc = S_get_scheme_arg(tc, 3); - tc_mutex_acquire() new = S_code(tc, CODETYPE(old), CODELEN(old)); - tc_mutex_release() S_immobilize_object(new); diff --git a/racket/src/ChezScheme/c/prim5.c b/racket/src/ChezScheme/c/prim5.c index 4b272788d5..6282230116 100644 --- a/racket/src/ChezScheme/c/prim5.c +++ b/racket/src/ChezScheme/c/prim5.c @@ -132,7 +132,7 @@ static ptr s_profile_release_counters PROTO((void)); ptr S_strerror(INT errnum) { ptr p; char *msg; - tc_mutex_acquire() + tc_mutex_acquire(); #ifdef WIN32 msg = Swide_to_utf8(_wcserror(errnum)); if (msg == NULL) @@ -144,7 +144,7 @@ ptr S_strerror(INT errnum) { #else p = (msg = strerror(errnum)) == NULL ? Sfalse : Sstring_utf8(msg, -1); #endif - tc_mutex_release() + tc_mutex_release(); return p; } @@ -214,12 +214,11 @@ static ptr s_make_immobile_bytevector(uptr len) { } static ptr s_make_immobile_vector(uptr len, ptr fill) { + ptr tc = get_thread_context(); ptr v; uptr i; - tc_mutex_acquire() - v = S_vector_in(space_immobile_impure, 0, len); - tc_mutex_release() + v = S_vector_in(tc, space_immobile_impure, 0, len); S_immobilize_object(v); @@ -401,8 +400,9 @@ static void s_showalloc(IBOOL show_dump, const char *outfn) { static char spacechar[space_total+1] = { alloc_space_chars, '?', 't' }; chunkinfo *chunk; seginfo *si; ISPC s; IGEN g; ptr sorted_chunks; + ptr tc = get_thread_context(); - tc_mutex_acquire() + tc_mutex_acquire(); if (outfn == NULL) { out = stderr; @@ -417,10 +417,10 @@ static void s_showalloc(IBOOL show_dump, const char *outfn) { if (out == NULL) { ptr msg = S_strerror(errno); if (msg != Sfalse) { - tc_mutex_release() + tc_mutex_release(); S_error2("fopen", "open of ~s failed: ~a", Sstring_utf8(outfn, -1), msg); } else { - tc_mutex_release() + tc_mutex_release(); S_error1("fopen", "open of ~s failed", Sstring_utf8(outfn, -1)); } } @@ -434,8 +434,8 @@ static void s_showalloc(IBOOL show_dump, const char *outfn) { /* add in bytes previously recorded */ bytes[g][s] += S_G.bytes_of_space[g][s]; /* add in bytes in active segments */ - if (S_G.next_loc[g][s] != FIX(0)) - bytes[g][s] += (uptr)S_G.next_loc[g][s] - (uptr)S_G.base_loc[g][s]; + if (NEXTLOC_AT(tc, s, g) != FIX(0)) + bytes[g][s] += (uptr)NEXTLOC_AT(tc, s, g) - (uptr)BASELOC_AT(tc, s, g); } } @@ -627,7 +627,7 @@ static void s_showalloc(IBOOL show_dump, const char *outfn) { fclose(out); } - tc_mutex_release() + tc_mutex_release(); } #include @@ -914,9 +914,7 @@ static ptr s_set_reloc(p, n, e) ptr p, n, e; { } static ptr s_flush_instruction_cache() { - tc_mutex_acquire() S_flush_instruction_cache(get_thread_context()); - tc_mutex_release() return Svoid; } @@ -924,9 +922,7 @@ static ptr s_make_code(flags, free, name, arity_mark, n, info, pinfos) iptr flags, free, n; ptr name, arity_mark, info, pinfos; { ptr co; - tc_mutex_acquire() co = S_code(get_thread_context(), type_code | (flags << code_flags_offset), n); - tc_mutex_release() CODEFREE(co) = free; CODENAME(co) = name; CODEARITYMASK(co) = arity_mark; diff --git a/racket/src/ChezScheme/c/scheme.c b/racket/src/ChezScheme/c/scheme.c index 8bbf8e8ff0..5b7fda6450 100644 --- a/racket/src/ChezScheme/c/scheme.c +++ b/racket/src/ChezScheme/c/scheme.c @@ -55,7 +55,7 @@ static void main_init() { /* create dependency for linker */ scheme_statics(); - /* force thread inline allocation to go through find_room until ready */ + /* force thread inline newspace allocation to go through find_room until ready */ AP(tc) = (ptr)0; EAP(tc) = (ptr)0; REAL_EAP(tc) = (ptr)0; @@ -66,8 +66,8 @@ static void main_init() { if (S_boot_time) S_G.protect_next = 0; S_segment_init(); - S_alloc_init(); S_thread_init(); + S_alloc_init(); S_intern_init(); S_gc_init(); S_number_init(); diff --git a/racket/src/ChezScheme/c/schsig.c b/racket/src/ChezScheme/c/schsig.c index 540efb2573..d2e9ce76c2 100644 --- a/racket/src/ChezScheme/c/schsig.c +++ b/racket/src/ChezScheme/c/schsig.c @@ -128,9 +128,9 @@ void S_split_and_resize() { * argument register values */ n = CONTCLENGTH(k) + (value_count * sizeof(ptr)) + stack_slop; if (n >= SCHEMESTACKSIZE(tc)) { - tc_mutex_acquire() + tc_mutex_acquire(); S_reset_scheme_stack(tc, n); - tc_mutex_release() + tc_mutex_release(); } } @@ -272,7 +272,7 @@ void S_overflow(tc, frame_request) ptr tc; iptr frame_request; { } /* create a continuation */ - tc_mutex_acquire() + tc_mutex_acquire(); STACKLINK(tc) = S_mkcontinuation(space_new, 0, CODEENTRYPOINT(nuate), @@ -283,7 +283,7 @@ void S_overflow(tc, frame_request) ptr tc; iptr frame_request; { *split_point, Snil, Sfalse); - tc_mutex_release() + tc_mutex_release(); /* overwrite old return address with dounderflow */ *split_point = TO_PTR(DOUNDERFLOW); @@ -296,9 +296,9 @@ void S_overflow(tc, frame_request) ptr tc; iptr frame_request; { /* allocate a new stack, retaining same relative sfp */ sfp_offset = (uptr)TO_PTR(sfp) - (uptr)TO_PTR(split_point); - tc_mutex_acquire() + tc_mutex_acquire(); S_reset_scheme_stack(tc, above_split_size + frame_request); - tc_mutex_release() + tc_mutex_release(); SFP(tc) = (ptr)((uptr)SCHEMESTACK(tc) + sfp_offset); /* copy up everything above the split point. we don't know where the @@ -324,14 +324,14 @@ void S_abnormal_exit() { static void reset_scheme() { ptr tc = get_thread_context(); - tc_mutex_acquire() + tc_mutex_acquire(); /* eap should always be up-to-date now that we write-through to the tc when making any changes to eap when eap is a real register */ S_scan_dirty(TO_VOIDP(EAP(tc)), TO_VOIDP(REAL_EAP(tc))); S_reset_allocation_pointer(tc); S_reset_scheme_stack(tc, stack_slop); FRAME(tc,0) = TO_PTR(DOUNDERFLOW); - tc_mutex_release() + tc_mutex_release(); } /* error_resets occur with the system in an unknown state, @@ -516,7 +516,7 @@ void S_fire_collector() { /* printf("really firing collector!\n"); fflush(stdout); */ - tc_mutex_acquire() + tc_mutex_acquire(); /* check again in case some other thread beat us to the punch */ if (!Sboolean_value(S_symbol_value(crp_id))) { /* printf("firing collector nthreads = %d\n", list_length(S_threads)); fflush(stdout); */ @@ -524,7 +524,7 @@ void S_fire_collector() { for (ls = S_threads; ls != Snil; ls = Scdr(ls)) SOMETHINGPENDING(THREADTC(Scar(ls))) = Strue; } - tc_mutex_release() + tc_mutex_release(); } } @@ -664,7 +664,7 @@ ptr S_allocate_scheme_signal_queue() { void S_register_scheme_signal(sig) iptr sig; { struct sigaction act; - tc_mutex_acquire() + tc_mutex_acquire(); if (!scheme_signals_registered) { ptr ls; scheme_signals_registered = 1; @@ -672,7 +672,7 @@ void S_register_scheme_signal(sig) iptr sig; { SIGNALINTERRUPTQUEUE(THREADTC(Scar(ls))) = S_allocate_scheme_signal_queue(); } } - tc_mutex_release() + tc_mutex_release(); sigfillset(&act.sa_mask); act.sa_flags = 0; diff --git a/racket/src/ChezScheme/c/segment.c b/racket/src/ChezScheme/c/segment.c index 79071a3743..92b6fa14ce 100644 --- a/racket/src/ChezScheme/c/segment.c +++ b/racket/src/ChezScheme/c/segment.c @@ -37,7 +37,7 @@ Low-level Memory management strategy: #include static void out_of_memory PROTO((void)); -static void initialize_seginfo PROTO((seginfo *si, ISPC s, IGEN g)); +static void initialize_seginfo PROTO((seginfo *si, ptr tc, ISPC s, IGEN g)); static seginfo *allocate_segments PROTO((uptr nreq)); static void expand_segment_table PROTO((uptr base, uptr end, seginfo *si)); static void contract_segment_table PROTO((uptr base, uptr end)); @@ -225,7 +225,7 @@ static INT find_index(iptr n) { return (index < PARTIAL_CHUNK_POOLS-1) ? index : PARTIAL_CHUNK_POOLS-1; } -static void initialize_seginfo(seginfo *si, ISPC s, IGEN g) { +static void initialize_seginfo(seginfo *si, NO_THREADS_UNUSED ptr tc, ISPC s, IGEN g) { INT d; si->space = s; @@ -234,6 +234,10 @@ static void initialize_seginfo(seginfo *si, ISPC s, IGEN g) { si->old_space = 0; si->use_marks = 0; si->must_mark = 0; +#ifdef PTHREADS + si->lock = 0; + si->creator_tc = tc; +#endif si->list_bits = NULL; si->min_dirty_byte = 0xff; for (d = 0; d < cards_per_segment; d += sizeof(ptr)) { @@ -253,7 +257,7 @@ static void initialize_seginfo(seginfo *si, ISPC s, IGEN g) { si->sweep_next = NULL; } -iptr S_find_segments(s, g, n) ISPC s; IGEN g; iptr n; { +iptr S_find_segments(tc, s, g, n) ptr tc; ISPC s; IGEN g; iptr n; { chunkinfo *chunk, *nextchunk; seginfo *si, *nextsi, **prevsi; iptr nunused_segs, j; @@ -277,7 +281,7 @@ iptr S_find_segments(s, g, n) ISPC s; IGEN g; iptr n; { } chunk->nused_segs += 1; - initialize_seginfo(si, s, g); + initialize_seginfo(si, tc, s, g); si->next = S_G.occupied_segments[g][s]; S_G.occupied_segments[g][s] = si; S_G.number_of_empty_segments -= 1; @@ -315,7 +319,7 @@ iptr S_find_segments(s, g, n) ISPC s; IGEN g; iptr n; { nextsi->next = S_G.occupied_segments[g][s]; S_G.occupied_segments[g][s] = si; for (j = n, nextsi = si; j > 0; j -= 1, nextsi = nextsi->next) { - initialize_seginfo(nextsi, s, g); + initialize_seginfo(nextsi, tc, s, g); } S_G.number_of_empty_segments -= n; return si->number; @@ -335,7 +339,7 @@ iptr S_find_segments(s, g, n) ISPC s; IGEN g; iptr n; { /* we couldn't find space, so ask for more */ si = allocate_segments(n); for (nextsi = si; n > 0; n -= 1, nextsi += 1) { - initialize_seginfo(nextsi, s, g); + initialize_seginfo(nextsi, tc, s, g); /* add segment to appropriate list of occupied segments */ nextsi->next = S_G.occupied_segments[g][s]; S_G.occupied_segments[g][s] = nextsi; diff --git a/racket/src/ChezScheme/c/segment.h b/racket/src/ChezScheme/c/segment.h index 3012e7b06b..bc7d142614 100644 --- a/racket/src/ChezScheme/c/segment.h +++ b/racket/src/ChezScheme/c/segment.h @@ -38,14 +38,14 @@ #define SEGMENT_T3_IDX(i) ((i)>>(segment_t2_bits+segment_t1_bits)) FORCEINLINE seginfo *SegInfo(uptr i) { - return S_segment_info[SEGMENT_T3_IDX(i)]->t2[SEGMENT_T2_IDX(i)]->t1[SEGMENT_T1_IDX(i)]; + return AS_IMPLICIT_ATOMIC(seginfo *, S_segment_info[SEGMENT_T3_IDX(i)]->t2[SEGMENT_T2_IDX(i)]->t1[SEGMENT_T1_IDX(i)]); } FORCEINLINE seginfo *MaybeSegInfo(uptr i) { t2table *t2i; t1table *t1i; - if ((t2i = S_segment_info[SEGMENT_T3_IDX(i)]) == NULL) return NULL; - if ((t1i = t2i->t2[SEGMENT_T2_IDX(i)]) == NULL) return NULL; - return t1i->t1[SEGMENT_T1_IDX(i)]; + if ((t2i = AS_IMPLICIT_ATOMIC(t2table *, S_segment_info[SEGMENT_T3_IDX(i)])) == NULL) return NULL; + if ((t1i = AS_IMPLICIT_ATOMIC(t1table *, t2i->t2[SEGMENT_T2_IDX(i)])) == NULL) return NULL; + return AS_IMPLICIT_ATOMIC(seginfo *, t1i->t1[SEGMENT_T1_IDX(i)]); } #else /* segment_t3_bits */ diff --git a/racket/src/ChezScheme/c/system.h b/racket/src/ChezScheme/c/system.h index 868708bfee..6e629c85b2 100644 --- a/racket/src/ChezScheme/c/system.h +++ b/racket/src/ChezScheme/c/system.h @@ -45,3 +45,4 @@ #include "segment.h" +#include "atomic.h" diff --git a/racket/src/ChezScheme/c/thread.c b/racket/src/ChezScheme/c/thread.c index f142c19b61..1bc4ea357c 100644 --- a/racket/src/ChezScheme/c/thread.c +++ b/racket/src/ChezScheme/c/thread.c @@ -35,6 +35,14 @@ void S_thread_init() { s_thread_cond_init(&S_collect_cond); s_thread_cond_init(&S_collect_thread0_cond); S_tc_mutex_depth = 0; + s_thread_mutex_init(&S_gc_tc_mutex.pmutex); + S_tc_mutex.owner = 0; + S_tc_mutex.count = 0; + S_use_gc_tc_mutex = 0; + +# ifdef IMPLICIT_ATOMIC_AS_EXPLICIT + s_thread_mutex_init(&S_implicit_mutex); +# endif #endif /* PTHREADS */ } } @@ -42,31 +50,37 @@ void S_thread_init() { /* this needs to be reworked. currently, S_create_thread_object is called from main to create the base thread, from fork_thread when there is already an active current thread, and from S_activate_thread - when there is no current thread. we have to avoid thread-local - allocation in at least the latter case, so we call vector_in and - cons_in and arrange for S_thread to use find_room rather than - thread_find_room. scheme.c does part of the initialization of the + when there is no current thread. scheme.c does part of the initialization of the base thread (e.g., parameters, current input/output ports) in one or more places. */ ptr S_create_thread_object(who, p_tc) const char *who; ptr p_tc; { ptr thread, tc; INT i; - tc_mutex_acquire() + tc_mutex_acquire(); if (S_threads == Snil) { tc = TO_PTR(S_G.thread_context); } else { /* clone parent */ ptr p_v = PARAMETERS(p_tc); iptr i, n = Svector_length(p_v); - /* use S_vector_in to avoid thread-local allocation */ - ptr v = S_vector_in(space_new, 0, n); + ptr v; tc = TO_PTR(malloc(size_tc)); + if (tc == (ptr)0) S_error(who, "unable to malloc thread data structure"); memcpy(TO_VOIDP(tc), TO_VOIDP(p_tc), size_tc); + for (i = 0; i < num_thread_local_allocation_segments; i++) { + BASELOC(tc, i) = (ptr)0; + NEXTLOC(tc, i) = (ptr)0; + BYTESLEFT(tc, i) = 0; + SWEEPLOC(tc, i) = (ptr)0; + } + + v = S_vector_in(tc, space_new, 0, n); + for (i = 0; i < n; i += 1) INITVECTIT(v, i) = Svector_ref(p_v, i); @@ -110,10 +124,9 @@ ptr S_create_thread_object(who, p_tc) const char *who; ptr p_tc; { DSTBV(tc) = SRCBV(tc) = Sfalse; - /* S_thread had better not do thread-local allocation */ thread = S_thread(tc); - S_threads = S_cons_in_global(space_new, 0, thread, S_threads); + S_threads = S_cons_in(tc, space_new, 0, thread, S_threads); S_nthreads += 1; SETSYMVAL(S_G.active_threads_id, FIX(UNFIX(SYMVAL(S_G.active_threads_id)) + 1)); @@ -128,14 +141,10 @@ ptr S_create_thread_object(who, p_tc) const char *who; ptr p_tc; { LZ4OUTBUFFER(tc) = 0; - for (i = 0; i < num_thread_local_allocation_segments; i++) { - BASELOC(tc, i) = (ptr)0; - NEXTLOC(tc, i) = (ptr)0; - BYTESLEFT(tc, i) = 0; - SWEEPLOC(tc, i) = (ptr)0; - } + SWEEPER(tc) = -1; + LOCKSTATUS(tc) = Strue; - tc_mutex_release() + tc_mutex_release(); return thread; } @@ -202,7 +211,7 @@ static IBOOL destroy_thread(tc) ptr tc; { ptr *ls; IBOOL status; status = 0; - tc_mutex_acquire() + tc_mutex_acquire(); ls = &S_threads; while (*ls != Snil) { ptr thread = Scar(*ls); @@ -258,7 +267,7 @@ static IBOOL destroy_thread(tc) ptr tc; { } ls = &Scdr(*ls); } - tc_mutex_release() + tc_mutex_release(); return status; } @@ -270,7 +279,7 @@ ptr S_fork_thread(thunk) ptr thunk; { thread = S_create_thread_object("fork-thread", get_thread_context()); CP(THREADTC(thread)) = thunk; - if ((status = s_thread_create(start_thread, (void *)THREADTC(thread))) != 0) { + if ((status = s_thread_create(start_thread, TO_VOIDP(THREADTC(thread)))) != 0) { destroy_thread((ptr)THREADTC(thread)); S_error1("fork-thread", "failed: ~a", S_strerror(status)); } @@ -447,6 +456,7 @@ IBOOL S_condition_wait(c, m, t) s_thread_cond_t *c; scheme_mutex_t *m; ptr t; { long nsec; INT status; IBOOL is_collect; + iptr collect_index = 0; if ((count = m->count) == 0 || !s_thread_equal(m->owner, self)) S_error1("condition-wait", "thread does not own mutex ~s", m); @@ -467,6 +477,17 @@ IBOOL S_condition_wait(c, m, t) s_thread_cond_t *c; scheme_mutex_t *m; ptr t; { is_collect = (c == &S_collect_cond || c == &S_collect_thread0_cond); + if (is_collect) { + /* Remember the index where we record this tc, because a thread + might temporarily wait for collection, but then get woken + up (e.g., to make the main thread drive the collection) before + a collection actually happens. In that case, we may track fewer + tcs than possible, but it should be close enough on average. */ + collect_index = S_collect_waiting_threads++; + if (collect_index < maximum_parallel_collect_threads) + S_collect_waiting_tcs[collect_index] = tc; + } + if (is_collect || DISABLECOUNT(tc) == 0) { deactivate_thread_signal_collect(tc, !is_collect) } @@ -481,6 +502,12 @@ IBOOL S_condition_wait(c, m, t) s_thread_cond_t *c; scheme_mutex_t *m; ptr t; { reactivate_thread(tc) } + if (is_collect) { + --S_collect_waiting_threads; + if (collect_index < maximum_parallel_collect_threads) + S_collect_waiting_tcs[collect_index] = (ptr)0; + } + if (status == 0) { return 1; } else if (status == ETIMEDOUT) { diff --git a/racket/src/ChezScheme/c/types.h b/racket/src/ChezScheme/c/types.h index 65e37e9363..32426c9bb8 100644 --- a/racket/src/ChezScheme/c/types.h +++ b/racket/src/ChezScheme/c/types.h @@ -76,44 +76,35 @@ typedef int IFASLCODE; /* fasl type codes */ #define ALREADY_PTR(p) (p) -/* inline allocation --- mutex required */ -/* find room allocates n bytes in space s and generation g into - * destination x, tagged with ty, punting to find_more_room if - * no space is left in the current segment. n is assumed to be - * an integral multiple of the object alignment. */ -#define find_room_T(s, g, t, n, T, x) { \ - ptr X = S_G.next_loc[g][s];\ - S_G.next_loc[g][s] = (ptr)((uptr)X + (n));\ - if ((S_G.bytes_left[g][s] -= (n)) < 0) X = S_find_more_room(s, g, n, X);\ - (x) = T(TYPE(X, t)); \ -} - -#define find_room(s, g, t, n, x) find_room_T(s, g, t, n, ALREADY_PTR, x) -#define find_room_voidp(s, g, n, x) find_room_T(s, g, typemod, n, TO_VOIDP, x) - -#define SG_AT_TO_INDEX(s, g) ((g * (1 + max_real_space)) + s) +#define SG_AT_TO_INDEX(s, g) (((g) * (1 + max_real_space)) + (s)) #define BASELOC_AT(tc, s, g) BASELOC(tc, SG_AT_TO_INDEX(s, g)) #define NEXTLOC_AT(tc, s, g) NEXTLOC(tc, SG_AT_TO_INDEX(s, g)) #define BYTESLEFT_AT(tc, s, g) BYTESLEFT(tc, SG_AT_TO_INDEX(s, g)) #define SWEEPLOC_AT(tc, s, g) SWEEPLOC(tc, SG_AT_TO_INDEX(s, g)) +#define SWEEPNEXT_AT(tc, s, g) SWEEPNEXT(tc, SG_AT_TO_INDEX(s, g)) /* inline allocation --- no mutex required */ -/* Like `find_room`, but allocating into thread-local space. */ -#define thread_find_room_g_T(tc, s, g, t, n, T, x) { \ - ptr X = NEXTLOC_AT(tc, s, g); \ - NEXTLOC_AT(tc, s, g) = (ptr)((uptr)X + (n)); \ - if ((BYTESLEFT_AT(tc, s, g) -= (n)) < 0) X = S_find_more_thread_room(tc, s, g, n, X); \ - (x) = T(TYPE(X, t)); \ -} +/* find room allocates n bytes in space s and generation g into + * destination x, tagged with ty, punting to find_more_room if + * no space is left in the current segment. n is assumed to be + * an integral multiple of the object alignment. */ +#define find_room_T(tc, s, g, t, n, T, x) do { \ + iptr L_IDX = SG_AT_TO_INDEX(s, g); \ + iptr N_BYTES = n; \ + ptr X = NEXTLOC(tc, L_IDX); \ + NEXTLOC(tc, L_IDX) = (ptr)((uptr)X + N_BYTES); \ + if ((BYTESLEFT(tc, L_IDX) -= (n)) < 0) X = S_find_more_thread_room(tc, s, g, N_BYTES, X); \ + (x) = T(TYPE(X, t)); \ + } while(0) -#define thread_find_room_g(tc, s, g, t, n, x) thread_find_room_g_T(tc, s, g, t, n, ALREADY_PTR, x) -#define thread_find_room_g_voidp(tc, s, g, n, x) thread_find_room_g_T(tc, s, g, typemod, n, TO_VOIDP, x) +#define find_room(tc, s, g, t, n, x) find_room_T(tc, s, g, t, n, ALREADY_PTR, x) +#define find_room_voidp(tc, s, g, n, x) find_room_T(tc, s, g, typemod, n, TO_VOIDP, x) -/* thread-local inline allocation --- no mutex required */ -/* Like `thread_find_room_g`, but always `space_new` and generation 0, +/* new-space inline allocation --- no mutex required */ +/* Like `find_room`, but always `space_new` and generation 0, so using the same bump pointer as most new allocation */ -#define thread_find_room_T(tc, t, n, T, x) { \ +#define newspace_find_room_T(tc, t, n, T, x) do { \ ptr _tc = tc;\ uptr _ap = (uptr)AP(_tc);\ if ((uptr)n > ((uptr)EAP(_tc) - _ap)) {\ @@ -123,10 +114,10 @@ typedef int IFASLCODE; /* fasl type codes */ (x) = T(TYPE(_ap,t)); \ AP(_tc) = (ptr)(_ap + n);\ }\ -} + } while(0) -#define thread_find_room(tc, t, n, x) thread_find_room_T(tc, t, n, ALREADY_PTR, x) -#define thread_find_room_voidp(tc, n, x) thread_find_room_T(tc, typemod, n, TO_VOIDP, x) +#define newspace_find_room(tc, t, n, x) newspace_find_room_T(tc, t, n, ALREADY_PTR, x) +#define newspace_find_room_voidp(tc, n, x) newspace_find_room_T(tc, typemod, n, TO_VOIDP, x) #ifndef NO_PRESERVE_FLONUM_EQ # define PRESERVE_FLONUM_EQ @@ -166,6 +157,10 @@ typedef struct _seginfo { octet min_dirty_byte; /* dirty byte for full segment, effectively min(dirty_bytes) */ octet *list_bits; /* for `$list-bits-ref` and `$list-bits-set!` */ uptr number; /* the segment number */ +#ifdef PTHREADS + ptr lock; /* for parallel GC */ + ptr creator_tc; /* for parallelism heuristic; might not match an active thread */ +#endif struct _chunkinfo *chunk; /* the chunk this segment belongs to */ struct _seginfo *next; /* pointer to the next seginfo (used in occupied_segments and unused_segs) */ struct _seginfo *sweep_next; /* next in list of segments allocated during GC => need to sweep */ @@ -375,7 +370,7 @@ typedef struct { #define deactivate_thread_signal_collect(tc, check_collect) { \ if (ACTIVE(tc)) {\ ptr code;\ - tc_mutex_acquire()\ + tc_mutex_acquire();\ code = CP(tc);\ if (Sprocedurep(code)) CP(tc) = code = CLOSCODE(code);\ Slock_object(code);\ @@ -394,7 +389,7 @@ typedef struct { #define deactivate_thread(tc) deactivate_thread_signal_collect(tc, 1) #define reactivate_thread(tc) {\ if (!ACTIVE(tc)) {\ - tc_mutex_acquire()\ + tc_mutex_acquire(); \ SETSYMVAL(S_G.active_threads_id,\ FIX(UNFIX(SYMVAL(S_G.active_threads_id)) + 1));\ Sunlock_object(CP(tc));\ @@ -406,20 +401,55 @@ typedef struct { C code on tc_mutex. it is used by do_error to release tc_mutex the appropriate number of times. */ -#define tc_mutex_acquire() {\ - S_mutex_acquire(&S_tc_mutex);\ - S_tc_mutex_depth += 1;\ -} -#define tc_mutex_release() {\ - S_tc_mutex_depth -= 1;\ - S_mutex_release(&S_tc_mutex);\ -} +#define tc_mutex_acquire() do { \ + S_mutex_acquire(&S_tc_mutex); \ + S_tc_mutex_depth += 1; \ + } while (0); +#define tc_mutex_release() do { \ + S_tc_mutex_depth -= 1; \ + S_mutex_release(&S_tc_mutex); \ + } while (0); +#define gc_tc_mutex_acquire() S_mutex_acquire(&S_gc_tc_mutex) +#define gc_tc_mutex_release() S_mutex_release(&S_gc_tc_mutex) + +#ifdef IMPLICIT_ATOMIC_AS_EXPLICIT +# define AS_IMPLICIT_ATOMIC(T, X) ({ \ + T RESLT; \ + s_thread_mutex_lock(&S_implicit_mutex); \ + RESLT = X; \ + s_thread_mutex_unlock(&S_implicit_mutex); \ + RESLT; \ + }) +# define BEGIN_IMPLICIT_ATOMIC() s_thread_mutex_lock(&S_implicit_mutex) +# define END_IMPLICIT_ATOMIC() s_thread_mutex_unlock(&S_implicit_mutex) +#else +# define AS_IMPLICIT_ATOMIC(T, X) X +# define BEGIN_IMPLICIT_ATOMIC() do { } while (0) +# define END_IMPLICIT_ATOMIC() do { } while (0) +#endif + +#define S_cas_load_acquire_voidp(a, old, new) CAS_LOAD_ACQUIRE(a, old, new) +#define S_cas_store_release_voidp(a, old, new) CAS_STORE_RELEASE(a, old, new) +#define S_cas_load_acquire_ptr(a, old, new) CAS_LOAD_ACQUIRE(a, TO_VOIDP(old), TO_VOIDP(new)) +#define S_cas_store_release_ptr(a, old, new) CAS_STORE_RELEASE(a, TO_VOIDP(old), TO_VOIDP(new)) +#define S_store_release() RELEASE_FENCE() + #else #define get_thread_context() TO_PTR(S_G.thread_context) #define deactivate_thread(tc) {} #define reactivate_thread(tc) {} -#define tc_mutex_acquire() {} -#define tc_mutex_release() {} +#define tc_mutex_acquire() do {} while (0) +#define tc_mutex_release() do {} while (0) +#define gc_tc_mutex_acquire() do {} while (0) +#define gc_tc_mutex_release() do {} while (0) +#define S_cas_load_acquire_voidp(a, old, new) (*(a) = new, 1) +#define S_cas_store_release_voidp(a, old, new) (*(a) = new, 1) +#define S_cas_load_acquire_ptr(a, old, new) (*(a) = new, 1) +#define S_cas_store_release_ptr(a, old, new) (*(a) = new, 1) +#define S_store_release() do { } while (0) +#define BEGIN_IMPLICIT_ATOMIC() do { } while (0) +#define END_IMPLICIT_ATOMIC() do { } while (0) +#define AS_IMPLICIT_ATOMIC(T, X) X #endif #ifdef __MINGW32__ diff --git a/racket/src/ChezScheme/c/version.h b/racket/src/ChezScheme/c/version.h index 3dca710920..d61fc81b3a 100644 --- a/racket/src/ChezScheme/c/version.h +++ b/racket/src/ChezScheme/c/version.h @@ -466,21 +466,14 @@ typedef char tputsputcchar; # define WRITE write #endif +#ifdef PTHREADS +# define NO_THREADS_UNUSED /* empty */ +#else +# define NO_THREADS_UNUSED UNUSED +#endif + /* Use "/dev/urandom" everywhere except Windows */ #define USE_DEV_URANDOM_UUID -#if defined(__arm64__) -# define STORE_FENCE() __asm__ __volatile__ ("dmb ishst" : : : "memory") -#elif defined(__arm__) -# if arm_isa_version == 7 -# define STORE_FENCE() __asm__ __volatile__ ("dmb ishst" : : : "memory") -# else -# define STORE_FENCE() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r" (0) : "memory") -# endif -#elif defined(__powerpc64__) -# define STORE_FENCE() __asm__ __volatile__ ("lwsync" : : : "memory") -#elif defined(__powerpc__) || defined(__POWERPC__) -# define STORE_FENCE() __asm__ __volatile__ ("sync" : : : "memory") -#else -# define STORE_FENCE() /* empty */ -#endif +/* For debugging: */ +/* #define IMPLICIT_ATOMIC_AS_EXPLICIT */ diff --git a/racket/src/ChezScheme/c/vfasl.c b/racket/src/ChezScheme/c/vfasl.c index 0137046ff0..833ef56865 100644 --- a/racket/src/ChezScheme/c/vfasl.c +++ b/racket/src/ChezScheme/c/vfasl.c @@ -243,7 +243,7 @@ ptr S_vfasl(ptr bv, void *stream, iptr offset, iptr input_len) if (bv) { void *base_addr = &BVIT(bv, sizeof(vfasl_header) + offset); - thread_find_room(tc, typemod, header.data_size, data); + newspace_find_room(tc, typemod, header.data_size, data); memcpy(TO_VOIDP(data), base_addr, header.data_size); table = ptr_add(TO_PTR(base_addr), header.data_size); } else { @@ -252,9 +252,9 @@ ptr S_vfasl(ptr bv, void *stream, iptr offset, iptr input_len) uptr sz = vspace_offsets[s+1] - vspace_offsets[s]; if (sz > 0) { if ((s == vspace_reloc) && !S_G.retain_static_relocation) { - thread_find_room(tc, typemod, sz, vspaces[s]) + newspace_find_room(tc, typemod, sz, vspaces[s]); } else { - find_room(vspace_spaces[s], static_generation, typemod, sz, vspaces[s]) + find_room(tc, vspace_spaces[s], static_generation, typemod, sz, vspaces[s]); } if (S_fasl_stream_read(stream, TO_VOIDP(vspaces[s]), sz) < 0) S_error("fasl-read", "input truncated"); @@ -268,12 +268,12 @@ ptr S_vfasl(ptr bv, void *stream, iptr offset, iptr input_len) data = (ptr)0; /* => initialize below */ to_static = 1; } else { - thread_find_room(tc, typemod, header.data_size, data) + newspace_find_room(tc, typemod, header.data_size, data); if (S_fasl_stream_read(stream, TO_VOIDP(data), header.data_size) < 0) S_error("fasl-read", "input truncated"); } - thread_find_room(tc, typemod, ptr_align(header.table_size), table) + newspace_find_room(tc, typemod, ptr_align(header.table_size), table); if (S_fasl_stream_read(stream, TO_VOIDP(table), header.table_size) < 0) S_error("fasl-read", "input truncated"); } @@ -390,7 +390,7 @@ ptr S_vfasl(ptr bv, void *stream, iptr offset, iptr input_len) ptr end_syms = TYPE(VSPACE_END(vspace_symbol), type_symbol); if (sym != end_syms) { - tc_mutex_acquire() + tc_mutex_acquire(); while (sym < end_syms) { ptr isym; @@ -432,7 +432,7 @@ ptr S_vfasl(ptr bv, void *stream, iptr offset, iptr input_len) in_seg_off += size_symbol; } - tc_mutex_release() + tc_mutex_release(); } } @@ -464,7 +464,7 @@ ptr S_vfasl(ptr bv, void *stream, iptr offset, iptr input_len) RECORDINSTTYPE(rtd) = S_G.base_rtd; RECORDDESCUID(rtd) = S_G.base_rtd; - tc_mutex_acquire() + tc_mutex_acquire(); while (1) { ptr new_rtd, meta_rtd, parent_rtd; @@ -497,7 +497,7 @@ ptr S_vfasl(ptr bv, void *stream, iptr offset, iptr input_len) } } - tc_mutex_release() + tc_mutex_release(); } /* Replace rtd references to interned references */ @@ -1262,7 +1262,7 @@ static iptr vfasl_symbol_to_index(vfasl_info *vfi, ptr pp) static void fasl_init_entry_tables() { - tc_mutex_acquire() + tc_mutex_acquire(); if (!S_G.c_entries) { iptr i; @@ -1286,7 +1286,7 @@ static void fasl_init_entry_tables() } } - tc_mutex_release() + tc_mutex_release(); } static void vfasl_check_install_library_entry(vfasl_info *vfi, ptr name) @@ -1427,7 +1427,7 @@ static ptr vfasl_hash_table_ref(vfasl_hash_table *ht, ptr key) { static void *vfasl_malloc(uptr sz) { ptr tc = get_thread_context(); void *p; - thread_find_room_voidp(tc, ptr_align(sz), p) + newspace_find_room_voidp(tc, ptr_align(sz), p); return p; } diff --git a/racket/src/ChezScheme/mats/Mf-base b/racket/src/ChezScheme/mats/Mf-base index 6df98eed6e..712734a7cf 100644 --- a/racket/src/ChezScheme/mats/Mf-base +++ b/racket/src/ChezScheme/mats/Mf-base @@ -270,8 +270,8 @@ partialx: $(MAKE) allxhelp o=3 eval=interpret cp0=t rmg=2 allx: prettyclean - $(MAKE) allxhelp o=0 - $(MAKE) allxhelp o=3 + $(MAKE) allxhelp o=0 eoc=f + $(MAKE) allxhelp o=3 eoc=f $(MAKE) allxhelp o=0 cp0=t cl=3 $(MAKE) allxhelp o=3 cp0=t cl=3 $(MAKE) allxhelp o=0 spi=t rmg=2 p=t diff --git a/racket/src/ChezScheme/s/7.ss b/racket/src/ChezScheme/s/7.ss index 84f4acfad3..b4777245c6 100644 --- a/racket/src/ChezScheme/s/7.ss +++ b/racket/src/ChezScheme/s/7.ss @@ -802,7 +802,7 @@ ($oops 'collect "cannot collect when multiple threads are active")) (let-values ([(trip g gmintarget gmaxtarget count-roots) (p gc-trip)]) (set! gc-trip trip) - (let ([cpu (current-time 'time-thread)] [real (current-time 'time-monotonic)]) + (let ([cpu (current-time 'time-process)] [real (current-time 'time-monotonic)]) (set! gc-bytes (+ gc-bytes (bytes-allocated))) (when (collect-notify) (fprintf (console-output-port) @@ -819,7 +819,7 @@ (fprintf (console-output-port) "done]~%") (flush-output-port (console-output-port))) (set! gc-bytes (- gc-bytes (bytes-allocated))) - (set! gc-cpu (add-duration gc-cpu (time-difference (current-time 'time-thread) cpu))) + (set! gc-cpu (add-duration gc-cpu (time-difference (current-time 'time-process) cpu))) (set! gc-real (add-duration gc-real (time-difference (current-time 'time-monotonic) real))) (set! gc-count (1+ gc-count)) gc-result))))))) diff --git a/racket/src/ChezScheme/s/cmacros.ss b/racket/src/ChezScheme/s/cmacros.ss index a5b6525608..50562aa4c5 100644 --- a/racket/src/ChezScheme/s/cmacros.ss +++ b/racket/src/ChezScheme/s/cmacros.ss @@ -1496,6 +1496,7 @@ (define-constant static-generation 7) (define-constant num-thread-local-allocation-segments (fx* (fx+ 1 (constant static-generation)) (fx+ 1 (constant max-real-space)))) +(define-constant maximum-parallel-collect-threads 8) ;;; make sure gc sweeps all ptrs (define-primitive-structure-disps tc typemod @@ -1571,13 +1572,18 @@ [ptr DSTBV] [ptr SRCBV] [double fpregs (constant asm-fpreg-max)] - [xptr sweep-stack] - [xptr sweep-stack-start] - [xptr sweep-stack-limit] + ;; thread-local allocation and parallel collection: [xptr base-loc (constant num-thread-local-allocation-segments)] [xptr next-loc (constant num-thread-local-allocation-segments)] [iptr bytes-left (constant num-thread-local-allocation-segments)] - [xptr sweep-loc (constant num-thread-local-allocation-segments)])) + [xptr sweep-loc (constant num-thread-local-allocation-segments)] + [xptr sweep-next (constant num-thread-local-allocation-segments)] + [iptr sweeper] + [xptr sweep-stack] + [xptr sweep-stack-start] + [xptr sweep-stack-limit] + [iptr sweep-change] + [xptr lock-status])) (define tc-field-list (let f ([ls (oblist)] [params '()]) diff --git a/racket/src/ChezScheme/s/mkgc.ss b/racket/src/ChezScheme/s/mkgc.ss index d319e532d9..8582e7da2e 100644 --- a/racket/src/ChezScheme/s/mkgc.ss +++ b/racket/src/ChezScheme/s/mkgc.ss @@ -96,6 +96,8 @@ ;; - (as-mark-end ...) : declares that s implement counting, ;; which means that it's included for mark mode ;; - (skip-forwarding) : disable forward-pointer installation in copy mode +;; - (check-lock-failed) : bail out if a lock aquire failed; use this before dereferencing +;; an object reference that might not have been relocated ;; - (assert ) : assertion ;; ;; In the above declarations, nonterminals like can be @@ -472,6 +474,13 @@ (copy-type ratnum-type) (trace-now ratnum-numerator) (trace-now ratnum-denominator) + (case-mode + [(copy) (when (CHECK_LOCK_FAILED _tc_) + ;; create failed relocates so that the heap checker isn't unhappy + (set! (ratnum-numerator _copy_) (cast ptr 0)) + (set! (ratnum-denominator _copy_) (cast ptr 0)))] + [(mark) (check-lock-failed)] + [else]) (mark) (vfasl-pad-word) (count countof-ratnum)] @@ -483,6 +492,13 @@ (copy-type exactnum-type) (trace-now exactnum-real) (trace-now exactnum-imag) + (case-mode + [(copy) (when (CHECK_LOCK_FAILED _tc_) + ;; create failed relocates so that the heap checker isn't unhappy + (set! (exactnum-real _copy_) (cast ptr 0)) + (set! (exactnum-imag _copy_) (cast ptr 0)))] + [(mark) (check-lock-failed)] + [else]) (mark) (vfasl-pad-word) (count countof-exactnum)] @@ -575,9 +591,11 @@ (count countof-phantom) ;; Separate from `count`, because we want to track sizes even ;; if counting is not enabled: + (GC_TC_MUTEX_ACQUIRE) (set! (array-ref (array-ref S_G.bytesof _tg_) countof-phantom) += - (phantom-length _)))] + (phantom-length _)) + (GC_TC_MUTEX_RELEASE))] [measure (set! measure_total += (phantom-length _))] [else])])])) @@ -611,7 +629,7 @@ (cond [(&& (!= cdr_p _) (&& (== (TYPEBITS cdr_p) type_pair) - (&& (= (ptr_get_segment cdr_p) (ptr_get_segment _)) + (&& (== (ptr_get_segment cdr_p) (ptr_get_segment _)) (&& (!= (FWDMARKER cdr_p) forward_marker) ;; Checking `marked_mask`, in ;; case the cdr pair is locked @@ -691,7 +709,9 @@ [(== (continuation-stack-length _) opportunistic-1-shot-flag) (set! (continuation-stack-length _copy_) (continuation-stack-clength _)) ;; May need to recur at end to promote link: - (set! conts_to_promote (S_cons_in space_new 0 _copy_ conts_to_promote))] + (GC_TC_MUTEX_ACQUIRE) + (set! conts_to_promote (S_cons_in _tc_ space_new 0 _copy_ conts_to_promote)) + (GC_TC_MUTEX_RELEASE)] [else (copy continuation-stack-length)])] [else @@ -703,6 +723,7 @@ (trace ref)] [(sweep sweep-in-old) (trace ref) ; can't trace `val` directly, because we need an impure relocate + (check-lock-failed) (define val : ptr (ref _))] [vfasl-copy (set! (ref _copy_) vfasl-val)] @@ -717,6 +738,7 @@ (case-flag as-dirty? [on (trace (just code))] [off (trace-pure (just code))]) + (check-lock-failed) (INITSYMCODE _ code)] [measure] [vfasl-copy @@ -740,7 +762,9 @@ ;; determine if key is old, since keyval might or might not have been ;; swept already. NB: assuming keyvals are always pairs. (when (&& (!= next Sfalse) (OLDSPACE keyval)) - (set! tlcs_to_rehash (S_cons_in space_new 0 _copy_ tlcs_to_rehash)))] + (GC_TC_MUTEX_ACQUIRE) + (set! tlcs_to_rehash (S_cons_in _tc_ space_new 0 _copy_ tlcs_to_rehash)) + (GC_TC_MUTEX_RELEASE))] [else (trace-nonself tlc-keyval) (trace-nonself tlc-next)])) @@ -784,6 +808,7 @@ [(sweep sweep-in-old self-test) ;; Bignum pointer mask may need forwarding (trace-pure (record-type-pm rtd)) + (check-lock-failed) (set! num (record-type-pm rtd))] [else])]) (let* ([index : iptr (- (BIGLEN num) 1)] @@ -852,7 +877,7 @@ (let* ([grtd : IGEN (GENERATION c_rtd)]) (set! (array-ref (array-ref S_G.countof grtd) countof_rtd_counts) += 1) ;; Allocate counts struct in same generation as rtd. Initialize timestamp & counts. - (thread_find_room_g _tc_ space_data grtd type_typed_object size_rtd_counts counts) + (find_room _tc_ space_data grtd type_typed_object size_rtd_counts counts) (set! (rtd-counts-type counts) type_rtd_counts) (set! (rtd-counts-timestamp counts) (array-ref S_G.gctimestamp 0)) (let* ([g : IGEN 0]) @@ -865,7 +890,8 @@ ;; For max_copied_generation, the list will get copied again in `rtds_with_counts` fixup; ;; meanwhile, allocating in `space_impure` would copy and sweep old list entries causing ;; otherwise inaccessible rtds to be retained - (S_cons_in (cond [(<= grtd MAX_CG) space_new] [else space_impure]) + (S_cons_in _tc_ + (cond [(<= grtd MAX_CG) space_new] [else space_impure]) (cond [(<= grtd MAX_CG) 0] [else grtd]) c_rtd (array-ref S_G.rtds_with_counts grtd))) @@ -1004,7 +1030,7 @@ (set! mask >>= 1)))] [else (trace-pure (* (ENTRYNONCOMPACTLIVEMASKADDR oldret))) - + (check-lock-failed) (let* ([num : ptr (ENTRYLIVEMASK oldret)] [index : iptr (BIGLEN num)]) (while @@ -1038,6 +1064,7 @@ (case-mode [sweep-in-old] [else + (check-lock-failed) (set! field (cast ptr (+ (cast uptr c_p) co)))]))] [else (trace-pure (just c_p))])) @@ -1094,6 +1121,7 @@ (case-mode [sweep + (check-lock-failed) (cond [(&& (== from_g static_generation) (&& (! S_G.retain_static_relocation) @@ -1102,16 +1130,22 @@ [else (let* ([t_si : seginfo* (SegInfo (ptr_get_segment t))]) (when (-> t_si old_space) - (set! n (size_reloc_table (reloc-table-size t))) - (count countof-relocation-table (just n) 1 sweep) (cond - [(-> t_si use_marks) - ;; Assert: (! (marked t_si t)) - (mark_typemod_data_object _tc_ t n t_si)] + [(SEGMENT_LOCK_ACQUIRE t_si) + (set! n (size_reloc_table (reloc-table-size t))) + (count countof-relocation-table (just n) 1 sweep) + (cond + [(-> t_si use_marks) + ;; Assert: (! (marked t_si t)) + (mark_typemod_data_object _tc_ t n t_si)] + [else + (let* ([oldt : ptr t]) + (find_room _tc_ space_data from_g typemod n t) + (memcpy_aligned (TO_VOIDP t) (TO_VOIDP oldt) n))]) + (SEGMENT_LOCK_RELEASE t_si)] [else - (let* ([oldt : ptr t]) - (thread_find_room_g _tc_ space_data from_g typemod n t) - (memcpy_aligned (TO_VOIDP t) (TO_VOIDP oldt) n))]))) + (RECORD_LOCK_FAILED _tc_ t_si) + (check-lock-failed)]))) (set! (reloc-table-code t) _) (set! (code-reloc _) t)]) (S_record_code_mod tc_in (cast uptr (TO_PTR (& (code-data _ 0)))) (cast uptr (code-length _)))] @@ -1388,12 +1422,15 @@ (case (lookup 'mode config) [(copy) (code-block - "change = 1;" + "ENABLE_LOCK_ACQUIRE" + "if (CHECK_LOCK_FAILED(tc_in)) return 0xff;" "check_triggers(si);" (code-block "ptr new_p;" "IGEN tg = TARGET_GENERATION(si);" (body) + "if (CHECK_LOCK_FAILED(tc_in)) return 0xff;" + "SWEEPCHANGE(tc_in) = SWEEP_CHANGE_PROGRESS;" "FWDMARKER(p) = forward_marker;" "FWDADDRESS(p) = new_p;" (and (lookup 'maybe-backreferences? config #f) @@ -1402,14 +1439,18 @@ "return tg;"))] [(mark) (code-block - "change = 1;" + "ENABLE_LOCK_ACQUIRE" + "if (CHECK_LOCK_FAILED(tc_in)) return 0xff;" "check_triggers(si);" (ensure-segment-mark-mask "si" "" '()) (body) + "SWEEPCHANGE(tc_in) = SWEEP_CHANGE_PROGRESS;" "ADD_BACKREFERENCE(p, si->generation);" "return si->generation;")] [(sweep) (code-block + (and (not (lookup 'as-dirty? config #f)) + "ENABLE_LOCK_ACQUIRE") (and (lookup 'maybe-backreferences? config #f) "PUSH_BACKREFERENCE(p)") (body) @@ -1417,6 +1458,10 @@ "POP_BACKREFERENCE()") (and (lookup 'as-dirty? config #f) "return youngest;"))] + [(sweep-in-old) + (code-block + "ENABLE_LOCK_ACQUIRE" + (body))] [(measure) (body)] [(self-test) @@ -1548,6 +1593,7 @@ (statements (cdr l) config))] [`(trace-early ,field) (code (trace-statement field config #t 'pure) + (check-lock-failure-statement config) (statements (cdr l) (if (symbol? field) (cons `(copy-extra ,field) config) config)))] @@ -1726,7 +1772,7 @@ (hashtable-set! (lookup 'used config) 'p_sz #t) (code (format "~a, ~a, p_sz, new_p);" (case mode - [(copy) "thread_find_room_g(tc_in, p_spc, tg"] + [(copy) "find_room(tc_in, p_spc, tg"] [(vfasl-copy) "FIND_ROOM(vfi, p_vspc"]) (as-c 'type (lookup 'basetype config))) (statements (let ([extra (lookup 'copy-extra config #f)]) @@ -1776,6 +1822,7 @@ (unless (null? (cdr l)) (error 'skip-forwarding "not at end")) (code "*dest = new_p;" + "SWEEPCHANGE(tc_in) = SWEEP_CHANGE_PROGRESS;" "return tg;")] [else (statements (cdr l) config)])] @@ -1808,6 +1855,10 @@ (statements (list count-stmt) config)))] [else (statements (cdr l) config)])] + [`(check-lock-failed) + (code + (check-lock-failure-statement config) + (statements (cdr l) config))] [`(define ,id : ,type ,rhs) (let* ([used (lookup 'used config)] [prev-used? (hashtable-ref used id #f)]) @@ -2153,7 +2204,7 @@ [no-sweep? (or (memq 'no-sweep flags) (eq? known-space 'space-data))] [within-loop-statement - (lambda (decl si step count?) + (lambda (decl si step count? final) (code-block "uptr offset = 0;" "while (offset < p_sz) {" @@ -2162,6 +2213,7 @@ (format " ~a->marked_mask[segment_bitmap_byte(mark_p)] |= segment_bitmap_bit(mark_p);" si) (and count? (format " ~a->marked_count += ~a;" si step)) (format " offset += ~a;" step) + final "}"))] [type (let ([t (lookup 'basetype config)]) (if (eq? t 'typemod) @@ -2191,18 +2243,27 @@ " seginfo *mark_si; IGEN g;" " si->marked_count += ((uptr)build_ptr(seg+1,0)) - addr;" " seg++;" + " /* Note: taking a sequence of locks for a span of segments */" " while (seg < end_seg) {" + " ENABLE_LOCK_ACQUIRE" " mark_si = SegInfo(seg);" + " SEGMENT_LOCK_MUST_ACQUIRE(mark_si);" " g = mark_si->generation;" " if (!fully_marked_mask[g]) init_fully_marked_mask(tc_in, g);" " mark_si->marked_mask = fully_marked_mask[g];" " mark_si->marked_count = bytes_per_segment;" + " SEGMENT_LOCK_RELEASE(mark_si);" " seg++;" " }" " mark_si = SegInfo(end_seg);" - (ensure-segment-mark-mask "mark_si" " " '()) - " /* no need to set a bit: just make sure `marked_mask` is non-NULL */" - " mark_si->marked_count += addr + p_sz - (uptr)build_ptr(end_seg,0);" + " {" + " ENABLE_LOCK_ACQUIRE" + " SEGMENT_LOCK_MUST_ACQUIRE(mark_si);" + (ensure-segment-mark-mask "mark_si" " " '()) + " /* no need to set a bit: it's enough to have made `marked_mask` non-NULL */" + " mark_si->marked_count += addr + p_sz - (uptr)build_ptr(end_seg,0);" + " SEGMENT_LOCK_RELEASE(mark_si);" + " }" "}")]))] [within-segment? (code @@ -2221,7 +2282,7 @@ "mark_p = (ptr)((uptr)mark_p + byte_alignment);" (loop sz)))))))] [else - (within-loop-statement #f "si" "byte_alignment" #f)]))] + (within-loop-statement #f "si" "byte_alignment" #f #f)]))] [else (let ([step "byte_alignment"]) (code-block @@ -2229,14 +2290,17 @@ "if (addr_get_segment(addr) == addr_get_segment(addr + p_sz - 1))" (code-block "si->marked_count += p_sz;" - (within-loop-statement #f "si" step #f)) + (within-loop-statement #f "si" step #f #f)) "else" (within-loop-statement (code " seginfo *mark_si = SegInfo(ptr_get_segment(mark_p));" + " ENABLE_LOCK_ACQUIRE" + " SEGMENT_LOCK_MUST_ACQUIRE(mark_si);" (ensure-segment-mark-mask "mark_si" " " '())) "mark_si" step - #t)))]) + #t + " SEGMENT_LOCK_RELEASE(mark_si);")))]) (cond [no-sweep? #f] [else @@ -2248,6 +2312,20 @@ (code-block push))] [else push]))])))) + (define (check-lock-failure-statement config) + (let ([mode (lookup 'mode config)]) + (case mode + [(copy mark sweep) + (code + "if (CHECK_LOCK_FAILED(tc_in))" + (case mode + [(copy mark) (code-block "return 0xff;")] + [(sweep sweep-in-old) + (if (lookup 'as-dirty? config #f) + (code-block "return 0xff;") + (code-block "return;"))]))] + [else #f]))) + (define (field-expression field config arg protect?) (if (symbol? field) (cond @@ -2284,7 +2362,7 @@ (define (ensure-segment-mark-mask si inset flags) (code (format "~aif (!~a->marked_mask) {" inset si) - (format "~a thread_find_room_g_voidp(tc_in, space_data, ~a->generation, ptr_align(segment_bitmap_bytes), ~a->marked_mask);" + (format "~a find_room_voidp(tc_in, space_data, ~a->generation, ptr_align(segment_bitmap_bytes), ~a->marked_mask);" inset si si) (if (memq 'no-clear flags) (format "~a /* no clearing needed */" inset)