ASIC SoC2009. 7. 20. 09:52
이번에는 툴 체인을 빌드합니다.
언제나 그렇듯이 맥에서 빌드합니다.
빌드하다가 발생하는 에러는 이번 케이스의 경우에는 맥에 한정된 것으로 보입니다.
맥의 경우 폴더를 파일로 보여주기 때문에 (윈도우즈만 사용하시는 분은 이게 뭔말인지 잘 모르시겠지만.. )
발생하는 문제점입니다.

윈도우즈나 리눅스에서는 별다른 문제가 없을 것으로 생각됩니다.


(1) 툴 체인을 맥에서 빌드하기


hdl 관련된 툴 소스는 아래 명령어로 받을 수 있습니다.

git clone http://repo.or.cz/r/zpu.git

받으면 폴더는 아래와 같이 생성됩니다.


소스 코드는 다음과 같이 다운 받을 수 있습니다.
git clone git://www.ecosforge.net:8100/zpu/toolchain.git

다운 받으면 빌드를 하면 됩니다
다운 받은 폴더는 다음과 같은 구조로 되어 있습니다.

/toolchain/binutils
      /dejagnu
              /gcc
              /gdb
              /testresult

입니다.

빌드는 toolchain에서.. build.sh로 하면 됩니다.
이넘을 아예 제공해주더군요
이넘은 Binutils와 GCC를 빌드해줍니다.
GDB는 따로 빌드해야 합니다.

빌드를 하면 다음과 같은 오류가 발생합니다.


1.  binutils/bfd


configure: error: installation or configuration problem: C compiler cannot create executables.

make: *** [configure-bfd] Error 1


C 컴파일러가 워킹을 하지 못해서 발생한 오류입니다.


추적하여 가면 다음과 같은 명령어에서 동작을 하지 못함을 알 수 있습니다.


 gcc -o conftest.dSYM -g -O2   conftest.c  1>&5


중간에 conftest.dSYM을 만들어 내는데 이것이 문제입니다.


log 파일을 보면

checking for executable suffix

에서 dSYM을 찾아 붙입입니다.


테스트를 위해서 덤프 코드를 넣어서 수행해보면 아래와 같은 사항을 확인할 수 있습니다.


checking for executable suffix... (cached) .dSYM

[4] .dSYM


그럼 문제는 .dSYM이 만들어지는 것에 있네요.. 이것은 MAC에서 사용하는 파일-폴더 확장자입니다.


이 코드는 bfd/configure : 2441라인에서 시작하는 부분에 해당합니다.


코드를 확인해보면

시그윈이거나 윈도우즈 일때는 .exe를 붙이고

아닐때는 스크립트에 의해서 찾아서 붙이도록 되어 있습니다.


일일이 코드 고치기도 귀찮으니까

그냥 exeext 를 강제로 “”로 매핑시켜 버립니다.


그러면 컴파일이 진행됩니다.

진행되면서 같은 오류가 발생한는데 그때마다 강제 매핑을 하고 진행하면 됩니다.

몇군데 매핑시켜놓고 진행하면 mac에서도 잘 컴파일이 됩니다.

- 4군데 정도 되네요..


2.gcc를 빌드하다가..

..........

vmodsi4.o libgcc/./_mulsi3.o libgcc/./_xordi3.o libgcc/./unwind-dw2.o libgcc/./unwind-dw2-fde.o libgcc/./unwind-sjlj.o libgcc/./gthr-gnat.o libgcc/./unwind-c.o libgcc/./_eprintf.o libgcc/./__gcc_bcmp.o

make[2]: zpu-elf-ar: Command not found


에서.. 에러가 발생합니다.


env.sh를 실행을 시켰는데 아닌것 같습니다.

확인해 보니 실행하는게 아니고 source  하는거네요


source env.sh


로 해서 매핑시키고 다시 환경 변수를 확인해 보니 잘 들어갑니다.


set

.......


PATH=/sw/bin:/sw/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin:/usr/X11R6/bin:/Users/kevinim/Desktop/zylin/toolchain/toolchain/install/bin

......

다시 컴파일 하면 됩니다.





(2) 컴파일러 테스트


간단한 C 코드를 만들어서 테스트를 확인해 보도록 하겠습니다.

코드는 아래와 같습니다.

#include <stdlib.h>

main()
{
  printf("GUNDAM forever!!");
}

컴파일하여 어셈블러를 만들어보겠습니다.

Macintosh:test1 kevinim$ zpu-elf-gcc -S -O2 test.c


어셈블러 파일은 아래와 같습니다.

        .file   "test.c"
        .section        .rodata.str1.4,"aMS",@progbits,1
        .balign 4;
.LC0:
        .string "GUNDAM forever!!"
.text
        .globl  main
        .type   main, @function
main:
        im -1
        pushspadd
        popsp
        im .LC0
        storesp 4
        impcrel (printf)
        callpcrel
        loadsp 4
        im _memreg+0
        store
        im 3
        pushspadd
        popsp
        poppc
        .size   main, .-main
        .ident  "GCC: (GNU) 3.4.2"

Posted by GUNDAM_IM