596 lines
		
	
	
	
		
			25 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			596 lines
		
	
	
	
		
			25 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # Mf-base
 | |
| # Copyright 1984-2017 Cisco Systems, Inc.
 | |
| # 
 | |
| # Licensed under the Apache License, Version 2.0 (the "License");
 | |
| # you may not use this file except in compliance with the License.
 | |
| # You may obtain a copy of the License at
 | |
| # 
 | |
| # http://www.apache.org/licenses/LICENSE-2.0
 | |
| # 
 | |
| # Unless required by applicable law or agreed to in writing, software
 | |
| # distributed under the License is distributed on an "AS IS" BASIS,
 | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| # See the License for the specific language governing permissions and
 | |
| # limitations under the License.
 | |
| 
 | |
| MAKEFLAGS += --no-print-directory
 | |
| 
 | |
| # the following flags control various compiler options.  flags prefixed by an x
 | |
| # separately control the options used while compiling a cross compiler.
 | |
| 
 | |
| # o determines the optimize level
 | |
| o = 3
 | |
| 
 | |
| # d is the debug level at which the system should be built
 | |
| d = 0
 | |
| 
 | |
| # cl determines the commonization level
 | |
| cl = (commonization-level)
 | |
| 
 | |
| # i determines whether inspector-information is generated: f for false, t for true
 | |
| i = f
 | |
| 
 | |
| # cp0 determines the number of cp0 (source optimizer) iterations run
 | |
| cp0 = 2
 | |
| 
 | |
| # fc determines whether fasl objects are compressed
 | |
| fc = t
 | |
| 
 | |
| # xf determines the compression format
 | |
| xf = (compress-format)
 | |
| 
 | |
| # xl determine the compression level
 | |
| xl = (compress-level)
 | |
| 
 | |
| # p (xp) determines whether source profiling is enabled: f for false, t for true.
 | |
| p = f
 | |
| xp = f
 | |
| 
 | |
| # bp (xpb) determines whether binary profiling is enabled: f for false, t for true.
 | |
| bp = f
 | |
| xbp = f
 | |
| 
 | |
| # c determines whether covin files are generated: f for false, t for true.
 | |
| c = f
 | |
| 
 | |
| # loadspd determines whether source-profile data is loaded: f for false, t for true
 | |
| loadspd = f
 | |
| 
 | |
| # dumpspd determines whether source-profile data is dumped: f for false, t for true
 | |
| dumpspd = f
 | |
| 
 | |
| # loadbpd determines whether binary-profile data is loaded: f for false, t for true
 | |
| loadbpd = f
 | |
| 
 | |
| # dumpbpd determines whether binary-profile data is dumped: f for false, t for true
 | |
| dumpbpd = f
 | |
| 
 | |
| # compile determines the entry point for compilng files
 | |
| # another useful value for this is compile-with-asm, defined in debug.ss
 | |
| compile = compile-file
 | |
| 
 | |
| # pdhtml determines whether profile-dump-html is called at the end of a build
 | |
| pdhtml = f
 | |
| 
 | |
| # gac determines whether cost-center allocation counts are generated: f for false, t for true
 | |
| gac = f
 | |
| 
 | |
| # gic determines whether cost-center instruction counts are generated: f for false, t for true
 | |
| gic = f
 | |
| 
 | |
| # pps determines whether pass timings are printed
 | |
| pps = f
 | |
| 
 | |
| # Explicit ".exe" needed for WSL
 | |
| ifeq ($(OS),Windows_NT)
 | |
|   ExeSuffix = .exe
 | |
| else
 | |
|   ExeSuffix =
 | |
| endif
 | |
| 
 | |
| # The following control where files sit and typically don't need to be changed, except
 | |
| # that Scheme and SCHEMEHEAPDIRS are set by Mf-cross to point to the host Scheme
 | |
| # implementation
 | |
| Scheme = ../bin/$m/scheme${ExeSuffix}
 | |
| export SCHEMEHEAPDIRS=../boot/%m
 | |
| export CHEZSCHEMELIBDIRS=.
 | |
| 
 | |
| # Define the libdirs separator character
 | |
| ifeq ($(OS),Windows_NT)
 | |
|   dirsep = ;
 | |
| else
 | |
|   dirsep = :
 | |
| endif
 | |
| 
 | |
| ProfileDumpSource = source.pd
 | |
| ProfileDumpBlock = block.pd
 | |
| PetiteBoot = ../boot/$m/petite.boot
 | |
| SchemeBoot = ../boot/$m/scheme.boot
 | |
| Cheader = ../boot/$m/scheme.h
 | |
| Cequates = ../boot/$m/equates.h
 | |
| Revision = ../boot/$m/revision
 | |
| 
 | |
| # The following controls the patch files loaded before compiling, typically used only
 | |
| # to load a new compiler for cross compilation
 | |
| patchfile =
 | |
| patch = patch
 | |
| 
 | |
| # putting cpnanopass.patch early for maximum make --jobs=2 benefit
 | |
| patchobj = patch.patch cpnanopass.patch cprep.patch cpcheck.patch\
 | |
|  cp0.patch cpvalid.patch cpcommonize.patch cpletrec.patch\
 | |
|  reloc.patch\
 | |
|  compile.patch fasl.patch syntax.patch env.patch\
 | |
|  read.patch interpret.patch ftype.patch strip.patch\
 | |
|  ubify.patch back.patch
 | |
| 
 | |
| #ordering constraints:
 | |
| #first: library, prims, mathprims, front, 5_?
 | |
| #last: back
 | |
| #newhash before read
 | |
| #io before read
 | |
| #event before 4
 | |
| #ftype after syntax
 | |
| #layout and record before strnum (first define-record)
 | |
| #date before 7
 | |
| #(there may be other constraints as well)
 | |
| 
 | |
| basesrc =\
 | |
|  library.ss prims.ss mathprims.ss record.ss 5_1.ss 5_2.ss 5_3.ss\
 | |
|  strnum.ss bytevector.ss 5_4.ss 5_6.ss 5_7.ss\
 | |
|  event.ss 4.ss front.ss foreign.ss 6.ss print.ss newhash.ss\
 | |
|  format.ss date.ss 7.ss cafe.ss trace.ss engine.ss\
 | |
|  interpret.ss cprep.ss cpcheck.ss cp0.ss cpvalid.ss cpcommonize.ss cpletrec.ss inspect.ss\
 | |
|  enum.ss io.ss read.ss primvars.ss syntax.ss costctr.ss expeditor.ss\
 | |
|  exceptions.ss pretty.ss env.ss\
 | |
|  fasl.ss reloc.ss pdhtml.ss strip.ss ftype.ss back.ss
 | |
| 
 | |
| baseobj = ${basesrc:%.ss=%.$m}
 | |
| 
 | |
| compilersrc =\
 | |
|  cpnanopass.ss compile.ss cback.ss
 | |
| 
 | |
| compilerobj = ${compilersrc:%.ss=%.$m}
 | |
| 
 | |
| src = ${basesrc} ${compilersrc}
 | |
| obj = ${baseobj} ${compilerobj}
 | |
| asm = $(basesrc:%.ss=%.asm)
 | |
| 
 | |
| macroobj =\
 | |
|  cmacros.so priminfo.so primvars.so env.so setup.so
 | |
| 
 | |
| allsrc =\
 | |
|  ${basesrc} ${compilersrc} cmacros.ss ${archincludes} setup.ss debug.ss priminfo.ss primdata.ss layout.ss\
 | |
|  base-lang.ss expand-lang.ss primref.ss types.ss io-types.ss fasl-helpers.ss hashtable-types.ss\
 | |
|  np-languages.ss
 | |
| 
 | |
| # doit uses a different Scheme process to compile each target
 | |
| doit: ${PetiteBoot} ${SchemeBoot} ${Cheader} ${Cequates} ${Revision}
 | |
| 
 | |
| # all uses a single Scheme process to compile all targets.  this is typically
 | |
| # faster when most of the targets need to be recompiled.
 | |
| all: bootall ${Cheader} ${Cequates} ${Revision}
 | |
| 
 | |
| # allx runs all up to three times and checks to see if the new boot file is the
 | |
| # same as the last, i.e., the system is properly bootstrapped.
 | |
| allx: prettyclean saveboot
 | |
| 	$(MAKE) all
 | |
| 	if $(MAKE) checkboot > /dev/null 2>&1; then echo fine ; else\
 | |
|           $(MAKE) prettyclean saveboot &&\
 | |
|           $(MAKE) all &&\
 | |
|           if $(MAKE) checkboot > /dev/null 2>&1; then echo fine ; else\
 | |
|             $(MAKE) prettyclean saveboot &&\
 | |
|             $(MAKE) all &&\
 | |
|             $(MAKE) checkboot ;\
 | |
|           fi\
 | |
|         fi
 | |
| 	$(MAKE) restoreboot
 | |
| ifneq ($(OS),Windows_NT)
 | |
| 	$(MAKE) resetbootlinks
 | |
| endif
 | |
| 
 | |
| # bootstrap runs allx if any sources have changed since the last bootstrap
 | |
| bootstrap: ${allsrc} | ${Revision}
 | |
| 	$(MAKE) allx
 | |
| 	touch bootstrap
 | |
| 
 | |
| # source eagerly creates links to most of the files that might be needed
 | |
| source: ${allsrc} mkheader.ss script.all
 | |
| 
 | |
| # profiled goes through the involved process of building a profile-optimized boot file
 | |
| profiled:
 | |
| 	$(MAKE) profileclean
 | |
| 	$(MAKE) all p=t
 | |
| 	$(MAKE) prettyclean
 | |
| 	$(MAKE) io.$m dumpspd=t
 | |
| 	$(MAKE) prettyclean
 | |
| 	$(MAKE) all loadspd=t bp=t PetiteBoot=../boot/$m/xpetite.boot SchemeBoot=../boot/$m/xscheme.boot
 | |
| 	$(MAKE) prettyclean
 | |
| 	$(MAKE) io.$m loadspd=t dumpbpd=t Scheme="../bin/$m/scheme -b ../boot/$m/xpetite.boot -b ../boot/$m/xscheme.boot"
 | |
| 	rm -f ../boot/$m/xpetite.boot ../boot/$m/xscheme.boot
 | |
| 	$(MAKE) prettyclean
 | |
| 	$(MAKE) all loadspd=t loadbpd=t
 | |
| 
 | |
| # clean removes the products of the targets above
 | |
| clean: profileclean
 | |
| 	rm -f bootstrap
 | |
| 	rm -f Make.out
 | |
| 
 | |
| # the remaining targets are typically not useful except to support those above
 | |
| 
 | |
| .SUFFIXES:
 | |
| .SUFFIXES: .ss .$m .patch .so .asm
 | |
| 
 | |
| .ss.$m:
 | |
| 	echo '(reset-handler abort)'\
 | |
|              '(optimize-level $o)'\
 | |
|              '(debug-level $d)'\
 | |
|              '(commonization-level $(cl))'\
 | |
|              '(fasl-compressed #$(fc))'\
 | |
|              '(compress-format $(xf))'\
 | |
|              '(compress-level $(xl))'\
 | |
|              '(when #$p (compile-profile (quote source)))'\
 | |
|              '(when #$(bp) (compile-profile (quote block)))'\
 | |
|              '(when #$(loadspd) (profile-load-data "${ProfileDumpSource}"))'\
 | |
|              '(when #$(loadbpd) (profile-load-data "${ProfileDumpBlock}"))'\
 | |
|              '(generate-inspector-information #$i)'\
 | |
|              '(generate-allocation-counts #${gac})'\
 | |
|              '(generate-instruction-counts #${gic})'\
 | |
|              '(generate-covin-files #$c)'\
 | |
|              '(run-cp0 (lambda (cp0 x)'\
 | |
|              '           (do ([i ${cp0} (fx- i 1)] [x x (cp0 x)])'\
 | |
|              '               ((fx= i 0) x))))'\
 | |
|              '(collect-trip-bytes (expt 2 24))'\
 | |
|              '(collect-request-handler (lambda () (collect 0 1)))'\
 | |
|              '(collect 1 2)'\
 | |
|              '(delete-file "$*.covin")'\
 | |
|              '(time (${compile} "$*.ss" "$*.$m" (quote $m)))'\
 | |
|              '(when #${pdhtml} (profile-dump-html))'\
 | |
|              '(when #${dumpspd} (profile-dump-data "${ProfileDumpSource}"))'\
 | |
|              '(when #${dumpbpd} (profile-dump-data "${ProfileDumpBlock}"))'\
 | |
|              | ${Scheme} -q ${macroobj} ${patchfile}
 | |
| 
 | |
| .ss.asm:
 | |
| 	echo '(reset-handler abort)'\
 | |
|              '(optimize-level $o)'\
 | |
|              '(debug-level $d)'\
 | |
|              '(commonization-level $(cl))'\
 | |
|              '(fasl-compressed #$(fc))'\
 | |
|              '(compress-format $(xf))'\
 | |
|              '(compress-level $(xl))'\
 | |
|              '(when #$p (compile-profile (quote source)))'\
 | |
|              '(when #$(bp) (compile-profile (quote block)))'\
 | |
|              '(when #$(loadspd) (profile-load-data "${ProfileDumpSource}"))'\
 | |
|              '(when #$(loadbpd) (profile-load-data "${ProfileDumpBlock}"))'\
 | |
|              '(generate-inspector-information #$i)'\
 | |
|              '(generate-allocation-counts #${gac})'\
 | |
|              '(generate-instruction-counts #${gic})'\
 | |
|              '(generate-covin-files #$c)'\
 | |
|              '(run-cp0 (lambda (cp0 x)'\
 | |
|              '           (do ([i ${cp0} (fx- i 1)] [x x (cp0 x)])'\
 | |
|              '               ((fx= i 0) x))))'\
 | |
|              '(collect-trip-bytes (expt 2 24))'\
 | |
|              '(collect-request-handler (lambda () (collect 0 1)))'\
 | |
|              '(collect 1 2)'\
 | |
|              '(print-gensym (quote pretty/suffix))'\
 | |
|              '(delete-file "$*.covin")'\
 | |
|              '(compile-with-asm "$*.ss" "$*.$m" (quote $m))'\
 | |
|              '(when #${pdhtml} (profile-dump-html))'\
 | |
|              '(when #${dumpspd} (profile-dump-data "${ProfileDumpSource}"))'\
 | |
|              '(when #${dumpbpd} (profile-dump-data "${ProfileDumpBlock}"))'\
 | |
|              | ${Scheme} -q ${macroobj} ${patchfile}
 | |
| 
 | |
| .ss.so:
 | |
| 	echo '(reset-handler abort)'\
 | |
|              '(base-exception-handler (lambda (c) (fresh-line) (display-condition c) (newline) (reset)))'\
 | |
| 	     '(keyboard-interrupt-handler (lambda () (display "interrupted---aborting\n") (reset)))'\
 | |
|              '(optimize-level $o)'\
 | |
|              '(debug-level $d)'\
 | |
|              '(commonization-level $(cl))'\
 | |
|              '(fasl-compressed #$(fc))'\
 | |
|              '(compress-format $(xf))'\
 | |
|              '(compress-level $(xl))'\
 | |
|              '(generate-inspector-information #$i)'\
 | |
|              '(subset-mode (quote system))'\
 | |
|              '(compile-file "$*.ss" "$*.so")'\
 | |
|              | ${Scheme} -q cmacros.so priminfo.so
 | |
| 
 | |
| .ss.patch:
 | |
| 	echo '(reset-handler abort)'\
 | |
|              '(optimize-level $o)'\
 | |
|              '(debug-level $d)'\
 | |
|              '(commonization-level $(cl))'\
 | |
|              '(fasl-compressed #$(fc))'\
 | |
|              '(compress-format $(xf))'\
 | |
|              '(compress-level $(xl))'\
 | |
|              '(when #$(xp) (compile-profile (quote source)))'\
 | |
|              '(when #$(xbp) (compile-profile (quote block)))'\
 | |
|              '(generate-inspector-information #$i)'\
 | |
|              '(run-cp0 (lambda (cp0 x)'\
 | |
|              '           (do ([i ${cp0} (fx- i 1)] [x x (cp0 x)])'\
 | |
|              '               ((fx= i 0) x))))'\
 | |
|              '(collect-trip-bytes (expt 2 24))'\
 | |
|              '(collect-request-handler (lambda () (collect 0 1)))'\
 | |
|              '(collect 1 2)'\
 | |
|              '(time (${compile} "$*.ss" "$*.patch" (quote $m)))'\
 | |
|              | ${Scheme} -q ${macroobj}
 | |
| 
 | |
| saveboot:
 | |
| 	cp -p -f ${PetiteBoot} ../boot/$m/sbb
 | |
| 	cp -p -f ${SchemeBoot} ../boot/$m/scb
 | |
| 
 | |
| checkboot:
 | |
| 	@echo '(reset-handler abort)'\
 | |
|               '(base-exception-handler (lambda (c) (fresh-line) (display-condition c) (newline) (reset)))'\
 | |
|               '(begin'\
 | |
|                  '(#%$$fasl-file-equal? "../boot/$m/sbb" "../boot/$m/petite.boot" #t)'\
 | |
|                  '(#%$$fasl-file-equal? "../boot/$m/scb" "../boot/$m/scheme.boot" #t)'\
 | |
|                  '(printf "bootfile comparison succeeded\n"))'\
 | |
|              | ../bin/$m/scheme${ExeSuffix} -b ../boot/$m/sbb -q
 | |
| 
 | |
| xcheckboot: ${macroobj} ${patchfile}
 | |
| 	@echo '(reset-handler abort)'\
 | |
|               '(base-exception-handler (lambda (c) (fresh-line) (display-condition c) (newline) (reset)))'\
 | |
|               '(begin'\
 | |
|                  '(#%$$fasl-file-equal? "../boot/$m/sbb" "../boot/$m/petite.boot" #t)'\
 | |
|                  '(#%$$fasl-file-equal? "../boot/$m/scb" "../boot/$m/scheme.boot" #t)'\
 | |
|                  '(printf "bootfile comparison succeeded\n"))'\
 | |
|              | ${Scheme} -q ${macroobj} ${patchfile}
 | |
| 
 | |
| restoreboot:
 | |
| 	-mv -f ../boot/$m/sbb ${PetiteBoot}
 | |
| 	-mv -f ../boot/$m/scb ${SchemeBoot}
 | |
| 
 | |
| resetbootlinks:
 | |
| 	-@echo '(reset-handler abort)'\
 | |
|                '(for-each'\
 | |
|                   '(lambda (fn)'\
 | |
|                      '(let ([fn (symbol->string fn)])'\
 | |
|                         '(unless (file-symbolic-link? fn)'\
 | |
|                            '(when (guard (c [else #f]) (#%$$fasl-file-equal? (format "../~a" fn) fn))'\
 | |
|                               '(system (format "ln -sf ../../~a ~a" fn fn))'\
 | |
|                               '(void)))))'\
 | |
|                   '(list (quote ${SchemeBoot}) (quote ${PetiteBoot})))'\
 | |
|              | ${Scheme} -q
 | |
| 
 | |
| ${PetiteBoot}: ${macroobj} ${patchfile} ${baseobj}
 | |
| 	echo '(reset-handler abort)'\
 | |
|              '(generate-covin-files #$c)'\
 | |
|              '(delete-file (string-append (path-root "${PetiteBoot}") ".covin"))'\
 | |
|              '(apply #%$$make-boot-file "${PetiteBoot}" (quote $m) (quote ())'\
 | |
|              '  (map symbol->string (quote (${baseobj}))))'\
 | |
|              | ${Scheme} -q ${macroobj} ${patchfile}
 | |
| 
 | |
| ${SchemeBoot}: ${macroobj} ${patchfile} ${compilerobj}
 | |
| 	echo '(reset-handler abort)'\
 | |
|              '(generate-covin-files #$c)'\
 | |
|              '(delete-file (string-append (path-root "${SchemeBoot}") ".covin"))'\
 | |
|              '(apply #%$$make-boot-file "${SchemeBoot}" (quote $m) (quote ("petite"))'\
 | |
|              '  (map symbol->string (quote (${compilerobj}))))'\
 | |
|              | ${Scheme} -q ${macroobj} ${patchfile}
 | |
| 
 | |
| cmacros.so: cmacros.ss machine.def layout.ss
 | |
| 	echo '(reset-handler abort)'\
 | |
|              '(base-exception-handler (lambda (c) (fresh-line) (display-condition c) (newline) (reset)))'\
 | |
|              '(keyboard-interrupt-handler (lambda () (display "interrupted---aborting\n") (reset)))'\
 | |
|              '(optimize-level $o)'\
 | |
|              '(debug-level $d)'\
 | |
|              '(commonization-level $(cl))'\
 | |
|              '(fasl-compressed #$(fc))'\
 | |
|              '(compress-format $(xf))'\
 | |
|              '(compress-level $(xl))'\
 | |
|              '(generate-inspector-information #$i)'\
 | |
|              '(subset-mode (quote system))'\
 | |
|              '(compile-file "$*.ss" "$*.so")'\
 | |
|              | ${Scheme} -q
 | |
| 
 | |
| priminfo.so: priminfo.ss primdata.ss cmacros.so
 | |
| 	echo '(reset-handler abort)'\
 | |
|              '(base-exception-handler (lambda (c) (fresh-line) (display-condition c) (newline) (reset)))'\
 | |
|              '(keyboard-interrupt-handler (lambda () (display "interrupted---aborting\n") (reset)))'\
 | |
|              '(optimize-level $o)'\
 | |
|              '(debug-level $d)'\
 | |
|              '(commonization-level $(cl))'\
 | |
|              '(fasl-compressed #$(fc))'\
 | |
|              '(compress-format $(xf))'\
 | |
|              '(compress-level $(xl))'\
 | |
|              '(generate-inspector-information #$i)'\
 | |
|              '(subset-mode (quote system))'\
 | |
|              '(compile-file "$*.ss" "$*.so")'\
 | |
|              | ${Scheme} -q cmacros.so
 | |
| 
 | |
| # supply primvars.so as well as cmacros.so
 | |
| mkheader.so: mkheader.ss cmacros.so primvars.so env.so
 | |
| 	echo '(reset-handler abort)'\
 | |
|              '(base-exception-handler (lambda (c) (fresh-line) (display-condition c) (newline) (reset)))'\
 | |
|              '(keyboard-interrupt-handler (lambda () (display "interrupted---aborting\n") (reset)))'\
 | |
|              '(optimize-level $o)'\
 | |
|              '(debug-level $d)'\
 | |
|              '(commonization-level $(cl))'\
 | |
|              '(fasl-compressed #$(fc))'\
 | |
|              '(compress-format $(xf))'\
 | |
|              '(compress-level $(xl))'\
 | |
|              '(generate-inspector-information #$i)'\
 | |
|              '(subset-mode (quote system))'\
 | |
|              '(compile-file "$*.ss" "$*.so")'\
 | |
|              | ${Scheme} -q cmacros.so priminfo.so primvars.so env.so
 | |
| 
 | |
| nanopass.so: $(shell echo ../nanopass/nanopass/*) ../nanopass/nanopass.ss
 | |
| 	echo '(reset-handler abort)'\
 | |
|              '(base-exception-handler (lambda (c) (fresh-line) (display-condition c) (newline) (reset)))'\
 | |
|              '(keyboard-interrupt-handler (lambda () (display "interrupted---aborting\n") (reset)))'\
 | |
|              '(optimize-level $o)'\
 | |
|              '(debug-level $d)'\
 | |
|              '(commonization-level $(cl))'\
 | |
|              '(fasl-compressed #$(fc))'\
 | |
|              '(compress-format $(xf))'\
 | |
|              '(compress-level $(xl))'\
 | |
|              '(generate-inspector-information #$i)'\
 | |
|              '(collect-trip-bytes (expt 2 24))'\
 | |
|              '(collect-request-handler (lambda () (collect 0 1)))'\
 | |
|              '(collect 1 2)'\
 | |
|              '(compile-library "../nanopass/nanopass.ss" "nanopass.so")'\
 | |
|              | ${Scheme} -q --libdirs "../nanopass${dirsep}${dirsep}." --compile-imported-libraries
 | |
| 
 | |
| rootsrc = $(shell cd ../../s; echo *)
 | |
| ${rootsrc}:
 | |
| ifeq ($(OS),Windows_NT)
 | |
| 	cp -p ../../s/$@ $@
 | |
| else
 | |
| 	ln -s ../../s/$@ $@
 | |
| endif
 | |
| 
 | |
| script.all: Mf-base
 | |
| 
 | |
| script.all makescript: 
 | |
| 	echo '(reset-handler abort)'\
 | |
|              '(for-each load (command-line-arguments))'\
 | |
|              '(optimize-level $o)'\
 | |
|              '(debug-level $d)'\
 | |
|              '(commonization-level $(cl))'\
 | |
|              '(fasl-compressed #$(fc))'\
 | |
|              '(compress-format $(xf))'\
 | |
|              '(compress-level $(xl))'\
 | |
|              '(when #$p (compile-profile (quote source)))'\
 | |
|              '(when #$(bp) (compile-profile (quote block)))'\
 | |
|              '(when #$(loadspd) (profile-load-data "${ProfileDumpSource}"))'\
 | |
|              '(when #$(loadbpd) (profile-load-data "${ProfileDumpBlock}"))'\
 | |
|              '(generate-inspector-information #$i)'\
 | |
|              '(generate-allocation-counts #${gac})'\
 | |
|              '(generate-instruction-counts #${gic})'\
 | |
|              '(#%$$enable-pass-timing #${pps})'\
 | |
|              '(generate-covin-files #$c)'\
 | |
|              '(run-cp0 (lambda (cp0 x)'\
 | |
|              '           (do ([i ${cp0} (fx- i 1)] [x x (cp0 x)])'\
 | |
|              '               ((fx= i 0) x))))'\
 | |
|              '(collect-trip-bytes (expt 2 24))'\
 | |
|              '(collect-request-handler (lambda () (collect 0 1)))'\
 | |
|              '(for-each (lambda (x) (delete-file (string-append (path-root (symbol->string x)) ".covin"))) (quote (${obj})))'\
 | |
|              '(time (for-each (lambda (x y)'\
 | |
|              '                   (collect 1 2)'\
 | |
|              '                   (${compile} (symbol->string x)'\
 | |
|              '                                 (symbol->string y)'\
 | |
|              '                                 (quote $m)))'\
 | |
|              '                (quote (${src}))'\
 | |
|              '                (quote (${obj}))))'\
 | |
|              '(when #${pps} (#%$$print-pass-stats))'\
 | |
|              '(delete-file (string-append (path-root "${PetiteBoot}") ".covin"))'\
 | |
|              '(apply #%$$make-boot-file "${PetiteBoot}" (quote $m) (quote ())'\
 | |
|              '  (map symbol->string (quote (${baseobj}))))'\
 | |
|              '(delete-file (string-append (path-root "${SchemeBoot}") ".covin"))'\
 | |
|              '(apply #%$$make-boot-file "${SchemeBoot}" (quote $m) (quote ("petite"))'\
 | |
|              '  (map symbol->string (quote (${compilerobj}))))'\
 | |
|              '(when #${pdhtml} (profile-dump-html))'\
 | |
|              '(when #${dumpspd} (profile-dump-data "${ProfileDumpSource}"))'\
 | |
|              '(when #${dumpbpd} (profile-dump-data "${ProfileDumpBlock}"))'\
 | |
|              > script.all
 | |
| 
 | |
| script-static.all:
 | |
| 	echo '(reset-handler abort)'\
 | |
|              '(for-each load (command-line-arguments))'\
 | |
|              '(optimize-level $o)'\
 | |
|              '(debug-level $d)'\
 | |
|              '(commonization-level $(cl))'\
 | |
|              '(fasl-compressed #$(fc))'\
 | |
|              '(compress-format $(xf))'\
 | |
|              '(compress-level $(xl))'\
 | |
|              '(when #$p (compile-profile (quote source)))'\
 | |
|              '(when #$(bp) (compile-profile (quote block)))'\
 | |
|              '(generate-inspector-information #$i)'\
 | |
|              '(generate-allocation-counts #${gac})'\
 | |
|              '(generate-instruction-counts #${gic})'\
 | |
|              '(generate-covin-files #$c)'\
 | |
|              '(run-cp0 (lambda (cp0 x)'\
 | |
|              '           (do ([i ${cp0} (fx- i 1)] [x x (cp0 x)])'\
 | |
|              '               ((fx= i 0) x))))'\
 | |
|              '(for-each (lambda (x) (delete-file (string-append (path-root (symbol->string x)) ".covin"))) (quote (${obj})))'\
 | |
|              '(compile-with-setup-closure-counts (quote (${closure-opt})) (quote (${src})) (quote (${obj})) (quote $m) #$r)'\
 | |
|              '(delete-file (string-append (path-root "${PetiteBoot}") ".covin"))'\
 | |
|              '(apply #%$$make-boot-file "${PetiteBoot}" (quote $m) (quote ())'\
 | |
|              '  (map symbol->string (quote (${baseobj}))))'\
 | |
|              '(delete-file (string-append (path-root "${SchemeBoot}") ".covin"))'\
 | |
|              '(apply #%$$make-boot-file "${SchemeBoot}" (quote $m) (quote ("petite"))'\
 | |
|              '  (map symbol->string (quote (${compilerobj}))))'\
 | |
|              '(when #${pdhtml} (profile-dump-html))'\
 | |
|              > script-static.all
 | |
| 
 | |
| script-dynamic.all:
 | |
| 	echo '(reset-handler abort)'\
 | |
|              '(for-each load (command-line-arguments))'\
 | |
|              '(optimize-level $o)'\
 | |
|              '(debug-level $d)'\
 | |
|              '(commonization-level $(cl))'\
 | |
|              '(fasl-compressed #$(fc))'\
 | |
|              '(compress-format $(xf))'\
 | |
|              '(compress-level $(xl))'\
 | |
|              '(when #$p (compile-profile (quote source)))'\
 | |
|              '(when #$(bp) (compile-profile (quote block)))'\
 | |
|              '(generate-inspector-information #$i)'\
 | |
|              '(generate-allocation-counts #${gac})'\
 | |
|              '(generate-instruction-counts #${gic})'\
 | |
|              '(generate-covin-files #$c)'\
 | |
|              '(run-cp0 (lambda (cp0 x)'\
 | |
|              '           (do ([i ${cp0} (fx- i 1)] [x x (cp0 x)])'\
 | |
|              '               ((fx= i 0) x))))'\
 | |
|              '(for-each (lambda (x) (delete-file (string-append (path-root (symbol->string x)) ".covin"))) (quote (${obj})))'\
 | |
|              '(compile-with-closure-counts (quote (${closure-opt})) (quote (${src})) (quote (${obj})) (quote $m) #$r)'\
 | |
|              '(delete-file (string-append (path-root "${PetiteBoot}") ".covin"))'\
 | |
|              '(apply #%$$make-boot-file "${PetiteBoot}" (quote $m) (quote ())'\
 | |
|              '  (map symbol->string (quote (${baseobj}))))'\
 | |
|              '(delete-file (string-append (path-root "${SchemeBoot}") ".covin"))'\
 | |
|              '(apply #%$$make-boot-file "${SchemeBoot}" (quote $m) (quote ("petite"))'\
 | |
|              '  (map symbol->string (quote (${compilerobj}))))'\
 | |
|              '(when #${pdhtml} (profile-dump-html))'\
 | |
|              > script-dynamic.all
 | |
| 
 | |
| closure-counts:  ${allsrc} ${patchfile} ${macroobj} nanopass.so base-lang.ss expand-lang.ss primref.ss types.ss io-types.ss fasl-helpers.ss hashtable-types.ss script-static.all script-dynamic.all
 | |
| 	${Scheme} -q ${macroobj} ${patchfile} --script script-static.all
 | |
| 	$(MAKE) ${PetiteBoot} ${SchemeBoot}
 | |
| 	${Scheme} -q ${macroobj} ${patchfile} --script script-dynamic.all
 | |
| 	$(MAKE) all
 | |
| 
 | |
| bootall: ${allsrc} ${patchfile} ${macroobj} nanopass.so makescript
 | |
| 	${Scheme} -q ${macroobj} ${patchfile} --script script.all
 | |
| 
 | |
| ${patch}: ${patchobj}
 | |
| 	rm -f ${patch}
 | |
| 	cat ${patchobj} > ${patch}
 | |
| 
 | |
| ${asm} ${obj} mkheader.so: ${macroobj} nanopass.so base-lang.ss expand-lang.ss primref.ss types.ss io-types.ss fasl-helpers.ss hashtable-types.ss ${patchfile}
 | |
| primvars.so setup.so mkheader.so env.so: cmacros.so priminfo.so primref.ss
 | |
| setup.so: debug.ss
 | |
| 
 | |
| ${patchobj}: ${macroobj} nanopass.so base-lang.ss expand-lang.ss primref.ss types.ss io-types.ss fasl-helpers.ss hashtable-types.ss env.ss
 | |
| cpnanopass.$m cpnanopass.patch: nanopass.so np-languages.ss ${archincludes}
 | |
| 5_4.$m: ../unicode/unicode-char-cases.ss ../unicode/unicode-charinfo.ss
 | |
| 
 | |
| ${Cheader}: mkheader.so ${macroobj} nanopass.so base-lang.ss expand-lang.ss primref.ss types.ss io-types.ss fasl-helpers.ss hashtable-types.ss
 | |
| 	(if [ -r ${Cheader} ]; then mv -f ${Cheader} ${Cheader}.bak; fi)
 | |
| 	echo '(reset-handler abort)'\
 | |
|              '(mkscheme.h "${Cheader}" (quote $m))' |\
 | |
|          ${Scheme} -q ${macroobj} mkheader.so
 | |
| 	(if `cmp -s ${Cheader} ${Cheader}.bak`;\
 | |
|           then mv -f ${Cheader}.bak ${Cheader};\
 | |
|           else rm -f ${Cheader}.bak; fi)
 | |
| 
 | |
| ${Cequates}: mkheader.so ${macroobj} nanopass.so base-lang.ss expand-lang.ss primref.ss types.ss io-types.ss fasl-helpers.ss hashtable-types.ss
 | |
| 	(if [ -r ${Cequates} ]; then mv -f ${Cequates} ${Cequates}.bak; fi)
 | |
| 	echo '(reset-handler abort)'\
 | |
|              '(mkequates.h "${Cequates}")' |\
 | |
|          ${Scheme} -q ${macroobj} mkheader.so
 | |
| 	(if `cmp -s ${Cequates} ${Cequates}.bak`;\
 | |
|           then mv -f ${Cequates}.bak ${Cequates};\
 | |
|           else rm -f ${Cequates}.bak; fi)
 | |
| 
 | |
| .PHONY: ${Revision}
 | |
| ${Revision}: update-revision
 | |
| 	@./update-revision > ${Revision}
 | |
| 
 | |
| examples:
 | |
| 	( cd ../examples && ${MAKE} all Scheme="${Scheme} ../s/${patchfile}" )
 | |
| 
 | |
| prettyclean:
 | |
| 	rm -f *.$m xpatch ${patch} *.patch *.so *.covin *.asm script.all header.tmp *.html
 | |
| 	rm -rf nanopass
 | |
| 
 | |
| profileclean: prettyclean
 | |
| 	rm -f ${ProfileDumpSource} ${ProfileDumpBlock}
 | 
