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