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 실행파일이 생성된다.
    이 파일을 보드에 옮겨 놓고 실행하면 된다.
    
  

C000_lua.gif