From ad4dcdeac0a4e025dd81c6a60a553bf56ae03943 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 29 Aug 2015 18:46:58 -0600 Subject: [PATCH] cross-compilation support in the top-level makefile --- INSTALL.txt | 15 ++++-- Makefile | 55 +++++++++++---------- racket/collects/setup/unixstyle-install.rkt | 8 +-- 3 files changed, 44 insertions(+), 34 deletions(-) diff --git a/INSTALL.txt b/INSTALL.txt index 202705e4ba..5b96efcad5 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -183,10 +183,17 @@ but under Windows, encoding-conversion, extflonum, and SSL functionality is hobbled until native libraries from the `racket-win32-i386' or `racket-win32-x86_64' package are installed. -On all platforms, `JOB_OPTIONS' as a makefile variable and -`PLT_SETUP_OPTIONS' as an environment variable are passed on to the -`raco setup' that is used to build minimal-Racket libraries. See the -documentation for `raco setup' for information on the options. +On all platforms, fom the top-level makefile, `JOB_OPTIONS' as a +makefile variable and `PLT_SETUP_OPTIONS' as an environment variable +are passed on to the `raco setup' that is used to build minimal-Racket +libraries. See the documentation for `raco setup' for information on +the options. + +For cross compilation, add configuration options to +`CONFIGURE_ARGS_qq="..."' as descibed in the "README" of "racket/src", +but also add a `PLAIN_RACKET=...' argument for the top-level makefile +to specify the same executable as in an `--enable-racket=...' for +`configure'. Installing Packages ------------------- diff --git a/Makefile b/Makefile index 3d354ec30a..842eb0ba36 100644 --- a/Makefile +++ b/Makefile @@ -29,14 +29,15 @@ PKGS = main-distribution main-distribution-test PLAIN_RACKET = racket/bin/racket WIN32_PLAIN_RACKET = racket\racket -PLAIN_RACO = racket/bin/racket -N raco -l- raco -WIN32_PLAIN_RACO = racket\racket -N raco -l- raco +# In case of cross-installation, point explicitly to local content: +RUN_RACKET = $(PLAIN_RACKET) -G racket/etc -X racket/collects +WIN32_RUN_RACKET = $(WIN32_PLAIN_RACKET) -G racket/etc -X racket/collects + +RUN_RACO = $(RUN_RACKET) -N raco -l- raco +WIN32_RUN_RACO = $(WIN32_RUN_RACKET) -N raco -l- raco DEFAULT_SRC_CATALOG = http://pkgs.racket-lang.org -MACOSX_CHECK_ARGS = -I racket/base -e '(case (system-type) [(macosx) (exit 0)] [else (exit 1)])' -MACOSX_CHECK = $(PLAIN_RACKET) -G build/config $(MACOSX_CHECK_ARGS) - CPUS = in-place: @@ -61,18 +62,18 @@ ALL_PLT_SETUP_OPTIONS = $(JOB_OPTIONS) $(PLT_SETUP_OPTIONS) plain-in-place: $(MAKE) base $(MAKE) pkgs-catalog - $(PLAIN_RACO) pkg update $(UPDATE_PKGS_ARGS) - $(PLAIN_RACO) pkg install $(INSTALL_PKGS_ARGS) - $(PLAIN_RACO) setup --only-foreign-libs $(ALL_PLT_SETUP_OPTIONS) - $(PLAIN_RACO) setup $(ALL_PLT_SETUP_OPTIONS) + $(RUN_RACO) pkg update $(UPDATE_PKGS_ARGS) + $(RUN_RACO) pkg install $(INSTALL_PKGS_ARGS) + $(RUN_RACO) setup --only-foreign-libs $(ALL_PLT_SETUP_OPTIONS) + $(RUN_RACO) setup $(ALL_PLT_SETUP_OPTIONS) win32-in-place: $(MAKE) win32-base $(MAKE) win32-pkgs-catalog - $(WIN32_PLAIN_RACO) pkg update $(UPDATE_PKGS_ARGS) - $(WIN32_PLAIN_RACO) pkg install $(INSTALL_PKGS_ARGS) - $(WIN32_PLAIN_RACO) setup --only-foreign-libs $(ALL_PLT_SETUP_OPTIONS) - $(WIN32_PLAIN_RACO) setup $(ALL_PLT_SETUP_OPTIONS) + $(WIN32_RUN_RACO) pkg update $(UPDATE_PKGS_ARGS) + $(WIN32_RUN_RACO) pkg install $(INSTALL_PKGS_ARGS) + $(WIN32_RUN_RACO) setup --only-foreign-libs $(ALL_PLT_SETUP_OPTIONS) + $(WIN32_RUN_RACO) setup $(ALL_PLT_SETUP_OPTIONS) # Rebuild without consulting catalogs or package sources: @@ -86,11 +87,11 @@ cpus-as-is: plain-as-is: $(MAKE) base - $(PLAIN_RACO) setup $(ALL_PLT_SETUP_OPTIONS) + $(RUN_RACO) setup $(ALL_PLT_SETUP_OPTIONS) win32-as-is: $(MAKE) win32-base - $(WIN32_PLAIN_RACO) setup $(ALL_PLT_SETUP_OPTIONS) + $(WIN32_RUN_RACO) setup $(ALL_PLT_SETUP_OPTIONS) # ------------------------------------------------------------ # Unix-style build (Unix and Mac OS X, only) @@ -299,11 +300,11 @@ SVR_PRT = $(SERVER):$(SERVER_PORT) SVR_CAT = http://$(SVR_PRT)/$(SERVER_CATALOG_PATH) # Helper macros: -USER_CONFIG = -G build/user/config -A build/user -RACKET = racket/bin/racket $(USER_CONFIG) -RACO = racket/bin/racket $(USER_CONFIG) -N raco -l- raco -WIN32_RACKET = racket\racket $(USER_CONFIG) -WIN32_RACO = racket\racket $(USER_CONFIG) -N raco -l- raco +USER_CONFIG = -G build/user/config -X racket/collects -A build/user +RACKET = $(PLAIN_RACKET) $(USER_CONFIG) +RACO = $(PLAIN_RACKET) $(USER_CONFIG) -N raco -l- raco +WIN32_RACKET = $(WIN32_PLAIN_RACKET) $(USER_CONFIG) +WIN32_RACO = $(WIN32_PLAIN_RACKET) $(USER_CONFIG) -N raco -l- raco X_AUTO_OPTIONS = --skip-installed --deps search-auto --pkgs $(JOB_OPTIONS) USER_AUTO_OPTIONS = --scope user $(X_AUTO_OPTIONS) LOCAL_USER_AUTO = --catalog build/local/catalog $(USER_AUTO_OPTIONS) @@ -312,9 +313,9 @@ REMOTE_USER_AUTO = --catalog $(SVR_CAT) $(USER_AUTO_OPTIONS) REMOTE_INST_AUTO = --catalog $(SVR_CAT) --scope installation $(X_AUTO_OPTIONS) CONFIG_MODE_q = "$(CONFIG)" "$(CONFIG_MODE)" BUNDLE_CONFIG = bundle/racket/etc/config.rktd -BUNDLE_RACO_FLAGS = -A bundle/user -l raco -BUNDLE_RACO = bundle/racket/bin/racket $(BUNDLE_RACO_FLAGS) -WIN32_BUNDLE_RACO = bundle\racket\racket $(BUNDLE_RACO_FLAGS) +BUNDLE_RACO_FLAGS = -G bundle/racket/config -X bundle/racket/collects -A bundle/user -l raco +BUNDLE_RACO = $(PLAIN_RACKET) $(BUNDLE_RACO_FLAGS) +WIN32_BUNDLE_RACO = $(WIN32_PLAIN_RACKET) $(BUNDLE_RACO_FLAGS) # ------------------------------------------------------------ # Linking all packages (development mode; not an installer build) @@ -323,9 +324,9 @@ PKGS_CATALOG = -U -G build/config -l- pkg/dirs-catalog --link --check-metadata PKGS_CONFIG = -U -G build/config racket/src/pkgs-config.rkt pkgs-catalog: - $(PLAIN_RACKET) $(PKGS_CATALOG) racket/share/pkgs-catalog pkgs - $(PLAIN_RACKET) $(PKGS_CONFIG) "$(DEFAULT_SRC_CATALOG)" "$(SRC_CATALOG)" - $(PLAIN_RACKET) racket/src/pkgs-check.rkt racket/share/pkgs-catalog + $(RUN_RACKET) $(PKGS_CATALOG) racket/share/pkgs-catalog pkgs + $(RUN_RACKET) $(PKGS_CONFIG) "$(DEFAULT_SRC_CATALOG)" "$(SRC_CATALOG)" + $(RUN_RACKET) racket/src/pkgs-check.rkt racket/share/pkgs-catalog win32-pkgs-catalog: $(MAKE) pkgs-catalog PLAIN_RACKET="$(WIN32_PLAIN_RACKET)" @@ -428,7 +429,7 @@ binary-catalog-server: # client is the same as the server. PROP_ARGS = SERVER=$(SERVER) SERVER_PORT=$(SERVER_PORT) SERVER_HOSTS="$(SERVER_HOSTS)" \ - PKGS="$(PKGS)" BUILD_STAMP="$(BUILD_STAMP)" \ + PKGS="$(PKGS)" PLAIN_RACKET="$(PLAIN_RACKET)" BUILD_STAMP="$(BUILD_STAMP)" \ RELEASE_MODE=$(RELEASE_MODE) SOURCE_MODE=$(SOURCE_MODE) \ VERSIONLESS_MODE=$(VERSIONLESS_MODE) MAC_PKG_MODE=$(MAC_PKG_MODE) \ PKG_SOURCE_MODE="$(PKG_SOURCE_MODE)" INSTALL_NAME="$(INSTALL_NAME)"\ diff --git a/racket/collects/setup/unixstyle-install.rkt b/racket/collects/setup/unixstyle-install.rkt index bcc6e3ff56..5a94021a42 100644 --- a/racket/collects/setup/unixstyle-install.rkt +++ b/racket/collects/setup/unixstyle-install.rkt @@ -28,6 +28,7 @@ ;; path names. #lang racket/base +(require setup/cross-system) (module test racket/base) @@ -377,7 +378,7 @@ (printf ";; generated by unixstyle-install\n") (printf "#hash(\n") (out! 'doc-dir (dir: 'doc)) - (when (eq? 'shared (system-type 'link)) ; never true for now + (when (eq? 'shared (cross-system-type 'link)) ; never true for now (out! 'dll-dir (dir: 'lib))) (out! 'lib-dir (dir: 'librkt)) (out! 'share-dir (dir: 'sharerkt)) @@ -466,7 +467,7 @@ (error "Cannot handle distribution of shared-libraries (yet)")) (with-handlers ([exn? (lambda (e) (undo-changes) (raise e))]) (define binfiles (ls* "bin")) - (if (eq? 'windows (system-type)) + (if (eq? 'windows (cross-system-type)) ;; Windows executables appear in the immediate directory: (for ([f (in-list (directory-list))]) (when (and (file-exists? f) @@ -483,7 +484,8 @@ (parameterize ([current-skip-filter (make-apps-skip)]) (do-tree "share" 'sharerkt)) (do-tree "etc" 'config) - (do-tree "man" 'man #:missing 'skip) ; not included for Windows + (unless (eq? 'windows (cross-system-type)) + (do-tree "man" 'man #:missing 'skip)) ;; (when (and (not (equal? (dir: 'src) "")) (directory-exists? "src")) ;; (do-tree "src" 'src)) ;; don't use the above -- it would be pointless to put the source tree in