2010년 8월 25일 수요일

A special character in MAKEFILE

본 문서는 Makefile의 특수문자의 의미에 대해서 기술 한다.

1. Makefile 특수 문자

 $@  현재 만들고 싶은 Output 이름
 $^  재료들의 이름

예)
===========================================================================
TARGET=spaghetti.bin
ELF_TARGET=spaghetti.elf
BINTOOL=fromelf
CC=tcc

$(TARGET): $(ELF_TARGET)
$(BINTOOL) -bin -o $@ $^              --------------> ①

$(ELF_TARGET): spaghetti.o manipulation.o
$(CC) -o $@ $^                             --------------> ②

spaghetti.o: spaghetti.c
$(CC) -c @^                                  --------------> ③

manupulation.o: manupulation.c
$(CC) -c @^                                  --------------> ④
===========================================================================

① $@ : spaghetti.bin
    $^  : spaghetti.elf
② $@ : spaghetti.elf
    $^  : spaghetti.o manipulation.o
③ $@ : spaghetti.o
    $^  : spaghetti.c
④ $@ : manipulation.o
    $^  : manipulation.c

2. 추가 특수 문자

"=" 와 ":="의 차이

TEMP := $(CC) temp
CC = tcc
위와 같은 문법으로 되어 있다면 TEMP에는 무엇이 들어 있을까요?
TEMP == temp 이와 같이 됩니다.

CC = tcc
TEMP := $(CC) temp
위와 같은 문법으로 되어 있다면 TEMP에는 무엇이 들어 있을까요?
TEMP == tcc temp 이와 같이 됩니다.

TEMP = $(CC) temp
CC = tcc
위와 같은 문법으로 되어 있다면 TEMP에는 무엇이 들어 있을까요?
TEMP == tcc temp 이와 같이 됩니다.

"?="와 "+="
CC?=tcc
CC+=gcc
CC?=cc

CC에는 값이 어떻게 들어 있는가?
CC == "tcc gcc"
이렇게 들어 있습니다.

이유는 ?=는 CC가 선언되어 있지 않으면 선언하는 것입니다.
+=는 공백을 포함하여 CC에 내용을 추가합니다.
따라서, 결과는 "tcc gcc"입니다.

@명령

all :
        @echo "It's me! make"
결과 :
        It's me! make

all :
        echo "It's me! make"
결과 :
        echo It's me! make
        It's me! make

2010년 8월 24일 화요일

Android build id

Android 의 build id는 아래 파일에서 확인 할 수 있다.

build id는 system image의 버전 정보이다.

 

android/build/core/build_id.mk:22:export BUILD_ID=FRF91


 

2010년 8월 23일 월요일

Change JAVA heap size in Android platform

Android 에서 Signing을 하다 보면, 아래와 같은 Error가 발생한다.

 

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
 at java.io.ByteArrayOutputStream.toByteArray(ByteArrayOutputStream.java:136)
 at com.android.signapk.SignApk.main(SignApk.java:481)

 

이 문제는 Java의 가상 메모리가 부족하여 발생하는 에러이다. 이를 해결 하기 위해서

 

/LINUX/android/build/tools/releasetools/common.py 파일의 SignFile 함수의 아래 부분들을 수정합니다.

(Heap 사이즈를 512mb에서 1024mb로 변경)

 

  cmd = ["java", "-Xmx512m", "-jar",
           os.path.join(OPTIONS.search_path, "framework", "signapk.jar")]


 

  cmd = ["java", "-Xmx1024m", "-jar",
           os.path.join(OPTIONS.search_path, "framework", "signapk.jar")]

 

 

 

2010년 8월 19일 목요일

THUMB Mode of ARM assembler code

ADR r0, THUMB+1

위에서 THUMB+1을 한 이유는
THUMB Mode와 ARM  Mode는 어짜피 2Byte와 4Byte이기 때문에 모든 주소가 짝수 값이다.
따라서, Branch할 때 THUMB와 ARM Mode를 구분하기 위해서 Branch하려는 주소가 홀수면 THUMB Mode, 짝수면 ARM Mode로 구분한다.

하지만, 실제로 실행 할때는 주소값에서 1을 뺀 짝수 값에서 실행을 하게 된다.
예를 들어, 0x1001로 Branch 했다면, 0x1000에서 THUMB Mode로 수행 하게 된다.
CPSR의 ARM/Thumb bit만 Thumb으로 설정한다.

2010년 8월 18일 수요일

iPad with iPhone

TangoRemote, TouchRummy, Scrabble, iBrainstorm, Camera A B, Transfer