diff --git a/Makefile b/Makefile index 3451af22..b586fd28 100644 --- a/Makefile +++ b/Makefile @@ -12,4 +12,5 @@ bootstrap: $(MAKE) -C lib/generated bootstrap include $(TOP)/build/build.mk - +include $(TOP)/build/buildlibs.mk +include $(TOP)/build/install.mk diff --git a/build/buildlibs.mk b/build/buildlibs.mk new file mode 100644 index 00000000..eafa1275 --- /dev/null +++ b/build/buildlibs.mk @@ -0,0 +1,46 @@ +-include $(TOP)/env.mk +include $(TOP)/lib/files.mk + +CONFIG?=Release + +PCRE= \ + pcre-osx \ + pcre-iosdev \ + pcre-iossim + +ALL_TARGETS= \ + $(PCRE:%=$(TOP)/external-deps/%/.libs/libpcre16.a) \ + $(TOP)/node-llvm/build/$(CONFIG)/llvm.node \ + $(ALL_LIBRARIES:%=$(TOP)/runtime/%) \ + $(COFFEE_SOURCES:%.coffee=$(TOP)/lib/generated/%.js) \ + $(JS_SOURCES:%=$(TOP)/lib/generated/%) \ + $(TOP)/ejs-llvm/libejsllvm-module.a \ + $(TOP)/lib/generated/ejs.js.exe + +define pcrelib +$(TOP)/external-deps/$(1)/.libs/libpcre16.a: + $(MAKE) -C external-deps build-$(1) +endef +$(foreach dir,$(PCRE),$(eval $(call pcrelib,$(dir)))) + +define jslib +$(TOP)/lib/generated/$(1).js: $(TOP)/lib/$(2) + make -C lib +endef +$(foreach file,$(COFFEE_SOURCES),$(eval $(call jslib,$(basename $(file)),$(file)))) +$(foreach file,$(JS_SOURCES),$(eval $(call jslib,$(basename $(file)),$(file)))) + +$(TOP)/node-llvm/build/$(CONFIG)/llvm.node: + make -C node-llvm + +$(TOP)/ejs-llvm/libejsllvm-module.a: + make -C ejs-llvm + +$(TOP)/lib/generated/ejs.js.exe: $(TOP)/ejs $(TOP)/ejs-llvm/libejsllvm-module.a $(TOP)/node-llvm/build/$(CONFIG)/llvm.node + $(MAKE) -C lib/generated + +$(ALL_LIBRARIES:%=$(TOP)/runtime/%): + $(MAKE) -C runtime + +.PHONY: libs +libs: $(ALL_TARGETS) \ No newline at end of file diff --git a/build/config.mk b/build/config.mk index 7b1ff826..2c3b5462 100644 --- a/build/config.mk +++ b/build/config.mk @@ -1,3 +1,5 @@ +-include $(TOP)/env.mk + PRODUCT_NAME=EchoJS PRODUCT_VERSION=0.1 @@ -24,10 +26,11 @@ DIST_ROOT=$(PRODUCT_INSTALL_ROOT) MKDIR=mkdir -p INSTALL=install CP=cp +LN=ln -sf CFLAGS=-g -O2 -Wall -I. -Wno-unused-function -MIN_IOS_VERSION=7.0 +MIN_IOS_VERSION?=7.0 DEVELOPER_ROOT?=/Applications/Xcode.app/Contents/Developer IOS_SDK_VERSION?=7.0 diff --git a/build/ejs.in b/build/ejs.in new file mode 100644 index 00000000..38069443 --- /dev/null +++ b/build/ejs.in @@ -0,0 +1,2 @@ +#!/bin/sh +NODE_PATH=@libpath@/js @libpath@/ejs $@ diff --git a/build/install.mk b/build/install.mk new file mode 100644 index 00000000..51f7bc89 --- /dev/null +++ b/build/install.mk @@ -0,0 +1,67 @@ +-include $(TOP)/env.mk +include $(TOP)/lib/files.mk + +CONFIG?=Release + +ESPRIMA= \ + esprima.js + +ESCODEGEN= \ + escodegen.js + +ESTRAVERSE= \ + estraverse.js + +PCRE= \ + pcre-osx \ + pcre-iosdev \ + pcre-iossim + +LIBDIRS= \ + $(PCRE:%=external-deps/%/.libs) \ + js \ + runtime + +GENERATED = \ + $(COFFEE_SOURCES:%.coffee=%.js) \ + $(JS_SOURCES) + +LIBDIR=$(INSTALLDIR)/lib +BINDIR=$(INSTALLDIR)/bin + +VPATH = $(TOP)/esprima:$(TOP)/estraverse:$(TOP)/escodegen:$(TOP)/lib/generated:$(TOP)/lib:$(TOP)/ejs-llvm:$(TOP)/runtime + +$(LIBDIRS:%=$(LIBDIR)/%) $(BINDIR) $(LIBDIR): + @$(MKDIR) $@ + +$(LIBDIR)/js/%.js: %.js | $(LIBDIR)/js + @echo [Link] $(lastword $(subst /, ,$@)) && $(LN) $< $@ + +$(LIBDIR)/js/llvm.node: $(TOP)/node-llvm/build/$(CONFIG)/llvm.node | $(LIBDIR)/js + @echo [Link] $(lastword $(subst /, ,$@)) && $(LN) $< $@ + +define runtimelib +$(LIBDIR)/runtime/$(1): $(1) | $(LIBDIR)/runtime + @echo [Link] $(1) && $(LN) $$< $$@ +endef +$(foreach file,$(ALL_LIBRARIES),$(eval $(call runtimelib,$(file)))) + +define pcreinstall +$(LIBDIR)/external-deps/$(1)/.libs/libpcre16.a: $(TOP)/external-deps/$(1)/.libs/libpcre16.a | $(LIBDIR)/external-deps/$(1)/.libs + @echo [Link] $(lastword $(subst /, ,$$@)) && $(LN) $$< $$@ +endef +$(foreach dir,$(PCRE),$(eval $(call pcreinstall,$(dir)))) + +$(LIBDIR)/ejs: $(TOP)/ejs | $(LIBDIR) + @echo [Link] $(lastword $(subst /, ,$@)) && $(LN) $< $@ + +$(LIBDIR)/ejs.js.exe: ejs.js.exe | $(LIBDIR) + @echo [Link] $(lastword $(subst /, ,$@)) && $(LN) $< $@ + +$(BINDIR)/ejs: $(TOP)/build/ejs.in | $(BINDIR) + @sed -e "s,@libpath@,$(LIBDIR),g" < $< > $@ + @chmod +x $@ + +install-all: $(PCRE:%=$(LIBDIR)/external-deps/%/.libs/libpcre16.a) $(BINDIR)/ejs $(LIBDIR)/ejs $(LIBDIR)/ejs.js.exe $(ESPRIMA:%=$(LIBDIR)/js/%) $(ESCODEGEN:%=$(LIBDIR)/js/%) $(ESTRAVERSE:%=$(LIBDIR)/js/%) $(GENERATED:%=$(LIBDIR)/js/%) $(LLVM:%=$(LIBDIR)/js/%) $(ALL_LIBRARIES:%=$(LIBDIR)/runtime/%) + +install: libs install-all diff --git a/configure b/configure new file mode 100755 index 00000000..e9503a5f --- /dev/null +++ b/configure @@ -0,0 +1,125 @@ +#!/bin/bash +usage() +{ +cat <> $CNF +} + +sh_append() +{ + printf "export %s=%s\n" "$1" "${@:2}" >> $SH +} + +p=$(pwd) +LIBRARY=libecho.a +ALL_LIBRARIES="$LIBRARY $LIBRARY.sim $LIBRARY.armv7 $LIBRARY.armv7s $LIBRARY.ios" + +INSTALLDIR=$p/out +LLVM_SUFFIX= +MIN_OSX_VERSION= +MIN_IOS_VERSION= +IOS_SDK_VERSION= +CONFIG=Release + + +for arg; do + case "$arg" in + --help | -h) + usage + exit 1 + ;; + --prefix=* ) + INSTALLDIR=$(echo $arg|sed -e 's,.*=,,') + ;; + --llvm=* ) + LLVM_SUFFIX=$(echo $arg|sed -e 's,.*=,,') + ;; + --minosx=* ) + MIN_OSX_VERSION=$(echo $arg|sed -e 's,.*=,,') + ;; + --minios=* ) + MIN_IOS_VERSION=$(echo $arg|sed -e 's,.*=,,') + ;; + --iossdk=* ) + IOS_SDK_VERSION=$(echo $arg|sed -e 's,.*=,,') + ;; + esac +done + +echo "Configuring..." + +cat >config.log <