Skip to content

Commit

Permalink
Generate a tools/build/Makefile-JS.in which allows the passing of the…
Browse files Browse the repository at this point in the history
… nqp-js tests.
  • Loading branch information
pmurias committed Jul 25, 2014
1 parent bca9dec commit 196806c
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 150 deletions.
174 changes: 41 additions & 133 deletions tools/build/Makefile-JS.in
@@ -1,153 +1,61 @@
# This is the JS Makefile

JS_BUILD_DIR = gen/js
# This is the JS Makefile - autogenerated by gen-makefile.nqp
JS_BUILD_DIR = gen/js
JS_STAGE1 = $(JS_BUILD_DIR)/stage1
JS_STAGE2 = $(JS_BUILD_DIR)/stage2


JS_NQPCORE_PBC = NQPCORE.setting.pbc

$(JS_STAGE1)/$(QASTNODE_COMBINED): $(QASTNODE_SOURCES)
$(MKPATH) $(JS_STAGE1)/gen
$(PERL) tools/build/gen-cat.pl js $(QASTNODE_SOURCES) > $(JS_STAGE1)/$(QASTNODE_COMBINED)

js-all: $(JS_STAGE1)/$(QASTNODE_COMBINED) js-cross_compiler js-install-modules

JS_NQP = nqp-p
JS_PARROT = parrot
js-runner-default: js-all
$(JS_STAGE1)/QAST/Compiler.pbc: src/vm/js/QAST/Compiler.nqp
mkdir -p $(JS_STAGE1)/QAST
$(JS_NQP) --target=pir --output=$(JS_STAGE1)/QAST/Compiler.pir --encoding=utf8 --module-path=$(JS_STAGE1)/ src/vm/js/QAST/Compiler.nqp
$(JS_PARROT) -o $(JS_STAGE1)/QAST/Compiler.pbc $(JS_STAGE1)/QAST/Compiler.pir

# TODO use a stage0 nqp-p rather than the installed one

JS_NQP = nqp-p
JS_PARROT = parrot
#PBC_TO_EXE = pbc_to_exe

PERL6_QCJ = src/vm/js/QAST/Compiler.nqp
PERL6_QCJ_PIR = $(JS_STAGE1)/QAST/Compiler.pir
PERL6_QCJ_PBC = $(JS_STAGE1)/QAST/Compiler.pbc

JS_HLL_BACKEND = src/vm/js/HLL/Backend.nqp
JS_HLL_PIR = $(JS_STAGE1)/hll-backend.pir
JS_HLL_PBC = $(JS_STAGE1)/HLL/Backend.pbc

$(PERL6_QCJ_PBC): $(PERL6_QCJ)
$(MKPATH) $(JS_STAGE1)/QAST
$(JS_NQP) --target=pir --output=$(PERL6_QCJ_PIR) --encoding=utf8 $(PERL6_QCJ)
$(JS_PARROT) -o $(PERL6_QCJ_PBC) $(PERL6_QCJ_PIR)

js-clean:
$(RM_RF) $(PERL6_QCJ_PBC)

JS_CROSS_COMPILER=$(PERL6_QCJ_PBC) $(JS_HLL_PBC) $(JS_STAGE2)/$(CORE_SETTING_COMBINED).nqp $(JS_STAGE2)/nqpmo.pbc $(JS_STAGE2)/$(JS_NQPCORE_PBC) $(JS_STAGE2)/QRegex.pbc
#$(JS_STAGE2)/NQPP6QRegex.pbc

js-cross_compiler: $(JS_CROSS_COMPILER)

JS_STAGE2_CORE=$(JS_STAGE2)/$(JS_NQPCORE_PBC) $(JS_STAGE2)/nqpmo.pbc

$(JS_HLL_PBC) : $(JS_HLL_BACKEND) $(PERL6_QCJ_PIR)
$(MKPATH) $(JS_STAGE1)/HLL
$(JS_NQP) --target=pir --module-path=gen/js/stage1 --output=$(JS_HLL_PIR) --encoding=utf8 $(JS_HLL_BACKEND)
$(JS_PARROT) -o $(JS_HLL_PBC) $(JS_HLL_PIR)

$(JS_STAGE2)/$(CORE_SETTING_COMBINED).nqp: $(CORE_SETTING_SOURCES)
$(MKPATH) $(JS_STAGE2)
$(PERL) tools/build/gen-cat.pl js $(CORE_SETTING_SOURCES) > $(JS_STAGE2)/$(CORE_SETTING_COMBINED).nqp
$(JS_STAGE1)/HLL/Backend.pbc: src/vm/js/HLL/Backend.nqp
mkdir -p $(JS_STAGE1)/HLL
$(JS_NQP) --target=pir --output=$(JS_STAGE1)/HLL/Backend.pir --encoding=utf8 --module-path=$(JS_STAGE1)/ src/vm/js/HLL/Backend.nqp
$(JS_PARROT) -o $(JS_STAGE1)/HLL/Backend.pbc $(JS_STAGE1)/HLL/Backend.pir

JS_STAGE1_COMPILER = $(JS_STAGE1)/QAST/Compiler.pbc $(JS_STAGE1)/HLL/Backend.pbc
$(JS_STAGE2)/$(NQP_MO_COMBINED): $(NQP_MO_SOURCES)
$(MKPATH) $(JS_STAGE2)
mkdir -p $(JS_STAGE2)
$(PERL) tools/build/gen-cat.pl js $(NQP_MO_SOURCES) > $(JS_STAGE2)/$(NQP_MO_COMBINED)

$(JS_STAGE2)/nqpmo.pbc : $(JS_STAGE2)/$(NQP_MO_COMBINED)
nqp-p --module-path $(JS_STAGE1) src/vm/js/bin/cross-compile.nqp $(JS_STAGE2)/$(NQP_MO_COMBINED) $(JS_STAGE2) nqpmo NULL 1
$(JS_STAGE2)/nqpmo.pbc: $(JS_STAGE1_COMPILER) $(JS_STAGE2)/$(NQP_MO_COMBINED)
mkdir -p $(JS_STAGE2)
nqp-p --module-path $(JS_STAGE1) src/vm/js/bin/cross-compile.nqp $(JS_STAGE2)/$(NQP_MO_COMBINED) $(JS_STAGE2)/ nqpmo NULL 1
$(JS_PARROT) -o $(JS_STAGE2)/nqpmo.pbc $(JS_STAGE2)/nqpmo.pir

$(JS_PARROT) -o $(JS_STAGE2)/nqpmo.pbc $(JS_STAGE2)/nqpmo.pir
$(JS_STAGE2)/$(CORE_SETTING_COMBINED).nqp: $(CORE_SETTING_SOURCES)
mkdir -p $(JS_STAGE2)
$(PERL) tools/build/gen-cat.pl js $(CORE_SETTING_SOURCES) > $(JS_STAGE2)/$(CORE_SETTING_COMBINED).nqp

$(JS_STAGE2)/$(JS_NQPCORE_PBC) : $(JS_STAGE2)/$(CORE_SETTING_COMBINED).nqp $(JS_STAGE2)/nqpmo.pbc
nqp-p --module-path $(JS_STAGE1) src/vm/js/bin/cross-compile.nqp $(JS_STAGE2)/$(CORE_SETTING_COMBINED).nqp $(JS_STAGE2) NQPCORE.setting NULL 1
$(JS_PARROT) -o $(JS_STAGE2)/$(JS_NQPCORE_PBC) $(JS_STAGE2)/NQPCORE.setting.pir
$(JS_STAGE2)/NQPCORE.setting.pbc: $(JS_STAGE1_COMPILER) $(JS_STAGE2)/$(CORE_SETTING_COMBINED).nqp $(JS_STAGE2)/nqpmo.pbc
mkdir -p $(JS_STAGE2)
nqp-p --module-path $(JS_STAGE1) src/vm/js/bin/cross-compile.nqp $(JS_STAGE2)/$(CORE_SETTING_COMBINED).nqp $(JS_STAGE2)/ NQPCORE.setting NULL 1
$(JS_PARROT) -o $(JS_STAGE2)/NQPCORE.setting.pbc $(JS_STAGE2)/NQPCORE.setting.pir

$(JS_STAGE2)/QASTNode.pbc: $(QASTNODE_SOURCES) $(JS_STAGE2_CORE) $(JS_CORE_COMPILER)
$(JS_STAGE2)/$(QASTNODE_COMBINED): $(QASTNODE_SOURCES)
mkdir -p $(JS_STAGE2)
$(PERL) tools/build/gen-cat.pl js $(QASTNODE_SOURCES) > $(JS_STAGE2)/$(QASTNODE_COMBINED)
nqp-p --module-path $(JS_STAGE1) src/vm/js/bin/cross-compile.nqp $(JS_STAGE2)/$(QASTNODE_COMBINED) $(JS_STAGE2) QASTNode NQPCORE 1
$(JS_PARROT) -o $(JS_STAGE2)/QASTNode.pbc $(JS_STAGE2)/QASTNode.pir

$(JS_STAGE2)/QRegex.pbc: $(QREGEX_SOURCES) $(JS_STAGE2)/QASTNode.pbc
$(MKPATH) $(JS_STAGE2)/gen
$(PERL) tools/build/gen-cat.pl js $(QREGEX_SOURCES) > $(JS_STAGE2)/$(QREGEX_COMBINED)
nqp-p --module-path $(JS_STAGE1) src/vm/js/bin/cross-compile.nqp $(JS_STAGE2)/$(QREGEX_COMBINED) $(JS_STAGE2) QRegex NQPCORE 1
$(JS_PARROT) -o $(JS_STAGE2)/QRegex.pbc $(JS_STAGE2)/QRegex.pir
$(JS_STAGE2)/QASTNode.pbc: $(JS_STAGE1_COMPILER) $(JS_STAGE2)/$(QASTNODE_COMBINED) $(JS_STAGE2)/NQPCORE.setting.pbc
mkdir -p $(JS_STAGE2)
nqp-p --module-path $(JS_STAGE1) src/vm/js/bin/cross-compile.nqp $(JS_STAGE2)/$(QASTNODE_COMBINED) $(JS_STAGE2)/ QASTNode NQPCORE 1
$(JS_PARROT) -o $(JS_STAGE2)/QASTNode.pbc $(JS_STAGE2)/QASTNode.pir

$(JS_STAGE2)/$(QREGEX_COMBINED): $(QREGEX_SOURCES)
mkdir -p $(JS_STAGE2)
$(PERL) tools/build/gen-cat.pl js $(QREGEX_SOURCES) > $(JS_STAGE2)/$(QREGEX_COMBINED)

#$(JS_STAGE2)/NQPP6QRegex.pbc: $(P6QREGEX_SOURCES) $(JS_STAGE2)/QRegex.pbc
# $(MKPATH) $(JS_STAGE2)/gen
# $(PERL) tools/build/gen-cat.pl js $(P6QREGEX_SOURCES) > $(JS_STAGE2)/$(P6QREGEX_COMBINED)
# nqp-p --module-path $(JS_STAGE1) src/vm/js/bin/compile-setting.nqp $(JS_STAGE2)/$(P6QREGEX_COMBINED) node_modules/NQPP6QRegex $(JS_STAGE2)/NQPP6QRegex.pbc NQPCORE
# $(PARROT) -o $(JS_STAGE2)/NQPP6QRegex.pbc $(JS_STAGE2)/NQPP6QRegex.pir
$(JS_STAGE2)/QRegex.pbc: $(JS_STAGE1_COMPILER) $(JS_STAGE2)/$(QREGEX_COMBINED) $(JS_STAGE2)/NQPCORE.setting.pbc $(JS_STAGE2)/QASTNode.pbc
mkdir -p $(JS_STAGE2)
nqp-p --module-path $(JS_STAGE1) src/vm/js/bin/cross-compile.nqp $(JS_STAGE2)/$(QREGEX_COMBINED) $(JS_STAGE2)/ QRegex NQPCORE 1
$(JS_PARROT) -o $(JS_STAGE2)/QRegex.pbc $(JS_STAGE2)/QRegex.pir

js-stage1-compiler : $(JS_STAGE1_COMPILER)
js-all : js-stage1-compiler $(JS_STAGE2)/NQPCORE.setting.pbc $(JS_STAGE2)/QASTNode.pbc $(JS_STAGE2)/QRegex.pbc
js-runner-default : js-all
js-test: js-all
src/vm/js/bin/run_tests
# prove -e './nqp-js' t/*.t t/nqp/{01..29}*.t t/nqp/{31..48}* t/nqp/{50,51,53}* t/nqp/{55..81}* t/nqp/83* t/serialization/*.t

js-install-modules:
npm install src/vm/js/nqp-runtime-core src/vm/js/nqp-runtime-node src/vm/js/nqp-runtime gen/js/stage2/NQPCORE.setting gen/js/stage2/QRegex gen/js/stage2/nqpmo gen/js/stage2/QASTNode

###
###
###
### js-blib/QAST/Compiler/JavaScript.pir: src/QAST/Compiler/JavaScript.nqp setting.setting.pbc blib/HLL/Backend/JavaScript.pbc $(PERL6_QCJ_PBC) js-blib/nqpmo.pbc
### nqp-p bin/compile-setting.nqp src/QAST/Compiler/JavaScript.nqp node_modules/QAST/Compiler/JavaScript js-blib/QAST/Compiler/JavaScript.pir setting 0
###
### js-blib/QAST/Compiler/JavaScript.pbc: js-blib/QAST/Compiler/JavaScript.pir
### parrot -o js-blib/QAST/Compiler/JavaScript.pbc js-blib/QAST/Compiler/JavaScript.pir
###
### #### Old NQP Makefile
### # blib/HLL/Backend/JavaScript.pbc js-blib/nqpmo.pbc setting.setting.pbc helper.pbc js-blib/QASTNode.pbc js-blib/QRegex.pbc
###
###
### nqpjs: nqp-compiler.js
### nqp-compiler.js: $(cross_compiler) js-blib/QAST/Compiler/JavaScript.pbc nqp-compiler.nqp
### nqp-p bin/nqp-js.nqp --target=js nqp-compiler.nqp > nqp-compiler.js
###
###
### #ModuleLoader.js js-blib/ModuleLoader.pir: nqp-src/ModuleLoader.nqp setting.setting.pbc blib/HLL/Backend/JavaScript.pbc $(PERL6_QCJ_PBC) js-blib/nqpmo.pbc
### # nqp bin/compile-setting.nqp nqp-src/ModuleLoader.nqp ModuleLoader.js js-blib/ModuleLoader.pir
###
###
###
### t/gen/qregex.t: bin/process-qregex-tests
### nqp-p bin/process-qregex-tests > t/gen/qregex.t
###
### helper.pbc: t/helper.nqp $(PERL6_QCJ_PBC)
### nqp-p --target=pir --output=helper.pir t/helper.nqp
### parrot -o helper.pbc helper.pir
###
### js-blib/nqpmo.pbc: nqp-src/nqpmo.pm $(PERL6_QCJ_PBC) blib/HLL/Backend/JavaScript.pbc
### nqp-p bin/compile-setting.nqp nqp-src/nqpmo.pm node_modules/nqpmo js-blib/nqpmo.pir
### parrot -o js-blib/nqpmo.pbc js-blib/nqpmo.pir
##
### setting.setting.pir: nqp-src/NQPCORE.setting blib/HLL/Backend/JavaScript.pbc $(PERL6_QCJ_PBC) js-blib/nqpmo.pbc
### nqp-p bin/compile-setting.nqp nqp-src/NQPCORE.setting node_modules/setting.setting setting.setting.pir
###
###
### js-blib/QASTNode.pir: nqp-src/QASTNode.nqp setting.setting.pbc blib/HLL/Backend/JavaScript.pbc $(PERL6_QCJ_PBC) js-blib/nqpmo.pbc
### nqp-p bin/compile-setting.nqp nqp-src/QASTNode.nqp node_modules/QASTNode js-blib/QASTNode.pir setting
###
### js-blib/QRegex.pir: nqp-src/QRegex.nqp setting.setting.pbc blib/HLL/Backend/JavaScript.pbc $(PERL6_QCJ_PBC) js-blib/nqpmo.pbc
### nqp-p bin/compile-setting.nqp nqp-src/QRegex.nqp node_modules/QRegex js-blib/QRegex.pir setting
###
###
### setting.setting.pbc: setting.setting.pir
### parrot -o setting.setting.pbc setting.setting.pir
###
### js-blib/QASTNode.pbc: js-blib/QASTNode.pir
### parrot -o js-blib/QASTNode.pbc js-blib/QASTNode.pir
###
### js-blib/QRegex.pbc: js-blib/QRegex.pir
### parrot -o js-blib/QRegex.pbc js-blib/QRegex.pir
###
###
###
### test: t/gen/qregex.t all
### ./run_tests
### lint:
### gjslint --strict --nojsdoc nqp-runtime-core/*.js
76 changes: 59 additions & 17 deletions tools/build/gen-js-makefile.nqp
@@ -1,3 +1,4 @@
# vi: filetype=perl6:
sub comment($comment) {
say("# $comment");
}
Expand Down Expand Up @@ -26,15 +27,42 @@ sub rule($target, $source, *@actions) {

sub nqp($prefix, $file, $stage) {
my $source := $prefix ~ '/' ~ $file ~ '.nqp';
my $pbc := stage_path($stage) ~ $file ~ '.pbc';
my $pir := stage_path($stage) ~ $file ~ '.pir';
my $path := stage_path($stage);
my $pbc := $path ~ $file ~ '.pbc';
my $pir := $path ~ $file ~ '.pir';
rule($pbc, $source,
make_parents($pbc),
"\$(JS_NQP) --target=pir --output=$pir --encoding=utf8 $source",
"\$(JS_NQP) --target=pir --output=$pir --encoding=utf8 --module-path=$path $source",
"\$(JS_PARROT) -o $pbc $pir"
);
}

sub deps($target, *@deps) {
say("$target : {nqp::join(' ',@deps)}");
}

sub combine(:$sources, :$stage, :$file) {
my $target := stage_path($stage) ~ $file;
rule($target, $sources, make_parents($target), "\$(PERL) tools/build/gen-cat.pl js $sources > $target");
}

sub cross-compile(:$stage, :$source, :$target, :$setting, :$no-regex-lib, :$deps = []) {
my $path := stage_path($stage);
my $pir := $path ~ $target ~ '.pir';
my $pbc := $path ~ $target ~ '.pbc';
# todo dependency on compiler

nqp::unshift($deps, $source);
nqp::unshift($deps, '$(JS_STAGE1_COMPILER)');

rule($pbc, nqp::join(' ', $deps),
make_parents($pbc),
"nqp-p --module-path \$(JS_STAGE1) src/vm/js/bin/cross-compile.nqp $source $path $target $setting $no-regex-lib",
"\$(JS_PARROT) -o $pbc $pir");


}


comment("This is the JS Makefile - autogenerated by gen-makefile.nqp");

Expand All @@ -44,21 +72,35 @@ constant('JS_STAGE2','$(JS_BUILD_DIR)/stage2');
constant('JS_NQP','nqp-p');
constant('JS_PARROT','parrot');

# HACK
say('js-runner-default: js-all');

my $stage1-qast-compiler-pbc := nqp('src/vm/js','QAST/Compiler',1);
my $stage1-hll-backend-pbc := nqp('src/vm/js','HLL/Backend',1);

constant('JS_STAGE1_COMPILER',"$stage1-qast-compiler-pbc $stage1-hll-backend-pbc");


my $nqp-mo-combined := combine(:stage(2), :sources('$(NQP_MO_SOURCES)'), :file('$(NQP_MO_COMBINED)'));
my $nqp-mo-pbc := cross-compile(:stage(2), :source($nqp-mo-combined), :target('nqpmo'), :setting('NULL'), :no-regex-lib(1));

my $nqpcore-combined := combine(:stage(2), :sources('$(CORE_SETTING_SOURCES)'), :file('$(CORE_SETTING_COMBINED).nqp'));
my $nqpcore-pbc := cross-compile(:stage(2), :source($nqpcore-combined), :target('NQPCORE.setting'), :setting('NULL'), :no-regex-lib(1), :deps([$nqp-mo-pbc]));

my $QASTNode-combined := combine(:stage(2), :sources('$(QASTNODE_SOURCES)'), :file('$(QASTNODE_COMBINED)'));
my $QASTNode-pbc := cross-compile(:stage(2), :source($QASTNode-combined), :target('QASTNode'), :setting('NQPCORE'), :no-regex-lib(1), :deps([$nqpcore-pbc]));

my $QRegex-combined := combine(:stage(2), :sources('$(QREGEX_SOURCES)'), :file('$(QREGEX_COMBINED)'));
my $QRegex-pbc := cross-compile(:stage(2), :source($QRegex-combined), :target('QRegex'), :setting('NQPCORE'), :no-regex-lib(1), :deps([$nqpcore-pbc, $QASTNode-pbc]));


deps('js-stage1-compiler', '$(JS_STAGE1_COMPILER)');
deps("js-all", 'js-stage1-compiler', $nqpcore-pbc, $QASTNode-pbc, $QRegex-pbc);

# we don't have a proper runner yet but the Makefile structure requires that
deps('js-runner-default', 'js-all');

say('js-test: js-all
src/vm/js/bin/run_tests');

say("js-all: $stage1-qast-compiler-pbc");

#
#
#JS_NQPCORE_PBC = NQPCORE.setting.pbc
#
#$(JS_STAGE1)/$(QASTNODE_COMBINED): $(QASTNODE_SOURCES)
# $(MKPATH) $(JS_STAGE1)/gen
# $(PERL) tools/build/gen-cat.pl js $(QASTNODE_SOURCES) > $(JS_STAGE1)/$(QASTNODE_COMBINED)
#
#js-all: $(JS_STAGE1)/$(QASTNODE_COMBINED) js-cross_compiler js-install-modules
#
#js-runner-default: js-all
say('js-install-modules:
npm install src/vm/js/nqp-runtime-core src/vm/js/nqp-runtime-node src/vm/js/nqp-runtime gen/js/stage2/NQPCORE.setting gen/js/stage2/QRegex gen/js/stage2/nqpmo gen/js/stage2/QASTNode');

0 comments on commit 196806c

Please sign in to comment.