Makefile (15297B)
1 # 2 # QuickJS Javascript Engine 3 # 4 # Copyright (c) 2017-2021 Fabrice Bellard 5 # Copyright (c) 2017-2021 Charlie Gordon 6 # 7 # Permission is hereby granted, free of charge, to any person obtaining a copy 8 # of this software and associated documentation files (the "Software"), to deal 9 # in the Software without restriction, including without limitation the rights 10 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 # copies of the Software, and to permit persons to whom the Software is 12 # furnished to do so, subject to the following conditions: 13 # 14 # The above copyright notice and this permission notice shall be included in 15 # all copies or substantial portions of the Software. 16 # 17 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 # THE SOFTWARE. 24 25 ifeq ($(shell uname -s),Darwin) 26 CONFIG_DARWIN=y 27 endif 28 ifeq ($(shell uname -s),FreeBSD) 29 CONFIG_FREEBSD=y 30 endif 31 # Windows cross compilation from Linux 32 # May need to have libwinpthread*.dll alongside the executable 33 # (On Ubuntu/Debian may be installed with mingw-w64-x86-64-dev 34 # to /usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll) 35 #CONFIG_WIN32=y 36 # use link time optimization (smaller and faster executables but slower build) 37 #CONFIG_LTO=y 38 # consider warnings as errors (for development) 39 #CONFIG_WERROR=y 40 # force 32 bit build on x86_64 41 #CONFIG_M32=y 42 # cosmopolitan build (see https://github.com/jart/cosmopolitan) 43 #CONFIG_COSMO=y 44 45 # installation directory 46 PREFIX?=/usr/local 47 48 # use the gprof profiler 49 #CONFIG_PROFILE=y 50 # use address sanitizer 51 #CONFIG_ASAN=y 52 # use memory sanitizer 53 #CONFIG_MSAN=y 54 # use UB sanitizer 55 #CONFIG_UBSAN=y 56 # use thread sanitizer 57 #CONFIG_TSAN=y 58 59 # TEST262 bootstrap config: commit id and shallow "since" parameter 60 TEST262_COMMIT?=5c8206929d81b2d3d727ca6aac56c18358c8d790 61 TEST262_SINCE?=2025-09-01 62 63 OBJDIR=.obj 64 65 ifdef CONFIG_ASAN 66 OBJDIR:=$(OBJDIR)/asan 67 endif 68 ifdef CONFIG_MSAN 69 OBJDIR:=$(OBJDIR)/msan 70 endif 71 ifdef CONFIG_UBSAN 72 OBJDIR:=$(OBJDIR)/ubsan 73 endif 74 75 ifdef CONFIG_DARWIN 76 # use clang instead of gcc 77 CONFIG_CLANG=y 78 CONFIG_DEFAULT_AR=y 79 endif 80 ifdef CONFIG_FREEBSD 81 # use clang instead of gcc 82 CONFIG_CLANG=y 83 CONFIG_DEFAULT_AR=y 84 CONFIG_LTO= 85 endif 86 87 ifdef CONFIG_WIN32 88 ifdef CONFIG_M32 89 CROSS_PREFIX?=i686-w64-mingw32- 90 else 91 CROSS_PREFIX?=x86_64-w64-mingw32- 92 endif 93 EXE=.exe 94 else ifdef MSYSTEM 95 CONFIG_WIN32=y 96 CROSS_PREFIX?= 97 EXE=.exe 98 else 99 CROSS_PREFIX?= 100 EXE= 101 endif 102 103 ifdef CONFIG_CLANG 104 HOST_CC=clang 105 CC=$(CROSS_PREFIX)clang 106 CFLAGS+=-g -Wall -MMD -MF $(OBJDIR)/$(@F).d 107 CFLAGS += -Wextra 108 CFLAGS += -Wno-sign-compare 109 CFLAGS += -Wno-missing-field-initializers 110 CFLAGS += -Wundef -Wuninitialized 111 CFLAGS += -Wunused -Wno-unused-parameter 112 CFLAGS += -Wwrite-strings 113 CFLAGS += -Wchar-subscripts -funsigned-char 114 CFLAGS += -MMD -MF $(OBJDIR)/$(@F).d 115 ifdef CONFIG_DEFAULT_AR 116 AR=$(CROSS_PREFIX)ar 117 else 118 ifdef CONFIG_LTO 119 AR=$(CROSS_PREFIX)llvm-ar 120 else 121 AR=$(CROSS_PREFIX)ar 122 endif 123 endif 124 LIB_FUZZING_ENGINE ?= "-fsanitize=fuzzer" 125 else ifdef CONFIG_COSMO 126 CONFIG_LTO= 127 HOST_CC=gcc 128 CC=cosmocc 129 # cosmocc does not correct support -MF 130 CFLAGS=-g -Wall #-MMD -MF $(OBJDIR)/$(@F).d 131 CFLAGS += -Wno-array-bounds -Wno-format-truncation 132 AR=cosmoar 133 else 134 HOST_CC=gcc 135 CC=$(CROSS_PREFIX)gcc 136 CFLAGS=-ggdb -fno-omit-frame-pointer -Wall -MMD -MF $(OBJDIR)/$(@F).d 137 CFLAGS += -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion 138 ifdef CONFIG_LTO 139 AR=$(CROSS_PREFIX)gcc-ar 140 else 141 AR=$(CROSS_PREFIX)ar 142 endif 143 endif 144 STRIP?=$(CROSS_PREFIX)strip 145 ifdef CONFIG_M32 146 CFLAGS+=-msse2 -mfpmath=sse # use SSE math for correct FP rounding 147 ifndef CONFIG_WIN32 148 CFLAGS+=-m32 149 LDFLAGS+=-m32 150 endif 151 endif 152 CFLAGS+=-fwrapv # ensure that signed overflows behave as expected 153 ifdef CONFIG_WERROR 154 CFLAGS+=-Werror 155 endif 156 DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(shell cat VERSION)\" 157 ifdef CONFIG_WIN32 158 DEFINES+=-D__USE_MINGW_ANSI_STDIO # for standard snprintf behavior 159 endif 160 ifndef CONFIG_WIN32 161 ifeq ($(shell $(CC) -o /dev/null compat/test-closefrom.c 2>/dev/null && echo 1),1) 162 DEFINES+=-DHAVE_CLOSEFROM 163 endif 164 endif 165 166 CFLAGS+=$(DEFINES) 167 CFLAGS_DEBUG=$(CFLAGS) -O0 168 CFLAGS_SMALL=$(CFLAGS) -Os 169 CFLAGS_OPT=$(CFLAGS) -O2 170 CFLAGS_NOLTO:=$(CFLAGS_OPT) 171 ifdef CONFIG_COSMO 172 LDFLAGS+=-s # better to strip by default 173 else 174 LDFLAGS+=-g 175 endif 176 ifdef CONFIG_LTO 177 CFLAGS_SMALL+=-flto 178 CFLAGS_OPT+=-flto 179 LDFLAGS+=-flto 180 endif 181 ifdef CONFIG_PROFILE 182 CFLAGS+=-p 183 LDFLAGS+=-p 184 endif 185 ifdef CONFIG_ASAN 186 CFLAGS+=-fsanitize=address -fno-omit-frame-pointer 187 LDFLAGS+=-fsanitize=address -fno-omit-frame-pointer 188 endif 189 ifdef CONFIG_MSAN 190 CFLAGS+=-fsanitize=memory -fno-omit-frame-pointer 191 LDFLAGS+=-fsanitize=memory -fno-omit-frame-pointer 192 endif 193 ifdef CONFIG_UBSAN 194 CFLAGS+=-fsanitize=undefined -fno-omit-frame-pointer 195 LDFLAGS+=-fsanitize=undefined -fno-omit-frame-pointer 196 endif 197 ifdef CONFIG_TSAN 198 CFLAGS+=-fsanitize=thread -fno-omit-frame-pointer 199 LDFLAGS+=-fsanitize=thread -fno-omit-frame-pointer 200 endif 201 ifdef CONFIG_WIN32 202 LDEXPORT= 203 else 204 LDEXPORT=-rdynamic 205 endif 206 207 ifndef CONFIG_COSMO 208 ifndef CONFIG_DARWIN 209 ifndef CONFIG_WIN32 210 CONFIG_SHARED_LIBS=y # building shared libraries is supported 211 endif 212 endif 213 endif 214 215 PROGS=qjs$(EXE) qjsc$(EXE) run-test262$(EXE) 216 217 ifneq ($(CROSS_PREFIX),) 218 QJSC_CC=gcc 219 QJSC=./host-qjsc 220 PROGS+=$(QJSC) 221 else 222 QJSC_CC=$(CC) 223 QJSC=./qjsc$(EXE) 224 endif 225 PROGS+=libquickjs.a 226 ifdef CONFIG_LTO 227 PROGS+=libquickjs.lto.a 228 endif 229 230 # examples 231 ifeq ($(CROSS_PREFIX),) 232 ifndef CONFIG_ASAN 233 ifndef CONFIG_MSAN 234 ifndef CONFIG_UBSAN 235 PROGS+=examples/hello examples/test_fib 236 # no -m32 option in qjsc 237 ifndef CONFIG_M32 238 ifndef CONFIG_WIN32 239 PROGS+=examples/hello_module 240 endif 241 endif 242 ifdef CONFIG_SHARED_LIBS 243 PROGS+=examples/fib.so examples/point.so 244 endif 245 endif 246 endif 247 endif 248 endif 249 250 all: $(OBJDIR) $(OBJDIR)/quickjs.check.o $(OBJDIR)/qjs.check.o $(PROGS) 251 252 QJS_LIB_OBJS=$(OBJDIR)/quickjs.o $(OBJDIR)/dtoa.o $(OBJDIR)/libregexp.o $(OBJDIR)/libunicode.o $(OBJDIR)/cutils.o $(OBJDIR)/quickjs-libc.o 253 254 QJS_OBJS=$(OBJDIR)/qjs.o $(OBJDIR)/repl.o $(QJS_LIB_OBJS) 255 256 HOST_LIBS=-lm -ldl -lpthread -lcurl -lsodium -lmbedcrypto 257 LIBS=-lm -lpthread -lcurl -lsodium -lmbedcrypto 258 ifndef CONFIG_WIN32 259 LIBS+=-ldl 260 endif 261 LIBS+=$(EXTRA_LIBS) 262 263 $(OBJDIR): 264 mkdir -p $(OBJDIR) $(OBJDIR)/examples $(OBJDIR)/tests 265 266 qjs$(EXE): $(QJS_OBJS) 267 $(CC) $(LDFLAGS) $(LDEXPORT) -o $@ $^ $(LIBS) 268 269 qjs-debug$(EXE): $(patsubst %.o, %.debug.o, $(QJS_OBJS)) 270 $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) 271 272 qjsc$(EXE): $(OBJDIR)/qjsc.o $(QJS_LIB_OBJS) 273 $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) 274 275 fuzz_eval: $(OBJDIR)/fuzz_eval.o $(OBJDIR)/fuzz_common.o libquickjs.fuzz.a 276 $(CC) $(CFLAGS_OPT) $^ -o fuzz_eval $(LIB_FUZZING_ENGINE) 277 278 fuzz_compile: $(OBJDIR)/fuzz_compile.o $(OBJDIR)/fuzz_common.o libquickjs.fuzz.a 279 $(CC) $(CFLAGS_OPT) $^ -o fuzz_compile $(LIB_FUZZING_ENGINE) 280 281 fuzz_regexp: $(OBJDIR)/fuzz_regexp.o $(OBJDIR)/libregexp.fuzz.o $(OBJDIR)/cutils.fuzz.o $(OBJDIR)/libunicode.fuzz.o 282 $(CC) $(CFLAGS_OPT) $^ -o fuzz_regexp $(LIB_FUZZING_ENGINE) 283 284 libfuzzer: fuzz_eval fuzz_compile fuzz_regexp 285 286 ifneq ($(CROSS_PREFIX),) 287 288 $(QJSC): $(OBJDIR)/qjsc.host.o \ 289 $(patsubst %.o, %.host.o, $(QJS_LIB_OBJS)) 290 $(HOST_CC) $(LDFLAGS) -o $@ $^ $(HOST_LIBS) 291 292 endif #CROSS_PREFIX 293 294 QJSC_DEFINES:=-DCONFIG_CC=\"$(QJSC_CC)\" -DCONFIG_PREFIX=\"$(PREFIX)\" 295 ifdef CONFIG_LTO 296 QJSC_DEFINES+=-DCONFIG_LTO 297 endif 298 QJSC_HOST_DEFINES:=-DCONFIG_CC=\"$(HOST_CC)\" -DCONFIG_PREFIX=\"$(PREFIX)\" 299 300 $(OBJDIR)/qjsc.o: CFLAGS+=$(QJSC_DEFINES) 301 $(OBJDIR)/qjsc.host.o: CFLAGS+=$(QJSC_HOST_DEFINES) 302 303 ifdef CONFIG_LTO 304 LTOEXT=.lto 305 else 306 LTOEXT= 307 endif 308 309 libquickjs$(LTOEXT).a: $(QJS_LIB_OBJS) 310 $(AR) rcs $@ $^ 311 312 ifdef CONFIG_LTO 313 libquickjs.a: $(patsubst %.o, %.nolto.o, $(QJS_LIB_OBJS)) 314 $(AR) rcs $@ $^ 315 endif # CONFIG_LTO 316 317 libquickjs.fuzz.a: $(patsubst %.o, %.fuzz.o, $(QJS_LIB_OBJS)) 318 $(AR) rcs $@ $^ 319 320 repl.c: $(QJSC) repl.js 321 $(QJSC) -s -c -o $@ -m repl.js 322 323 ifneq ($(wildcard unicode/UnicodeData.txt),) 324 $(OBJDIR)/libunicode.o $(OBJDIR)/libunicode.nolto.o: libunicode-table.h 325 326 libunicode-table.h: unicode_gen 327 ./unicode_gen unicode $@ 328 endif 329 330 run-test262$(EXE): $(OBJDIR)/run-test262.o $(QJS_LIB_OBJS) 331 $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) 332 333 run-test262-debug: $(patsubst %.o, %.debug.o, $(OBJDIR)/run-test262.o $(QJS_LIB_OBJS)) 334 $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) 335 336 # object suffix order: nolto 337 338 $(OBJDIR)/%.o: %.c | $(OBJDIR) 339 $(CC) $(CFLAGS_OPT) -c -o $@ $< 340 341 $(OBJDIR)/fuzz_%.o: fuzz/fuzz_%.c | $(OBJDIR) 342 $(CC) $(CFLAGS_OPT) -c -I. -o $@ $< 343 344 $(OBJDIR)/%.host.o: %.c | $(OBJDIR) 345 $(HOST_CC) $(CFLAGS_OPT) -c -o $@ $< 346 347 $(OBJDIR)/%.pic.o: %.c | $(OBJDIR) 348 $(CC) $(CFLAGS_OPT) -fPIC -DJS_SHARED_LIBRARY -c -o $@ $< 349 350 $(OBJDIR)/%.nolto.o: %.c | $(OBJDIR) 351 $(CC) $(CFLAGS_NOLTO) -c -o $@ $< 352 353 $(OBJDIR)/%.debug.o: %.c | $(OBJDIR) 354 $(CC) $(CFLAGS_DEBUG) -c -o $@ $< 355 356 $(OBJDIR)/%.fuzz.o: %.c | $(OBJDIR) 357 $(CC) $(CFLAGS_OPT) -fsanitize=fuzzer-no-link -c -o $@ $< 358 359 $(OBJDIR)/%.check.o: %.c | $(OBJDIR) 360 $(CC) $(CFLAGS) -DCONFIG_CHECK_JSVALUE -c -o $@ $< 361 362 regexp_test: libregexp.c libunicode.c cutils.c 363 $(CC) $(LDFLAGS) $(CFLAGS) -DTEST -o $@ libregexp.c libunicode.c cutils.c $(LIBS) 364 365 unicode_gen: $(OBJDIR)/unicode_gen.host.o $(OBJDIR)/cutils.host.o libunicode.c unicode_gen_def.h 366 $(HOST_CC) $(LDFLAGS) $(CFLAGS) -o $@ $(OBJDIR)/unicode_gen.host.o $(OBJDIR)/cutils.host.o 367 368 clean: 369 rm -f repl.c out.c 370 rm -f *.a *.o *.d *~ unicode_gen regexp_test fuzz_eval fuzz_compile fuzz_regexp $(PROGS) 371 rm -f hello.c test_fib.c 372 rm -f examples/*.so tests/*.so 373 rm -rf $(OBJDIR)/ *.dSYM/ qjs-debug$(EXE) 374 rm -rf run-test262-debug$(EXE) 375 rm -f run_octane run_sunspider_like 376 377 install: all 378 mkdir -p "$(DESTDIR)$(PREFIX)/bin" 379 $(STRIP) qjs$(EXE) qjsc$(EXE) 380 install -m755 qjs$(EXE) qjsc$(EXE) "$(DESTDIR)$(PREFIX)/bin" 381 mkdir -p "$(DESTDIR)$(PREFIX)/lib/quickjs" 382 install -m644 libquickjs.a "$(DESTDIR)$(PREFIX)/lib/quickjs" 383 ifdef CONFIG_LTO 384 install -m644 libquickjs.lto.a "$(DESTDIR)$(PREFIX)/lib/quickjs" 385 endif 386 mkdir -p "$(DESTDIR)$(PREFIX)/include/quickjs" 387 install -m644 quickjs.h quickjs-libc.h "$(DESTDIR)$(PREFIX)/include/quickjs" 388 389 ############################################################################### 390 # examples 391 392 # example of static JS compilation 393 HELLO_SRCS=examples/hello.js 394 HELLO_OPTS=-fno-string-normalize -fno-map -fno-promise -fno-typedarray \ 395 -fno-typedarray -fno-regexp -fno-json -fno-eval -fno-proxy \ 396 -fno-date -fno-module-loader 397 398 hello.c: $(QJSC) $(HELLO_SRCS) 399 $(QJSC) -e $(HELLO_OPTS) -o $@ $(HELLO_SRCS) 400 401 examples/hello: $(OBJDIR)/hello.o $(QJS_LIB_OBJS) 402 $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) 403 404 # example of static JS compilation with modules 405 HELLO_MODULE_SRCS=examples/hello_module.js 406 HELLO_MODULE_OPTS=-fno-string-normalize -fno-map -fno-typedarray \ 407 -fno-typedarray -fno-regexp -fno-json -fno-eval -fno-proxy \ 408 -fno-date -m 409 examples/hello_module: $(QJSC) libquickjs$(LTOEXT).a $(HELLO_MODULE_SRCS) 410 $(QJSC) $(HELLO_MODULE_OPTS) -o $@ $(HELLO_MODULE_SRCS) 411 412 # use of an external C module (static compilation) 413 414 test_fib.c: $(QJSC) examples/test_fib.js 415 $(QJSC) -e -M examples/fib.so,fib -m -o $@ examples/test_fib.js 416 417 examples/test_fib: $(OBJDIR)/test_fib.o $(OBJDIR)/examples/fib.o libquickjs$(LTOEXT).a 418 $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) 419 420 examples/fib.so: $(OBJDIR)/examples/fib.pic.o 421 $(CC) $(LDFLAGS) -shared -o $@ $^ 422 423 examples/point.so: $(OBJDIR)/examples/point.pic.o 424 $(CC) $(LDFLAGS) -shared -o $@ $^ 425 426 ############################################################################### 427 # documentation 428 429 DOCS=doc/quickjs.pdf doc/quickjs.html 430 431 build_doc: $(DOCS) 432 433 clean_doc: 434 rm -f $(DOCS) 435 436 doc/version.texi: VERSION 437 @echo "@set VERSION `cat $<`" > $@ 438 439 doc/%.pdf: doc/%.texi doc/version.texi 440 texi2pdf --clean -o $@ -q $< 441 442 doc/%.html.pre: doc/%.texi doc/version.texi 443 makeinfo --html --no-headers --no-split --number-sections -o $@ $< 444 445 doc/%.html: doc/%.html.pre 446 sed -e 's|</style>|</style>\n<meta name="viewport" content="width=device-width, initial-scale=1.0">|' < $< > $@ 447 448 ############################################################################### 449 # tests 450 451 ifdef CONFIG_SHARED_LIBS 452 test: tests/bjson.so examples/point.so 453 endif 454 455 test: qjs$(EXE) 456 $(WINE) ./qjs$(EXE) tests/test_closure.js 457 $(WINE) ./qjs$(EXE) tests/test_language.js 458 $(WINE) ./qjs$(EXE) --std tests/test_builtin.js 459 $(WINE) ./qjs$(EXE) tests/test_loop.js 460 $(WINE) ./qjs$(EXE) tests/test_bigint.js 461 $(WINE) ./qjs$(EXE) tests/test_cyclic_import.js 462 $(WINE) ./qjs$(EXE) tests/test_worker.js 463 ifndef CONFIG_WIN32 464 $(WINE) ./qjs$(EXE) tests/test_std.js 465 $(WINE) ./qjs$(EXE) tests/test_rw_handler.js 466 endif 467 ifdef CONFIG_SHARED_LIBS 468 $(WINE) ./qjs$(EXE) tests/test_bjson.js 469 $(WINE) ./qjs$(EXE) examples/test_point.js 470 endif 471 472 stats: qjs$(EXE) 473 $(WINE) ./qjs$(EXE) -qd 474 475 microbench: qjs$(EXE) 476 $(WINE) ./qjs$(EXE) --std tests/microbench.js 477 478 ifeq ($(wildcard test262/features.txt),) 479 test2-bootstrap: 480 git clone --single-branch --shallow-since=$(TEST262_SINCE) https://github.com/tc39/test262.git 481 (cd test262 && git checkout -q $(TEST262_COMMIT) && patch -p1 < ../tests/test262.patch && cd ..) 482 else 483 test2-bootstrap: 484 (cd test262 && git fetch && git reset --hard $(TEST262_COMMIT) && patch -p1 < ../tests/test262.patch && cd ..) 485 endif 486 487 ifeq ($(wildcard test262o/tests.txt),) 488 test2o test2o-update: 489 @echo test262o tests not installed 490 else 491 # ES5 tests (obsolete) 492 test2o: run-test262 493 time ./run-test262 -t -m -c test262o.conf 494 495 test2o-update: run-test262 496 ./run-test262 -t -u -c test262o.conf -T 1 497 endif 498 499 ifeq ($(wildcard test262/features.txt),) 500 test2 test2-update test2-default test2-check: 501 @echo test262 tests not installed 502 else 503 # Test262 tests 504 test2-default: run-test262 505 time ./run-test262 -t -m -c test262.conf 506 507 test2: run-test262 508 time ./run-test262 -t -m -c test262.conf -a 509 510 test2-update: run-test262 511 ./run-test262 -t -u -c test262.conf -a -T 1 512 513 test2-check: run-test262 514 time ./run-test262 -t -m -c test262.conf -E -a 515 endif 516 517 testall: all test microbench test2o test2 518 519 testall-complete: testall 520 521 node-test: 522 node tests/test_closure.js 523 node tests/test_language.js 524 node tests/test_builtin.js 525 node tests/test_loop.js 526 node tests/test_bigint.js 527 528 node-microbench: 529 node tests/microbench.js -s microbench-node.txt 530 node --jitless tests/microbench.js -s microbench-node-jitless.txt 531 532 bench-v8: qjs 533 make -C tests/bench-v8 534 ./qjs -d tests/bench-v8/combined.js 535 536 node-bench-v8: 537 make -C tests/bench-v8 538 node --jitless tests/bench-v8/combined.js 539 540 tests/bjson.so: $(OBJDIR)/tests/bjson.pic.o 541 $(CC) $(LDFLAGS) -shared -o $@ $^ $(LIBS) 542 543 BENCHMARKDIR=../quickjs-benchmarks 544 545 run_sunspider_like: $(BENCHMARKDIR)/run_sunspider_like.c 546 $(CC) $(CFLAGS) $(LDFLAGS) -DNO_INCLUDE_DIR -I. -o $@ $< libquickjs$(LTOEXT).a $(LIBS) 547 548 run_octane: $(BENCHMARKDIR)/run_octane.c 549 $(CC) $(CFLAGS) $(LDFLAGS) -DNO_INCLUDE_DIR -I. -o $@ $< libquickjs$(LTOEXT).a $(LIBS) 550 551 benchmarks: run_sunspider_like run_octane 552 ./run_sunspider_like $(BENCHMARKDIR)/kraken-1.0/ 553 ./run_sunspider_like $(BENCHMARKDIR)/kraken-1.1/ 554 ./run_sunspider_like $(BENCHMARKDIR)/sunspider-1.0/ 555 ./run_octane $(BENCHMARKDIR)/ 556 557 -include $(wildcard $(OBJDIR)/*.d)