diff --git a/config-user.mk.acr b/config-user.mk.acr index 3ae53c245f4a1..ce5daaf9b0d84 100644 --- a/config-user.mk.acr +++ b/config-user.mk.acr @@ -22,6 +22,7 @@ HAVE_LIB_GMP=@HAVE_LIB_GMP@ USE_RPATH=@USE_RPATH@ HAVE_JEMALLOC=@HAVE_JEMALLOC@ HAVE_FORK=@HAVE_FORK@ +WANT_QJS=@WANT_QJS@ WANT_DYLINK=@WANT_DYLINK@ WANT_CAPSTONE=@WANT_CAPSTONE@ WITH_STATIC_THEMES=@WITH_STATIC_THEMES@ diff --git a/configure b/configure index 588d40e69f2ec..13024d4a4926d 100755 --- a/configure +++ b/configure @@ -24,6 +24,7 @@ USE_MAGIC=0 WANT_THREADS=1 LOADLIBS=1 R_CRITICAL_ENABLED=0 +WANT_QJS=1 WANT_DYLINK=1 HAVE_FORK=1 WANT_PTRACE_WRAP=1 @@ -201,6 +202,7 @@ Optional Features: --disable-threads disable use of thread apis --disable-loadlibs disable loading plugins --enable-threadsafety enable mutexes in critical code paths + --without-qjs build without the QuickJS runtime --without-dylink disable support for dynamic loading of plugins --without-fork disable fork --without-ptrace-wrap build ptrace-wrap support needed for the iaito debugger on Linux @@ -305,7 +307,7 @@ echo "LANGS: c" echo "REQUIRED: libdl" echo "OPTIONAL: libatomic libmagic libz libzip libxxhash libssl liblibuv>=1.0.0" echo "PKGCONFIG: capstone libsqsh liblz4 openssl libuv" -echo "FLAGS: --disable-debugger --with-libatomic --with-sysmagic --disable-threads --disable-loadlibs --enable-threadsafety --without-dylink --without-fork --without-ptrace-wrap --without-gperf --without-capstone --with-libr --with-static-themes --with-capstone-next --with-capstone5 --with-capstone4 --with-syscapstone --without-syscapstone --without-sqsh --with-syslz4 --with-syszip --with-sysxxhash --without-gpl --with-ssl --with-ssl-crypto --with-libuv --with-new-abi --with-rpath --with-compiler=gcc --with-ostype=auto --with-libversion=xxx --without-jemalloc --with-checks-level=2 --disable-debug-stuff" +echo "FLAGS: --disable-debugger --with-libatomic --with-sysmagic --disable-threads --disable-loadlibs --enable-threadsafety --without-qjs --without-dylink --without-fork --without-ptrace-wrap --without-gperf --without-capstone --with-libr --with-static-themes --with-capstone-next --with-capstone5 --with-capstone4 --with-syscapstone --without-syscapstone --without-sqsh --with-syslz4 --with-syszip --with-sysxxhash --without-gpl --with-ssl --with-ssl-crypto --with-libuv --with-new-abi --with-rpath --with-compiler=gcc --with-ostype=auto --with-libversion=xxx --without-jemalloc --with-checks-level=2 --disable-debug-stuff" exit 0 ;; --cache-file) @@ -363,6 +365,7 @@ echo "FLAGS: --disable-debugger --with-libatomic --with-sysmagic --disable "--disable-threads") WANT_THREADS="0"; ;; "--disable-loadlibs") LOADLIBS="0"; ;; "--enable-threadsafety") R_CRITICAL_ENABLED="1"; ;; +"--without-qjs") WANT_QJS="0"; ;; "--without-dylink") WANT_DYLINK="0"; ;; "--without-fork") HAVE_FORK="0"; ;; "--without-ptrace-wrap") WANT_PTRACE_WRAP="0"; ;; @@ -408,7 +411,7 @@ parse_options "$1" shift done -ENVWORDS="MANDIR DESCRIPTION INFODIR LIBDIR INCLUDEDIR LOCALSTATEDIR ETCDIR SYSCONFDIR DATADIR DOCDIR LIBEXECDIR SBINDIR BINDIR EPREFIX PREFIX SPREFIX TARGET HOST BUILD INSTALL INSTALL_LIB INSTALL_MAN INSTALL_PROGRAM INSTALL_PROGRAM_STRIP INSTALL_DIR INSTALL_SCRIPT INSTALL_DATA HOST_OS HOST_CPU BUILD_OS BUILD_CPU TARGET_OS TARGET_CPU VERSION VERSION_MAJOR VERSION_MINOR VERSION_PATCH VERSION_NUMBER PKGCFG_LIBDIR PKGCFG_INCDIR PKGNAME VPATH CONTACT CONTACT_NAME CONTACT_MAIL CC CFLAGS CPPFLAGS LDFLAGS HAVE_LANG_C DEBUGGER HAVE_LIB_DL DL_LIBS PKGCONFIG R2_BUILDSYSTEM HAVE_PATCH PATCH HAVE_AR AR HAVE_GIT GIT HAVE_GPERF GPERF HAVE_LIB_ATOMIC HAVE_LIB_MAGIC HAVE_LINUX_CAN_H USE_LIB_ATOMIC LIBATOMIC USE_MAGIC USE_LIB_MAGIC LIBMAGIC WANT_THREADS LOADLIBS R_CRITICAL_ENABLED WANT_DYLINK HAVE_FORK WANT_PTRACE_WRAP WANT_GPERF WANT_CAPSTONE WITH_LIBR WITH_STATIC_THEMES USE_CSNEXT USE_CS5 USE_CS4 WITH_CAPSTONE WITHOUT_SYSCAPSTONE CAPSTONE_CFLAGS CAPSTONE_LDFLAGS HAVE_PKGCFG_CAPSTONE USE_CAPSTONE SQSH_CFLAGS SQSH_LDFLAGS HAVE_PKGCFG_LIBSQSH WITH_SQSH USE_SQSH LZ4_CFLAGS LZ4_LDFLAGS HAVE_PKGCFG_LIBLZ4 WITH_SYSLZ4 USE_SYSLZ4 HAVE_LIB_Z HAVE_LIB_ZIP USE_ZIP USE_LIB_ZIP LIBZIP HAVE_LIB_XXHASH USE_XXHASH USE_LIB_XXHASH LIBXXHASH WITH_GPL HAVE_DECL_ADDR_NO_RANDOMIZE HAVE_DECL___GLIBC__ HAVE_ARC4RANDOM_UNIFORM HAVE_EXPLICIT_BZERO HAVE_EXPLICIT_MEMSET HAVE_CLOCK_NANOSLEEP HAVE___ATOMIC_FETCH_ADD_8 HAVE_SIGACTION HAVE_CLOCK_GETTIME FORCE_LIB_ATOMIC CLOCK_LDFLAGS SUPPORT_GNU99 HAVE_LIB_GMP WANT_SSL WANT_SSL_CRYPTO HAVE_OPENSSL SSL_CFLAGS SSL_LDFLAGS HAVE_LIB_SSL HAVE_PKGCFG_OPENSSL WANT_LIBUV HAVE_LIBUV_VERSION_1_0_0 LIBUV_CFLAGS LIBUV_LDFLAGS HAVE_PKGCFG_LIBUV HAVE_LIBUV USE_NEW_ABI USE_RPATH USERCC USEROSTYPE LIBVERSION HAVE_JEMALLOC HAVE_PTRACE USE_PTRACE_WRAP R_CHECKS_LEVEL WANT_DEBUGSTUFF" +ENVWORDS="MANDIR DESCRIPTION INFODIR LIBDIR INCLUDEDIR LOCALSTATEDIR ETCDIR SYSCONFDIR DATADIR DOCDIR LIBEXECDIR SBINDIR BINDIR EPREFIX PREFIX SPREFIX TARGET HOST BUILD INSTALL INSTALL_LIB INSTALL_MAN INSTALL_PROGRAM INSTALL_PROGRAM_STRIP INSTALL_DIR INSTALL_SCRIPT INSTALL_DATA HOST_OS HOST_CPU BUILD_OS BUILD_CPU TARGET_OS TARGET_CPU VERSION VERSION_MAJOR VERSION_MINOR VERSION_PATCH VERSION_NUMBER PKGCFG_LIBDIR PKGCFG_INCDIR PKGNAME VPATH CONTACT CONTACT_NAME CONTACT_MAIL CC CFLAGS CPPFLAGS LDFLAGS HAVE_LANG_C DEBUGGER HAVE_LIB_DL DL_LIBS PKGCONFIG R2_BUILDSYSTEM HAVE_PATCH PATCH HAVE_AR AR HAVE_GIT GIT HAVE_GPERF GPERF HAVE_LIB_ATOMIC HAVE_LIB_MAGIC HAVE_LINUX_CAN_H USE_LIB_ATOMIC LIBATOMIC USE_MAGIC USE_LIB_MAGIC LIBMAGIC WANT_THREADS LOADLIBS R_CRITICAL_ENABLED WANT_QJS WANT_DYLINK HAVE_FORK WANT_PTRACE_WRAP WANT_GPERF WANT_CAPSTONE WITH_LIBR WITH_STATIC_THEMES USE_CSNEXT USE_CS5 USE_CS4 WITH_CAPSTONE WITHOUT_SYSCAPSTONE CAPSTONE_CFLAGS CAPSTONE_LDFLAGS HAVE_PKGCFG_CAPSTONE USE_CAPSTONE SQSH_CFLAGS SQSH_LDFLAGS HAVE_PKGCFG_LIBSQSH WITH_SQSH USE_SQSH LZ4_CFLAGS LZ4_LDFLAGS HAVE_PKGCFG_LIBLZ4 WITH_SYSLZ4 USE_SYSLZ4 HAVE_LIB_Z HAVE_LIB_ZIP USE_ZIP USE_LIB_ZIP LIBZIP HAVE_LIB_XXHASH USE_XXHASH USE_LIB_XXHASH LIBXXHASH WITH_GPL HAVE_DECL_ADDR_NO_RANDOMIZE HAVE_DECL___GLIBC__ HAVE_ARC4RANDOM_UNIFORM HAVE_EXPLICIT_BZERO HAVE_EXPLICIT_MEMSET HAVE_CLOCK_NANOSLEEP HAVE___ATOMIC_FETCH_ADD_8 HAVE_SIGACTION HAVE_CLOCK_GETTIME FORCE_LIB_ATOMIC CLOCK_LDFLAGS SUPPORT_GNU99 HAVE_LIB_GMP WANT_SSL WANT_SSL_CRYPTO HAVE_OPENSSL SSL_CFLAGS SSL_LDFLAGS HAVE_LIB_SSL HAVE_PKGCFG_OPENSSL WANT_LIBUV HAVE_LIBUV_VERSION_1_0_0 LIBUV_CFLAGS LIBUV_LDFLAGS HAVE_PKGCFG_LIBUV HAVE_LIBUV USE_NEW_ABI USE_RPATH USERCC USEROSTYPE LIBVERSION HAVE_JEMALLOC HAVE_PTRACE USE_PTRACE_WRAP R_CHECKS_LEVEL WANT_DEBUGSTUFF" create_environ @@ -1046,7 +1049,7 @@ do_remove if [ "$QUIET" = 0 ]; then echo echo "Final report:" -for A in BUILD CC CFLAGS DEBUGGER HAVE_ARC4RANDOM_UNIFORM HAVE_EXPLICIT_BZERO USE_NEW_ABI HAVE_EXPLICIT_MEMSET HAVE_FORK HAVE_GPERF HAVE_LIBUV HAVE_LIB_GMP WANT_DEBUGSTUFF HAVE_OPENSSL WANT_SSL_CRYPTO HAVE_PTRACE HOST LDFLAGS LIBVERSION PKGCONFIG PREFIX R_CHECKS_LEVEL TARGET USERCC USEROSTYPE USE_CAPSTONE USE_LIB_MAGIC NEW_IO_CACHE USE_SQSH USE_LIB_XXHASH USE_LIB_ZIP USE_PTRACE_WRAP USE_SYSLZ4 VERSION WANT_DYLINK USE_SMALLZ4 USE_LIB_ATOMIC HAVE___ATOMIC_FETCH_ADD_8 FORCE_LIB_ATOMIC ; do +for A in BUILD CC CFLAGS DEBUGGER HAVE_ARC4RANDOM_UNIFORM HAVE_EXPLICIT_BZERO USE_NEW_ABI HAVE_EXPLICIT_MEMSET HAVE_FORK HAVE_GPERF HAVE_LIBUV HAVE_LIB_GMP WANT_DEBUGSTUFF HAVE_OPENSSL WANT_SSL_CRYPTO HAVE_PTRACE HOST LDFLAGS LIBVERSION PKGCONFIG PREFIX R_CHECKS_LEVEL TARGET USERCC USEROSTYPE USE_CAPSTONE USE_LIB_MAGIC NEW_IO_CACHE USE_SQSH USE_LIB_XXHASH USE_LIB_ZIP USE_PTRACE_WRAP USE_SYSLZ4 VERSION WANT_DYLINK USE_SMALLZ4 USE_LIB_ATOMIC HAVE___ATOMIC_FETCH_ADD_8 FORCE_LIB_ATOMIC WANT_QJS ; do eval VAL="\$${A}" [ -z "${VAL}" ] && VAL="\"\"" echo " - ${A} = ${VAL}" diff --git a/configure.acr b/configure.acr index 4980575f402f3..fe51ab6919a2e 100644 --- a/configure.acr +++ b/configure.acr @@ -47,6 +47,7 @@ ARG_DISABLE LOADLIBS loadlibs disable loading plugins ; ARG_ENABLE R_CRITICAL_ENABLED threadsafety enable mutexes in critical code paths ; +ARG_WITHOUT WANT_QJS qjs build without the QuickJS runtime ; ARG_WITHOUT WANT_DYLINK dylink disable support for dynamic loading of plugins ; ARG_WITHOUT HAVE_FORK fork disable fork ; ARG_WITHOUT WANT_PTRACE_WRAP ptrace-wrap build ptrace-wrap support needed for the iaito debugger on Linux ; @@ -334,7 +335,7 @@ REPORT HAVE_OPENSSL WANT_SSL_CRYPTO HAVE_PTRACE HOST LDFLAGS LIBVERSION PKGCONFIG PREFIX R_CHECKS_LEVEL TARGET USERCC USEROSTYPE USE_CAPSTONE USE_LIB_MAGIC NEW_IO_CACHE USE_SQSH USE_LIB_XXHASH USE_LIB_ZIP USE_PTRACE_WRAP USE_SYSLZ4 VERSION WANT_DYLINK USE_SMALLZ4 - USE_LIB_ATOMIC HAVE___ATOMIC_FETCH_ADD_8 FORCE_LIB_ATOMIC + USE_LIB_ATOMIC HAVE___ATOMIC_FETCH_ADD_8 FORCE_LIB_ATOMIC WANT_QJS ; PKGCFG_DO pkgcfg/r_egg.pc r_egg r_asm r_syscall r_util r_reg r_flag r_cons ; diff --git a/libr/config.h.in b/libr/config.h.in index 8d77121a7a153..4649484ff63a6 100644 --- a/libr/config.h.in +++ b/libr/config.h.in @@ -4,6 +4,7 @@ #define R_DEBUG 0 #define R_RTDEBUG 1 #define WANT_THREADS @WANT_THREADS@ +#define WANT_QJS @WANT_QJS@ /* inlined APIs */ #define R_INLINE 0 diff --git a/libr/include/r_userconf.h.acr b/libr/include/r_userconf.h.acr index 7f8b10fa8e454..8e62a600311a1 100644 --- a/libr/include/r_userconf.h.acr +++ b/libr/include/r_userconf.h.acr @@ -22,6 +22,7 @@ extern "C" { #define HAVE_CLOCK_NANOSLEEP @HAVE_CLOCK_NANOSLEEP@ #define HAVE_SIGACTION @HAVE_SIGACTION@ #define WANT_THREADS @WANT_THREADS@ +#define WANT_QJS @WANT_QJS@ #define WANT_CAPSTONE @WANT_CAPSTONE@ #define HAVE_LINUX_CAN_H @HAVE_LINUX_CAN_H@ #define R2_USE_NEW_ABI @USE_NEW_ABI@ diff --git a/libr/lang/Makefile b/libr/lang/Makefile index 0b4e4831ea7f6..5501a9a622d0e 100644 --- a/libr/lang/Makefile +++ b/libr/lang/Makefile @@ -16,9 +16,10 @@ R2DEPS+=r_syscall R2DEPS+=r_flag CFLAGS+=-DR2_PLUGIN_INCORE CFLAGS+=-DCONFIG_VERSION=\"0.0.0\" -OBJS+=$(QJS_OBJS) -# LINK+=$(QJS_FILES) LDFLAGS+=$(LIBATOMIC) +ifeq ($(WANT_QJS),1) +OBJS+=$(QJS_OBJS) include ../../shlr/qjs/deps.mk +endif include ../rules.mk diff --git a/libr/lang/lang.c b/libr/lang/lang.c index 45d657f65e41a..e8e43f583d49f 100644 --- a/libr/lang/lang.c +++ b/libr/lang/lang.c @@ -71,7 +71,9 @@ R_API RLang *r_lang_new(void) { r_lang_plugin_add (lang, &r_lang_plugin_spp); r_lang_plugin_add (lang, &r_lang_plugin_lib); r_lang_plugin_add (lang, &r_lang_plugin_asm); +#if WANT_QJS r_lang_plugin_add (lang, &r_lang_plugin_qjs); +#endif r_lang_plugin_add (lang, &r_lang_plugin_tsc); r_lang_plugin_add (lang, &r_lang_plugin_nim); r_lang_plugin_add (lang, &r_lang_plugin_dart); diff --git a/libr/lang/p/qjs.c b/libr/lang/p/qjs.c index 1191084d3e85e..14c4a747c961e 100644 --- a/libr/lang/p/qjs.c +++ b/libr/lang/p/qjs.c @@ -4,6 +4,8 @@ #include #include +#if WANT_QJS + #define countof(x) (sizeof (x) / sizeof ((x)[0])) //#include @@ -933,3 +935,4 @@ RLibStruct radare_plugin = { .version = R2_VERSION }; #endif +#endif diff --git a/meson.build b/meson.build index 947e2a8fdb77f..3efab27a4f132 100644 --- a/meson.build +++ b/meson.build @@ -263,6 +263,7 @@ conf_data.set('plugins_debug', '&r_debug_plugin_' + ', &r_debug_plugin_'.join(de conf_data.set('plugins_egg', '&r_egg_plugin_' + ', &r_egg_plugin_'.join(egg_plugins) + ', 0') conf_data.set('plugins_lang', '&r_lang_plugin_' + ', &r_lang_plugin_'.join(lang_plugins) + ', 0') conf_data.set('WANT_THREADS', get_option('want_threads')? '1': '0') +conf_data.set('WANT_QJS', get_option('want_qjs')? '1': '0') config_h = configure_file( input: 'libr/config.h.in', @@ -414,6 +415,7 @@ userconf.set10('HAVE_LIBUV', use_libuv) userconf.set10('HAVE_FORK', use_fork) userconf.set10('HAVE_GPERF', get_option('sdb_cgen')) userconf.set10('WANT_DYLINK', use_dylink) +userconf.set10('WANT_QJS', get_option('want_qjs')) userconf.set10('WANT_THREADS', get_option('want_threads')) userconf.set10('WANT_CAPSTONE', get_option('want_capstone')) userconf.set10('USE_NEW_ABI', get_option('use_new_abi')) diff --git a/meson_options.txt b/meson_options.txt index d8bca93b16652..be83a75e9b249 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -28,6 +28,7 @@ option('r2_gittip', type: 'string', value: '') option('checks_level', type: 'integer', value: 9999, description: 'Value between 0 and 3 to enable different level of assert (see R_CHECKS_LEVEL). By default its value depends on buildtype (2 on debug, 1 on release).') option('capstone_in_builddir', type: 'boolean', value: false, description: 'When true, capstone is downloaded in the build directory and not in the source one') option('want_threads', type: 'boolean', value: true) +option('want_qjs', type: 'boolean', value: true) option('use_new_abi', type: 'boolean', value: false) option('want_capstone', type: 'boolean', value: true) option('use_sys_capstone', type: 'boolean', value: false)