quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

Makefile (15822B)


      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 #CONFIG_WIN32=y
     33 # use link time optimization (smaller and faster executables but slower build)
     34 #CONFIG_LTO=y
     35 # consider warnings as errors (for development)
     36 #CONFIG_WERROR=y
     37 # force 32 bit build for some utilities
     38 #CONFIG_M32=y
     39 # cosmopolitan build (see https://github.com/jart/cosmopolitan)
     40 #CONFIG_COSMO=y
     41 
     42 # installation directory
     43 PREFIX?=/usr/local
     44 
     45 # use the gprof profiler
     46 #CONFIG_PROFILE=y
     47 # use address sanitizer
     48 #CONFIG_ASAN=y
     49 # use memory sanitizer
     50 #CONFIG_MSAN=y
     51 # use UB sanitizer
     52 #CONFIG_UBSAN=y
     53 
     54 # include the code for BigFloat/BigDecimal and math mode
     55 CONFIG_BIGNUM=y
     56 
     57 OBJDIR=.obj
     58 
     59 ifdef CONFIG_ASAN
     60 OBJDIR:=$(OBJDIR)/asan
     61 endif
     62 ifdef CONFIG_MSAN
     63 OBJDIR:=$(OBJDIR)/msan
     64 endif
     65 ifdef CONFIG_UBSAN
     66 OBJDIR:=$(OBJDIR)/ubsan
     67 endif
     68 
     69 ifdef CONFIG_DARWIN
     70 # use clang instead of gcc
     71 CONFIG_CLANG=y
     72 CONFIG_DEFAULT_AR=y
     73 endif
     74 ifdef CONFIG_FREEBSD
     75 # use clang instead of gcc
     76 CONFIG_CLANG=y
     77 CONFIG_DEFAULT_AR=y
     78 CONFIG_LTO=
     79 endif
     80 
     81 ifdef CONFIG_WIN32
     82   ifdef CONFIG_M32
     83     CROSS_PREFIX?=i686-w64-mingw32-
     84   else
     85     CROSS_PREFIX?=x86_64-w64-mingw32-
     86   endif
     87   EXE=.exe
     88 else
     89   CROSS_PREFIX?=
     90   EXE=
     91 endif
     92 
     93 ifdef CONFIG_CLANG
     94   HOST_CC=clang
     95   CC=$(CROSS_PREFIX)clang
     96   CFLAGS+=-g -Wall -MMD -MF $(OBJDIR)/$(@F).d
     97   CFLAGS += -Wextra
     98   CFLAGS += -Wno-sign-compare
     99   CFLAGS += -Wno-missing-field-initializers
    100   CFLAGS += -Wundef -Wuninitialized
    101   CFLAGS += -Wunused -Wno-unused-parameter
    102   CFLAGS += -Wwrite-strings
    103   CFLAGS += -Wchar-subscripts -funsigned-char
    104   CFLAGS += -MMD -MF $(OBJDIR)/$(@F).d
    105   ifdef CONFIG_DEFAULT_AR
    106     AR=$(CROSS_PREFIX)ar
    107   else
    108     ifdef CONFIG_LTO
    109       AR=$(CROSS_PREFIX)llvm-ar
    110     else
    111       AR=$(CROSS_PREFIX)ar
    112     endif
    113   endif
    114   LIB_FUZZING_ENGINE ?= "-fsanitize=fuzzer"
    115 else ifdef CONFIG_COSMO
    116   CONFIG_LTO=
    117   HOST_CC=gcc
    118   CC=cosmocc
    119   # cosmocc does not correct support -MF
    120   CFLAGS=-g -Wall #-MMD -MF $(OBJDIR)/$(@F).d
    121   CFLAGS += -Wno-array-bounds -Wno-format-truncation
    122   AR=cosmoar
    123 else
    124   HOST_CC=gcc
    125   CC=$(CROSS_PREFIX)gcc
    126   CFLAGS=-ggdb -fno-omit-frame-pointer -Wall -MMD -MF $(OBJDIR)/$(@F).d
    127 >>>>>>> theirs
    128   CFLAGS += -Wno-array-bounds -Wno-format-truncation
    129   ifdef CONFIG_LTO
    130     AR=$(CROSS_PREFIX)gcc-ar
    131   else
    132     AR=$(CROSS_PREFIX)ar
    133   endif
    134 endif
    135 STRIP?=$(CROSS_PREFIX)strip
    136 CFLAGS+=-fwrapv # ensure that signed overflows behave as expected
    137 ifdef CONFIG_WERROR
    138 CFLAGS+=-Werror
    139 endif
    140 DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(shell cat VERSION)\"
    141 ifdef CONFIG_BIGNUM
    142 DEFINES+=-DCONFIG_BIGNUM
    143 endif
    144 ifdef CONFIG_WIN32
    145 DEFINES+=-D__USE_MINGW_ANSI_STDIO # for standard snprintf behavior
    146 endif
    147 ifndef CONFIG_WIN32
    148 ifeq ($(shell $(CC) -o /dev/null compat/test-closefrom.c 2>/dev/null && echo 1),1)
    149 DEFINES+=-DHAVE_CLOSEFROM
    150 endif
    151 endif
    152 
    153 CFLAGS+=$(DEFINES)
    154 CFLAGS_DEBUG=$(CFLAGS) -O0
    155 CFLAGS_SMALL=$(CFLAGS) -Os
    156 CFLAGS_OPT=$(CFLAGS) -O2
    157 CFLAGS_NOLTO:=$(CFLAGS_OPT)
    158 ifdef CONFIG_COSMO
    159 LDFLAGS+=-s # better to strip by default
    160 else
    161 LDFLAGS+=-g
    162 endif
    163 ifdef CONFIG_LTO
    164 CFLAGS_SMALL+=-flto
    165 CFLAGS_OPT+=-flto
    166 LDFLAGS+=-flto
    167 endif
    168 ifdef CONFIG_PROFILE
    169 CFLAGS+=-p
    170 LDFLAGS+=-p
    171 endif
    172 ifdef CONFIG_ASAN
    173 CFLAGS+=-fsanitize=address -fno-omit-frame-pointer
    174 LDFLAGS+=-fsanitize=address -fno-omit-frame-pointer
    175 endif
    176 ifdef CONFIG_MSAN
    177 CFLAGS+=-fsanitize=memory -fno-omit-frame-pointer
    178 LDFLAGS+=-fsanitize=memory -fno-omit-frame-pointer
    179 endif
    180 ifdef CONFIG_UBSAN
    181 CFLAGS+=-fsanitize=undefined -fno-omit-frame-pointer
    182 LDFLAGS+=-fsanitize=undefined -fno-omit-frame-pointer
    183 endif
    184 ifdef CONFIG_WIN32
    185 LDEXPORT=
    186 else
    187 LDEXPORT=-rdynamic
    188 endif
    189 
    190 ifndef CONFIG_COSMO
    191 ifndef CONFIG_DARWIN
    192 CONFIG_SHARED_LIBS=y # building shared libraries is supported
    193 endif
    194 endif
    195 
    196 PROGS=qjs$(EXE) qjsc$(EXE) run-test262
    197 ifneq ($(CROSS_PREFIX),)
    198 QJSC_CC=gcc
    199 QJSC=./host-qjsc
    200 PROGS+=$(QJSC)
    201 else
    202 QJSC_CC=$(CC)
    203 QJSC=./qjsc$(EXE)
    204 endif
    205 ifndef CONFIG_WIN32
    206 PROGS+=qjscalc
    207 endif
    208 ifdef CONFIG_M32
    209 PROGS+=qjs32 qjs32_s
    210 endif
    211 PROGS+=libquickjs.a
    212 ifdef CONFIG_LTO
    213 PROGS+=libquickjs.lto.a
    214 endif
    215 
    216 # examples
    217 ifeq ($(CROSS_PREFIX),)
    218 ifndef CONFIG_ASAN
    219 ifndef CONFIG_MSAN
    220 ifndef CONFIG_UBSAN
    221 PROGS+=examples/hello examples/hello_module examples/test_fib
    222 ifdef CONFIG_SHARED_LIBS
    223 PROGS+=examples/fib.so examples/point.so
    224 endif
    225 endif
    226 endif
    227 endif
    228 endif
    229 
    230 all: $(OBJDIR) $(OBJDIR)/quickjs.check.o $(OBJDIR)/qjs.check.o $(PROGS)
    231 
    232 QJS_LIB_OBJS=$(OBJDIR)/quickjs.o $(OBJDIR)/libregexp.o $(OBJDIR)/libunicode.o $(OBJDIR)/cutils.o $(OBJDIR)/quickjs-libc.o $(OBJDIR)/libbf.o
    233 
    234 QJS_OBJS=$(OBJDIR)/qjs.o $(OBJDIR)/repl.o $(QJS_LIB_OBJS)
    235 ifdef CONFIG_BIGNUM
    236 QJS_OBJS+=$(OBJDIR)/qjscalc.o
    237 endif
    238 
    239 HOST_LIBS=-lm -ldl -lpthread -lcurl -lsodium -lmbedcrypto
    240 LIBS=-lm -lcurl -lsodium -lmbedcrypto
    241 ifndef CONFIG_WIN32
    242 LIBS+=-ldl -lpthread
    243 endif
    244 LIBS+=$(EXTRA_LIBS)
    245 
    246 $(OBJDIR):
    247 	mkdir -p $(OBJDIR) $(OBJDIR)/examples $(OBJDIR)/tests
    248 
    249 qjs$(EXE): $(QJS_OBJS)
    250 	$(CC) $(LDFLAGS) $(LDEXPORT) -o $@ $^ $(LIBS)
    251 
    252 qjs-debug$(EXE): $(patsubst %.o, %.debug.o, $(QJS_OBJS))
    253 	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
    254 
    255 qjsc$(EXE): $(OBJDIR)/qjsc.o $(QJS_LIB_OBJS)
    256 	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
    257 
    258 fuzz_eval: $(OBJDIR)/fuzz_eval.o $(OBJDIR)/fuzz_common.o libquickjs.fuzz.a
    259 	$(CC) $(CFLAGS_OPT) $^ -o fuzz_eval $(LIB_FUZZING_ENGINE)
    260 
    261 fuzz_compile: $(OBJDIR)/fuzz_compile.o $(OBJDIR)/fuzz_common.o libquickjs.fuzz.a
    262 	$(CC) $(CFLAGS_OPT) $^ -o fuzz_compile $(LIB_FUZZING_ENGINE)
    263 
    264 fuzz_regexp: $(OBJDIR)/fuzz_regexp.o $(OBJDIR)/libregexp.fuzz.o $(OBJDIR)/cutils.fuzz.o $(OBJDIR)/libunicode.fuzz.o
    265 	$(CC) $(CFLAGS_OPT) $^ -o fuzz_regexp $(LIB_FUZZING_ENGINE)
    266 
    267 libfuzzer: fuzz_eval fuzz_compile fuzz_regexp
    268 
    269 ifneq ($(CROSS_PREFIX),)
    270 
    271 $(QJSC): $(OBJDIR)/qjsc.host.o \
    272     $(patsubst %.o, %.host.o, $(QJS_LIB_OBJS))
    273 	$(HOST_CC) $(LDFLAGS) -o $@ $^ $(HOST_LIBS)
    274 
    275 endif #CROSS_PREFIX
    276 
    277 QJSC_DEFINES:=-DCONFIG_CC=\"$(QJSC_CC)\" -DCONFIG_PREFIX=\"$(PREFIX)\"
    278 ifdef CONFIG_LTO
    279 QJSC_DEFINES+=-DCONFIG_LTO
    280 endif
    281 QJSC_HOST_DEFINES:=-DCONFIG_CC=\"$(HOST_CC)\" -DCONFIG_PREFIX=\"$(PREFIX)\"
    282 
    283 $(OBJDIR)/qjsc.o: CFLAGS+=$(QJSC_DEFINES)
    284 $(OBJDIR)/qjsc.host.o: CFLAGS+=$(QJSC_HOST_DEFINES)
    285 
    286 qjs32: $(patsubst %.o, %.m32.o, $(QJS_OBJS))
    287 	$(CC) -m32 $(LDFLAGS) $(LDEXPORT) -o $@ $^ $(LIBS)
    288 
    289 qjs32_s: $(patsubst %.o, %.m32s.o, $(QJS_OBJS))
    290 	$(CC) -m32 $(LDFLAGS) -o $@ $^ $(LIBS)
    291 	@size $@
    292 
    293 qjscalc: qjs
    294 	ln -sf $< $@
    295 
    296 ifdef CONFIG_LTO
    297 LTOEXT=.lto
    298 else
    299 LTOEXT=
    300 endif
    301 
    302 libquickjs$(LTOEXT).a: $(QJS_LIB_OBJS)
    303 	$(AR) rcs $@ $^
    304 
    305 ifdef CONFIG_LTO
    306 libquickjs.a: $(patsubst %.o, %.nolto.o, $(QJS_LIB_OBJS))
    307 	$(AR) rcs $@ $^
    308 endif # CONFIG_LTO
    309 
    310 libquickjs.fuzz.a: $(patsubst %.o, %.fuzz.o, $(QJS_LIB_OBJS))
    311 	$(AR) rcs $@ $^
    312 
    313 repl.c: $(QJSC) repl.js
    314 	$(QJSC) -c -o $@ -m repl.js
    315 
    316 qjscalc.c: $(QJSC) qjscalc.js
    317 	$(QJSC) -fbignum -c -o $@ qjscalc.js
    318 
    319 ifneq ($(wildcard unicode/UnicodeData.txt),)
    320 $(OBJDIR)/libunicode.o $(OBJDIR)/libunicode.m32.o $(OBJDIR)/libunicode.m32s.o \
    321     $(OBJDIR)/libunicode.nolto.o: libunicode-table.h
    322 
    323 libunicode-table.h: unicode_gen
    324 	./unicode_gen unicode $@
    325 endif
    326 
    327 run-test262: $(OBJDIR)/run-test262.o $(QJS_LIB_OBJS)
    328 	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
    329 
    330 run-test262-debug: $(patsubst %.o, %.debug.o, $(OBJDIR)/run-test262.o $(QJS_LIB_OBJS))
    331 	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
    332 
    333 run-test262-32: $(patsubst %.o, %.m32.o, $(OBJDIR)/run-test262.o $(QJS_LIB_OBJS))
    334 	$(CC) -m32 $(LDFLAGS) -o $@ $^ $(LIBS)
    335 
    336 # object suffix order: nolto, [m32|m32s]
    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)/%.m32.o: %.c | $(OBJDIR)
    354 	$(CC) -m32 $(CFLAGS_OPT) -c -o $@ $<
    355 
    356 $(OBJDIR)/%.m32s.o: %.c | $(OBJDIR)
    357 	$(CC) -m32 $(CFLAGS_SMALL) -c -o $@ $<
    358 
    359 $(OBJDIR)/%.debug.o: %.c | $(OBJDIR)
    360 	$(CC) $(CFLAGS_DEBUG) -c -o $@ $<
    361 
    362 $(OBJDIR)/%.fuzz.o: %.c | $(OBJDIR)
    363 	$(CC) $(CFLAGS_OPT) -fsanitize=fuzzer-no-link -c -o $@ $<
    364 
    365 $(OBJDIR)/%.check.o: %.c | $(OBJDIR)
    366 	$(CC) $(CFLAGS) -DCONFIG_CHECK_JSVALUE -c -o $@ $<
    367 
    368 regexp_test: libregexp.c libunicode.c cutils.c
    369 	$(CC) $(LDFLAGS) $(CFLAGS) -DTEST -o $@ libregexp.c libunicode.c cutils.c $(LIBS)
    370 
    371 unicode_gen: $(OBJDIR)/unicode_gen.host.o $(OBJDIR)/cutils.host.o libunicode.c unicode_gen_def.h
    372 	$(HOST_CC) $(LDFLAGS) $(CFLAGS) -o $@ $(OBJDIR)/unicode_gen.host.o $(OBJDIR)/cutils.host.o
    373 
    374 clean:
    375 	rm -f repl.c qjscalc.c out.c
    376 	rm -f *.a *.o *.d *~ unicode_gen regexp_test fuzz_eval fuzz_compile fuzz_regexp $(PROGS)
    377 	rm -f hello.c test_fib.c
    378 	rm -f examples/*.so tests/*.so
    379 	rm -rf $(OBJDIR)/ *.dSYM/ qjs-debug
    380 	rm -rf run-test262-debug run-test262-32
    381 	rm -f run_octane run_sunspider_like
    382 
    383 install: all
    384 	mkdir -p "$(DESTDIR)$(PREFIX)/bin"
    385 	$(STRIP) qjs$(EXE) qjsc$(EXE)
    386 	install -m755 qjs$(EXE) qjsc$(EXE) "$(DESTDIR)$(PREFIX)/bin"
    387 	ln -sf qjs$(EXE) "$(DESTDIR)$(PREFIX)/bin/qjscalc$(EXE)"
    388 	mkdir -p "$(DESTDIR)$(PREFIX)/lib/quickjs"
    389 	install -m644 libquickjs.a "$(DESTDIR)$(PREFIX)/lib/quickjs"
    390 ifdef CONFIG_LTO
    391 	install -m644 libquickjs.lto.a "$(DESTDIR)$(PREFIX)/lib/quickjs"
    392 endif
    393 	mkdir -p "$(DESTDIR)$(PREFIX)/include/quickjs"
    394 	install -m644 quickjs.h quickjs-libc.h "$(DESTDIR)$(PREFIX)/include/quickjs"
    395 
    396 ###############################################################################
    397 # examples
    398 
    399 # example of static JS compilation
    400 HELLO_SRCS=examples/hello.js
    401 HELLO_OPTS=-fno-string-normalize -fno-map -fno-promise -fno-typedarray \
    402            -fno-typedarray -fno-regexp -fno-json -fno-eval -fno-proxy \
    403            -fno-date -fno-module-loader -fno-bigint
    404 
    405 hello.c: $(QJSC) $(HELLO_SRCS)
    406 	$(QJSC) -e $(HELLO_OPTS) -o $@ $(HELLO_SRCS)
    407 
    408 ifdef CONFIG_M32
    409 examples/hello: $(OBJDIR)/hello.m32s.o $(patsubst %.o, %.m32s.o, $(QJS_LIB_OBJS))
    410 	$(CC) -m32 $(LDFLAGS) -o $@ $^ $(LIBS)
    411 else
    412 examples/hello: $(OBJDIR)/hello.o $(QJS_LIB_OBJS)
    413 	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
    414 endif
    415 
    416 # example of static JS compilation with modules
    417 HELLO_MODULE_SRCS=examples/hello_module.js
    418 HELLO_MODULE_OPTS=-fno-string-normalize -fno-map -fno-promise -fno-typedarray \
    419            -fno-typedarray -fno-regexp -fno-json -fno-eval -fno-proxy \
    420            -fno-date -m
    421 examples/hello_module: $(QJSC) libquickjs$(LTOEXT).a $(HELLO_MODULE_SRCS)
    422 	$(QJSC) $(HELLO_MODULE_OPTS) -o $@ $(HELLO_MODULE_SRCS)
    423 
    424 # use of an external C module (static compilation)
    425 
    426 test_fib.c: $(QJSC) examples/test_fib.js
    427 	$(QJSC) -e -M examples/fib.so,fib -m -o $@ examples/test_fib.js
    428 
    429 examples/test_fib: $(OBJDIR)/test_fib.o $(OBJDIR)/examples/fib.o libquickjs$(LTOEXT).a
    430 	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
    431 
    432 examples/fib.so: $(OBJDIR)/examples/fib.pic.o
    433 	$(CC) $(LDFLAGS) -shared -o $@ $^
    434 
    435 examples/point.so: $(OBJDIR)/examples/point.pic.o
    436 	$(CC) $(LDFLAGS) -shared -o $@ $^
    437 
    438 ###############################################################################
    439 # documentation
    440 
    441 DOCS=doc/quickjs.pdf doc/quickjs.html doc/jsbignum.pdf doc/jsbignum.html
    442 
    443 build_doc: $(DOCS)
    444 
    445 clean_doc:
    446 	rm -f $(DOCS)
    447 
    448 doc/%.pdf: doc/%.texi
    449 	texi2pdf --clean -o $@ -q $<
    450 
    451 doc/%.html.pre: doc/%.texi
    452 	makeinfo --html --no-headers --no-split --number-sections -o $@ $<
    453 
    454 doc/%.html: doc/%.html.pre
    455 	sed -e 's|</style>|</style>\n<meta name="viewport" content="width=device-width, initial-scale=1.0">|' < $< > $@
    456 
    457 ###############################################################################
    458 # tests
    459 
    460 ifdef CONFIG_SHARED_LIBS
    461 test: tests/bjson.so examples/point.so
    462 endif
    463 ifdef CONFIG_M32
    464 test: qjs32
    465 endif
    466 
    467 test: qjs
    468 	./qjs tests/test_closure.js
    469 	./qjs tests/test_language.js
    470 	./qjs --std tests/test_builtin.js
    471 	./qjs tests/test_loop.js
    472 	./qjs tests/test_bignum.js
    473 	./qjs tests/test_std.js
    474 	./qjs tests/test_worker.js
    475 ifdef CONFIG_SHARED_LIBS
    476 ifdef CONFIG_BIGNUM
    477 	./qjs --bignum tests/test_bjson.js
    478 else
    479 	./qjs tests/test_bjson.js
    480 endif
    481 	./qjs examples/test_point.js
    482 endif
    483 ifdef CONFIG_BIGNUM
    484 	./qjs --bignum tests/test_op_overloading.js
    485 	./qjs --bignum tests/test_bigfloat.js
    486 	./qjs --qjscalc tests/test_qjscalc.js
    487 endif
    488 ifdef CONFIG_M32
    489 	./qjs32 tests/test_closure.js
    490 	./qjs32 tests/test_language.js
    491 	./qjs32 --std tests/test_builtin.js
    492 	./qjs32 tests/test_loop.js
    493 	./qjs32 tests/test_bignum.js
    494 	./qjs32 tests/test_std.js
    495 	./qjs32 tests/test_worker.js
    496 ifdef CONFIG_BIGNUM
    497 	./qjs32 --bignum tests/test_op_overloading.js
    498 	./qjs32 --bignum tests/test_bigfloat.js
    499 	./qjs32 --qjscalc tests/test_qjscalc.js
    500 endif
    501 endif
    502 
    503 stats: qjs qjs32
    504 	./qjs -qd
    505 	./qjs32 -qd
    506 
    507 microbench: qjs
    508 	./qjs --std tests/microbench.js
    509 
    510 microbench-32: qjs32
    511 	./qjs32 --std tests/microbench.js
    512 
    513 ifeq ($(wildcard test262o/tests.txt),)
    514 test2o test2o-32 test2o-update:
    515 	@echo test262o tests not installed
    516 else
    517 # ES5 tests (obsolete)
    518 test2o: run-test262
    519 	time ./run-test262 -t -m -c test262o.conf
    520 
    521 test2o-32: run-test262-32
    522 	time ./run-test262-32 -t -m -c test262o.conf
    523 
    524 test2o-update: run-test262
    525 	./run-test262 -t -u -c test262o.conf
    526 endif
    527 
    528 ifeq ($(wildcard test262/features.txt),)
    529 test2 test2-32 test2-update test2-default test2-check:
    530 	@echo test262 tests not installed
    531 else
    532 # Test262 tests
    533 test2-default: run-test262
    534 	time ./run-test262 -t -m -c test262.conf
    535 
    536 test2: run-test262
    537 	time ./run-test262 -t -m -c test262.conf -a
    538 
    539 test2-32: run-test262-32
    540 	time ./run-test262-32 -t -m -c test262.conf -a
    541 
    542 test2-update: run-test262
    543 	./run-test262 -t -u -c test262.conf -a
    544 
    545 test2-check: run-test262
    546 	time ./run-test262 -t -m -c test262.conf -E -a
    547 endif
    548 
    549 testall: all test microbench test2o test2
    550 
    551 testall-32: all test-32 microbench-32 test2o-32 test2-32
    552 
    553 testall-complete: testall testall-32
    554 
    555 node-test:
    556 	node tests/test_closure.js
    557 	node tests/test_language.js
    558 	node tests/test_builtin.js
    559 	node tests/test_loop.js
    560 	node tests/test_bignum.js
    561 
    562 node-microbench:
    563 	node tests/microbench.js -s microbench-node.txt
    564 	node --jitless tests/microbench.js -s microbench-node-jitless.txt
    565 
    566 bench-v8: qjs
    567 	make -C tests/bench-v8
    568 	./qjs -d tests/bench-v8/combined.js
    569 
    570 node-bench-v8:
    571 	make -C tests/bench-v8
    572 	node --jitless tests/bench-v8/combined.js
    573 
    574 tests/bjson.so: $(OBJDIR)/tests/bjson.pic.o
    575 	$(CC) $(LDFLAGS) -shared -o $@ $^ $(LIBS)
    576 
    577 BENCHMARKDIR=../quickjs-benchmarks
    578 
    579 run_sunspider_like: $(BENCHMARKDIR)/run_sunspider_like.c
    580 	$(CC) $(CFLAGS) $(LDFLAGS) -DNO_INCLUDE_DIR -I. -o $@ $< libquickjs$(LTOEXT).a $(LIBS)
    581 
    582 run_octane: $(BENCHMARKDIR)/run_octane.c
    583 	$(CC) $(CFLAGS) $(LDFLAGS) -DNO_INCLUDE_DIR -I. -o $@ $< libquickjs$(LTOEXT).a $(LIBS)
    584 
    585 benchmarks: run_sunspider_like run_octane
    586 	./run_sunspider_like $(BENCHMARKDIR)/kraken-1.0/
    587 	./run_sunspider_like $(BENCHMARKDIR)/kraken-1.1/
    588 	./run_sunspider_like $(BENCHMARKDIR)/sunspider-1.0/
    589 	./run_octane $(BENCHMARKDIR)/
    590 
    591 -include $(wildcard $(OBJDIR)/*.d)