1 #
2 # Copyright (c) 2012 Joyent, Inc. All rights reserved.
3 #
4
5 #
6 # V8PLUS and PREFIX_NODE must be defined in consumer's makefiles.
7 # See documentation.
8 #
9 #PREFIX_NODE := $(shell dirname `bash -c 'hash node; hash -t node'`)/..
10 #V8PLUS := $(shell $(PREFIX_NODE)/bin/node -e 'require("v8plus");')
11
12 CC = gcc
13 CXX = g++
14 CTFCONVERT = /opt/onbld/bin/i386/ctfconvert
15 CTFMERGE = /opt/onbld/bin/i386/ctfmerge
16 CTF_LABEL = v8plus_0.0.1
17
18 NODE_EXEC = $(PREFIX_NODE)/bin/node
19
20 MODULE_DIR = ../lib
21
22 DEBUG_FLAGS = -g
23 WARN_FLAGS = -Wall -Wextra -Werror
24 PIC_FLAGS = -fPIC
25 OPT_FLAGS = -O2
26 C_STDFLAGS = -std=c99
27 CXX_STDFLAGS = -std=c++0x
28
29 CFLAGS = $(DEBUG_FLAGS) \
30 $(WARN_FLAGS) \
31 $(PIC_FLAGS) \
32 $(OPT_FLAGS) \
33 $(C_STDFLAGS)
34 CXXFLAGS = $(DEBUG_FLAGS) \
35 $(WARN_FLAGS) \
36 $(PIC_FLAGS) \
37 $(OPT_FLAGS) \
38 $(CXX_STDFLAGS)
39
40 STD_DEFS = -D_GNU_SOURCE
41 NODE_DEFS = -DBUILDING_NODE_EXTENSION
42 LF64_DEFS = -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
43 PIC_DEFS = -DPIC
44 NODE_INCS = -isystem $(PREFIX_NODE)/include/node -I. -I$(V8PLUS)
45
46 CPPFLAGS = $(STD_DEFS) $(NODE_DEFS) $(LF64_DEFS) $(PIC_DEFS) $(NODE_INCS)
47 CXXPPFLAGS = $(CPPFLAGS)
48
49 SHARED_FLAGS = -shared
50 ZTEXT = -Wl,-ztext
51 ZDEFS = -Wl,-zdefs
52 NODE_LIBDIR = -L$(PREFIX_NODE)/lib
53 MAPFILES = $(MAPFILE)
54
55 LDFLAGS = $(SHARED_FLAGS) $(ZTEXT) $(ZDEFS) $(NODE_LIBDIR)
56 LDFLAGS += $(MAPFILES:%=-Wl,-M,%)
57 LIBS = -lnvpair
58
59 OBJS.c = $(SRCS:.c=.o)
60 OBJS = $(OBJS.c:.cc=.o)
61
62 OBJS += \
63 v8plus_csup.o \
64 v8plus_errno.o \
65 v8plus_objectwrap.o \
66 v8plus_subr.o
67
68 GENERRNO_JS = $(V8PLUS)/generrno.js
69 GENERRNO = NODE_PATH=$(V8PLUS)/node_modules \
70 $(NODE_EXEC) $(GENERRNO_JS)
71
72 ERRNO_H = v8plus_errno.h
73 ERRNO_C = v8plus_errno.c
74
75 MAPFILE = mapfile_node
76
77 CTFCONVERT.o = $(CTFCONVERT) -l $(CTF_LABEL) $@
78 CTFMERGE.node = $(CTFMERGE) -l $(CTF_LABEL) -o $@ $(OBJS)