blob: 6d4d214119673738fbeb88367ba421bfa52df3cb [file] [log] [blame]
NODE_DIR := $(shell jiri profile list --info Target.InstallationDir v23:nodejs)
export PATH:=$(NODE_DIR)/bin:$(CURDIR)/node_modules/.bin:$(PATH)
export GOPATH=$(CURDIR)/go
export VDLPATH=$(GOPATH)
# NOTE: we run npm using 'node npm' to avoid relying on the shebang line in the
# npm script, which can exceed the Linux shebang length limit on Jenkins.
NPM := $(NODE_DIR)/bin/npm
# All JS files except build.js and third party
JS_FILES = $(shell find browser -name "*.js" -a -not -name "build.js" -a -not -path "*third-party*")
# All HTML/CSS files except index.html and third party
HTML_FILES = $(shell find browser -name "*.css" -a -not -path "*third-party*" -o -name "*.html" -a -not -name "index.html" -a -not -path "*third-party*")
all: build
# Builds everything
build: node_modules go/bin/p2b browser/third-party browser/build.js browser/index.html
# Compile p2b cli binary
go/bin/p2b: go/src/v.io/x/p2b/main.go go/src/v.io/x/p2b/vdl/p2b.vdl
jiri go install v.io/x/p2b/...
# Install what we need from NPM, tools such as jspm, serve, etc...
node_modules: package.json
:;node $(NPM) prune
:;node $(NPM) install
touch node_modules
# Link a local copy of vanadium.js.
# TODO(nlacasse): Remove this and put vanadium.js in package.json once we can get
# it from npm
browser/third-party/npm/vanadium@0.0.1: node_modules
cd $(JIRI_ROOT)/release/javascript/core && \
:;jspm link -y npm:vanadium@0.0.1
cd browser && \
:;jspm install -y -l npm:vanadium@0.0.1
# Install JSPM and Bower packages as listed in browser/package.json from JSPM and browser/bower.json from bower
browser/third-party: browser/third-party/npm/vanadium@0.0.1 browser/package.json browser/bower.json node_modules
cd browser && \
:;jspm install -y && \
:;bower prune && \
:;bower install
touch browser/third-party
browser/services/v.io/x/p2b/vdl/index.js:
jiri run vdl generate --lang=javascript --js-out-dir=browser/services v.io/x/p2b/vdl
# Bundle whole app and third-party JavaScript into a single build.js
browser/build.js: $(JS_FILES) browser/services/v.io/x/p2b/vdl/index.js browser/third-party node_modules
cd browser; \
:;jspm setmode local; \
:;jspm bundle app build.js
# Bundle all app web components and third-party web components into a single index.html
browser/index.html: $(HTML_FILES) browser/build.js node_modules
cd browser; \
:;vulcanize -o index.html app.html
# Serve
start: build browser/index.html
:;serve browser/. --port 8000
shell:
jiri go install v.io/x/ref/cmd/principal v.io/x/ref/services/agent/agentd
./shell.sh
# Continuously watch for changes to .js, .html or .css files.
# Rebundle the appropriate file (build.js and/or index.html) when local files change
watch:
watch -n 1 make
# TODO(nlacasse): Write real tests. For now just make sure that everything builds.
test: browser/index.html go/bin/p2b
# Clean all build artifacts
clean:
rm -rf browser/build.js
rm -rf browser/index.html
rm -rf browser/third-party
rm -rf go/{bin,pkg}
rm -rf node_modules
rm -rf credentials
.PHONY: start clean watch test