리눅스 커널은 그 부피 만큼이나 다양한 gcc 옵션들을 사용하고 있었다.
커널을 분산 컴파일 하는데 있어서 이슈가 된 것들은 다음과 같다.
커널을 분산 컴파일 하는데 있어서 이슈가 된 것들은 다음과 같다.
문제 | 해결방법 |
dcc를 실행함으로써 생성되는 '-Wframe-larger-than=1024' 옵션 인식 불가 (gcc 4.4 이상에서 인식 가능) | dcc 내부의 fork() 사용을 사전에 파악한 후 옵션을 추가 생성하는 것으로 보이며, 실질적인 컴파일이 아닌 메시지가 dcc를 통해 실행되면 fork()하지 않고 즉시 exec()함으로써 옵션이 생성되지 않도록 함 |
dcc를 실행함으로써 생성되는 '-fno-strict-overflow' 옵션 인식 불가(gcc 4.4 이상에서 인식 가능) | dcc 내부의 fork() 사용을 사전에 파악한 후 옵션을 추가 생성하는 것으로 보이며, 실질적인 컴파일이 아닌 메시지가 dcc를 통해 실행되면 fork()하지 않고 즉시 exec()함으로써 옵션이 생성되지 않도록 함 |
dcc를 실행함으로써 생성되는 '-fno-dwarf2-cfi-asm' 옵션 인식 불가(gcc 4.4 이상에서 인식 가능) | dcc 내부의 fork() 사용을 사전에 파악한 후 옵션을 추가 생성하는 것으로 보이며, 실질적인 컴파일이 아닌 메시지가 dcc를 통해 실행되면 fork()하지 않고 즉시 exec()함으로써 옵션이 생성되지 않도록 함 |
소스파일이 일반적인 '*.c'의 형태가 아닌 '*.S'의 형태를 가짐으로써 agent 가 소스파일을 인식하지 못하고 get 하지 못하는 현상 | CreateMsg, MsgParser를 통해 종속성 검사를 실시하면서 오브젝트리스트, 헤더리스트를 생성하던 부분에 소스리스트도 함께 작성하도록 추가 및 변경하고 agent에게 소스리스트도 함께 전달, agent는 전달 받은 소스리스트를 가지고 소스파일을 get 함 |
'-Wp,-MD,kernel/.bounds.s.d' 옵션 내부의 '-MD'로 인한 종속성 분석 파악 불가 | 종속성 분석을 위한 메시지를 만들 때 '-W'로 시작하는 모든 옵션을 배제함 |
'-Wp,-MD,kernel/.bounds.s.d' 옵션에 의해 추가로 생성되는 파일(.bounds.s.d)이 종속성 분석에서 배제됨으로써, 이러한 경우에 리모트 컴파일을 하게 되면 그 파일을 찾을 수 없게됨 | '-Wp' 옵션은 뒤에 옵션리스트를 콤마를 사용하여 나열할 수 있다. 그리고 '-MD' 는 종속성을 분석하여 그 내용을 '*.d'의 형태로 생성하도록 하는 옵션인데, 단독으로 사용할 때가 있고 위와 같이 사용할 수도 있다. 단독으로 사용하게 되면 생성될 오브젝트파일 '*.o'로부터 파일 이름은 같게 하고 확장자만 바꾸어 '*.d'의 형태로 파일을 생성하게 되고, 위와 같이 사용하게 되면 '-MD,' 뒤에 선언한 이름으로 파일을 생성하게 된다. 그런데 커널 컴파일 시 거의 모든 gcc 커맨드라인에 위의 옵션이 붙어 있고 '*.o'와 '*.d'를 함께 생성하고 있다. agent가 '*.d'파일도 돌려 줄 수 있도록, 위와 같은 옵션을 분석하여 오브젝트리스트에 '*.d'도 포함하도록 하였다. |
'*.h'와 같은 헤더파일 뿐만이 아니라 '*.c'가 종속성이 걸려 있음으로써 agent가 무한대기하는 현상 | CMIMEServerCallback 에서 들어온 파일에 대해 agent로 통지할 때 '.c', '.o', '.cpp'를 제외하고 통지하던 부분을 모든 파일에 대해 통지하도록 수정 |
오브젝트 파일의 이름이 길어지면서 gui 모니터링 프로그램의 튕김 현상이 나타남 | 모니터링 프로그램 내부에서 변수가 메시지를 모두 담지 못하는 것으로 보인다. 잠정적으로 coordinator에서 메시지를 분할하여 보내도록 하였다. |
'Introduction > Histories' 카테고리의 다른 글
[dcc] tightvnc-1.3.10 불가 (0) | 2009.12.17 |
---|---|
[dcc] php.5.3.1 분산 컴파일 성공 (0) | 2009.12.16 |
[dcc] httpd.2.2.14(아파치 웹서버) 분산컴파일 성공 (0) | 2009.12.16 |
[dcc] samba.3.4.3 분산 컴파일 성공 (0) | 2009.12.11 |
[dcc] mysql.5.1 분산컴파일 성공 (0) | 2009.12.10 |