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 filewait.js \ 64 node_modules/{system,onlyif}.js \ 65 vm/sbin/*.js \ 66 vm/node_modules/{qmp,VM,dladm}.js \ 67 img/lib/*.js \ 68 img/sbin/imgadm \ 69 vm/lib/metadata/*.js 70 71 JS_CHECK_OLDSKOOL_TARGETS = \ 72 disklayout.js \ 73 mkzpool.js \ 74 node_modules/disklayout.js 75 76 # These files will get run through cstyle on 'make check' 77 C_CHECK_TARGETS=\ 78 qemu-exec.c \ 79 vmunbundle.c \ 80 zfs_recv.c \ 81 zfs_send.c \ 82 zoneevent.c 83 84 # 85 # Generic flags we apply by default to everything. 86 # 87 CFLAGS += $(WARN_FLAGS) 88 CXXFLAGS = $(CFLAGS) 89 90 # 91 # Node native add-on patterns. For add-ons with a single source file in the 92 # root of the add-on tree and no headers of its own, follow the EXPAT.NODE 93 # pattern here and below in the targets. More complex examples (source 94 # subdirectory, headers, multiple C++ sources) follow; see associated comments 95 # if you are looking for a pattern to copy. 96 # 97 EXPAT_OBJDIR = node-expat/build/Release 98 EXPAT.NODE = $(EXPAT_OBJDIR)/node-expat.node 99 100 $(EXPAT.NODE) : WARN_FLAGS += -Wno-unused 101 $(EXPAT.NODE) : CPPFLAGS += $(NODE_CPPFLAGS) 102 $(EXPAT.NODE) : CXXFLAGS += $(NODE_CFLAGS) 103 $(EXPAT.NODE) : LDFLAGS += $(NODE_LDFLAGS) 104 $(EXPAT.NODE) : LIBS += -lexpat 105 106 # 107 # The kstat Node add-on follows the same pattern as EXPAT.NODE. 108 # 109 KSTAT_OBJDIR = node-kstat/build/Release 110 KSTAT.NODE = $(KSTAT_OBJDIR)/kstat.node 111 112 $(KSTAT.NODE) : WARN_FLAGS += -Wno-unused -Wno-write-strings -Wno-sign-compare 113 $(KSTAT.NODE) : CPPFLAGS += $(NODE_CPPFLAGS) 114 $(KSTAT.NODE) : CXXFLAGS += $(NODE_CFLAGS) 115 $(KSTAT.NODE) : LDFLAGS += $(NODE_LDFLAGS) 116 $(KSTAT.NODE) : LIBS += -lkstat 117 118 # 119 # The lockfd Node add-on is based on v8plus, which has its own system of 120 # Makefiles. 121 # 122 LOCKFD_BINDING.NODE = node-lockfd/lib/lockfd_binding.node 123 124 LOCKFD_SRC_DIR = $(PWD)/node-lockfd/src 125 LOCKFD_V8PLUS_DIR = $(PWD)/node-lockfd/node_modules/v8plus 126 127 # 128 # The dtrace-provider add-on uses a combination of C, assembly and C++ files in 129 # multiple directories. 130 # 131 DTRACE_PROVIDER_OBJDIR = node-dtrace-provider/build/Release 132 DTRACE_PROVIDER_SRCDIR = node-dtrace-provider 133 DTRACE_PROVIDER.NODE = $(DTRACE_PROVIDER_OBJDIR)/dtrace-provider.node 134 135 DTRACE_PROVIDER_SRCS += \ 136 dtrace_probe.cc \ 137 dtrace_provider.cc 138 139 DTRACE_PROVIDER_LIBUSDT_SRCS += \ 140 libusdt/usdt.c \ 141 libusdt/usdt_dof_file.c \ 142 libusdt/usdt_probe.c \ 143 libusdt/usdt_dof.c \ 144 libusdt/usdt_dof_sections.c 145 146 DTRACE_PROVIDER_LIBUSDT_ASM_SRCS += \ 147 libusdt/usdt_tracepoints_i386.s 148 149 DTRACE_PROVIDER_HDRS += \ 150 node-dtrace-provider/dtrace_provider.h \ 151 node-dtrace-provider/libusdt/usdt_internal.h \ 152 node-dtrace-provider/libusdt/usdt.h 153 154 DTRACE_PROVIDER_OBJS += \ 155 $(DTRACE_PROVIDER_SRCS:%.cc=$(DTRACE_PROVIDER_OBJDIR)/%.o) \ 156 $(DTRACE_PROVIDER_LIBUSDT_SRCS:%.c=$(DTRACE_PROVIDER_OBJDIR)/%.o) \ 157 $(DTRACE_PROVIDER_LIBUSDT_ASM_SRCS:%.s=$(DTRACE_PROVIDER_OBJDIR)/%.o) 158 159 $(DTRACE_PROVIDER.NODE) : WARN_FLAGS += -Wno-unused -Wno-sign-compare 160 $(DTRACE_PROVIDER.NODE) : CFLAGS += $(NODE_CFLAGS) 161 $(DTRACE_PROVIDER.NODE) : CPPFLAGS += \ 162 $(NODE_CPPFLAGS) \ 163 -Inode-dtrace-provider/libusdt 164 $(DTRACE_PROVIDER.NODE) : CXXFLAGS += $(NODE_CFLAGS) 165 $(DTRACE_PROVIDER.NODE) : LDFLAGS += $(NODE_LDFLAGS) 166 167 CLEANFILES += $(DTRACE_PROVIDER.NODE) $(DTRACE_PROVIDER_OBJS) 168 169 # 170 # The microtime Node add-on follows the same pattern as EXPAT.NODE. 171 # 172 MICROTIME_OBJDIR = node-microtime/build/Release 173 MICROTIME.NODE = $(MICROTIME_OBJDIR)/microtime.node 174 175 $(MICROTIME.NODE) : WARN_FLAGS += -Wno-unused -Wno-write-strings -Wno-sign-compare 176 $(MICROTIME.NODE) : CPPFLAGS += $(NODE_CPPFLAGS) 177 $(MICROTIME.NODE) : CXXFLAGS += $(NODE_CFLAGS) 178 $(MICROTIME.NODE) : LDFLAGS += $(NODE_LDFLAGS) 179 180 181 # 182 # The sqlite3 add-on uses a combination of C + C++ files in multiple 183 # directories, and has multiple header directories as well. 184 # 185 SQLITE3_OBJDIR = node-sqlite3/build/Release 186 SQLITE3_SRCDIR = node-sqlite3/src 187 SQLITE3_LIBSRCDIR = node-sqlite3/deps/sqlite3 188 SQLITE3_BINDINGS.NODE = $(SQLITE3_OBJDIR)/node_sqlite3.node 189 190 SQLITE3_SRCS += \ 191 database.cc \ 192 node_sqlite3.cc \ 193 statement.cc 194 195 SQLITE3_LIBSRCS += sqlite3.c 196 197 SQLITE3_NODEHDRS += \ 198 async.h \ 199 macros.h \ 200 statement.h \ 201 threading.h 202 203 SQLITE3_LIBHDRS += \ 204 sqlite3.h \ 205 sqlite3ext.h 206 207 SQLITE3_OBJS = \ 208 $(SQLITE3_SRCS:%.cc=$(SQLITE3_OBJDIR)/%.o) \ 209 $(SQLITE3_LIBSRCS:%.c=$(SQLITE3_OBJDIR)/%.o) 210 SQLITE3_HDRS = \ 211 $(SQLITE3_NODEHDRS:%=$(SQLITE3_SRCDIR)/%) \ 212 $(SQLITE3_LIBHDRS:%=$(SQLITE3_LIBSRCDIR)/%) 213 CLEANFILES += $(SQLITE3_OBJS) 214 215 SQLITE3_FLAGS = \ 216 -fdata-sections \ 217 -ffunction-sections \ 218 -fno-omit-frame-pointer \ 219 -fno-strict-aliasing \ 220 -fno-exceptions 221 222 $(SQLITE3_BINDINGS.NODE) : WARN_FLAGS = -Wall -Werror 223 $(SQLITE3_BINDINGS.NODE) : CPPFLAGS += \ 224 $(NODE_CPPFLAGS) \ 225 -I$(SQLITE3_LIBSRCDIR) \ 226 -D_SQLITE_THREADSAFE=1 \ 227 -D_SQLITE_ENABLE_FTS3 \ 228 -D_SQLITE_ENABLE_RTREE \ 229 -D_LARGEFILE_SOURCE \ 230 -D_FILE_OFFSET_BITS=64 \ 231 -D_REENTRANT \ 232 -D_NDEBUG \ 233 -D_POSIX_PTHREAD_SEMANTICS 234 $(SQLITE3_BINDINGS.NODE) : CFLAGS += \ 235 $(NODE_CFLAGS) \ 236 $(SQLITE3_FLAGS) 237 $(SQLITE3_BINDINGS.NODE) : LDFLAGS += \ 238 $(NODE_LDFLAGS) \ 239 -Wl,-soname=node_sqlite3.node 240 $(SQLITE3_BINDINGS.NODE) : LIBS += -lpthread 241 242 # 243 # The libuuid Node add-on follows the same pattern as EXPAT.NODE. 244 # 245 UUID_OBJDIR = node-libuuid/build/Release 246 UUID_SRCDIR = node-libuuid/src 247 UUID.NODE = $(UUID_OBJDIR)/uuid.node 248 249 $(UUID.NODE) : WARN_FLAGS += -Wno-unused -Wno-write-strings -Wno-sign-compare 250 $(UUID.NODE) : CPPFLAGS += $(NODE_CPPFLAGS) 251 $(UUID.NODE) : CXXFLAGS += $(NODE_CFLAGS) 252 $(UUID.NODE) : LDFLAGS += $(NODE_LDFLAGS) 253 $(UUID.NODE) : LIBS += -luuid 254 255 # 256 # The zsock add-on places its single source file in a subdirectory. 257 # 258 ZSOCK_OBJDIR = node-zsock/build/Release 259 ZSOCK_SRCDIR = node-zsock/src 260 ZSOCK_BINDINGS.NODE = $(ZSOCK_OBJDIR)/zsock_bindings.node 261 262 $(ZSOCK_BINDINGS.NODE) : WARN_FLAGS = -Wall -Werror 263 $(ZSOCK_BINDINGS.NODE) : CPPFLAGS += \ 264 $(NODE_CPPFLAGS) \ 265 -D_REENTRANT \ 266 -D_POSIX_PTHREAD_SEMANTICS \ 267 -D_XOPEN_SOURCE_EXTENDED=1 \ 268 -D__EXTENSIONS__ \ 269 -DSunOS 270 $(ZSOCK_BINDINGS.NODE) : CXXFLAGS += \ 271 $(NODE_CFLAGS) \ 272 -std=c++98 273 $(ZSOCK_BINDINGS.NODE) : LDFLAGS += $(NODE_LDFLAGS) 274 $(ZSOCK_BINDINGS.NODE) : LIBS += -lsocket -lnsl -lcontract 275 276 # 277 # The zutil add-on places its multiple source files in a subdirectory, and 278 # builds them against some headers that it also supplies and needs to depend on. 279 # Because we must build intermediate object files, this requires a 280 # different target pattern as well; see below. 281 # 282 ZUTIL_OBJDIR = node-zutil/build/Release 283 ZUTIL_SRCDIR = node-zutil/src 284 ZUTIL_BINDINGS.NODE = $(ZUTIL_OBJDIR)/zutil_bindings.node 285 286 ZUTIL_SRCS += \ 287 zone.cc \ 288 zonecfg.cc \ 289 zutil_bindings.cc 290 291 ZUTIL_HDRS += \ 292 zone.h \ 293 zonecfg.h \ 294 zutil_common.h 295 296 ZUTIL_BINDINGS_OBJS = $(ZUTIL_SRCS:%.cc=$(ZUTIL_OBJDIR)/%.o) 297 ZUTIL_BINDINGS_HDRS = $(ZUTIL_HDRS:%=$(ZUTIL_SRCDIR)/%) 298 CLEANFILES += $(ZUTIL_BINDINGS_OBJS) 299 300 $(ZUTIL_BINDINGS.NODE) : WARN_FLAGS += -Wno-unused 301 $(ZUTIL_BINDINGS.NODE) : CPPFLAGS += $(NODE_CPPFLAGS) -DSunOS 302 $(ZUTIL_BINDINGS.NODE) : CXXFLAGS += $(NODE_CFLAGS) 303 $(ZUTIL_BINDINGS.NODE) : LDFLAGS += $(NODE_LDFLAGS) 304 $(ZUTIL_BINDINGS.NODE) : LIBS += -lzonecfg 305 306 # 307 # List of targets. TARGETS, SMARTDC_TARGETS, and SMARTDC_LIB_TARGETS must 308 # include only those files that are safe to remove when the clean target is 309 # built. 310 # 311 TARGETS = \ 312 bootparams \ 313 diskinfo \ 314 disklayout \ 315 disklist \ 316 disk_size \ 317 mkzpool \ 318 removable_disk \ 319 vmunbundle \ 320 zfs_recv \ 321 zfs_send \ 322 zoneevent \ 323 $(EXPAT.NODE) \ 324 $(DTRACE_PROVIDER.NODE) \ 325 $(KSTAT.NODE) \ 326 $(LOCKFD_BINDING.NODE) \ 327 $(MICROTIME.NODE) \ 328 $(SYSLOG.NODE) \ 329 $(SQLITE3_BINDINGS.NODE) \ 330 $(UUID.NODE) \ 331 $(ZSOCK_BINDINGS.NODE) \ 332 $(ZUTIL_BINDINGS.NODE) 333 334 USR_LIB_TARGETS = \ 335 measure_terminal 336 337 SMARTDC_TARGETS = \ 338 qemu-exec 339 340 SMARTDC_LIB_TARGETS = \ 341 sdc-on-tty 342 343 all: $(TARGETS) $(USR_LIB_TARGETS) sysinfo nictagadm $(SMARTDC_TARGETS) \ 344 $(SMARTDC_LIB_TARGETS) 345 346 install: all 347 mkdir -p $(DESTDIR)/usr/bin 348 cp -p $(TARGETS) sysinfo nictagadm $(DESTDIR)/usr/bin 349 cp -p $(USR_LIB_TARGETS) $(DESTDIR)/usr/lib 350 mkdir -p $(DESTDIR)/smartdc/bin 351 cp -p $(SMARTDC_TARGETS) $(DESTDIR)/smartdc/bin 352 mkdir -p $(DESTDIR)/smartdc/lib 353 cp -p $(SMARTDC_LIB_TARGETS) $(DESTDIR)/smartdc/lib 354 mkdir -m 0755 -p $(PREFIX_NODE)/node_modules 355 cp -Pr node_modules/* $(PREFIX_NODE)/node_modules 356 cp $(KSTAT.NODE) $(PREFIX_NODE)/node_modules/ 357 cp node-lockfd/lib/index.js $(PREFIX_NODE)/node_modules/lockfd.js 358 cp $(LOCKFD_BINDING.NODE) $(PREFIX_NODE)/node_modules/lockfd_binding.node 359 cp $(MICROTIME.NODE) $(PREFIX_NODE)/node_modules/ 360 rm -rf $(DESTDIR)/usr/vm 361 cp -PR vm $(DESTDIR)/usr/ 362 mkdir -m 0755 -p $(DESTDIR)/usr/vm/node_modules 363 mkdir -p $(PREFIX_NODE)/node_modules/{zsock,zutil}/build/Release 364 mkdir -p $(DESTDIR)/usr/vm/test/tests 365 cp -Pr vm/common $(DESTDIR)/usr/vm/test/ 366 cp -Pr vm/node-tap $(DESTDIR)/usr/vm/test/ 367 cp -Pr vm/tests $(DESTDIR)/usr/vm/test/ 368 cp vm/runtest $(DESTDIR)/usr/vm/test/ 369 cp vm/runtests $(DESTDIR)/usr/vm/test/ 370 cp -Pr node-zsock/{package.json,lib} \ 371 $(PREFIX_NODE)/node_modules/zsock 372 cp -Pr node-zutil/{package.json,lib} \ 373 $(PREFIX_NODE)/node_modules/zutil 374 cp $(SQLITE3_BINDINGS.NODE) \ 375 $(PREFIX_NODE)/node_modules 376 (sed -e "s|var sqlite3.*;|var sqlite3 = module.exports = exports = require('./node_sqlite3');|" | \ 377 sed -e "s|var trace = require.*;|var trace = require('./sqlite3_trace')|") \ 378 < node-sqlite3/lib/sqlite3.js \ 379 > $(PREFIX_NODE)/node_modules/sqlite3.js 380 cp node-sqlite3/lib/trace.js $(PREFIX_NODE)/node_modules/sqlite3_trace.js 381 cp $(ZSOCK_BINDINGS.NODE) \ 382 $(PREFIX_NODE)/node_modules/zsock/build/Release 383 cp $(ZUTIL_BINDINGS.NODE) \ 384 $(PREFIX_NODE)/node_modules/zutil/build/Release 385 cp $(EXPAT.NODE) $(PREFIX_NODE)/node_modules/expat_binding.node 386 cp $(UUID.NODE) $(PREFIX_NODE)/node_modules/uuid.node 387 cp $(DTRACE_PROVIDER.NODE) $(PREFIX_NODE)/node_modules/dtrace-provider.node 388 sed -e "s|require('./build.*DTraceProviderBindings')|require('/usr/node/node_modules/dtrace-provider.node')|" \ 389 < $(DTRACE_PROVIDER_SRCDIR)/dtrace-provider.js \ 390 > $(PREFIX_NODE)/node_modules/dtrace-provider.js 391 sed -e "s|var expat.*;|var expat = require('./expat_binding');|" \ 392 < node-expat/lib/node-expat.js \ 393 > $(PREFIX_NODE)/node_modules/node-expat.js 394 cp zoneevent $(DESTDIR)/usr/vm/sbin/zoneevent 395 cp zfs_send $(DESTDIR)/usr/vm/sbin/zfs_send 396 cp zfs_recv $(DESTDIR)/usr/vm/sbin/zfs_recv 397 cp vmunbundle $(DESTDIR)/usr/vm/sbin/vmunbundle 398 cp filewait.js $(DESTDIR)/usr/vm/sbin/filewait 399 mkdir -p $(DESTDIR)/lib/svc/manifest/system 400 cp vm/smf/system-vmadmd.xml \ 401 $(DESTDIR)/lib/svc/manifest/system/system-vmadmd.xml 402 cp vm/smf/system-metadata.xml \ 403 $(DESTDIR)/lib/svc/manifest/system/system-metadata.xml 404 mv $(DESTDIR)/usr/vm/sbin/vmadmd.js $(DESTDIR)/usr/vm/sbin/vmadmd 405 mv $(DESTDIR)/usr/vm/sbin/vmadm.js $(DESTDIR)/usr/vm/sbin/vmadm 406 mv $(DESTDIR)/usr/vm/sbin/add-userscript.js \ 407 $(DESTDIR)/usr/vm/sbin/add-userscript 408 mv $(DESTDIR)/usr/vm/sbin/metadata.js $(DESTDIR)/usr/vm/sbin/metadata 409 mkdir -p $(DESTDIR)/usr/share/man/man1 410 sed -e "s|require('dtrace-provider')|require('/usr/node/node_modules/dtrace-provider')|" \ 411 < node-bunyan/lib/bunyan.js \ 412 > $(PREFIX_NODE)/node_modules/bunyan.js 413 cp node-bunyan/docs/bunyan.1 $(DESTDIR)/usr/share/man/man1/bunyan.1 414 mkdir -p $(DESTDIR)/usr/bin 415 sed -e 's|^#!/usr/bin/env node.*$$|#!/usr/node/bin/node|' \ 416 < node-bunyan/bin/bunyan \ 417 > $(DESTDIR)/usr/bin/bunyan 418 cp node-panic/lib/panic.js $(PREFIX_NODE)/node_modules/panic.js 419 cp node-panic/lib/subr.js $(PREFIX_NODE)/node_modules/subr.js 420 rm -rf $(DESTDIR)/usr/img 421 mkdir -m 0755 -p $(DESTDIR)/usr/img 422 cp img/README.md $(DESTDIR)/usr/img/README.md 423 cp img/package.json $(DESTDIR)/usr/img/package.json 424 cp -PR img/etc $(DESTDIR)/usr/img/ 425 cp -PR img/lib $(DESTDIR)/usr/img/ 426 cp -PR img/man $(DESTDIR)/usr/img/ 427 cp -PR img/node_modules $(DESTDIR)/usr/img/ 428 cp -PR img/sbin $(DESTDIR)/usr/img/ 429 cp -PR img/test $(DESTDIR)/usr/img/ 430 rm -rf $(DESTDIR)/usr/fw 431 mkdir -m 0755 -p $(DESTDIR)/usr/fw 432 cp -PR fw/etc $(DESTDIR)/usr/fw/ 433 cp -PR fw/lib $(DESTDIR)/usr/fw/ 434 cp -PR fw/node_modules $(DESTDIR)/usr/fw/ 435 cp -PR fw/sbin $(DESTDIR)/usr/fw/ 436 437 check: $(JSLINT) 438 @echo "==> Running cstyle..." 439 @# cstyle doesn't echo as it goes so we add an echo to each line below 440 @(for file in $(C_CHECK_TARGETS); do \ 441 echo $(PWD)/$$file; \ 442 $(CSTYLE) $$file; \ 443 done) 444 @printf "\nC files ok!\n" 445 @printf "\n==> Running JavaScriptLint...\n" 446 @$(JSLINT) --nologo --conf=$(ROOT)/tools/jsl.node.conf \ 447 $(JS_CHECK_TARGETS) $(JS_CHECK_OLDSKOOL_TARGETS) 448 @printf "\n==> Running jsstyle...\n" 449 @# jsstyle doesn't echo as it goes so we add an echo to each line below 450 (for file in $(JS_CHECK_TARGETS); do \ 451 echo $(PWD)/$$file; \ 452 $(JSSTYLE) $(JSSTYLE_OPTS) $$file; \ 453 [[ $$? == "0" ]] || exit 1; \ 454 done) 455 (for file in $(JS_CHECK_OLDSKOOL_TARGETS); do \ 456 echo $(PWD)/$$file; \ 457 $(JSSTYLE) $(JSSTYLE_OLDSKOOL_OPTS) $$file; \ 458 [[ $$? == "0" ]] || exit 1; \ 459 done) 460 @printf "\nJS style ok!\n" 461 462 .PHONY: manifest 463 manifest: 464 (cat manifest && cd vm && \ 465 echo "# list of tests is autogenerated by smartos-live/src/Makefile" && \ 466 find tests/ -type f -exec echo "{}" "0444 root bin" \;) \ 467 | sed -e "s|^tests/|f usr/vm/test/tests/|" \ 468 > $(DESTDIR)/$(DESTNAME) \ 469 470 $(JSLINT): 471 (cd $(ROOT); $(MAKE) jsl) 472 473 clean: 474 -rm -f $(TARGETS) $(SMARTDC_TARGETS) $(SMARTDC_LIB_TARGETS) *.o \ 475 $(CLEANFILES) 476 -rm -rf node-sqlite3/build 477 cd $(LOCKFD_SRC_DIR) && $(MAKE) clean 478 479 include Makefile.targ 480 481 # 482 # Custom rules for building our various real targets follow. Generic rules 483 # belong in Makefile.targ. 484 # 485 disklayout: disklayout.js 486 cp disklayout.js disklayout 487 chmod 0755 disklayout 488 489 disklist: disklist.sh 490 cp disklist.sh disklist 491 chmod 0755 disklist 492 493 mkzpool: mkzpool.js 494 cp mkzpool.js mkzpool 495 chmod 0755 mkzpool 496 497 sysinfo: 498 touch sysinfo 499 500 nictagadm: 501 touch nictagadm 502 503 # 504 # Node native add-on target patterns. Follow these patterns when adding a new 505 # add-on and see the comment and definitions for EXPAT.NODE above as well. 506 # 507 $(EXPAT.NODE): node-expat/node-expat.cc 508 @mkdir -p $(EXPAT_OBJDIR) 509 $(GXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) 510 511 # 512 # node-lockfd is built using the v8plus-based Makefile contained within the 513 # project. We use LD_OPTIONS, here, to induce the linker to include libc, 514 # which gcc as configured in proto.strap does not, but which other C compilers 515 # generally do. 516 # 517 $(LOCKFD_BINDING.NODE): FRC 518 cd $(LOCKFD_SRC_DIR) && \ 519 LD_OPTIONS=-lc \ 520 $(MAKE) \ 521 CC=$(GCC) CXX=$(GXX) \ 522 PREFIX_NODE=$(PREFIX_NODE) \ 523 NODE_EXEC=$(NODE_EXEC) \ 524 V8PLUS=$(LOCKFD_V8PLUS_DIR) \ 525 CTFCONVERT=$(CTFCONVERT) \ 526 CTFMERGE=$(CTFMERGE) 527 528 # 529 # The next two are used to build libusdt files into 530 # $(DTRACE_PROVIDER_OBJDIR)/libusdt/*.o, instead of building libusdt.a 531 # 532 $(DTRACE_PROVIDER_OBJDIR)/%.o: $(DTRACE_PROVIDER_SRCDIR)/%.c \ 533 $(DTRACE_PROVIDER_HDRS) 534 @mkdir -p $(DTRACE_PROVIDER_OBJDIR)/libusdt 535 $(GCC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $< 536 537 $(DTRACE_PROVIDER_OBJDIR)/%.o: $(DTRACE_PROVIDER_SRCDIR)/%.s 538 @mkdir -p $(DTRACE_PROVIDER_OBJDIR)/libusdt 539 $(GCC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $< 540 541 $(DTRACE_PROVIDER_OBJDIR)/%.o: $(DTRACE_PROVIDER_SRCDIR)/%.cc \ 542 $(DTRACE_PROVIDER_HDRS) 543 @mkdir -p $(DTRACE_PROVIDER_OBJDIR) 544 $(GXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ -c $< 545 546 $(DTRACE_PROVIDER.NODE): $(DTRACE_PROVIDER_OBJS) 547 @mkdir -p $(DTRACE_PROVIDER_OBJDIR) 548 $(GXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $(DTRACE_PROVIDER_OBJS) $(LIBS) 549 550 $(KSTAT.NODE): node-kstat/kstat.cc 551 @mkdir -p $(KSTAT_OBJDIR) 552 $(GXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) 553 554 $(MICROTIME.NODE): node-microtime/src/microtime.cc 555 @mkdir -p $(MICROTIME_OBJDIR) 556 $(GXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) 557 558 $(SQLITE3_OBJDIR)/%.o: $(SQLITE3_SRCDIR)/%.cc $(SQLITE3_HDRS) 559 @mkdir -p $(SQLITE3_OBJDIR) 560 $(GXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ -c $< 561 562 $(SQLITE3_OBJDIR)/%.o: $(SQLITE3_LIBSRCDIR)/%.c $(SQLITE3_HDRS) 563 @mkdir -p $(SQLITE3_OBJDIR) 564 $(GCC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $< 565 566 $(SQLITE3_BINDINGS.NODE): $(SQLITE3_OBJS) 567 $(GXX) $(LDFLAGS) -o $@ $(SQLITE3_OBJS) $(LIBS) 568 569 $(UUID.NODE): $(UUID_SRCDIR)/uuid.cc 570 @mkdir -p $(UUID_OBJDIR) 571 $(GXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) 572 573 $(ZSOCK_BINDINGS.NODE): $(ZSOCK_SRCDIR)/zsock.cc 574 @mkdir -p $(ZSOCK_OBJDIR) 575 $(GXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) 576 577 # 578 # The zutil add-on requires a slightly more complex 2-phase build. 579 # 580 $(ZUTIL_OBJDIR)/%.o: $(ZUTIL_SRCDIR)/%.cc $(ZUTIL_BINDINGS_HDRS) 581 @mkdir -p $(ZUTIL_OBJDIR) 582 $(GXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ -c $< 583 584 $(ZUTIL_BINDINGS.NODE): $(ZUTIL_BINDINGS_OBJS) 585 $(GXX) $(LDFLAGS) -o $@ $(ZUTIL_BINDINGS_OBJS) $(LIBS) 586 587 FRC: