| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557 |
- #
- # QuickJS Javascript Engine
- #
- # Copyright (c) 2017-2021 Fabrice Bellard
- # Copyright (c) 2017-2021 Charlie Gordon
- #
- # Permission is hereby granted, free of charge, to any person obtaining a copy
- # of this software and associated documentation files (the "Software"), to deal
- # in the Software without restriction, including without limitation the rights
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- # copies of the Software, and to permit persons to whom the Software is
- # furnished to do so, subject to the following conditions:
- #
- # The above copyright notice and this permission notice shall be included in
- # all copies or substantial portions of the Software.
- #
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- # THE SOFTWARE.
- ifeq ($(shell uname -s),Darwin)
- CONFIG_DARWIN=y
- endif
- ifeq ($(shell uname -s),FreeBSD)
- CONFIG_FREEBSD=y
- endif
- # Windows cross compilation from Linux
- # May need to have libwinpthread*.dll alongside the executable
- # (On Ubuntu/Debian may be installed with mingw-w64-x86-64-dev
- # to /usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll)
- #CONFIG_WIN32=y
- # use link time optimization (smaller and faster executables but slower build)
- #CONFIG_LTO=y
- # consider warnings as errors (for development)
- #CONFIG_WERROR=y
- # force 32 bit build on x86_64
- #CONFIG_M32=y
- # cosmopolitan build (see https://github.com/jart/cosmopolitan)
- #CONFIG_COSMO=y
- # installation directory
- PREFIX?=/usr/local
- # use the gprof profiler
- #CONFIG_PROFILE=y
- # use address sanitizer
- #CONFIG_ASAN=y
- # use memory sanitizer
- #CONFIG_MSAN=y
- # use UB sanitizer
- #CONFIG_UBSAN=y
- # use thread sanitizer
- #CONFIG_TSAN=y
- # TEST262 bootstrap config: commit id and shallow "since" parameter
- TEST262_COMMIT?=5c8206929d81b2d3d727ca6aac56c18358c8d790
- TEST262_SINCE?=2025-09-01
- OBJDIR=.obj
- ifdef CONFIG_ASAN
- OBJDIR:=$(OBJDIR)/asan
- endif
- ifdef CONFIG_MSAN
- OBJDIR:=$(OBJDIR)/msan
- endif
- ifdef CONFIG_UBSAN
- OBJDIR:=$(OBJDIR)/ubsan
- endif
- ifdef CONFIG_DARWIN
- # use clang instead of gcc
- CONFIG_CLANG=y
- CONFIG_DEFAULT_AR=y
- endif
- ifdef CONFIG_FREEBSD
- # use clang instead of gcc
- CONFIG_CLANG=y
- CONFIG_DEFAULT_AR=y
- CONFIG_LTO=
- endif
- ifdef CONFIG_WIN32
- ifdef CONFIG_M32
- CROSS_PREFIX?=i686-w64-mingw32-
- else
- CROSS_PREFIX?=x86_64-w64-mingw32-
- endif
- EXE=.exe
- else ifdef MSYSTEM
- CONFIG_WIN32=y
- CROSS_PREFIX?=
- EXE=.exe
- else
- CROSS_PREFIX?=
- EXE=
- endif
- ifdef CONFIG_CLANG
- HOST_CC=clang
- CC=$(CROSS_PREFIX)clang
- CFLAGS+=-g -Wall -MMD -MF $(OBJDIR)/$(@F).d
- CFLAGS += -Wextra
- CFLAGS += -Wno-sign-compare
- CFLAGS += -Wno-missing-field-initializers
- CFLAGS += -Wundef -Wuninitialized
- CFLAGS += -Wunused -Wno-unused-parameter
- CFLAGS += -Wwrite-strings
- CFLAGS += -Wchar-subscripts -funsigned-char
- CFLAGS += -MMD -MF $(OBJDIR)/$(@F).d
- ifdef CONFIG_DEFAULT_AR
- AR=$(CROSS_PREFIX)ar
- else
- ifdef CONFIG_LTO
- AR=$(CROSS_PREFIX)llvm-ar
- else
- AR=$(CROSS_PREFIX)ar
- endif
- endif
- LIB_FUZZING_ENGINE ?= "-fsanitize=fuzzer"
- else ifdef CONFIG_COSMO
- CONFIG_LTO=
- HOST_CC=gcc
- CC=cosmocc
- # cosmocc does not correct support -MF
- CFLAGS=-g -Wall #-MMD -MF $(OBJDIR)/$(@F).d
- CFLAGS += -Wno-array-bounds -Wno-format-truncation
- AR=cosmoar
- else
- HOST_CC=gcc
- CC=$(CROSS_PREFIX)gcc
- CFLAGS+=-g -Wall -MMD -MF $(OBJDIR)/$(@F).d
- CFLAGS += -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion
- ifdef CONFIG_LTO
- AR=$(CROSS_PREFIX)gcc-ar
- else
- AR=$(CROSS_PREFIX)ar
- endif
- endif
- STRIP?=$(CROSS_PREFIX)strip
- ifdef CONFIG_M32
- CFLAGS+=-msse2 -mfpmath=sse # use SSE math for correct FP rounding
- ifndef CONFIG_WIN32
- CFLAGS+=-m32
- LDFLAGS+=-m32
- endif
- endif
- CFLAGS+=-fwrapv # ensure that signed overflows behave as expected
- ifdef CONFIG_WERROR
- CFLAGS+=-Werror
- endif
- DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(shell cat VERSION)\"
- ifdef CONFIG_WIN32
- DEFINES+=-D__USE_MINGW_ANSI_STDIO # for standard snprintf behavior
- endif
- ifndef CONFIG_WIN32
- ifeq ($(shell $(CC) -o /dev/null compat/test-closefrom.c 2>/dev/null && echo 1),1)
- DEFINES+=-DHAVE_CLOSEFROM
- endif
- endif
- CFLAGS+=$(DEFINES)
- CFLAGS_DEBUG=$(CFLAGS) -O0
- CFLAGS_SMALL=$(CFLAGS) -Os
- CFLAGS_OPT=$(CFLAGS) -O2
- CFLAGS_NOLTO:=$(CFLAGS_OPT)
- ifdef CONFIG_COSMO
- LDFLAGS+=-s # better to strip by default
- else
- LDFLAGS+=-g
- endif
- ifdef CONFIG_LTO
- CFLAGS_SMALL+=-flto
- CFLAGS_OPT+=-flto
- LDFLAGS+=-flto
- endif
- ifdef CONFIG_PROFILE
- CFLAGS+=-p
- LDFLAGS+=-p
- endif
- ifdef CONFIG_ASAN
- CFLAGS+=-fsanitize=address -fno-omit-frame-pointer
- LDFLAGS+=-fsanitize=address -fno-omit-frame-pointer
- endif
- ifdef CONFIG_MSAN
- CFLAGS+=-fsanitize=memory -fno-omit-frame-pointer
- LDFLAGS+=-fsanitize=memory -fno-omit-frame-pointer
- endif
- ifdef CONFIG_UBSAN
- CFLAGS+=-fsanitize=undefined -fno-omit-frame-pointer
- LDFLAGS+=-fsanitize=undefined -fno-omit-frame-pointer
- endif
- ifdef CONFIG_TSAN
- CFLAGS+=-fsanitize=thread -fno-omit-frame-pointer
- LDFLAGS+=-fsanitize=thread -fno-omit-frame-pointer
- endif
- ifdef CONFIG_WIN32
- LDEXPORT=
- else
- LDEXPORT=-rdynamic
- endif
- ifndef CONFIG_COSMO
- ifndef CONFIG_DARWIN
- ifndef CONFIG_WIN32
- CONFIG_SHARED_LIBS=y # building shared libraries is supported
- endif
- endif
- endif
- PROGS=qjs$(EXE) qjsc$(EXE) run-test262$(EXE)
- ifneq ($(CROSS_PREFIX),)
- QJSC_CC=gcc
- QJSC=./host-qjsc
- PROGS+=$(QJSC)
- else
- QJSC_CC=$(CC)
- QJSC=./qjsc$(EXE)
- endif
- PROGS+=libquickjs.a
- ifdef CONFIG_LTO
- PROGS+=libquickjs.lto.a
- endif
- # examples
- ifeq ($(CROSS_PREFIX),)
- ifndef CONFIG_ASAN
- ifndef CONFIG_MSAN
- ifndef CONFIG_UBSAN
- PROGS+=examples/hello examples/test_fib
- # no -m32 option in qjsc
- ifndef CONFIG_M32
- ifndef CONFIG_WIN32
- PROGS+=examples/hello_module
- endif
- endif
- ifdef CONFIG_SHARED_LIBS
- PROGS+=examples/fib.so examples/point.so
- endif
- endif
- endif
- endif
- endif
- all: $(OBJDIR) $(OBJDIR)/quickjs.check.o $(OBJDIR)/qjs.check.o $(PROGS)
- QJS_LIB_OBJS=$(OBJDIR)/quickjs.o $(OBJDIR)/dtoa.o $(OBJDIR)/libregexp.o $(OBJDIR)/libunicode.o $(OBJDIR)/cutils.o $(OBJDIR)/quickjs-libc.o
- QJS_OBJS=$(OBJDIR)/qjs.o $(OBJDIR)/repl.o $(QJS_LIB_OBJS)
- HOST_LIBS=-lm -ldl -lpthread
- LIBS=-lm -lpthread
- ifndef CONFIG_WIN32
- LIBS+=-ldl
- endif
- LIBS+=$(EXTRA_LIBS)
- $(OBJDIR):
- mkdir -p $(OBJDIR) $(OBJDIR)/examples $(OBJDIR)/tests
- qjs$(EXE): $(QJS_OBJS)
- $(CC) $(LDFLAGS) $(LDEXPORT) -o $@ $^ $(LIBS)
- qjs-debug$(EXE): $(patsubst %.o, %.debug.o, $(QJS_OBJS))
- $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
- qjsc$(EXE): $(OBJDIR)/qjsc.o $(QJS_LIB_OBJS)
- $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
- fuzz_eval: $(OBJDIR)/fuzz_eval.o $(OBJDIR)/fuzz_common.o libquickjs.fuzz.a
- $(CC) $(CFLAGS_OPT) $^ -o fuzz_eval $(LIB_FUZZING_ENGINE)
- fuzz_compile: $(OBJDIR)/fuzz_compile.o $(OBJDIR)/fuzz_common.o libquickjs.fuzz.a
- $(CC) $(CFLAGS_OPT) $^ -o fuzz_compile $(LIB_FUZZING_ENGINE)
- fuzz_regexp: $(OBJDIR)/fuzz_regexp.o $(OBJDIR)/libregexp.fuzz.o $(OBJDIR)/cutils.fuzz.o $(OBJDIR)/libunicode.fuzz.o
- $(CC) $(CFLAGS_OPT) $^ -o fuzz_regexp $(LIB_FUZZING_ENGINE)
- libfuzzer: fuzz_eval fuzz_compile fuzz_regexp
- ifneq ($(CROSS_PREFIX),)
- $(QJSC): $(OBJDIR)/qjsc.host.o \
- $(patsubst %.o, %.host.o, $(QJS_LIB_OBJS))
- $(HOST_CC) $(LDFLAGS) -o $@ $^ $(HOST_LIBS)
- endif #CROSS_PREFIX
- QJSC_DEFINES:=-DCONFIG_CC=\"$(QJSC_CC)\" -DCONFIG_PREFIX=\"$(PREFIX)\"
- ifdef CONFIG_LTO
- QJSC_DEFINES+=-DCONFIG_LTO
- endif
- QJSC_HOST_DEFINES:=-DCONFIG_CC=\"$(HOST_CC)\" -DCONFIG_PREFIX=\"$(PREFIX)\"
- $(OBJDIR)/qjsc.o: CFLAGS+=$(QJSC_DEFINES)
- $(OBJDIR)/qjsc.host.o: CFLAGS+=$(QJSC_HOST_DEFINES)
- ifdef CONFIG_LTO
- LTOEXT=.lto
- else
- LTOEXT=
- endif
- libquickjs$(LTOEXT).a: $(QJS_LIB_OBJS)
- $(AR) rcs $@ $^
- ifdef CONFIG_LTO
- libquickjs.a: $(patsubst %.o, %.nolto.o, $(QJS_LIB_OBJS))
- $(AR) rcs $@ $^
- endif # CONFIG_LTO
- libquickjs.fuzz.a: $(patsubst %.o, %.fuzz.o, $(QJS_LIB_OBJS))
- $(AR) rcs $@ $^
- repl.c: $(QJSC) repl.js
- $(QJSC) -s -c -o $@ -m repl.js
- ifneq ($(wildcard unicode/UnicodeData.txt),)
- $(OBJDIR)/libunicode.o $(OBJDIR)/libunicode.nolto.o: libunicode-table.h
- libunicode-table.h: unicode_gen
- ./unicode_gen unicode $@
- endif
- run-test262$(EXE): $(OBJDIR)/run-test262.o $(QJS_LIB_OBJS)
- $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
- run-test262-debug: $(patsubst %.o, %.debug.o, $(OBJDIR)/run-test262.o $(QJS_LIB_OBJS))
- $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
- # object suffix order: nolto
- $(OBJDIR)/%.o: %.c | $(OBJDIR)
- $(CC) $(CFLAGS_OPT) -c -o $@ $<
- $(OBJDIR)/fuzz_%.o: fuzz/fuzz_%.c | $(OBJDIR)
- $(CC) $(CFLAGS_OPT) -c -I. -o $@ $<
- $(OBJDIR)/%.host.o: %.c | $(OBJDIR)
- $(HOST_CC) $(CFLAGS_OPT) -c -o $@ $<
- $(OBJDIR)/%.pic.o: %.c | $(OBJDIR)
- $(CC) $(CFLAGS_OPT) -fPIC -DJS_SHARED_LIBRARY -c -o $@ $<
- $(OBJDIR)/%.nolto.o: %.c | $(OBJDIR)
- $(CC) $(CFLAGS_NOLTO) -c -o $@ $<
- $(OBJDIR)/%.debug.o: %.c | $(OBJDIR)
- $(CC) $(CFLAGS_DEBUG) -c -o $@ $<
- $(OBJDIR)/%.fuzz.o: %.c | $(OBJDIR)
- $(CC) $(CFLAGS_OPT) -fsanitize=fuzzer-no-link -c -o $@ $<
- $(OBJDIR)/%.check.o: %.c | $(OBJDIR)
- $(CC) $(CFLAGS) -DCONFIG_CHECK_JSVALUE -c -o $@ $<
- regexp_test: libregexp.c libunicode.c cutils.c
- $(CC) $(LDFLAGS) $(CFLAGS) -DTEST -o $@ libregexp.c libunicode.c cutils.c $(LIBS)
- unicode_gen: $(OBJDIR)/unicode_gen.host.o $(OBJDIR)/cutils.host.o libunicode.c unicode_gen_def.h
- $(HOST_CC) $(LDFLAGS) $(CFLAGS) -o $@ $(OBJDIR)/unicode_gen.host.o $(OBJDIR)/cutils.host.o
- clean:
- rm -f repl.c out.c
- rm -f *.a *.o *.d *~ unicode_gen regexp_test fuzz_eval fuzz_compile fuzz_regexp $(PROGS)
- rm -f hello.c test_fib.c
- rm -f examples/*.so tests/*.so
- rm -rf $(OBJDIR)/ *.dSYM/ qjs-debug$(EXE)
- rm -rf run-test262-debug$(EXE)
- rm -f run_octane run_sunspider_like
- install: all
- mkdir -p "$(DESTDIR)$(PREFIX)/bin"
- $(STRIP) qjs$(EXE) qjsc$(EXE)
- install -m755 qjs$(EXE) qjsc$(EXE) "$(DESTDIR)$(PREFIX)/bin"
- mkdir -p "$(DESTDIR)$(PREFIX)/lib/quickjs"
- install -m644 libquickjs.a "$(DESTDIR)$(PREFIX)/lib/quickjs"
- ifdef CONFIG_LTO
- install -m644 libquickjs.lto.a "$(DESTDIR)$(PREFIX)/lib/quickjs"
- endif
- mkdir -p "$(DESTDIR)$(PREFIX)/include/quickjs"
- install -m644 quickjs.h quickjs-libc.h "$(DESTDIR)$(PREFIX)/include/quickjs"
- ###############################################################################
- # examples
- # example of static JS compilation
- HELLO_SRCS=examples/hello.js
- HELLO_OPTS=-fno-string-normalize -fno-map -fno-promise -fno-typedarray \
- -fno-typedarray -fno-regexp -fno-json -fno-eval -fno-proxy \
- -fno-date -fno-module-loader
- hello.c: $(QJSC) $(HELLO_SRCS)
- $(QJSC) -e $(HELLO_OPTS) -o $@ $(HELLO_SRCS)
- examples/hello: $(OBJDIR)/hello.o $(QJS_LIB_OBJS)
- $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
- # example of static JS compilation with modules
- HELLO_MODULE_SRCS=examples/hello_module.js
- HELLO_MODULE_OPTS=-fno-string-normalize -fno-map -fno-typedarray \
- -fno-typedarray -fno-regexp -fno-json -fno-eval -fno-proxy \
- -fno-date -m
- examples/hello_module: $(QJSC) libquickjs$(LTOEXT).a $(HELLO_MODULE_SRCS)
- $(QJSC) $(HELLO_MODULE_OPTS) -o $@ $(HELLO_MODULE_SRCS)
- # use of an external C module (static compilation)
- test_fib.c: $(QJSC) examples/test_fib.js
- $(QJSC) -e -M examples/fib.so,fib -m -o $@ examples/test_fib.js
- examples/test_fib: $(OBJDIR)/test_fib.o $(OBJDIR)/examples/fib.o libquickjs$(LTOEXT).a
- $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
- examples/fib.so: $(OBJDIR)/examples/fib.pic.o
- $(CC) $(LDFLAGS) -shared -o $@ $^
- examples/point.so: $(OBJDIR)/examples/point.pic.o
- $(CC) $(LDFLAGS) -shared -o $@ $^
- ###############################################################################
- # documentation
- DOCS=doc/quickjs.pdf doc/quickjs.html
- build_doc: $(DOCS)
- clean_doc:
- rm -f $(DOCS)
- doc/version.texi: VERSION
- @echo "@set VERSION `cat $<`" > $@
- doc/%.pdf: doc/%.texi doc/version.texi
- texi2pdf --clean -o $@ -q $<
- doc/%.html.pre: doc/%.texi doc/version.texi
- makeinfo --html --no-headers --no-split --number-sections -o $@ $<
- doc/%.html: doc/%.html.pre
- sed -e 's|</style>|</style>\n<meta name="viewport" content="width=device-width, initial-scale=1.0">|' < $< > $@
- ###############################################################################
- # tests
- ifdef CONFIG_SHARED_LIBS
- test: tests/bjson.so examples/point.so
- endif
- test: qjs$(EXE)
- $(WINE) ./qjs$(EXE) tests/test_closure.js
- $(WINE) ./qjs$(EXE) tests/test_language.js
- $(WINE) ./qjs$(EXE) --std tests/test_builtin.js
- $(WINE) ./qjs$(EXE) tests/test_loop.js
- $(WINE) ./qjs$(EXE) tests/test_bigint.js
- $(WINE) ./qjs$(EXE) tests/test_cyclic_import.js
- $(WINE) ./qjs$(EXE) tests/test_worker.js
- ifndef CONFIG_WIN32
- $(WINE) ./qjs$(EXE) tests/test_std.js
- $(WINE) ./qjs$(EXE) tests/test_rw_handler.js
- endif
- ifdef CONFIG_SHARED_LIBS
- $(WINE) ./qjs$(EXE) tests/test_bjson.js
- $(WINE) ./qjs$(EXE) examples/test_point.js
- endif
- stats: qjs$(EXE)
- $(WINE) ./qjs$(EXE) -qd
- microbench: qjs$(EXE)
- $(WINE) ./qjs$(EXE) --std tests/microbench.js
- ifeq ($(wildcard test262/features.txt),)
- test2-bootstrap:
- git clone --single-branch --shallow-since=$(TEST262_SINCE) https://github.com/tc39/test262.git
- (cd test262 && git checkout -q $(TEST262_COMMIT) && patch -p1 < ../tests/test262.patch && cd ..)
- else
- test2-bootstrap:
- (cd test262 && git fetch && git reset --hard $(TEST262_COMMIT) && patch -p1 < ../tests/test262.patch && cd ..)
- endif
- ifeq ($(wildcard test262o/tests.txt),)
- test2o test2o-update:
- @echo test262o tests not installed
- else
- # ES5 tests (obsolete)
- test2o: run-test262
- time ./run-test262 -t -m -c test262o.conf
- test2o-update: run-test262
- ./run-test262 -t -u -c test262o.conf -T 1
- endif
- ifeq ($(wildcard test262/features.txt),)
- test2 test2-update test2-default test2-check:
- @echo test262 tests not installed
- else
- # Test262 tests
- test2-default: run-test262
- time ./run-test262 -t -m -c test262.conf
- test2: run-test262
- time ./run-test262 -t -m -c test262.conf -a
- test2-update: run-test262
- ./run-test262 -t -u -c test262.conf -a
- test2-check: run-test262
- time ./run-test262 -t -m -c test262.conf -E -a
- endif
- testall: all test microbench test2o test2
- testall-complete: testall
- node-test:
- node tests/test_closure.js
- node tests/test_language.js
- node tests/test_builtin.js
- node tests/test_loop.js
- node tests/test_bigint.js
- node-microbench:
- node tests/microbench.js -s microbench-node.txt
- node --jitless tests/microbench.js -s microbench-node-jitless.txt
- bench-v8: qjs
- make -C tests/bench-v8
- ./qjs -d tests/bench-v8/combined.js
- node-bench-v8:
- make -C tests/bench-v8
- node --jitless tests/bench-v8/combined.js
- tests/bjson.so: $(OBJDIR)/tests/bjson.pic.o
- $(CC) $(LDFLAGS) -shared -o $@ $^ $(LIBS)
- BENCHMARKDIR=../quickjs-benchmarks
- run_sunspider_like: $(BENCHMARKDIR)/run_sunspider_like.c
- $(CC) $(CFLAGS) $(LDFLAGS) -DNO_INCLUDE_DIR -I. -o $@ $< libquickjs$(LTOEXT).a $(LIBS)
- run_octane: $(BENCHMARKDIR)/run_octane.c
- $(CC) $(CFLAGS) $(LDFLAGS) -DNO_INCLUDE_DIR -I. -o $@ $< libquickjs$(LTOEXT).a $(LIBS)
- benchmarks: run_sunspider_like run_octane
- ./run_sunspider_like $(BENCHMARKDIR)/kraken-1.0/
- ./run_sunspider_like $(BENCHMARKDIR)/kraken-1.1/
- ./run_sunspider_like $(BENCHMARKDIR)/sunspider-1.0/
- ./run_octane $(BENCHMARKDIR)/
- -include $(wildcard $(OBJDIR)/*.d)
|