|
@@ -1,3 +1,8 @@
|
|
|
|
+#
|
|
|
|
+# This Makefile takes .st files in the jtalk/st directory and produces compiled
|
|
|
|
+# javascript files from them. It also produces one or more concatenated jtalk.js files
|
|
|
|
+# for development and deployment.
|
|
|
|
+#
|
|
# Where we find the current runnable code and where we put our js files when we are done
|
|
# Where we find the current runnable code and where we put our js files when we are done
|
|
JS := ../js/
|
|
JS := ../js/
|
|
|
|
|
|
@@ -7,46 +12,49 @@ JTALKC := ../bin/jtalkc
|
|
# Generic flags to JTALKC
|
|
# Generic flags to JTALKC
|
|
FLAGS := -g
|
|
FLAGS := -g
|
|
|
|
|
|
-# The js files that are hand written and we use "as is"
|
|
|
|
-CORE := boot.js init.js
|
|
|
|
-
|
|
|
|
# All corresponding js filenames for every st file available
|
|
# All corresponding js filenames for every st file available
|
|
# In other words, if we have Kernel.st and Parser.st, then OBJECTS will be "Kernel.js Parser.js"
|
|
# In other words, if we have Kernel.st and Parser.st, then OBJECTS will be "Kernel.js Parser.js"
|
|
OBJECTS := $(patsubst %.st,%.js,$(wildcard *.st))
|
|
OBJECTS := $(patsubst %.st,%.js,$(wildcard *.st))
|
|
|
|
|
|
-# Default make targets
|
|
|
|
|
|
+# Default make target since it is the first target in this Makefile
|
|
all: jtalk.deploy.js jtalk.js
|
|
all: jtalk.deploy.js jtalk.js
|
|
|
|
|
|
# Step by step
|
|
# Step by step
|
|
#
|
|
#
|
|
# First we copy the core javascript files from current working files
|
|
# First we copy the core javascript files from current working files
|
|
-# into this directory. These files are hand written.
|
|
|
|
-boot.js:
|
|
|
|
- cp ../js/boot.js ../js/init.js .
|
|
|
|
-
|
|
|
|
|
|
+# into this directory. These files are hand written. $@ is the target name.
|
|
|
|
+boot.js init.js:
|
|
|
|
+ cp ../js/$@ .
|
|
|
|
|
|
# Then we compile Kernel.st using boot.js, Kernel.js, init.js
|
|
# Then we compile Kernel.st using boot.js, Kernel.js, init.js
|
|
# $< means the first dependency - in other words Kernel.st
|
|
# $< means the first dependency - in other words Kernel.st
|
|
-Kernel.js: Kernel.st $(CORE)
|
|
|
|
|
|
+Kernel.js: Kernel.st boot.js init.js
|
|
$(JTALKC) $(FLAGS) $<
|
|
$(JTALKC) $(FLAGS) $<
|
|
|
|
|
|
|
|
+# And one for deployment, no flags.
|
|
|
|
+deploy-Kernel.js: Kernel.st boot.js init.js
|
|
|
|
+ $(JTALKC) -p deploy- $<
|
|
|
|
+
|
|
# ...then Parser, but using the new Kernel from step above.
|
|
# ...then Parser, but using the new Kernel from step above.
|
|
-# We only need to depend on Kernel.js since it in turn depends on CORE.
|
|
|
|
|
|
+# We only need to depend on Kernel.js since it in turn depends on boot.js and init.js.
|
|
Parser.js: Parser.st Kernel.js
|
|
Parser.js: Parser.st Kernel.js
|
|
$(JTALKC) $(FLAGS) $<
|
|
$(JTALKC) $(FLAGS) $<
|
|
|
|
|
|
# ...and Compiler, but using the new Parser and Kernel from above.
|
|
# ...and Compiler, but using the new Parser and Kernel from above.
|
|
-# We only need to depend on Parser.js since it in turn depends on Kernel.js, CORE etc
|
|
|
|
|
|
+# We only need to depend on Parser.js since it in turn depends on Kernel.js, boot.js etc
|
|
Compiler.js: Compiler.st Parser.js
|
|
Compiler.js: Compiler.st Parser.js
|
|
$(JTALKC) $(FLAGS) $<
|
|
$(JTALKC) $(FLAGS) $<
|
|
|
|
|
|
# ...now that we have a new Kernel/Parser/Compiler we use them
|
|
# ...now that we have a new Kernel/Parser/Compiler we use them
|
|
# to compile the rest of st files that only depend on Compiler, like
|
|
# to compile the rest of st files that only depend on Compiler, like
|
|
-# for example Canvas.js and Benchfib.js
|
|
|
|
|
|
+# for example Canvas.js, Benchfib.js etc
|
|
%.js: %.st Compiler.js
|
|
%.js: %.st Compiler.js
|
|
$(JTALKC) $(FLAGS) $<
|
|
$(JTALKC) $(FLAGS) $<
|
|
|
|
|
|
-# But there are some dependencies to care for:
|
|
|
|
|
|
+# But for some libraries there are dependencies to care for. Then
|
|
|
|
+# we need to use -l so that the compiler first loads that library
|
|
|
|
+# before compiling the .st file. Otherwise bindings will fail.
|
|
|
|
+#
|
|
# JQuery uses Canvas
|
|
# JQuery uses Canvas
|
|
JQuery.js: JQuery.st Canvas.js
|
|
JQuery.js: JQuery.st Canvas.js
|
|
$(JTALKC) $(FLAGS) -l Canvas.js $<
|
|
$(JTALKC) $(FLAGS) -l Canvas.js $<
|
|
@@ -61,34 +69,27 @@ SUnit.js: SUnit.st IDE.js
|
|
|
|
|
|
# Some Examples use SUnit
|
|
# Some Examples use SUnit
|
|
Examples.js: Examples.st SUnit.js
|
|
Examples.js: Examples.st SUnit.js
|
|
- $(JTALKC) $(FLAGS) -l Canvas.js,JQuery.js,IDE.js,SUnit.js $<
|
|
|
|
-
|
|
|
|
-# Complete Jtalk, here we give -J (will include all libs for Jtalk IDE),
|
|
|
|
-# push it all through Closure (-O) and add init.js at end (-I).
|
|
|
|
-jtalk.js: $(OBJECTS)
|
|
|
|
- $(JTALKC) -J -O -I jtalk
|
|
|
|
|
|
+ $(JTALKC) $(FLAGS) -l Canvas.js,JQuery.js,IDE.js,SUnit.js $<;
|
|
|
|
|
|
|
|
+# This is the deployment target with only the Jtalk Kernel compiled without -g.
|
|
|
|
+# Then we push it all through Closure (-O) and add init.js at end (-I).
|
|
|
|
+jtalk.deploy.js: boot.js init.js deploy-Kernel.js
|
|
|
|
+ $(JTALKC) -O -I boot.js deploy-Kernel.js jtalk.deploy;
|
|
|
|
|
|
-# Only Jtalk Kernel and compiled without -g. Thus we need to clean first to remake
|
|
|
|
-# all dependencies with new FLAGS.
|
|
|
|
-# Then we give -K (will include up to Compiler), push it all through Closure (-O)
|
|
|
|
-# and add init.js at end (-I).
|
|
|
|
-jtalk.deploy.js: FLAGS =
|
|
|
|
-jtalk.deploy.js: cleanobjects $(OBJECTS)
|
|
|
|
- $(JTALKC) -K -O -I jtalk.deploy.js
|
|
|
|
|
|
+# Full IDE compiled with -g. We do not clean away objects at end.
|
|
|
|
+# Here we give -J (will include all libs for Jtalk IDE),
|
|
|
|
+# push it all through Closure (-O) and add init.js at end (-I).
|
|
|
|
+jtalk.js: boot.js init.js $(OBJECTS)
|
|
|
|
+ $(JTALKC) -J -O -I jtalk;
|
|
|
|
|
|
|
|
|
|
# Installing is simply copying all js files to js directory.
|
|
# Installing is simply copying all js files to js directory.
|
|
install: all
|
|
install: all
|
|
cp *.js $(JS)
|
|
cp *.js $(JS)
|
|
|
|
|
|
-# And cleaning
|
|
|
|
-clean: cleanobjects cleanjtalk
|
|
|
|
-
|
|
|
|
-.PHONY: cleanobjects
|
|
|
|
-cleanobjects:
|
|
|
|
- rm -f $(OBJECTS)
|
|
|
|
|
|
+# And cleaning is trivial
|
|
|
|
+clean:
|
|
|
|
+ rm -f *.js;
|
|
|
|
|
|
-.PHONY: cleanjtalk
|
|
|
|
-cleanjtalk:
|
|
|
|
- rm -f jtalk.js jtalk.deploy.js
|
|
|
|
|
|
+# These three are phony
|
|
|
|
+.PHONY: all install clean
|