1 #
2 # Copyright (c) 2012, Joyent, Inc. All rights reserved.
3 #
4
5 include Makefile.defs
6
7 #
8 # ROOT is used only when building and running the below tools.
9 #
10 ROOT = $(PWD)/..
11 JSSTYLE = $(ROOT)/tools/jsstyle/jsstyle
12 JSLINT = $(ROOT)/tools/javascriptlint/build/install/jsl
13 CSTYLE = $(ROOT)/tools/cstyle
14
15 #
16 # Tool options
17 #
18 JSSTYLE_OPTS = -o indent=4,strict-indent=1,doxygen,unparenthesized-return=0,continuation-at-front=1,leading-right-paren-ok=1
19
20 JSSTYLE_OLDSKOOL_OPTS =
21
22 #
23 # Installation configuration. Note that DESTDIR in particular is also
24 # assumed to contain various build tools, headers, libraries, and other
25 # artifacts of the platform build from which we incorporate runtime
26 # dependency information. The default DESTDIR is for standalone builds
27 # only (i.e., without the rest of the platform) and is unlikely to work
28 # without extra effort; it is overridden when make is invoked in this
29 # subdirectory.
30 #
31 DESTDIR = ../proto
32
33 #
34 # DESTNAME is used for the manifest target. We set it to something
35 # obvious here so that if it's not set, the manifest target doesn't do
36 # bad things.
37 #
38 DESTNAME = live.manifest
39
40 SMARTDCBINDIR = $(DESTDIR)/smartdc/bin
41 SMARTDCLIBDIR = $(DESTDIR)/smartdc/lib
42
43 #
44 # Per-target variable definitions go here. See Makefile.defs and the targets
45 # below and in Makefile.targ to see what's useful to append to or override.
46 # If you need to create your own target anyway, you can either modify
47 # variables here or incorporate your changes directly into the target; we
48 # prefer modifying the generic variable to the extent that the change fits
49 # naturally with an existing one so that we can pick up general changes in
50 # Makefile.defs even for custom targets.
51 #
52 bootparams : LIBS += -ldevinfo
53 bootparams : WARN_FLAGS += -Wno-unused
54 diskinfo : LIBS += -ldladm -ldiskmgt -lnvpair
55 zfs_recv : LIBS += -lsocket
56 zfs_send : LIBS += -lsocket
57 vmbundle : CPPFLAGS += -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
58 sdc-on-tty : CFLAGS += $(OPT_FLAG)
59 zoneevent : LIBS += -lnvpair -lsysevent
60
61 # These files will get run through jsstyle and jslint on 'make check'
62 JS_CHECK_TARGETS=\
63 node_modules/{system,onlyif}.js \
64 vm/sbin/*.js \
65 vm/node_modules/{qmp,VM,dladm}.js \
66 img/lib/*.js \
67 img/sbin/imgadm
68
69 JS_CHECK_OLDSKOOL_TARGETS = \
70 disklayout.js \
71 mkzpool.js \
72 node_modules/disklayout.js
73
74 # These files will get run through cstyle on 'make check'
75 C_CHECK_TARGETS=\
76 qemu-exec.c \
77 vmunbundle.c \
78 zfs_recv.c \
79 zfs_send.c \
80 zoneevent.c
81
82 #
83 # Generic flags we apply by default to everything.
84 #
85 CFLAGS += $(WARN_FLAGS)
86 CXXFLAGS = $(CFLAGS)
87
88 #
89 # Node native add-on patterns. For add-ons with a single source file in the
90 # root of the add-on tree and no headers of its own, follow the EXPAT.NODE
91 # pattern here and below in the targets. More complex examples (source
92 # subdirectory, headers, multiple C++ sources) follow; see associated comments
93 # if you are looking for a pattern to copy.
94 #
95 EXPAT_OBJDIR = node-expat/build/Release
96 EXPAT.NODE = $(EXPAT_OBJDIR)/node-expat.node
97
98 $(EXPAT.NODE) : WARN_FLAGS += -Wno-unused
99 $(EXPAT.NODE) : CPPFLAGS += $(NODE_CPPFLAGS)
100 $(EXPAT.NODE) : CXXFLAGS += $(NODE_CFLAGS)
101 $(EXPAT.NODE) : LDFLAGS += $(NODE_LDFLAGS)
102 $(EXPAT.NODE) : LIBS += -lexpat
103
104 #
105 # The kstat Node add-on follows the same pattern as EXPAT.NODE.
106 #
107 KSTAT_OBJDIR = node-kstat/build/Release
108 KSTAT.NODE = $(KSTAT_OBJDIR)/kstat.node
109
110 $(KSTAT.NODE) : WARN_FLAGS += -Wno-unused -Wno-write-strings -Wno-sign-compare
111 $(KSTAT.NODE) : CPPFLAGS += $(NODE_CPPFLAGS)
112 $(KSTAT.NODE) : CXXFLAGS += $(NODE_CFLAGS)
113 $(KSTAT.NODE) : LDFLAGS += $(NODE_LDFLAGS)
114 $(KSTAT.NODE) : LIBS += -lkstat
115
116 #
117 # The dtrace-provider add-on uses a combination of C, assembly and C++ files in
118 # multiple directories.
119 #
120 DTRACE_PROVIDER_OBJDIR = node-dtrace-provider/build/Release
121 DTRACE_PROVIDER_SRCDIR = node-dtrace-provider
122 DTRACE_PROVIDER.NODE = $(DTRACE_PROVIDER_OBJDIR)/dtrace-provider.node
123
124 DTRACE_PROVIDER_SRCS += \
125 dtrace_probe.cc \
126 dtrace_provider.cc
127
128 DTRACE_PROVIDER_LIBUSDT_SRCS += \
129 libusdt/usdt.c \
130 libusdt/usdt_dof_file.c \
131 libusdt/usdt_probe.c \
132 libusdt/usdt_dof.c \
133 libusdt/usdt_dof_sections.c
134
135 DTRACE_PROVIDER_LIBUSDT_ASM_SRCS += \
136 libusdt/usdt_tracepoints_i386.s
137
138 DTRACE_PROVIDER_HDRS += \
139 node-dtrace-provider/dtrace_provider.h \
140 node-dtrace-provider/libusdt/usdt_internal.h \
141 node-dtrace-provider/libusdt/usdt.h
142
143 DTRACE_PROVIDER_OBJS += \
144 $(DTRACE_PROVIDER_SRCS:%.cc=$(DTRACE_PROVIDER_OBJDIR)/%.o) \
145 $(DTRACE_PROVIDER_LIBUSDT_SRCS:%.c=$(DTRACE_PROVIDER_OBJDIR)/%.o) \
146 $(DTRACE_PROVIDER_LIBUSDT_ASM_SRCS:%.s=$(DTRACE_PROVIDER_OBJDIR)/%.o)
147
148 $(DTRACE_PROVIDER.NODE) : WARN_FLAGS += -Wno-unused -Wno-sign-compare
149 $(DTRACE_PROVIDER.NODE) : CFLAGS += $(NODE_CFLAGS)
150 $(DTRACE_PROVIDER.NODE) : CPPFLAGS += \
151 $(NODE_CPPFLAGS) \
152 -Inode-dtrace-provider/libusdt
153 $(DTRACE_PROVIDER.NODE) : CXXFLAGS += $(NODE_CFLAGS)
154 $(DTRACE_PROVIDER.NODE) : LDFLAGS += $(NODE_LDFLAGS)
155
156 CLEANFILES += $(DTRACE_PROVIDER.NODE) $(DTRACE_PROVIDER_OBJS)
157
158 #
159 # The sqlite3 add-on uses a combination of C + C++ files in multiple
160 # directories, and has multiple header directories as well.
161 #
162 SQLITE3_OBJDIR = node-sqlite3/build/Release
163 SQLITE3_SRCDIR = node-sqlite3/src
164 SQLITE3_LIBSRCDIR = node-sqlite3/deps/sqlite3
165 SQLITE3_BINDINGS.NODE = $(SQLITE3_OBJDIR)/node_sqlite3.node
166
167 SQLITE3_SRCS += \
168 database.cc \
169 node_sqlite3.cc \
170 statement.cc
171
172 SQLITE3_LIBSRCS += sqlite3.c
173
174 SQLITE3_NODEHDRS += \
175 async.h \
176 macros.h \
177 statement.h \
178 threading.h
179
180 SQLITE3_LIBHDRS += \
181 sqlite3.h \
182 sqlite3ext.h
183
184 SQLITE3_OBJS = \
185 $(SQLITE3_SRCS:%.cc=$(SQLITE3_OBJDIR)/%.o) \
186 $(SQLITE3_LIBSRCS:%.c=$(SQLITE3_OBJDIR)/%.o)
187 SQLITE3_HDRS = \
188 $(SQLITE3_NODEHDRS:%=$(SQLITE3_SRCDIR)/%) \
189 $(SQLITE3_LIBHDRS:%=$(SQLITE3_LIBSRCDIR)/%)
190 CLEANFILES += $(SQLITE3_OBJS)
191
192 SQLITE3_FLAGS = \
193 -fdata-sections \
194 -ffunction-sections \
195 -fno-omit-frame-pointer \
196 -fno-strict-aliasing \
197 -fno-exceptions
198
199 $(SQLITE3_BINDINGS.NODE) : WARN_FLAGS = -Wall -Werror
200 $(SQLITE3_BINDINGS.NODE) : CPPFLAGS += \
201 $(NODE_CPPFLAGS) \
202 -I$(SQLITE3_LIBSRCDIR) \
203 -D_SQLITE_THREADSAFE=1 \
204 -D_SQLITE_ENABLE_FTS3 \
205 -D_SQLITE_ENABLE_RTREE \
206 -D_LARGEFILE_SOURCE \
207 -D_FILE_OFFSET_BITS=64 \
208 -D_REENTRANT \
209 -D_NDEBUG \
210 -D_POSIX_PTHREAD_SEMANTICS
211 $(SQLITE3_BINDINGS.NODE) : CFLAGS += \
212 $(NODE_CFLAGS) \
213 $(SQLITE3_FLAGS)
214 $(SQLITE3_BINDINGS.NODE) : LDFLAGS += \
215 $(NODE_LDFLAGS) \
216 -Wl,-soname=node_sqlite3.node
217 $(SQLITE3_BINDINGS.NODE) : LIBS += -lpthread
218
219 #
220 # The zsock add-on places its single source file in a subdirectory.
221 #
222 ZSOCK_OBJDIR = node-zsock/build/Release
223 ZSOCK_SRCDIR = node-zsock/src
224 ZSOCK_BINDINGS.NODE = $(ZSOCK_OBJDIR)/zsock_bindings.node
225
226 $(ZSOCK_BINDINGS.NODE) : WARN_FLAGS = -Wall -Werror
227 $(ZSOCK_BINDINGS.NODE) : CPPFLAGS += \
228 $(NODE_CPPFLAGS) \
229 -D_REENTRANT \
230 -D_POSIX_PTHREAD_SEMANTICS \
231 -D_XOPEN_SOURCE_EXTENDED=1 \
232 -D__EXTENSIONS__ \
233 -DSunOS
234 $(ZSOCK_BINDINGS.NODE) : CXXFLAGS += \
235 $(NODE_CFLAGS) \
236 -std=c++98
237 $(ZSOCK_BINDINGS.NODE) : LDFLAGS += $(NODE_LDFLAGS)
238 $(ZSOCK_BINDINGS.NODE) : LIBS += -lsocket -lnsl -lcontract
239
240 #
241 # The zutil add-on places its multiple source files in a subdirectory, and
242 # builds them against some headers that it also supplies and needs to depend on.
243 # Because we must build intermediate object files, this requires a
244 # different target pattern as well; see below.
245 #
246 ZUTIL_OBJDIR = node-zutil/build/Release
247 ZUTIL_SRCDIR = node-zutil/src
248 ZUTIL_BINDINGS.NODE = $(ZUTIL_OBJDIR)/zutil_bindings.node
249
250 ZUTIL_SRCS += \
251 zone.cc \
252 zonecfg.cc \
253 zutil_bindings.cc
254
255 ZUTIL_HDRS += \
256 zone.h \
257 zonecfg.h \
258 zutil_common.h
259
260 ZUTIL_BINDINGS_OBJS = $(ZUTIL_SRCS:%.cc=$(ZUTIL_OBJDIR)/%.o)
261 ZUTIL_BINDINGS_HDRS = $(ZUTIL_HDRS:%=$(ZUTIL_SRCDIR)/%)
262 CLEANFILES += $(ZUTIL_BINDINGS_OBJS)
263
264 $(ZUTIL_BINDINGS.NODE) : WARN_FLAGS += -Wno-unused
265 $(ZUTIL_BINDINGS.NODE) : CPPFLAGS += $(NODE_CPPFLAGS) -DSunOS
266 $(ZUTIL_BINDINGS.NODE) : CXXFLAGS += $(NODE_CFLAGS)
267 $(ZUTIL_BINDINGS.NODE) : LDFLAGS += $(NODE_LDFLAGS)
268 $(ZUTIL_BINDINGS.NODE) : LIBS += -lzonecfg
269
270 #
271 # List of targets. TARGETS, SMARTDC_TARGETS, and SMARTDC_LIB_TARGETS must
272 # include only those files that are safe to remove when the clean target is
273 # built.
274 #
275 TARGETS = \
276 bootparams \
277 diskinfo \
278 disklayout \
279 disklist \
280 disk_size \
281 mkzpool \
282 removable_disk \
283 vmunbundle \
284 zfs_recv \
285 zfs_send \
286 zoneevent \
287 $(EXPAT.NODE) \
288 $(DTRACE_PROVIDER.NODE) \
289 $(KSTAT.NODE) \
290 $(SYSLOG.NODE) \
291 $(SQLITE3_BINDINGS.NODE) \
292 $(ZSOCK_BINDINGS.NODE) \
293 $(ZUTIL_BINDINGS.NODE)
294
295 USR_LIB_TARGETS = \
296 measure_terminal
297
298 SMARTDC_TARGETS = \
299 qemu-exec
300
301 SMARTDC_LIB_TARGETS = \
302 sdc-on-tty
303
304 all: $(TARGETS) $(USR_LIB_TARGETS) sysinfo $(SMARTDC_TARGETS) \
305 $(SMARTDC_LIB_TARGETS)
306
307 install: all
308 mkdir -p $(DESTDIR)/usr/bin
309 cp -p $(TARGETS) sysinfo $(DESTDIR)/usr/bin
310 cp -p $(USR_LIB_TARGETS) sysinfo $(DESTDIR)/usr/lib
311 mkdir -p $(DESTDIR)/smartdc/bin
312 cp -p $(SMARTDC_TARGETS) $(DESTDIR)/smartdc/bin
313 mkdir -p $(DESTDIR)/smartdc/lib
314 cp -p $(SMARTDC_LIB_TARGETS) $(DESTDIR)/smartdc/lib
315 mkdir -m 0755 -p $(PREFIX_NODE)/node_modules
316 cp -Pr node_modules/* $(PREFIX_NODE)/node_modules
317 cp $(KSTAT.NODE) $(PREFIX_NODE)/node_modules/
318 rm -rf $(DESTDIR)/usr/vm
319 cp -PR vm $(DESTDIR)/usr/
320 mkdir -m 0755 -p $(DESTDIR)/usr/vm/node_modules
321 mkdir -p $(PREFIX_NODE)/node_modules/{zsock,zutil}/build/Release
322 mkdir -p $(DESTDIR)/usr/vm/test/tests
323 cp -Pr vm/common $(DESTDIR)/usr/vm/test/
324 cp -Pr vm/node-tap $(DESTDIR)/usr/vm/test/
325 cp -Pr vm/tests $(DESTDIR)/usr/vm/test/
326 cp vm/runtest $(DESTDIR)/usr/vm/test/
327 cp vm/runtests $(DESTDIR)/usr/vm/test/
328 cp -Pr node-zsock/{package.json,lib} \
329 $(PREFIX_NODE)/node_modules/zsock
330 cp -Pr node-zutil/{package.json,lib} \
331 $(PREFIX_NODE)/node_modules/zutil
332 cp $(SQLITE3_BINDINGS.NODE) \
333 $(PREFIX_NODE)/node_modules
334 (sed -e "s|var sqlite3.*;|var sqlite3 = module.exports = exports = require('./node_sqlite3');|" | \
335 sed -e "s|var trace = require.*;|var trace = require('./sqlite3_trace')|") \
336 < node-sqlite3/lib/sqlite3.js \
337 > $(PREFIX_NODE)/node_modules/sqlite3.js
338 cp node-sqlite3/lib/trace.js $(PREFIX_NODE)/node_modules/sqlite3_trace.js
339 cp $(ZSOCK_BINDINGS.NODE) \
340 $(PREFIX_NODE)/node_modules/zsock/build/Release
341 cp $(ZUTIL_BINDINGS.NODE) \
342 $(PREFIX_NODE)/node_modules/zutil/build/Release
343 cp $(EXPAT.NODE) $(PREFIX_NODE)/node_modules/expat_binding.node
344 cp $(DTRACE_PROVIDER.NODE) $(PREFIX_NODE)/node_modules/dtrace-provider.node
345 sed -e "s|require('./build.*DTraceProviderBindings')|require('/usr/node/node_modules/dtrace-provider.node')|" \
346 < $(DTRACE_PROVIDER_SRCDIR)/dtrace-provider.js \
347 > $(PREFIX_NODE)/node_modules/dtrace-provider.js
348 sed -e "s|var expat.*;|var expat = require('./expat_binding');|" \
349 < node-expat/lib/node-expat.js \
350 > $(PREFIX_NODE)/node_modules/node-expat.js
351 cp zoneevent $(DESTDIR)/usr/vm/sbin/zoneevent
352 cp zfs_send $(DESTDIR)/usr/vm/sbin/zfs_send
353 cp zfs_recv $(DESTDIR)/usr/vm/sbin/zfs_recv
354 cp vmunbundle $(DESTDIR)/usr/vm/sbin/vmunbundle
355 mkdir -p $(DESTDIR)/lib/svc/manifest/system
356 cp vm/smf/system-vmadmd.xml \
357 $(DESTDIR)/lib/svc/manifest/system/system-vmadmd.xml
358 cp vm/smf/system-metadata.xml \
359 $(DESTDIR)/lib/svc/manifest/system/system-metadata.xml
360 mv $(DESTDIR)/usr/vm/sbin/vmadmd.js $(DESTDIR)/usr/vm/sbin/vmadmd
361 mv $(DESTDIR)/usr/vm/sbin/vmadm.js $(DESTDIR)/usr/vm/sbin/vmadm
362 mv $(DESTDIR)/usr/vm/sbin/add-userscript.js \
363 $(DESTDIR)/usr/vm/sbin/add-userscript
364 mv $(DESTDIR)/usr/vm/sbin/metadata.js $(DESTDIR)/usr/vm/sbin/metadata
365 mkdir -p $(DESTDIR)/usr/share/man/man1
366 sed -e "s|require('dtrace-provider')|require('/usr/node/node_modules/dtrace-provider')|" \
367 < node-bunyan/lib/bunyan.js \
368 > $(PREFIX_NODE)/node_modules/bunyan.js
369 cp node-bunyan/docs/bunyan.1 $(DESTDIR)/usr/share/man/man1/bunyan.1
370 mkdir -p $(DESTDIR)/usr/bin
371 sed -e 's|^#!/usr/bin/env node.*$$|#!/usr/node/bin/node|' \
372 < node-bunyan/bin/bunyan \
373 > $(DESTDIR)/usr/bin/bunyan
374 cp node-panic/lib/panic.js $(PREFIX_NODE)/node_modules/panic.js
375 cp node-panic/lib/subr.js $(PREFIX_NODE)/node_modules/subr.js
376 rm -rf $(DESTDIR)/usr/img
377 mkdir -m 0755 -p $(DESTDIR)/usr/img
378 cp img/README.md $(DESTDIR)/usr/img/README.md
379 cp img/package.json $(DESTDIR)/usr/img/package.json
380 cp -PR img/etc $(DESTDIR)/usr/img/
381 cp -PR img/lib $(DESTDIR)/usr/img/
382 cp -PR img/man $(DESTDIR)/usr/img/
383 cp -PR img/node_modules $(DESTDIR)/usr/img/
384 cp -PR img/sbin $(DESTDIR)/usr/img/
385 cp -PR img/test $(DESTDIR)/usr/img/
386 rm -rf $(DESTDIR)/usr/fw
387 mkdir -m 0755 -p $(DESTDIR)/usr/fw
388 cp -PR fw/etc $(DESTDIR)/usr/fw/
389 cp -PR fw/lib $(DESTDIR)/usr/fw/
390 cp -PR fw/node_modules $(DESTDIR)/usr/fw/
391 cp -PR fw/sbin $(DESTDIR)/usr/fw/
392
393 check: $(JSLINT)
394 @echo "==> Running cstyle..."
395 @# cstyle doesn't echo as it goes so we add an echo to each line below
396 @(for file in $(C_CHECK_TARGETS); do \
397 echo $(PWD)/$$file; \
398 $(CSTYLE) $$file; \
399 done)
400 @printf "\nC files ok!\n"
401 @printf "\n==> Running JavaScriptLint...\n"
402 @$(JSLINT) --nologo --conf=$(ROOT)/tools/jsl.node.conf \
403 $(JS_CHECK_TARGETS) $(JS_CHECK_OLDSKOOL_TARGETS)
404 @printf "\n==> Running jsstyle...\n"
405 @# jsstyle doesn't echo as it goes so we add an echo to each line below
406 (for file in $(JS_CHECK_TARGETS); do \
407 echo $(PWD)/$$file; \
408 $(JSSTYLE) $(JSSTYLE_OPTS) $$file; \
409 [[ $$? == "0" ]] || exit 1; \
410 done)
411 (for file in $(JS_CHECK_OLDSKOOL_TARGETS); do \
412 echo $(PWD)/$$file; \
413 $(JSSTYLE) $(JSSTYLE_OLDSKOOL_OPTS) $$file; \
414 [[ $$? == "0" ]] || exit 1; \
415 done)
416 @printf "\nJS style ok!\n"
417
418 .PHONY: manifest
419 manifest:
420 (cat manifest && cd vm && \
421 echo "# list of tests is autogenerated by smartos-live/src/Makefile" && \
422 find tests/ -type f -exec echo "{}" "0444 root bin" \;) \
423 | sed -e "s|^tests/|f usr/vm/test/tests/|" \
424 > $(DESTDIR)/$(DESTNAME) \
425
426 $(JSLINT):
427 (cd $(ROOT); $(MAKE) jsl)
428
429 clean:
430 -rm -f $(TARGETS) $(SMARTDC_TARGETS) $(SMARTDC_LIB_TARGETS) *.o \
431 $(CLEANFILES)
432 -rm -rf node-sqlite3/build
433
434 include Makefile.targ
435
436 #
437 # Custom rules for building our various real targets follow. Generic rules
438 # belong in Makefile.targ.
439 #
440 disklayout: disklayout.js
441 cp disklayout.js disklayout
442 chmod 0755 disklayout
443
444 disklist: disklist.sh
445 cp disklist.sh disklist
446 chmod 0755 disklist
447
448 mkzpool: mkzpool.js
449 cp mkzpool.js mkzpool
450 chmod 0755 mkzpool
451
452 sysinfo:
453 touch sysinfo
454
455 #
456 # Node native add-on target patterns. Follow these patterns when adding a new
457 # add-on and see the comment and definitions for EXPAT.NODE above as well.
458 #
459 $(EXPAT.NODE): node-expat/node-expat.cc
460 @mkdir -p $(EXPAT_OBJDIR)
461 $(GXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $< $(LIBS)
462
463 #
464 # The next two are used to build libusdt files into
465 # $(DTRACE_PROVIDER_OBJDIR)/libusdt/*.o, instead of building libusdt.a
466 #
467 $(DTRACE_PROVIDER_OBJDIR)/%.o: $(DTRACE_PROVIDER_SRCDIR)/%.c \
468 $(DTRACE_PROVIDER_HDRS)
469 @mkdir -p $(DTRACE_PROVIDER_OBJDIR)/libusdt
470 $(GCC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<
471
472 $(DTRACE_PROVIDER_OBJDIR)/%.o: $(DTRACE_PROVIDER_SRCDIR)/%.s
473 @mkdir -p $(DTRACE_PROVIDER_OBJDIR)/libusdt
474 $(GCC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<
475
476 $(DTRACE_PROVIDER_OBJDIR)/%.o: $(DTRACE_PROVIDER_SRCDIR)/%.cc \
477 $(DTRACE_PROVIDER_HDRS)
478 @mkdir -p $(DTRACE_PROVIDER_OBJDIR)
479 $(GXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ -c $<
480
481 $(DTRACE_PROVIDER.NODE): $(DTRACE_PROVIDER_OBJS)
482 @mkdir -p $(DTRACE_PROVIDER_OBJDIR)
483 $(GXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $(DTRACE_PROVIDER_OBJS) $(LIBS)
484
485 $(KSTAT.NODE): node-kstat/kstat.cc
486 @mkdir -p $(KSTAT_OBJDIR)
487 $(GXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $< $(LIBS)
488
489 $(SQLITE3_OBJDIR)/%.o: $(SQLITE3_SRCDIR)/%.cc $(SQLITE3_HDRS)
490 @mkdir -p $(SQLITE3_OBJDIR)
491 $(GXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ -c $<
492
493 $(SQLITE3_OBJDIR)/%.o: $(SQLITE3_LIBSRCDIR)/%.c $(SQLITE3_HDRS)
494 @mkdir -p $(SQLITE3_OBJDIR)
495 $(GCC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<
496
497 $(SQLITE3_BINDINGS.NODE): $(SQLITE3_OBJS)
498 $(GXX) $(LDFLAGS) -o $@ $(SQLITE3_OBJS) $(LIBS)
499
500 $(ZSOCK_BINDINGS.NODE): $(ZSOCK_SRCDIR)/zsock.cc
501 @mkdir -p $(ZSOCK_OBJDIR)
502 $(GXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $< $(LIBS)
503
504 #
505 # The zutil add-on requires a slightly more complex 2-phase build.
506 #
507 $(ZUTIL_OBJDIR)/%.o: $(ZUTIL_SRCDIR)/%.cc $(ZUTIL_BINDINGS_HDRS)
508 @mkdir -p $(ZUTIL_OBJDIR)
509 $(GXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ -c $<
510
511 $(ZUTIL_BINDINGS.NODE): $(ZUTIL_BINDINGS_OBJS)
512 $(GXX) $(LDFLAGS) -o $@ $(ZUTIL_BINDINGS_OBJS) $(LIBS)