3131ifneq ($(OPTIMIZATION ) ,-O0)
3232 OPTIMIZATION+=-fno-omit-frame-pointer
3333endif
34- DEPENDENCY_TARGETS =libvalkey linenoise lua hdr_histogram fpconv
34+ DEPENDENCY_TARGETS =libvalkey linenoise hdr_histogram fpconv
3535NODEPS: =clean distclean
3636
3737# Default settings
6363
6464PREFIX? =/usr/local
6565INSTALL_BIN =$(PREFIX ) /bin
66+ INSTALL_LIB =$(PREFIX ) /lib
6667INSTALL =install
6768PKG_CONFIG? =pkg-config
6869
@@ -250,7 +251,23 @@ ifdef OPENSSL_PREFIX
250251endif
251252
252253# Include paths to dependencies
253- FINAL_CFLAGS+ = -I../deps/libvalkey/include -I../deps/linenoise -I../deps/lua/src -I../deps/hdr_histogram -I../deps/fpconv
254+ FINAL_CFLAGS+ = -I../deps/libvalkey/include -I../deps/linenoise -I../deps/hdr_histogram -I../deps/fpconv
255+
256+ # Lua scripting engine module
257+ LUA_MODULE =
258+ LUA_MODULE_INSTALL =
259+ LUA_MODULE_NAME: =modules/lua/libluaengine.so
260+
261+ ifneq ($(WITHOUT_LUA ) ,yes)
262+ LUA_MODULE=$(LUA_MODULE_NAME)
263+ endif
264+
265+ ifeq ($(LUA_MODULE ) ,$(LUA_MODULE_NAME ) )
266+ current_dir = $(shell pwd)
267+ FINAL_CFLAGS+=-DLUA_ENGINE_ENABLED -DLUA_ENGINE_LIB=libluaengine.so
268+ FINAL_LDFLAGS+= -Wl,-rpath=$(PREFIX)/lib:$(current_dir)/modules/lua -Wl,--disable-new-dtags
269+ LUA_MODULE_INSTALL=install-lua-module
270+ endif
254271
255272# Determine systemd support and/or build preference (defaulting to auto-detection)
256273BUILD_WITH_SYSTEMD =no
@@ -423,7 +440,7 @@ ENGINE_NAME=valkey
423440SERVER_NAME =$(ENGINE_NAME ) -server$(PROG_SUFFIX )
424441ENGINE_SENTINEL_NAME =$(ENGINE_NAME ) -sentinel$(PROG_SUFFIX )
425442ENGINE_TRACE_OBJ =trace/trace.o trace/trace_commands.o trace/trace_db.o trace/trace_cluster.o trace/trace_server.o trace/trace_rdb.o trace/trace_aof.o
426- ENGINE_SERVER_OBJ=threads_mngr.o adlist.o vector.o quicklist.o ae.o anet.o dict.o hashtable.o kvstore.o server.o sds.o zmalloc.o lzf_c.o lzf_d.o pqsort.o zipmap.o sha1.o ziplist.o release.o memory_prefetch.o io_threads.o networking.o util.o object.o db.o replication.o rdb.o t_string.o t_list.o t_set.o t_zset.o t_hash.o config.o aof.o pubsub.o multi.o debug.o sort.o intset.o syncio.o cluster.o cluster_legacy.o cluster_slot_stats.o crc16.o cluster_migrateslots.o endianconv.o commandlog.o eval.o bio.o rio.o rand.o memtest.o syscheck.o crcspeed.o crccombine.o crc64.o bitops.o sentinel.o notify.o setproctitle.o blocked.o hyperloglog.o latency.o sparkline.o valkey-check-rdb.o valkey-check-aof.o geo.o lazyfree.o module.o evict.o expire.o geohash.o geohash_helper.o childinfo.o allocator_defrag.o defrag.o siphash.o rax.o t_stream.o listpack.o localtime.o lolwut.o lolwut5.o lolwut6.o lolwut9.o acl.o tracking.o socket.o tls.o sha256.o timeout.o setcpuaffinity.o monotonic.o mt19937-64.o resp_parser.o call_reply.o script.o functions.o commands.o strl.o connection.o unix.o logreqres.o rdma.o scripting_engine.o entry.o vset.o lua/script_lua.o lua/function_lua.o lua/engine_lua.o lua/debug_lua.o
443+ ENGINE_SERVER_OBJ=threads_mngr.o adlist.o vector.o quicklist.o ae.o anet.o dict.o hashtable.o kvstore.o server.o sds.o zmalloc.o lzf_c.o lzf_d.o pqsort.o zipmap.o sha1.o ziplist.o release.o memory_prefetch.o io_threads.o networking.o util.o object.o db.o replication.o rdb.o t_string.o t_list.o t_set.o t_zset.o t_hash.o config.o aof.o pubsub.o multi.o debug.o sort.o intset.o syncio.o cluster.o cluster_legacy.o cluster_slot_stats.o crc16.o cluster_migrateslots.o endianconv.o commandlog.o eval.o bio.o rio.o rand.o memtest.o syscheck.o crcspeed.o crccombine.o crc64.o bitops.o sentinel.o notify.o setproctitle.o blocked.o hyperloglog.o latency.o sparkline.o valkey-check-rdb.o valkey-check-aof.o geo.o lazyfree.o module.o evict.o expire.o geohash.o geohash_helper.o childinfo.o allocator_defrag.o defrag.o siphash.o rax.o t_stream.o listpack.o localtime.o lolwut.o lolwut5.o lolwut6.o lolwut9.o acl.o tracking.o socket.o tls.o sha256.o timeout.o setcpuaffinity.o monotonic.o mt19937-64.o resp_parser.o call_reply.o script.o functions.o commands.o strl.o connection.o unix.o logreqres.o rdma.o scripting_engine.o entry.o vset.o
427444ENGINE_SERVER_OBJ+ =$(ENGINE_TRACE_OBJ )
428445ENGINE_CLI_NAME =$(ENGINE_NAME ) -cli$(PROG_SUFFIX )
429446ENGINE_CLI_OBJ =anet.o adlist.o dict.o valkey-cli.o zmalloc.o release.o ae.o serverassert.o crcspeed.o crccombine.o crc64.o siphash.o crc16.o monotonic.o cli_common.o mt19937-64.o strl.o cli_commands.o sds.o util.o sha256.o
@@ -448,7 +465,7 @@ ifeq ($(USE_FAST_FLOAT),yes)
448465 FINAL_LIBS += $(FAST_FLOAT_STRTOD_OBJECT)
449466endif
450467
451- all : $(SERVER_NAME ) $(ENGINE_SENTINEL_NAME ) $(ENGINE_CLI_NAME ) $(ENGINE_BENCHMARK_NAME ) $(ENGINE_CHECK_RDB_NAME ) $(ENGINE_CHECK_AOF_NAME ) $(TLS_MODULE ) $(RDMA_MODULE )
468+ all : $(SERVER_NAME ) $(ENGINE_SENTINEL_NAME ) $(ENGINE_CLI_NAME ) $(ENGINE_BENCHMARK_NAME ) $(ENGINE_CHECK_RDB_NAME ) $(ENGINE_CHECK_AOF_NAME ) $(TLS_MODULE ) $(RDMA_MODULE ) $( LUA_MODULE )
452469 @echo " "
453470 @echo " Hint: It's a good idea to run 'make test' ;)"
454471 @echo " "
@@ -473,6 +490,7 @@ persist-settings: distclean
473490 echo BUILD_TLS=$(BUILD_TLS ) >> .make-settings
474491 echo BUILD_RDMA=$(BUILD_RDMA ) >> .make-settings
475492 echo USE_SYSTEMD=$(USE_SYSTEMD ) >> .make-settings
493+ echo WITHOUT_LUA=$(WITHOUT_LUA ) >> .make-settings
476494 echo CFLAGS=$(CFLAGS ) >> .make-settings
477495 echo LDFLAGS=$(LDFLAGS ) >> .make-settings
478496 echo SERVER_CFLAGS=$(SERVER_CFLAGS ) >> .make-settings
@@ -498,15 +516,15 @@ endif
498516
499517# valkey-server
500518$(SERVER_NAME ) : $(ENGINE_SERVER_OBJ )
501- $(SERVER_LD ) -o $@ $^ ../deps/libvalkey/lib/libvalkey.a ../deps/lua/src/liblua.a ../deps/ hdr_histogram/libhdrhistogram.a ../deps/fpconv/libfpconv.a $(FINAL_LIBS )
519+ $(SERVER_LD ) -o $@ $^ ../deps/libvalkey/lib/libvalkey.a ../deps/hdr_histogram/libhdrhistogram.a ../deps/fpconv/libfpconv.a $(FINAL_LIBS )
502520
503521# Valkey static library, used to compile against for unit testing
504522$(ENGINE_LIB_NAME ) : $(ENGINE_SERVER_OBJ )
505523 $(SERVER_AR ) rcs $@ $^
506524
507525# valkey-unit-tests
508526$(ENGINE_UNIT_TESTS ) : $(ENGINE_TEST_OBJ ) $(ENGINE_LIB_NAME )
509- $(SERVER_LD ) -o $@ $^ ../deps/libvalkey/lib/libvalkey.a ../deps/lua/src/liblua.a ../deps/ hdr_histogram/libhdrhistogram.a ../deps/fpconv/libfpconv.a $(FINAL_LIBS )
527+ $(SERVER_LD ) -o $@ $^ ../deps/libvalkey/lib/libvalkey.a ../deps/hdr_histogram/libhdrhistogram.a ../deps/fpconv/libfpconv.a $(FINAL_LIBS )
510528
511529# valkey-sentinel
512530$(ENGINE_SENTINEL_NAME ) : $(SERVER_NAME )
@@ -528,6 +546,10 @@ $(TLS_MODULE_NAME): $(SERVER_NAME)
528546$(RDMA_MODULE_NAME ) : $(SERVER_NAME )
529547 $(QUIET_CC )$(CC ) -o $@ rdma.c -shared -fPIC $(RDMA_MODULE_CFLAGS )
530548
549+ # engine_lua.so
550+ $(LUA_MODULE_NAME ) : $(SERVER_NAME )
551+ cd modules/lua && $(MAKE ) OPTIMIZATION=" $( OPTIMIZATION) "
552+
531553# valkey-cli
532554$(ENGINE_CLI_NAME ) : $(ENGINE_CLI_OBJ )
533555 $(SERVER_LD ) -o $@ $^ ../deps/libvalkey/lib/libvalkey.a ../deps/linenoise/linenoise.o ../deps/fpconv/libfpconv.a $(FINAL_LIBS ) $(TLS_CLIENT_LIBS ) $(RDMA_CLIENT_LIBS )
@@ -545,9 +567,6 @@ DEP = $(ENGINE_SERVER_OBJ:%.o=%.d) $(ENGINE_CLI_OBJ:%.o=%.d) $(ENGINE_BENCHMARK_
545567% .o : % .c .make-prerequisites
546568 $(SERVER_CC ) -MMD -o $@ -c $<
547569
548- lua/% .o : lua/% .c .make-prerequisites
549- $(SERVER_CC ) -MMD -o $@ -c $<
550-
551570trace/% .o : trace/% .c .make-prerequisites
552571 $(SERVER_CC ) -Itrace -MMD -o $@ -c $<
553572
@@ -574,8 +593,9 @@ endif
574593commands.c : $(COMMANDS_DEF_FILENAME ) .def
575594
576595clean :
577- rm -rf $(SERVER_NAME ) $(ENGINE_SENTINEL_NAME ) $(ENGINE_CLI_NAME ) $(ENGINE_BENCHMARK_NAME ) $(ENGINE_CHECK_RDB_NAME ) $(ENGINE_CHECK_AOF_NAME ) $(ENGINE_UNIT_TESTS ) $(ENGINE_LIB_NAME ) unit/* .o unit/* .d lua/ * .o lua/ * .d trace/* .o trace/* .d * .o * .gcda * .gcno * .gcov valkey.info lcov-html Makefile.dep * .so
596+ rm -rf $(SERVER_NAME ) $(ENGINE_SENTINEL_NAME ) $(ENGINE_CLI_NAME ) $(ENGINE_BENCHMARK_NAME ) $(ENGINE_CHECK_RDB_NAME ) $(ENGINE_CHECK_AOF_NAME ) $(ENGINE_UNIT_TESTS ) $(ENGINE_LIB_NAME ) unit/* .o unit/* .d trace/* .o trace/* .d * .o * .gcda * .gcno * .gcov valkey.info lcov-html Makefile.dep * .so
578597 rm -f $(DEP )
598+ -(cd modules/lua && $( MAKE) clean)
579599
580600.PHONY : clean
581601
@@ -634,7 +654,7 @@ valgrind:
634654helgrind :
635655 $(MAKE ) OPTIMIZATION=" -O0" MALLOC=" libc" CFLAGS=" -D__ATOMIC_VAR_FORCE_SYNC_MACROS" SERVER_CFLAGS=" -I/usr/local/include" SERVER_LDFLAGS=" -L/usr/local/lib"
636656
637- install : all
657+ install : all $( LUA_MODULE_INSTALL )
638658 @mkdir -p $(INSTALL_BIN )
639659 $(call MAKE_INSTALL,$(SERVER_NAME ) ,$(INSTALL_BIN ) )
640660 $(call MAKE_INSTALL,$(ENGINE_BENCHMARK_NAME ) ,$(INSTALL_BIN ) )
@@ -649,6 +669,10 @@ install: all
649669 $(call MAYBE_INSTALL_REDIS_SYMLINK,$(ENGINE_CHECK_AOF_NAME ) ,$(INSTALL_BIN ) )
650670 $(call MAYBE_INSTALL_REDIS_SYMLINK,$(ENGINE_SENTINEL_NAME ) ,$(INSTALL_BIN ) )
651671
672+ install-lua-module : $(LUA_MODULE )
673+ @mkdir -p $(INSTALL_LIB )
674+ $(call MAKE_INSTALL,$(LUA_MODULE ) ,$(INSTALL_LIB ) )
675+
652676uninstall :
653677 @rm -f $(INSTALL_BIN ) /{$(SERVER_NAME ) ,$(ENGINE_BENCHMARK_NAME ) ,$(ENGINE_CLI_NAME ) ,$(ENGINE_CHECK_RDB_NAME ) ,$(ENGINE_CHECK_AOF_NAME ) ,$(ENGINE_SENTINEL_NAME ) }
654678 $(call MAYBE_UNINSTALL_REDIS_SYMLINK,$(INSTALL_BIN ) ,$(SERVER_NAME ) )
0 commit comments