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}
|