Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Cross compile more of the compiler.
  • Loading branch information
pmurias committed Jul 26, 2014
1 parent 196806c commit 4c31fee
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 6 deletions.
3 changes: 3 additions & 0 deletions src/NQP/Compiler.nqp
Expand Up @@ -50,6 +50,9 @@ sub MAIN(@ARGS) {
#?endif
#?if jvm
sub MAIN(*@ARGS) {
#?endif
#?if js
sub MAIN(*@ARGS) {
#?endif
# Enter the compiler.
$nqpcomp.command_line(@ARGS, :encoding('utf8'), :transcode('ascii iso-8859-1'));
Expand Down
5 changes: 5 additions & 0 deletions src/vm/js/HLL/Backend.nqp
Expand Up @@ -72,3 +72,8 @@ class HLLBackend::JavaScript {
!pir::isa__IPs($cuish, 'String')
}
}

# Role specifying the default backend for this build.
role HLL::Backend::Default {
method default_backend() { HLLBackend::JavaScript }
}
1 change: 1 addition & 0 deletions src/vm/js/QAST/Compiler.nqp
@@ -1,3 +1,4 @@
use QASTNode;
# vi: filetype=perl6:
# we handle CTXSAVE completely differently from rakudo-parrot as we don't have such control over lexical scopes
class CTXSAVE {
Expand Down
32 changes: 30 additions & 2 deletions tools/build/Makefile-JS.in
Expand Up @@ -10,7 +10,7 @@ $(JS_STAGE1)/QAST/Compiler.pbc: src/vm/js/QAST/Compiler.nqp
$(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

$(JS_STAGE1)/HLL/Backend.pbc: src/vm/js/HLL/Backend.nqp
$(JS_STAGE1)/HLL/Backend.pbc: src/vm/js/HLL/Backend.nqp $(JS_STAGE1)/QAST/Compiler.pbc
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
Expand Down Expand Up @@ -52,8 +52,36 @@ $(JS_STAGE2)/QRegex.pbc: $(JS_STAGE1_COMPILER) $(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)/QAST/Compiler.pbc: $(JS_STAGE1_COMPILER) src/vm/js/QAST/Compiler.nqp $(JS_STAGE2)/NQPCORE.setting.pbc $(JS_STAGE2)/QASTNode.pbc
mkdir -p $(JS_STAGE2)/QAST
nqp-p --module-path $(JS_STAGE1) src/vm/js/bin/cross-compile.nqp src/vm/js/QAST/Compiler.nqp $(JS_STAGE2)/ QAST/Compiler NQPCORE 1
$(JS_PARROT) -o $(JS_STAGE2)/QAST/Compiler.pbc $(JS_STAGE2)/QAST/Compiler.pir

$(JS_STAGE2)/$(HLL_COMBINED): src/vm/js/HLL/Backend.nqp $(COMMON_HLL_SOURCES)
mkdir -p $(JS_STAGE2)
$(PERL) tools/build/gen-cat.pl js src/vm/js/HLL/Backend.nqp $(COMMON_HLL_SOURCES) > $(JS_STAGE2)/$(HLL_COMBINED)

$(JS_STAGE2)/NQPHLL.pbc: $(JS_STAGE1_COMPILER) $(JS_STAGE2)/$(HLL_COMBINED) $(JS_STAGE2)/NQPCORE.setting.pbc $(JS_STAGE2)/QAST/Compiler.pbc
mkdir -p $(JS_STAGE2)
nqp-p --module-path $(JS_STAGE1) src/vm/js/bin/cross-compile.nqp $(JS_STAGE2)/$(HLL_COMBINED) $(JS_STAGE2)/ NQPHLL NQPCORE 1
$(JS_PARROT) -o $(JS_STAGE2)/NQPHLL.pbc $(JS_STAGE2)/NQPHLL.pir

$(JS_STAGE2)/QAST.pbc: $(JS_STAGE1_COMPILER) src/vm/js/QAST.nqp $(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 src/vm/js/QAST.nqp $(JS_STAGE2)/ QAST NQPCORE 1
$(JS_PARROT) -o $(JS_STAGE2)/QAST.pbc $(JS_STAGE2)/QAST.pir

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

$(JS_STAGE2)/NQPP6QRegex.pbc: $(JS_STAGE1_COMPILER) $(JS_STAGE2)/$(P6QREGEX_COMBINED) $(JS_STAGE2)/NQPCORE.setting.pbc $(JS_STAGE2)/QRegex.pbc $(JS_STAGE2)/NQPHLL.pbc $(JS_STAGE2)/QAST.pbc
mkdir -p $(JS_STAGE2)
nqp-p --module-path $(JS_STAGE1) src/vm/js/bin/cross-compile.nqp $(JS_STAGE2)/$(P6QREGEX_COMBINED) $(JS_STAGE2)/ NQPP6QRegex NQPCORE 1
$(JS_PARROT) -o $(JS_STAGE2)/NQPP6QRegex.pbc $(JS_STAGE2)/NQPP6QRegex.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-all : js-stage1-compiler $(JS_STAGE2)/NQPCORE.setting.pbc $(JS_STAGE2)/QASTNode.pbc $(JS_STAGE2)/QRegex.pbc $(JS_STAGE2)/NQPP6QRegex.pbc
js-runner-default : js-all
js-test: js-all
src/vm/js/bin/run_tests
Expand Down
20 changes: 16 additions & 4 deletions tools/build/gen-js-makefile.nqp
Expand Up @@ -25,12 +25,15 @@ sub rule($target, $source, *@actions) {
$target;
}

sub nqp($prefix, $file, $stage) {
sub nqp($prefix, $file, $stage, :$deps=[]) {
my $source := $prefix ~ '/' ~ $file ~ '.nqp';
my $path := stage_path($stage);
my $pbc := $path ~ $file ~ '.pbc';
my $pir := $path ~ $file ~ '.pir';
rule($pbc, $source,

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

rule($pbc, nqp::join(' ', $deps),
make_parents($pbc),
"\$(JS_NQP) --target=pir --output=$pir --encoding=utf8 --module-path=$path $source",
"\$(JS_PARROT) -o $pbc $pir"
Expand Down Expand Up @@ -75,7 +78,7 @@ constant('JS_PARROT','parrot');
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);
my $stage1-hll-backend-pbc := nqp('src/vm/js','HLL/Backend',1,:deps([$stage1-qast-compiler-pbc]));

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

Expand All @@ -92,9 +95,18 @@ my $QASTNode-pbc := cross-compile(:stage(2), :source($QASTNode-combined), :targe
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]));

my $QAST-Compiler-pbc := cross-compile(:stage(2), :source('src/vm/js/QAST/Compiler.nqp'), :target('QAST/Compiler'), :setting('NQPCORE'), :no-regex-lib(1), :deps([$nqpcore-pbc, $QASTNode-pbc]));

my $NQPHLL-combined := combine(:stage(2), :sources('src/vm/js/HLL/Backend.nqp $(COMMON_HLL_SOURCES)'), :file('$(HLL_COMBINED)'));
my $NQPHLL-pbc := cross-compile(:stage(2), :source($NQPHLL-combined), :target('NQPHLL'), :setting('NQPCORE'), :no-regex-lib(1), :deps([$nqpcore-pbc, $QAST-Compiler-pbc]));

my $QAST-pbc := cross-compile(:stage(2), :source('src/vm/js/QAST.nqp'), :target('QAST'), :setting('NQPCORE'), :no-regex-lib(1), :deps([$nqpcore-pbc, $QASTNode-pbc]));

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

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

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

0 comments on commit 4c31fee

Please sign in to comment.