Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2010-10-04 13:11:27 +0400
committerRyan Dahl <ry@tinyclouds.org>2010-10-25 05:39:36 +0400
commit15594eaf87066abc8cf36520a1ad95e0c52da517 (patch)
tree08295f62f03b2816860903f83dcb10de8d48daf7 /Makefile
parentbb85e7751f1bd224fbce370ad84d8ce774e2d69a (diff)
Replace WAF with make/autoconf
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile312
1 files changed, 289 insertions, 23 deletions
diff --git a/Makefile b/Makefile
index 48b38a97492..5bdae40cda2 100644
--- a/Makefile
+++ b/Makefile
@@ -1,39 +1,305 @@
-WAF=python tools/waf-light
+#config
-all:
- @$(WAF) build
+# define DEBUG=1 to build node_g
-all-progress:
- @$(WAF) -p build
+WANT_OPENSSL=1
+PREFIX=/usr
+SHELL=/bin/sh
+INSTALL = install
-install:
- @$(WAF) install
-uninstall:
- @$(WAF) uninstall
+-include config.mak.autogen
+-include config.mak
-test: all
+
+platform := $(shell python -c 'import sys; print sys.platform')
+
+
+ifeq ($(platform),linux2)
+ platform := linux
+endif
+
+# fix me
+arch = x86_64
+
+
+ifeq ($(platform),darwin)
+ LINKFLAGS += -framework Carbon
+endif
+
+ifeq ($(platform),linux)
+ LINKFLAGS += -pthread -lrt
+endif
+
+ifdef WANT_OPENSSL
+ HAVE_OPENSSL = 1
+ HAVE_CRYPTO = 1
+ ifdef OPENSSL_DIR
+ OPENSSL_LINKFLAGS += -L$(OPENSSL_DIR)/lib
+ OPENSSL_CPPFLAGS += -I$(OPENSSL_DIR)/include
+ endif
+ OPENSSL_LINKFLAGS += -lssl -lcrypto
+endif
+
+cflags += -pedantic
+
+
+
+
+debug_CPPDEFINES = -DDEBUG $(CFLAGS)
+debug_CFLAGS = -Wall -O0 -ggdb $(CFLAGS)
+debug_CXXFLAGS = $(debug_CFLAGS)
+debug_LINKFLAGS = $(LINKFLAGS)
+
+release_CPPDEFINES = -DNODEBUG
+release_CFLAGS = -Wall -O2
+release_CXXFLAGS = $(release_CFLAGS)
+release_LINKFLAGS = $(LINKFLAGS)
+
+builddir = build
+
+
+libev_sources = deps/libev/ev.c
+# Note: -I$(builddir)/deps/libev contains config.h which is generated from
+# deps/libev/config.h.in during the configure script
+libev_CPPFLAGS = -Ideps/libev -I$(builddir)/deps/libev
+libev_release_objects = $(builddir)/release/deps/libev/ev.o
+libev_debug_objects = $(builddir)/debug/deps/libev/ev.o
+
+libeio_sources = deps/libeio/eio.c
+libeio_release_objects = $(builddir)/release/deps/libeio/eio.o
+libeio_debug_objects = $(builddir)/debug/deps/libeio/eio.o
+# Note: -I$(builddir)/deps/libeio contains config.h which is generated from
+# deps/libeio/config.h.in during the configure script
+libeio_CPPFLAGS = -D_GNU_SOURCE -Ideps/libeio -I$(builddir)/deps/libeio
+
+http_parser_sources = deps/http_parser/http_parser.c
+http_parser_release_objects = $(builddir)/release/deps/http_parser/http_parser.o
+http_parser_debug_objects = $(builddir)/debug/deps/http_parser/http_parser.o
+http_parser_CPPFLAGS = -Ideps/http_parser
+
+cares_sources = $(wildcard deps/c-ares/*.c)
+cares_release_objects = $(addprefix $(builddir)/release/,$(cares_sources:.c=.o))
+cares_debug_objects = $(addprefix $(builddir)/debug/,$(cares_sources:.c=.o))
+cares_CPPFLAGS = -DHAVE_CONFIG_H=1 -Ideps/c-ares -Ideps/c-ares/$(platform)-$(arch)
+
+node_sources = src/node.cc \
+ src/platform_$(platform).cc \
+ src/node_buffer.cc \
+ src/node_cares.cc \
+ src/node_child_process.cc \
+ src/node_constants.cc \
+ src/node_crypto.cc \
+ src/node_events.cc \
+ src/node_extensions.cc \
+ src/node_file.cc \
+ src/node_http_parser.cc \
+ src/node_idle_watcher.cc \
+ src/node_io_watcher.cc \
+ src/node_main.cc \
+ src/node_net.cc \
+ src/node_script.cc \
+ src/node_signal_watcher.cc \
+ src/node_stat_watcher.cc \
+ src/node_stdio.cc \
+ src/node_timer.cc \
+ src/node_javascript.cc \
+
+node_debug_objects = $(addprefix $(builddir)/debug/,$(node_sources:.cc=.o))
+node_release_objects = $(addprefix $(builddir)/release/,$(node_sources:.cc=.o))
+
+# TODO HAVE_FDATASYNC should be set in configure.
+
+node_CPPFLAGS = -Isrc/ -Ideps/libeio/ -Ideps/libev/ -Ideps/http_parser/ \
+ -Ideps/libev/include/ -Ideps/v8/include -DPLATFORM=\"$(platform)\" \
+ -DX_STACKSIZE=65536 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 \
+ -DHAVE_FDATASYNC=0 -I$(builddir)/release/src $(cares_CPPFLAGS)
+node_debug_CPPFLAGS = $(subst release,debug,$(NODE_CPPFLAGS))
+
+libv8 = $(builddir)/libv8.a
+libv8_g = $(builddir)/libv8_g.a
+
+dirs = $(builddir)/release/src \
+ $(builddir)/release/deps/libev \
+ $(builddir)/release/deps/libeio \
+ $(builddir)/release/deps/c-ares \
+ $(builddir)/release/deps/http_parser \
+ $(builddir)/release/deps/v8 \
+ $(builddir)/release/lib/pkgconfig
+debug_dirs = $(subst release,debug,$(dirs))
+
+
+
+
+# Rules
+
+all: $(dirs) node
+
+ifdef DEBUG
+all: $(debug_dirs) node_g
+endif
+
+
+node: $(builddir)/node
+ ln -fs $< $@
+
+node_g: $(builddir)/node_g
+ ln -fs $< $@
+
+
+
+$(dirs) $(debug_dirs):
+ mkdir -p $@
+
+
+# libev
+
+$(builddir)/release/deps/libev/%.o: deps/libev/%.c
+ $(CC) -c $(release_CFLAGS) $(release_CPPFLAGS) $(libev_CFLAGS) \
+ $(libev_CPPFLAGS) $< -o $@
+
+$(builddir)/debug/deps/libev/%.o: deps/libev/%.c
+ $(CC) -c $(debug_CFLAGS) $(debug_CPPFLAGS) $(libev_CFLAGS) \
+ $(libev_CPPFLAGS) $< -o $@
+
+
+# libeio
+
+$(builddir)/release/deps/libeio/%.o: deps/libeio/%.c
+ $(CC) -c $(release_CFLAGS) $(release_CPPFLAGS) $(libeio_CFLAGS) \
+ $(libeio_CPPFLAGS) $< -o $@
+
+$(builddir)/debug/deps/libeio/%.o: deps/libeio/%.c
+ $(CC) -c $(debug_CFLAGS) $(debug_CPPFLAGS) $(libeio_CFLAGS) \
+ $(libeio_CPPFLAGS) $< -o $@
+
+
+# http-parser
+
+$(builddir)/release/deps/http_parser/%.o: deps/http_parser/%.c
+ $(CC) -c $(release_CFLAGS) $(release_CPPFLAGS) $(http_parser_CFLAGS) \
+ $(http_parser_CPPFLAGS) $< -o $@
+
+$(builddir)/debug/deps/http_parser/%.o: deps/http_parser/%.c
+ $(CC) -c $(debug_CFLAGS) $(debug_CPPFLAGS) $(http_parser_CFLAGS) \
+ $(http_parser_CPPFLAGS) $< -o $@
+
+
+# c-ares
+
+$(builddir)/release/deps/c-ares/%.o: deps/c-ares/%.c
+ $(CC) -c $(release_CFLAGS) $(release_CPPFLAGS) $(cares_CFLAGS) \
+ $(cares_CPPFLAGS) $< -o $@
+
+$(builddir)/debug/deps/c-ares/%.o: deps/c-ares/%.c
+ $(CC) -c $(debug_CFLAGS) $(debug_CPPFLAGS) $(cares_CFLAGS) \
+ $(cares_CPPFLAGS) $< -o $@
+
+
+# node
+
+$(builddir)/release/src/%.o: src/%.cc
+ $(CXX) -c $(release_CXXFLAGS) $(release_CPPFLAGS) $(node_CXXFLAGS) \
+ $(node_CPPFLAGS) $(OPENSSL_CPPFLAGS) $< -o $@
+
+$(builddir)/debug/src/%.o: src/%.cc
+ $(CXX) -c $(debug_CXXFLAGS) $(debug_CPPFLAGS) $(node_CXXFLAGS) \
+ $(node_CPPFLAGS) $(OPENSSL_CPPFLAGS) $< -o $@
+
+
+# node.o
+
+$(builddir)/release/src/node.o: src/node.cc $(builddir)/release/src/node_natives.h
+ $(CXX) -c $(release_CXXFLAGS) $(release_CPPFLAGS) $(node_CFLAGS) \
+ $(node_CPPFLAGS) $(OPENSSL_CPPFLAGS) $< -o $@
+
+$(builddir)/debug/src/node.o: src/node.cc $(builddir)/debug/src/node_natives.h
+ $(CXX) -c $(debug_CXXFLAGS) $(debug_CPPFLAGS) $(node_CFLAGS) \
+ $(node_CPPFLAGS) $(OPENSSL_CPPFLAGS) $< -o $@
+
+
+# node executable
+
+$(builddir)/node: $(node_release_objects) $(libev_release_objects) \
+ $(libeio_release_objects) $(http_parser_release_objects) \
+ $(cares_release_objects) $(libv8)
+ $(CXX) -o $@ $^ $(release_LINKFLAGS) $(node_LINKFLAGS) $(OPENSSL_LINKFLAGS)
+
+$(builddir)/node_g: $(node_debug_objects) $(libev_debug_objects) \
+ $(libeio_debug_objects) $(http_parser_debug_objects) \
+ $(cares_debug_objects) $(libv8_g)
+ $(CXX) -o $@ $^ $(debug_LINKFLAGS) $(node_LINKFLAGS) $(OPENSSL_LINKFLAGS)
+
+
+
+$(builddir)/release/src/node_natives.h: src/node.js lib/*.js
+ python tools/js2c.py $^ > $@
+
+$(builddir)/debug/src/node_natives.h: src/node.js lib/*.js
+ python tools/js2c.py $^ > $@
+ # TODO a debug flag for the macros ?
+
+
+
+$(builddir)/release/src/node_config.h: src/node_config.h.in
+ sed -e "s#@PREFIX@#$(PREFIX)#" \
+ -e "s#@CCFLAGS@#$(release_CFLAGS)#" \
+ -e "s#@CPPFLAGS@#$(release_CPPFLAGS)#" $< > $@ || rm $@
+
+$(builddir)/debug/src/node_config.h: src/node_config.h.in
+ sed -e "s#@PREFIX@#$(PREFIX)#" \
+ -e "s#@CCFLAGS@#$(debug_CFLAGS)#" \
+ -e "s#@CPPFLAGS@#$(debug_CPPFLAGS)#" $< > $@ || rm $@
+
+
+# FIXME convert to a generalized *.in preprocessor
+$(builddir)/release/lib/pkgconfig/nodejs.pc: tools/nodejs.pc.in
+ sed \
+ -e "s#@PREFIX@#$(PREFIX)#" \
+ -e "s#@VERSION@#$(VERSION)#" \
+ -e "s#@CCFLAGS@#$(CFLAGS)#" \
+ -e "s#@CPPFLAGS@#$(CPPFLAGS)#" $< > $@ || rm $@
+
+# v8 does its own debug and release version, so we don't put it in the
+# profile_builddir but rather just the builddir.
+$(libv8):
+ python tools/scons/scons.py -C $(builddir) -Y `pwd`/deps/v8 \
+ visibility=default mode=release arch=x64 library=static snapshot=on
+
+$(libv8_g):
+ python tools/scons/scons.py -C $(builddir) -Y `pwd`/deps/v8 \
+ visibility=default mode=debug arch=x64 library=static snapshot=on
+
+
+# header deps
+$(builddir)/release/src/node.o: $(builddir)/release/src/node_config.h
+$(builddir)/debug/src/node.o: $(builddir)/debug/src/node_config.h
+
+
+# TODO install
+
+test: $(builddir)/node
python tools/test.py --mode=release simple message
-test-all: all
+test-all: $(builddir)/node $(builddir)/node_g
python tools/test.py --mode=debug,release
-test-release: all
+test-release: $(builddir)/node
python tools/test.py --mode=release
-test-debug: all
+test-debug: $(builddir)/node_g
python tools/test.py --mode=debug
-test-message: all
+test-message: $(builddir)/node
python tools/test.py message
-test-simple: all
+test-simple: $(builddir)/node
python tools/test.py simple
-test-pummel: all
+test-pummel: $(builddir)/node
python tools/test.py pummel
-test-internet: all
+test-internet: $(builddir)/node
python tools/test.py internet
# http://rtomayko.github.com/ronn
@@ -59,15 +325,15 @@ docclean:
@-rm -f doc/node.1 doc/api.html doc/changelog.html
clean:
- @$(WAF) clean
- @-find tools -name "*.pyc" | xargs rm -f
+ -rm -f node node_g $(builddir)/node $(builddir)/node_g
+ -find $(builddir) -name "*.o" | xargs rm -f
+ -find . -name "*.pyc" | xargs rm -f
distclean: docclean
- @-find tools -name "*.pyc" | xargs rm -f
- @-rm -rf build/ node node_g
+ -find tools -name "*.pyc" | xargs rm -f
+ -rm -rf build/ node node_g
+ -rm -rf configure config.mak.autogen config.log autom4te.cache config.status
-check:
- @tools/waf-light check
VERSION=$(shell git describe)
TARNAME=node-$(VERSION)