597 lines
		
	
	
	
		
			25 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			597 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} |