Embedded2010.04.22 21:12
GCC4.5.0이 발표되었습니다.

가장 큰 특징은 Link Time Optimization입니다. 이전에는 모듈 단위의 컴파일에서 최적화를 수행할 수 있었는데 이제는 모듈들을 링크해서 묶을때에도 최적화를 시킬 수 있습니다.  이것에 의해서 성능과 크기에 대한 최적화를 얻을 수 있다고 합니다.
LD로 메모리 올릴떄는 최적화가 되진 않을 것 같지만, 여러개의 모듈들을 하나의 Static으로 만들떄는 최적화가 될 것 같습니다.  

두번째 최적화 포인트는 루프 최적화입니다. 중첩 루프에 대한 최적화 방안인 Polytope 모델을 적용했습니다.
- 어려워서 패스~~

이에 관해서는 아래 링크를 참조하시기 바랍니다.
http://en.wikipedia.org/wiki/Polytope_model


버그 수정 본은 2010년 7월경에 4.5.1로 내놓을 예정이라고 하네요
빠르기도 하시지~

GUNDAM


-------

The Free Software Foundation and the GNU Compiler Collection (GCC)
development team have released GCC 4.5.0.  This release is a major
upgrade to the compilers, with a particular focus on the performance
of the generated code.  The developers have measured performance
improvements of 5% to 10% on high-performance computing benchmarks.
(Of course, results vary depending on choice of CPU, benchmark, and
optimization options.)

GCC 4.5.0 is now capable of "link-time optimization".  Traditionally,
most C and C++ compilers (including GCC) have only been able to
optimize within a single source file or "module".  GCC was therefore
unable to take advantage of optimization opportunities that required
knowledge about multiple modules.  This limitation has been removed in
GCC 4.5.0.  This optimization can provide significant increases in
performance and equally significant reductions in code size.

In addition, GCC 4.5.0 has improved loop optimization infrastructure.
This infrastructure, based on an advanced "polyhedral" model for
optimization, allows GCC to perform more advanced loop optimizations.
In the future, this infrastructure will be tuned and used more heavily.

GCC 4.5.0 also features improvements for a wide variety of specific
architectures, including support for recent CPUs using the ARM, AVR,
ColdFire, MIPS, Power, SuperH, and x86 architectures.  GCC also
generates better debug information for optimized code, including
information about the value of variables that have been optimized
away.  And, of course, a wide variety of defects in all parts of the
compiler (ranging from language conformance to code-generation) have
been corrected.

Refer to gcc.gnu.org:

 
http://gcc.gnu.org/gcc-4.5/changes.html

for more information about this release.

GCC 4.5.1, with corrections for any critical defects reported in GCC
4.5.0, is expected in July, 2010.

As always, a vast number of people contributed to this GCC release --
far too many to thank individually!  

--
Mark Mitchell
CodeSourcery

Posted by GUNDAM_IM
TAG 4.5, GCC
ASIC SoC2009.12.17 13:17
오래간만의 컴파일러 빌드입니다.

1) binutils  설치하기


우선 binutils를 다운 받습니다.
커맨드는 아래와 같습니다.

cvs -z 9 -d :pserver:anoncvs@sourceware.org:/cvs/src login
{enter "anoncvs" as the password}
cvs -z 9 -d :pserver:anoncvs@sourceware.org:/cvs/src co binutils
  

빌드는 아래와 같이 합니다.

mkdir build
cd build
 ../binutils-2.20/configure  --target=mips-elf --prefix=/Volumes/ZGUNDAM/usr/lcao --with-gnu-as --with-gnu-ld
make all
make install

설치가 끝나고 확인하면 아래와 같습니다.

GUNDAMMACPRO:build kevinIm$ ls /Volumes/ZGUNDAM/usr/local/bin/
mips-elf-addr2line      mips-elf-ld             mips-elf-ranlib         mips-elf-strip
mips-elf-ar             mips-elf-nm             mips-elf-readelf
mips-elf-as             mips-elf-objcopy        mips-elf-size
mips-elf-c++filt        mips-elf-objdump        mips-elf-strings

패스가 추가되어야 하기 때문에

export PATH=$PATH:/Volumes/ZGUNDAM/usr/local/bin

으로 미리 추가해 둡니다.

2. gcc를 빌드하기



에서 gcc 최신 버전을 다운 받습니다. 이 글을 쓰는 시점에서는 4.4.2입니다.

다운받아서 압축을 풀고 빌드를 합니다.

mkdir build
cd build
../gcc-4.4.2/configure --target=mips-elf --without-headers --with-gnu-as --with-gnu-ld --disable-shared --prefix=/Volumes/ZGUNDAM/usr/local/ --with-newlib --disable-libssp

그러면 아래와 같은 오류가 발생합니다.

....
checking for correct version of gmp.h... no
configure: error: Building GCC requires GMP 4.1+ and MPFR 2.3.2+.
Try the --with-gmp and/or --with-mpfr options to specify their locations.
Copies of these libraries' source code can be found at their respective
hosting sites as well as at ftp://gcc.gnu.org/pub/gcc/infrastructure/.
.......

GMP 4.1과 MPFR2.32 이상 버전이 필요하다는 의미입니다.
MAC에서는 소스를 가지고 와서 빌드하는 것과 fink등을 이용해서 다운 받는것이 가능합니다.
여기선 그냥 다운 받는것으로 하고 진행합니다.

sudo port install gmp
--->  Fetching gmp
--->  Attempting to fetch gmp-4.3.1.tar.bz2 from ftp://ftp.dti.ad.jp/pub/GNU/gmp
--->  Verifying checksum(s) for gmp
--->  Extracting gmp
--->  Applying patches to gmp
--->  Configuring gmp
--->  Building gmp
--->  Staging gmp into destroot
--->  Installing gmp @4.3.1_1
--->  Activating gmp @4.3.1_1
--->  Cleaning gmp

GUNDAMMACPRO:build kevinIm$ sudo port install mpfr
--->  Fetching lzmautils
--->  Attempting to fetch lzma-4.32.7.tar.gz from http://distfiles.macports.org/lzmautils
--->  Verifying checksum(s) for lzmautils
--->  Extracting lzmautils
--->  Configuring lzmautils
--->  Building lzmautils
--->  Staging lzmautils into destroot
--->  Installing lzmautils @4.32.7_1
--->  Activating lzmautils @4.32.7_1
--->  Cleaning lzmautils
--->  Fetching mpfr
--->  Attempting to fetch patch01 from http://distfiles.macports.org/mpfr/2.4.1
--->  Attempting to fetch patch02 from http://distfiles.macports.org/mpfr/2.4.1
--->  Attempting to fetch patch03 from http://distfiles.macports.org/mpfr/2.4.1
--->  Attempting to fetch patch04 from http://distfiles.macports.org/mpfr/2.4.1
--->  Attempting to fetch mpfr-2.4.1.tar.lzma from http://distfiles.macports.org/mpfr/2.4.1
--->  Verifying checksum(s) for mpfr
--->  Extracting mpfr
--->  Applying patches to mpfr
--->  Configuring mpfr
--->  Building mpfr
--->  Staging mpfr into destroot
--->  Installing mpfr @2.4.1-p4_1
--->  Activating mpfr @2.4.1-p4_1
--->  Cleaning mpfr


그러면 설치가 된다. 설치된 위치는 /opt/local입니다.
이 위치를 반영하여서 다시 아래와 같이 커맨드를 넣습니다.

GUNDAMMACPRO:build kevinIm$ ../gcc-4.4.2/configure --target=mips-elf --without-headers --with-gnu-as --with-gnu-ld --disable-shared --prefix=/Volumes/ZGUNDAM/usr/local/ --with-newlib --disable-libssp --with-gmp=/opt/local --with-mpfr=/opt/local  --enable-languages="c"

make all

그러면 한참 컴파일을 합니다.

그러다가 다음과 같은 오류를 냅니다.

gcc  -g -O2 -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE  -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wcast-qual -Wold-style-definition -Wmissing-format-attribute   -DHAVE_CONFIG_H  -o cc1-dummy c-lang.o stub-objc.o attribs.o c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o c-convert.o c-aux-info.o c-common.o c-opts.o c-format.o c-semantics.o c-ppoutput.o c-cppbuiltin.o c-objc-common.o c-dump.o c-pch.o c-parser.o  c-gimplify.o tree-mudflap.o c-pretty-print.o c-omp.o dummy-checksum.o \
          main.o  libbackend.a ../libcpp/libcpp.a ../libdecnumber/libdecnumber.a ../libcpp/libcpp.a ./../intl/libintl.a -liconv  ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a   -L/opt/local/lib -L/opt/local/lib -lmpfr -lgmp
Undefined symbols:
  "_iconv_close", referenced from:
      __cpp_destroy_iconv in libcpp.a(charset.o)
      __cpp_destroy_iconv in libcpp.a(charset.o)
      __cpp_convert_input in libcpp.a(charset.o)
      __nl_free_domain_conv in libintl.a(loadmsgcat.o)
  "_iconv", referenced from:
      _convert_using_iconv in libcpp.a(charset.o)
      _convert_using_iconv in libcpp.a(charset.o)
......


이 오류는 다음과 같이 커맨드를 넣어서 해결한다.

sudo port deactivate libiconv
/sw/bin/fink update libgettext3-dev

이후에 make를 하면 잘 진행된다.

make all
make install

테스트를 하면

GUNDAMMACPRO:build kevinIm$ mips-elf-gcc --help
Usage: mips-elf-gcc [options] file...
Options:
  -pass-exit-codes         Exit with highest error code from a phase
  --help                   Display this information
  --target-help            Display target specific command line options
  --help={target|optimizers|warnings|params|[^]{joined|separate|undocumented}}[,...]
                           Display specific types of command line options
  (Use '-v --help' to display command line options of sub-processes)
  --version                Display compiler version information
  -dumpspecs               Display all of the built in spec strings
  -dumpversion             Display the version of the compiler
  -dumpmachine             Display the compiler's target processor
  -print-search-dirs       Display the directories in the compiler's search path
  -print-libgcc-file-name  Display the name of the compiler's companion library
  -print-file-name=<lib>   Display the full path to library <lib>
  -print-prog-name=<prog>  Display the full path to compiler component <prog>
  -print-multi-directory   Display the root directory for versions of libgcc
.......

3) Newlib 컴파일 하기

다운로드는 다음 커맨드로 받습니다.
  cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src login
  {enter "anoncvs" as the password}
  cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src co newlib

../src/configure --target=mips-elf -prefix=/Volumes/ZGUNDAM/usr/local --with-gnu-as --with-gnu-ld

이후에

make all
make install

을 하면 됩니다.


확인은 아래와 같이 합니다.
GUNDAMMACPRO:build kevinIm$ ls /Volumes/ZGUNDAM/usr/local/mips-elf/lib/

cfe.ld          ddb.ld          ldscripts       libidt.a        libnullmon.a    pcrt0.o
crt0.o          el              libc.a          liblsi.a        libpmon.a       pmon.ld
crt0_cfe.o      idt.ld          libcfe.a        libm.a          lsi.ld          soft-float
ddb-kseg0.ld    idtecoff.ld     libg.a          libnosys.a      nullmon.ld
GUNDAMMACPRO:build kevinIm$



 

'ASIC SoC' 카테고리의 다른 글

Sound Effect Processor  (0) 2010.02.01
[SC] Structure  (0) 2010.01.18
[MIPS] OSX에서 MIPS C Compiler를 빌드하기  (0) 2009.12.17
PERL TIP  (0) 2009.12.05
Timing Chart  (0) 2009.11.08
SystemC에서 main() 함수 넣기  (0) 2009.11.04
Posted by GUNDAM_IM
ASIC SoC2009.07.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
ASIC SoC2009.07.13 20:50

(0) 동기


   최근에 작은 프로세서에 대해서 검토해 봤습니다.
   조건은
   - 작아야 하며,
   - 그래도 C가 지원되에어 하며
   - AHB 정도는 나오거나 쉽게 붙을 수 있어야 한다
   - 소스 코드를 구할 수 있어야 하며
  - 라이센스에서 GPL이 없는 것이어야 한다는 것입니다.
 
   좀 조건이 까다로운가 싶기도 하네요.. 하지만
  저런 조건이 되어야 이리저리 사용할 수 있습니다.

  이리저리 찾다가 생각보다 작은 프로세서 하나를 찾았습니다. ZPU입니다.
  잘 아시겟지만, 오픈코아에 있는 프로세서 입니다.
  사실 저도 거기에 있는줄은 알았지만,  오픈코아의 특성상 반신반의 하였습니다.
  엔지니어의 원칙,
       내가만든 코드도 안믿는데 남이 만든 코드를 믿겠느냐. 라는.. 불신론에 가까운 생각을..
  가지고 있어서..
  우연히 다른 프로젝트를 검토하다가 외국 모 회사의 개발 환경을 검토하는 중에 해당 프로세서를 사용한 예제를 주고 있는 것을 발견하고  유심히 한번 보았습니다.
 

(1) 라이센스


  GPL 라이센스 문제는 생각보다 복잡합니다.
  사용상에 아무런 제약이 없지만, 문제는 링크된 모든 코드를 오픈해야 한다는 점 때문입니다.
  프로그램상의 링크된 코드를 하드웨어로 재 해석한다면 붙어있는 모든 IP를 의미합니다.
  - 아직 이부분에 대해서는 판례나 정보가 정확하게 정의된 것이 없어서 구체적으로 어떻게까지
    공개되어야 하는지 명확하지가 않습니다.
    인터넷에서도 이에 대해서 많은 토론을 진행하고 있습니다.

  개인으로 할때야 아무런 문제가 없지만
  회사차원에서 할 때에는 이런 GPL이 적용된 코드를 사용하면,
  자사 설계 아이피를 모두 오픈해야 하는 곤란한 문제가
  발생합니다.  그래서 GPL 라이센스가 붙은 IP를 사용하는 것은 상당히 조심스러워집니다.

  예전에 OpenCore 프로세서도 발표는 GPL로 하였지만, 저자가 적용한 라이센스의 의미는 모두 사용하라는 것이지 모두 공개하라는 의미는 아니였다는 글을 포스팅한적도 있습니다. 하지만, 저자가 회사를 만들면서, 공개에 관련된 모든 글들이 슬그머니 사라지면서, 그 글도  슬그머니 사라져 버렸죠.

  스팍 T1을 잘라서 만든 SRISC도 이 GPL을 따라갑니다.
  - 만드신 분들도 크게 돈을 목적으로 하지 않는것 같아서  그분들은 크게 문제는 없습니다만,...

  그래서 최소한의 조건은 BSD라이센스여야 한다는 점입니다.
  - 사용은 공짜로 , 링크된 부분은 공개는 안해도 되는 라이센스 조건입니다.

  이번에 찾은 ZPU는 Architecture는 GPL이어서 만약 아키텍쳐에 대한 수정이 가해지면
  모두 공개하여야 합니다. 대신에 코드에 대해서는 BSD라이센스를 사용하여서 사용상에
 큰 문제인 링크된 코드를  오픈하라는 문제는 없어지게 됩니다.
 

(2) 소스 코드 다운 받기


아래 사이트에서 다운 받을 수 있습니다.
http://opensource.zylin.com/zpudownload.html

툴은 리눅스와 윈도우/시그윈 버전을 다운 받을 수 있습니다.

프로세서 소스코드는

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

으로 다운 받을 수 있습니다.

툴 체인은 SRC로도 다운 받을 수 있습니다.
- 제 경우 맥을 쓰므로 새로 빌드를 하였습니다. 이것은 다음 번에 정리하도록 하겠습니다.

툴 체인은 toolchain 폴더로
프로세서는 zpu 폴더에 다운 받게 됩니다.

(3) ZPU Processor 폴더 구조


zpu /misc /arm7
/ddrsdram
/wishbone
/wip (EMPTY Folder)
/zpu /docs
관련 문서를 보관하는 폴더입니다.
zpu_arch.html 파일을 읽으면 됩니다.
하위 폴더로 presentation이 있는데, PT 자료를 포함합니다.
/hdl
프로세서 HDL 코드가 들어 있습니다.
자세한 폴더 내용은 다음 절에서 정리합니다.
/roadshow
예제 프로그램들이 들어 있습니다.
/sw
시뮬레이터와 간단한 샘플 예제가 들어 있습니다.

(4) ZPU Architecture

ZERO Operand 아키텍쳐입니다.
쉽게 말씀드리면  JAVA 프로세서와 같은 Stack Based CPU입니다.
따라서 명령어는 8비트로 됩니다.


위의 코드를 보면 5를 스텍에 넣고
loadsp 20으로 하여서 SP+20의 값을 읽어서 스텍 최상층에 넣습니다.
다시 ADD 명령으로 2개의 최상층 스텍 값을 읽어서 더한 후에 다시 스텍에 넣습니다.

스텍에 계속 읽고 쓰므로 느리긴 하지만, 나름대로, 간편한 구조여서 프로세서의 크기를 줄이는데
일조를 합니다.

이런 아키텍쳐이므로 수학연산을 하기위해서 쓰는 것은 좀 무리가 있겠습니다.
다만, 간단한 제어용으로 사용하는데에는 좋을 것 같습니다.

사실 요즘은 맘만먹으면 구할 수 있는 프로세서가 많이 있습니다.

Altera의 NIOS,
Xilinx의 picoblaze등등

그런 상황에서 ZPU의 장점이 뭔지 생각해봐야 할 부분인듯 합니다.

좋은 점은 아주 작으므로, 초기 시스템 세팅에 필요한 동작을 수행할때 사용하면 좋을 것 같습니다.
최근에 모 프로젝트에 8051을 검토하였습니다만, 이정도 급이면 쓸만할 것 같습니다.

자료를 보면 eCOS도 포팅되어 있기 때문에 적당한 수준의 제어용 어플리케이션까지는
응용이 가능할것 같습니다. - 다만, uCOS-II가 더 낳지 않을까 생각합니다.

이런 프로세서가 타겟으로 하는 종류의 어플리케이션에서는 취향 문제가 더 크게 작용하게 마련입니다.
어떤 프로세서를 쓰더라도 다른 사람이 크게 관심을 가지지 않기 때문이죠

- 다음번에는 ZPU의 변형에 대해서 정리해보겠습니다.

Posted by GUNDAM_IM
Embedded2009.01.16 19:44

EISC 코드를 맥에 컴파일 하기


맥을 쓰는 사람의 귀찮은 점은 항상 이런거다.. 뭐든지 맥으로 컴파일하기를 만들거나 찾아야 한다는 점이다.


1) 일단 EISC 코드를 가지고 온다.

    ADC홈피에서 자료실에서 uCLinux 페이지에서 다운로드 받은 뒤에 적당한 폴더에 압축을 푼다.


2) eisc용 로컬 폴더를 만든다.

/Users/kevinIm/Documents/Projects/EISC/eisclocal


3) 이 폴더를 패스에 등록한다.

export PATH=$PATH:/Users/kevinIm/Documents/Projects/EISC/eisclocal


4) MAKE File에서 COMPILER_PREFIX의 폴더를 새로 만든 폴더로 등록을 한다.


5) make를 한다.

  

    오류 1) gettext가 필요하단다. 

You must install 'gettext' on your build machine


Fink로 확인해보자


  fink list get


Information about 2543 packages read in 0 seconds.

     gengetopt            2.21-1001       Generates getopt_long functions

     getopt-long-pm586    1:2.34.b3-12    Extended processing of command line options

 p   getopt-long-pm588                    [virtual package]

     getoptbin            1.1.4-2         GNU version of getopt(1)

 i   gettext              0.10.40-125     Message localization support

 i   ........


뭔가 나오는데 gettext  가 있다. 이넘을 설치한다.


   음 그런데 설치가 되어 있다. 생각해보니 당연한거다.. 맥인데.. 


그럼 Makefile에서 뭔가 잘못된거다..

요거 저거 보니까.. 


TARGETS:=host-sed

이 있다. EISC 측에서는 이걸 쓰나 뭔가 정의가 잘못 된것 같다. 아마 리눅스 타겟 만들면서 구분할려고 한것 같다. 일단 나는 리눅스 만들일이 없으므로 무시하구...


        TARGETS:=sed


으로 수정해서 다시 컴파일한다. 이번에는 한참 잘 진행한다.


오류 2) 컴파일하다가 오류가 난다.


               /Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829/gcc/config/host-linux.c

/Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829/gcc/config/host-linux.c: In function ‘linux_gt_pch_use_address’:

/Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829/gcc/config/host-linux.c:192: error: ‘MAP_ANONYMOUS’ undeclared (first use in this function)

/Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829/gcc/config/host-linux.c:192: error: (Each undeclared identifier is reported only once

/Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829/gcc/config/host-linux.c:192: error: for each function it appears in.)

make[2]: *** [host-linux.o] Error 1

make[1]: *** [all-gcc] Error 2

make: *** [/Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829-initial/.compiled] Error 2

GUNDAMMACPRO:AE32000C_gcc-3.4.5-v2.6.4 kevinIm$ 


잘 보시면.. 

‘MAP_ANONYMOUS 가 정의가 안되어 있다고 에러가 난다.

Host를 리눅스로 설정해놓고 컴파일해서 그렇단다.  슬픈 맥 사용자의 운명인듯..


이것은 /dev/zero를 가리키기 위한 값이다. 일종의 템프 값인데 Linux나 BSD계열은 가지고 있고 OSX계열은 이것을 가리키기 위해서

MAP_ANON을 사용한다. 


이것으로 대치하기로 한다.


테스트를 위해서 (잘 되면 그냥 넘어가자.. 맥용 EISC 배포 시스템을 만들것도 아니니까..)

                코드는 아래처럼 간단하게 고친다.


#ifndef __GUNDAM__

#       define __GUNDAM__

#endif


#ifndef __GUNDAM__

  addr = mmap (base, size, PROT_READ | PROT_WRITE,

               MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);

#else

  addr = mmap (base, size, PROT_READ | PROT_WRITE,

               MAP_PRIVATE | MAP_ANON, -1, 0);

#endif


아래와 같이 수정한 뒤에 컴파일하면 .. 음 잘넘어가는군.. 


오류 3) 역시 컴파일하다가 오류..

이번에 좀 넘어가다가 다시 오류가 난다. 음...


libgcc2.c:2:unknown section type: @progbits


컴파일러의 오류로 보여진다.

일단 에러난 부분을 짤라서 디스어셈블 해본다.


어셈블러 등을 못찾는 에러다 이럴수가.. Make 하면 어셈블러도 설치되는게 아니었단 말인가 ?

후덜덜.. 

여기까지 하고.. 보니.. 이넘이.. GCC만 배포하는것 같네요 쩝...


항상 S/W툴은 텅빈 PC에 한번 설치해보고 나서.. 배포해야 합니다.

안그러면 자신의 환경에 있지만 유저의 환경에는 없는 프로그램이 반드시 1개 이상 나옵니다.

저같은 맥 유저는 더 슬퍼집니다.


컴파일러는 소스로.. 어셈블러는 CYGWIN으로 배포하니.. 음.. 어쩔까요..  이것을. .

다시 기다려야 할듯.. 빨랑  EISC 사이트가 오픈되어야 하는데.. 


        다시 포팅 시도는 ASM소스를 배포하면 그떄 시도해 보겠습니다. 지금은 그냥 PASS.....



'Embedded' 카테고리의 다른 글

LVDS Owner’s Manual [3]  (0) 2009.05.16
LVDS Owner’s Manual [2]  (0) 2009.05.15
LVDS Owner’s Manual [1]  (0) 2009.05.14
인텔 컴파일러 최적화 기능 테스트  (0) 2009.03.23
EISC 코드를 맥에 컴파일 하기  (2) 2009.01.16
2008년 10가지 Embedded Design 컬럼  (0) 2009.01.03
Posted by GUNDAM_IM
TAG EISC, GCC, 포팅