
1. 개요
이 문서는 루아 패키지에서 제공하는 소스와 별도로
필요한 패키지만 모아서
루아 인터프린터를 재 구축 하는 과정을 기록한 문서이다.
※ 이 게시물에는 컴파일이 가능하도록 정리한 압축된 파일이 있다.
2. 이전 상황 재 검토
이전에는 패키지의 소스 트리안에서 ARM 용 LUA 인터프린터를 컴파일 하여
lua 실행 파일을 만들었다.
이 방법을 통한 lua 실행 파일을 추출하는 것도 괜찮지만
지금까지 사용하고 있는 Makefile을 사용하여 재 구축하면
필요한 경우 lua 표준 인터프린터 안에 다른 기능을 추가 할수 있다.
이런 저런 이유로 따로 패키지와 다르게 소스를 구축하고 컴파일 하고
주의 사항을 알아 본다.
3. 환경에 대한 조건
다음과 같은 디렉토리 작업 환경을 구축했다고 가정한다.
주 작업 디렉토리는
/project/lua/sample_lua_arm/
라고 가정한다.
이 디렉토리 밑에는 다음과 같은 디렉토리가 있다고 가정한다.
1) /project/lua/sample_lua_arm/lua_include
: LUA 헤더 파일 모음
2) /project/lua/sample_lua_arm/lua_lib
: LUA 라이브러리 소스 모음
3) /project/lua/sample_lua_arm/lua_samples/100_lua_interprint/
: lua 라는 인터프린터를 생성할 작업 디렉토리
3.1 lua_include 디렉토리 파일 리스트
이 디렉토리에는 패키지에서 다음과 같은 파일들을 옮겨 놓는다.
lapi.h lcode.h ldo.h lgc.h llimits.h lobject.h
lparser.h lstring.h ltm.h luaconf.h lundump.h lzio.h
lauxlib.h ldebug.h lfunc.h llex.h lmem.h lopcodes.h
lstate.h ltable.h lua.h lualib.h lvm.h
3.2 lua_lib 디렉토리 파일 리스트
이 디렉토리에는 패키지에서 다음과 같은 파일들을 옮겨 놓는다.
lapi.c lcode.c ldo.c lgc.c llex.c
loadlib.c loslib.c lstring.c ltablib.c lua.o
lvm.c lauxlib.c ldblib.c ldump.c linit.c
lmathlib.c lobject.c lparser.c lstrlib.c ltm.c
luac.c lzio.clbaselib.c ldebug.c lfunc.c liolib.c
lmem.c lopcodes.c lstate.c ltable.c lua.c
lundump.c print.c
3.3 100_lua_interprint 디렉토리 파일 리스트
이 디렉토리의 내용은 재 구축해야 하는데
lua 인터프린터 소스는 이미 패키지에서 lua_lib 에 lua.c 라는
이름으로 포함되어 있으므로 소스는 따로 작성할 필요가 없이
Makefile 만 이후에 소개하는 형식으로 만들어 주면된다.
4. Makefile
Makefile 을 만들떄 주의 할 것은
동적 링크가 포함되게 하는 옵션이다.
컴파일 옵션과 링크 옵션이 있다.
컴파일 옵션은
CFLAGS += -Wall -O2 -g -DLUA_USE_LINUX
와 같이 -DLUA_USE_LINUX 옵션을 포함 시켜야 한다.
링크 옵션은
LIBS = -lm -ldl
와 같이 공유 라이브러리를 사용하도록 해야 한다.
==[Makefile]===================================================
CROSS_PREFIX = arm-linux
TARGET = lua
TARGET_NFS = /nfs/lua
C_SRCS =
C_SRCS += ../../lua_lib/lua.c
# LUA Support -- CORE
C_SRCS += ../../lua_lib/lapi.c
C_SRCS += ../../lua_lib/lcode.c
C_SRCS += ../../lua_lib/ldebug.c
C_SRCS += ../../lua_lib/ldo.c
C_SRCS += ../../lua_lib/ldump.c
C_SRCS += ../../lua_lib/lfunc.c
C_SRCS += ../../lua_lib/lgc.c
C_SRCS += ../../lua_lib/llex.c
C_SRCS += ../../lua_lib/lmem.c
C_SRCS += ../../lua_lib/lobject.c
C_SRCS += ../../lua_lib/lopcodes.c
C_SRCS += ../../lua_lib/lparser.c
C_SRCS += ../../lua_lib/lstate.c
C_SRCS += ../../lua_lib/lstring.c
C_SRCS += ../../lua_lib/ltable.c
C_SRCS += ../../lua_lib/ltm.c
C_SRCS += ../../lua_lib/lundump.c
C_SRCS += ../../lua_lib/lvm.c
C_SRCS += ../../lua_lib/lzio.c
# LUA Support -- LIB
C_SRCS += ../../lua_lib/lauxlib.c
C_SRCS += ../../lua_lib/lbaselib.c
C_SRCS += ../../lua_lib/ldblib.c
C_SRCS += ../../lua_lib/liolib.c
C_SRCS += ../../lua_lib/lmathlib.c
C_SRCS += ../../lua_lib/loslib.c
C_SRCS += ../../lua_lib/ltablib.c
C_SRCS += ../../lua_lib/lstrlib.c
C_SRCS += ../../lua_lib/loadlib.c
C_SRCS += ../../lua_lib/linit.c
INCLUDES += -I.
INCLUDES += -I/usr/local/include
INCLUDES += -I/usr/$(CROSS_PREFIX)/include
INCLUDES += -I../../include
INCLUDES += -I../../lua_include
LDFLAGS += -L../../lua_lib/
LDFLAGS += -L/usr/$(CROSS_PREFIX)/lib
LIBS = -lm -ldl
CFLAGS += $(INCLUDES)
CFLAGS += -Wall -O2 -g -DLUA_USE_LINUX
ARFLAGS = rs
#---------------------------------------------------------------------
CC = $(CROSS_PREFIX)-gcc
AR = $(CROSS_PREFIX)-ar rc
AR2 = $(CROSS_PREFIX)-ranlib
RANLIB = $(CROSS_PREFIX)-ranlib
LD = $(CROSS_PREFIX)-ld
NM = $(CROSS_PREFIX)-nm
STRIP = $(CROSS_PREFIX)-strip
OBJCOPY = $(CROSS_PREFIX)-objcopy
CP = cp
MV = mv
#--------------------------------------------------------------------
C_OBJS = $(C_SRCS:%.c=%.o)
%.o:%.c
@echo "Compiling $< ..."
$(CC) -c $(CFLAGS) -o $@ $<
all : $(TARGET)
cp $(TARGET) $(TARGET_NFS)
$(TARGET) : $(C_OBJS)
$(CC) $(LDFLAGS) $(C_OBJS) -o $@ $(LIBS)
dep :
$(CC) -M $(INCLUDES) $(C_SRCS) > .depend
clean:
rm -f *.bak
rm -f *.map
rm -f *.o
rm -f $(C_OBJS)
rm -f $(TARGET) core
distclean: clean
rm -rf .depend
ifeq (.depend,$(wildcard .depend))
include .depend
endif
==[Makefile]===================================================
5. 컴파일과 실행
컴파일은 다음과 같이 수행하면 된다.
# make clean
# make
이 컴파일 결과로 lua 실행파일이 생성된다.
이 파일을 보드에 옮겨 놓고 실행하면 된다.