############################################################################ # apps/interpreters/lua/Makefile # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. The # ASF licenses this file to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance with the # License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. # ############################################################################ include $(APPDIR)/Make.defs # Lua built-in application info PROGNAME = lua PRIORITY = $(CONFIG_INTERPRETER_LUA_PRIORITY) STACKSIZE = $(CONFIG_INTERPRETER_LUA_STACKSIZE) MODULE = $(CONFIG_INTERPRETERS_LUA) # Lua library LUA_VERSION = $(patsubst "%",%,$(strip $(CONFIG_INTERPRETER_LUA_VERSION))) LUA_TARBALL = v$(LUA_VERSION).tar.gz LUA_UNPACK = lua LUA_URL_BASE = https://github.com/lua/lua/archive/refs/tags/ LUA_URL = $(LUA_URL_BASE)/$(LUA_TARBALL) LUA_SRC = $(LUA_UNPACK) MAINSRC = $(LUA_SRC)$(DELIM)lua.c CORELIBS_SRCS = $(filter-out $(LUA_SRC)$(DELIM)lauxlib.c,$(wildcard $(LUA_SRC)$(DELIM)*lib.c)) EXCLUDE_SRCS = $(MAINSRC) $(CORELIBS_SRCS) $(LUA_SRC)$(DELIM)onelua.c $(LUA_SRC)$(DELIM)luac.c $(LUA_SRC)$(DELIM)linit.c CSRCS = $(filter-out $(EXCLUDE_SRCS),$(wildcard $(LUA_SRC)$(DELIM)*.c)) CSRCS += nuttx_linit.c CFLAGS += -DLUA_MAXINPUT=$(CONFIG_INTERPRETER_LUA_IOBUFSIZE) CFLAGS += -DLUA_PROGNAME=\"$(PROGNAME)\" ifeq ($(CONFIG_INTERPRETER_LUA_32BITS),y) CFLAGS += -DLUA_32BITS endif ifneq ($(CONFIG_INTERPRETER_LUA_PATH),"") CFLAGS += -DLUA_PATH_DEFAULT=\"$(CONFIG_INTERPRETER_LUA_PATH)\" endif ifneq ($(CONFIG_INTERPRETER_LUA_CPATH),"") CFLAGS += -DLUA_CPATH_DEFAULT=\"$(CONFIG_INTERPRETER_LUA_CPATH)\" endif ifeq ($(CONFIG_SYSTEM_READLINE),y) CFLAGS += -include "system/readline.h" CFLAGS += -D'lua_initreadline(L)=((void)L)' CFLAGS += -D'lua_readline(L,b,p)=((void)L,fputs(p,stdout),fflush(stdout),readline_stream(b,LUA_MAXINPUT,stdin,stdout))' CFLAGS += -D'lua_saveline(L,line)={(void)L;(void)line;}' CFLAGS += -D'lua_freeline(L,line)={(void)L;(void)b;}' endif # Lua download and unpack $(LUA_TARBALL): $(Q) echo "Downloading $(LUA_TARBALL)" $(Q) curl -O -L $(LUA_URL) $(Q) echo "Unpacking $(LUA_TARBALL) to $(LUA_UNPACK)" $(Q) tar -xvzf $(LUA_TARBALL) $(Q) mv lua-$(LUA_VERSION) $(LUA_UNPACK) # Download and unpack tarball if no git repo found ifeq ($(wildcard $(LUA_UNPACK)/.git),) context:: $(LUA_TARBALL) endif # Register core modules ifeq ($(CONFIG_INTERPRETER_LUA_CORELIBS),y) CSRCS += $(CORELIBS_SRCS) register:: # collect core module names from defines in lualib.h $(Q) while read -r line; do \ name=$$(expr "$$line" : '#define LUA_[[:upper:]]\+LIBNAME[[:space:]]\+"\([[:lower:]]\+\)"'); \ if [ ! -z $$name ]; then \ printf '{ "%s", luaopen_%s },\n' $$name $$name > registry$(DELIM)$$name.bdat; \ fi done < $(LUA_SRC)$(DELIM)lualib.h endif # Lua builtin module registry PDATLIST = $(strip $(call RWILDCARD, registry, *.pdat)) BDATLIST = $(strip $(call RWILDCARD, registry, *.bdat)) lua_main.c: luamod_list.h luamod_proto.h registry$(DELIM).updated: $(Q) touch registry$(DELIM).updated luamod_list.h: registry$(DELIM).updated ifeq ($(BDATLIST),) $(call DELFILE, luamod_list.h) $(Q) touch luamod_list.h else $(call CATFILE, luamod_list.h, $(BDATLIST)) endif luamod_proto.h: registry$(DELIM).updated ifeq ($(PDATLIST),) $(call DELFILE, luamod_proto.h) $(Q) touch luamod_proto.h else $(call CATFILE, luamod_proto.h, $(PDATLIST)) endif depend:: luamod_list.h luamod_proto.h clean:: $(call DELFILE, luamod_list.h) $(call DELFILE, luamod_proto.h) clean_context:: $(call DELFILE, $(PDATLIST)) $(call DELFILE, $(BDATLIST)) distclean:: clean_context clean $(call DELFILE, registry$(DELIM).updated) ifeq ($(wildcard $(LUA_UNPACK)/.git),) $(call DELDIR, $(LUA_UNPACK)) $(call DELFILE, $(LUA_TARBALL)) endif include $(APPDIR)/Application.mk