cs: convert Rumble though expander to boot file

Loading as a boot file saves time later on major GCs.
This commit is contained in:
Matthew Flatt 2018-08-08 09:53:54 -06:00
parent f2a7405dda
commit 3e9196ab5c
6 changed files with 72 additions and 18 deletions

View File

@ -110,16 +110,19 @@ $(SCHEME_BIN):
cd @SCHEME_SRC@ && ./configure @SCHEME_CONFIG_ARGS@
cd @SCHEME_SRC@ && make
racket.boot: racket.so
$(SCHEME) --script $(srcdir)/convert-to-boot.ss @COMPRESS_COMP@ racket.so racket.boot
# ----------------------------------------
# Unix
EMBED_DEPS = $(srcdir)/embed-boot.rkt
racketcs@NOT_OSX@: raw_racketcs racket.so $(EMBED_DEPS)
$(RACKET) $(srcdir)/embed-boot.rkt @COMPRESS_COMP@ raw_racketcs racketcs $(SCHEME_INC) racket.so
$(RACKET) $(srcdir)/embed-boot.rkt @COMPRESS_COMP@ raw_racketcs racketcs $(SCHEME_INC) racket.boot
gracketcs@NOT_OSX@: raw_gracketcs racket.so $(EMBED_DEPS)
$(RACKET) $(srcdir)/embed-boot.rkt @COMPRESS_COMP@ raw_gracketcs gracketcs $(SCHEME_INC) racket.so
$(RACKET) $(srcdir)/embed-boot.rkt @COMPRESS_COMP@ raw_gracketcs gracketcs $(SCHEME_INC) racket.boot
BOOT_OBJS = boot.o $(SCHEME_INC)/kernel.o rktio/librktio.a
@ -152,7 +155,7 @@ $(GRACKET_BIN): grmain.o $(RKTFW) $(GRAPPSKEL)
$(GRAPPSKEL): $(srcdir)/../../mac/osx_appl.rkt $(srcdir)/../../racket/src/schvers.h $(srcdir)/../../mac/icon/GRacket.icns
env $(RACKET) $(srcdir)/../../mac/osx_appl.rkt $(srcdir)/../.. "CS"
BOOT_FILES = $(SCHEME_INC)/petite.boot $(SCHEME_INC)/scheme.boot racket.so
BOOT_FILES = $(SCHEME_INC)/petite.boot $(SCHEME_INC)/scheme.boot racket.boot
FW_BOOT_DEST = Racket.framework/Versions/$(FWVERSION)_CS/boot
$(RKTFW): $(BOOT_OBJS) $(BOOT_FILES)
@ -162,8 +165,8 @@ $(RKTFW): $(BOOT_OBJS) $(BOOT_FILES)
ln -s Versions/$(FWVERSION)_CS/Racket Racket.framework/Racket
mkdir -p Racket.framework/Versions/$(FWVERSION)_CS/boot
cp $(SCHEME_INC)/petite.boot $(SCHEME_INC)/scheme.boot $(FW_BOOT_DEST)
cp racket.so $(FW_BOOT_DEST)
$(RACKET) $(srcdir)/adjust-compress.rkt @COMPRESS_COMP@ $(FW_BOOT_DEST)/petite.boot $(FW_BOOT_DEST)/scheme.boot $(FW_BOOT_DEST)/racket.so
cp racket.boot $(FW_BOOT_DEST)
$(RACKET) $(srcdir)/adjust-compress.rkt @COMPRESS_COMP@ $(FW_BOOT_DEST)/petite.boot $(FW_BOOT_DEST)/scheme.boot $(FW_BOOT_DEST)/racket.boot
# ----------------------------------------
# Common
@ -222,7 +225,7 @@ macos-install:
mkdir -p $(DESTDIR)"$(RKTFWDEST)/Versions/$(FWVERSION)_CS/boot"
cp $(RKTFWDIR)/boot/petite.boot $(DESTDIR)$(RKTFWDEST)/Versions/$(FWVERSION)_CS/boot/
cp $(RKTFWDIR)/boot/scheme.boot $(DESTDIR)$(RKTFWDEST)/Versions/$(FWVERSION)_CS/boot/
cp $(RKTFWDIR)/boot/racket.so $(DESTDIR)$(RKTFWDEST)/Versions/$(FWVERSION)_CS/boot/
cp $(RKTFWDIR)/boot/racket.boot $(DESTDIR)$(RKTFWDEST)/Versions/$(FWVERSION)_CS/boot/
/usr/bin/install_name_tool -change "@executable_path/Racket.framework/Versions/$(FWVERSION)_CS/Racket" "@FRAMEWORK_PREFIX@Racket.framework/Versions/$(FWVERSION)_CS/Racket" $(DESTDIR)"$(bindir)/racket$(CS_GR_INSTALLED)"
rm -rf $(DESTDIR)"$(libpltdir)/GRacket$(CS_GR_INSTALLED).app"
$(ICP) -r "GRacketCS.app" $(DESTDIR)"$(libpltdir)/GRacket$(CS_GR_INSTALLED).app"

View File

@ -9,6 +9,8 @@
#include "rktio.h"
#include "boot.h"
#define RACKET_AS_BOOT
#if defined(_MSC_VER) || defined(__MINGW32__)
# define BOOT_O_BINARY O_BINARY
#endif
@ -70,13 +72,21 @@ static void racket_exit(int v)
exit(v);
}
static void init_foreign()
{
# include "rktio.inc"
Sforeign_symbol("racket_exit", (void *)racket_exit);
}
void racket_boot(int argc, char **argv, char *self, long segment_offset,
char *coldir, char *configdir,
int pos1, int pos2, int pos3,
int is_gui)
/* exe argument already stripped from argv */
{
int fd;
#if !defined(RACKET_USE_FRAMEWORK) || !defined(RACKET_AS_BOOT)
int fd;
#endif
#ifdef RACKET_USE_FRAMEWORK
const char *fw_path;
#endif
@ -87,6 +97,9 @@ void racket_boot(int argc, char **argv, char *self, long segment_offset,
fw_path = get_framework_path();
Sregister_boot_file(path_append(fw_path, "petite.boot"));
Sregister_boot_file(path_append(fw_path, "scheme.boot"));
# ifdef RACKET_AS_BOOT
Sregister_boot_file(path_append(fw_path, "racket.boot"));
# endif
#else
fd = open(self, O_RDONLY | BOOT_O_BINARY);
@ -100,13 +113,16 @@ void racket_boot(int argc, char **argv, char *self, long segment_offset,
fd2 = open(self, O_RDONLY | BOOT_O_BINARY);
lseek(fd2, pos2, SEEK_SET);
Sregister_boot_file_fd("scheme", fd2);
# ifdef RACKET_AS_BOOT
fd = open(self, O_RDONLY | BOOT_O_BINARY);
lseek(fd, pos3, SEEK_SET);
Sregister_boot_file_fd("racket", fd);
# endif
}
#endif
Sbuild_heap(NULL, NULL);
# include "rktio.inc"
Sforeign_symbol("racket_exit", (void *)racket_exit);
Sbuild_heap(NULL, init_foreign);
{
ptr l = Snil;
@ -122,13 +138,25 @@ void racket_boot(int argc, char **argv, char *self, long segment_offset,
l = Scons(Sbytevector(configdir), l);
l = Scons(Sbytevector(coldir), l);
l = Scons(Sbytevector(self), l);
#ifdef RACKET_AS_BOOT
{
ptr c, start, apply;
c = Stop_level_value(Sstring_to_symbol("scheme-start"));
start = Scall0(c);
apply = Stop_level_value(Sstring_to_symbol("apply"));
Scall2(apply, start, l);
}
#else
Sset_top_level_value(Sstring_to_symbol("bytes-command-line-arguments"), l);
#endif
}
#ifdef RACKET_USE_FRAMEWORK
#ifndef RACKET_AS_BOOT
# ifdef RACKET_USE_FRAMEWORK
fd = open(path_append(fw_path, "racket.so"), O_RDONLY);
pos3 = 0;
#endif
# endif
{
ptr c, p;
@ -143,4 +171,5 @@ void racket_boot(int argc, char **argv, char *self, long segment_offset,
c = Stop_level_value(Sstring_to_symbol("load-compiled-from-port"));
Scall1(c, p);
}
#endif
}

View File

@ -0,0 +1,17 @@
(compile-compressed #f)
(define-values (src dest)
(let loop ([args (command-line-arguments)])
(cond
[(and (pair? args)
(equal? (car args) "--compress"))
(compile-compressed #t)
(loop (cdr args))]
[(null? args)
(error 'convert-to-boot "missing file arguments")]
[(and (pair? (cdr args)) (null? (cddr args)))
(values (car args) (cadr args))]
[else
(error 'convert-to-boot "extra arguments after files")])))
(make-boot-file dest '("petite" "scheme") src)

View File

@ -9,11 +9,11 @@
#:once-each
[("--compress") "Leave compiled code files as compressed"
(enable-compress!)]
#:args (src-file dest-file boot-dir racket.so)
#:args (src-file dest-file boot-dir racket.boot)
(define bstr1 (adjust-compress (file->bytes (build-path boot-dir "petite.boot"))))
(define bstr2 (adjust-compress (file->bytes (build-path boot-dir "scheme.boot"))))
(define bstr3 (adjust-compress (file->bytes racket.so)))
(define bstr3 (adjust-compress (file->bytes racket.boot)))
(with-handlers ([exn? (lambda (x)
(when (file-exists? dest-file)

View File

@ -42,7 +42,13 @@
(define-syntax seq (syntax-rules () [(_ expr ...) (define dummy (let () expr ... (void)))]))
(define (run the-command-line-arguments)
(define (run the-command-line-arguments/maybe-bytes)
(define the-command-line-arguments
(map (lambda (s) (if (bytes? s)
(bytes->string/locale s #\?)
s))
the-command-line-arguments/maybe-bytes))
(seq
(unless (>= (length the-command-line-arguments) 5)
(error 'racket "expected `self`, `collects`, and `libs` paths plus `segment-offset` and `is-gui?` to start"))
@ -518,8 +524,7 @@
(define the-command-line-arguments
(or (and (top-level-bound? 'bytes-command-line-arguments)
(map (lambda (s) (bytes->string/locale s #\?))
(top-level-value 'bytes-command-line-arguments)))
(top-level-value 'bytes-command-line-arguments))
(command-line-arguments)))
(if (null? the-command-line-arguments)

BIN
racket/src/cs/racket.boot Normal file

Binary file not shown.