2009-10-08 8 views
1

건배, 회사의건물 유니버설 바이너리 -

단일 컴파일러 자식 프로세스를 강제로, 우리는 우리의 게임의 포트를 만드는, 우리는 PythonOgre, 파이썬 Ogre3d의 래퍼를 컴파일 할 필요가있다. 엄청난 양의 코드, 특히 생성 된 래퍼 코드입니다. Mac mini에는 1GB RAM이 있습니다.

i386 버전을 구축했습니다. 우리는 단지 1GB의 RAM을 가지고 있기 때문에, 빌드 시스템이 오직 하나의 코어 만 사용하도록했습니다. 동시에 실행되는 두 번째 프로세스는 가상 메모리로 좋은 여행을 떠났습니다.

게시자가 PPC를 지원하기 때문에 유니버설 바이너리를 생성해야합니다. 유니버설 바이너리 빌드를 용이하게하기 위해 우리는 CFLAGSCXXFLAGS을 수정하여 래퍼 코드를 컴파일 할 때 -arch i386 -arch ppc을 포함 시켰습니다 (Ogre3d 자체는 이미 유니버설 바이너리로 보입니다).

그러나 Apple은 유니버설 바이너리를 만들 때 두 코어를 모두 사용하기로 결정했기 때문에 시스템이 뒤집어 져서 죽습니다. (어쨌든, 0.9-1.4 %의 CPU 사용량으로 크롤링합니다.) 일반적으로 1GB Mac Mini에서 우리는이 점을 높이 평가할 수 있지만 이것이 개발을 완전히 차단합니다.

새로운 빌드 머신을 얻는 것, PPC 지원을 포기하고 PPC 전용 빌드를 만드는 것 외에도 GCC의 두 번째 동시 프로세스 생성을 막는 것이 유일한 방법입니다.

어떻게 생각 하나?

+0

더 나은 빌드 머신을 얻거나 적어도 메모리를 늘리는 것이 더 저렴 할 것입니다. – Mark

+0

@Mark, Intel Mac Minis 용 RAM의 4GB 키트는 평판 좋은 타사 공급 업체로부터 약 90 달러의 비용이 듭니다. (미국, 그러나 나는 그들이 크로아티아에서 훨씬 더 많은 비용을 들이게 될 것이라고 생각하지 않습니다.) - 확실히 가장 좋은 방법은 IMHO입니다. –

+0

나는 당신들이 "더 싸다"라는 말을 잘 모르겠다. 이것은 한 번 빌드하고 대개 큰 래퍼를 만들지 않을 것이다. :-) 그럼에도 불구하고 이것은 싸구려이기 때문에 내가 제안한 첫 번째 것이 아니지만 빨리 할 수 ​​있기 때문에. –

답변

2

Apple의 GCC 드라이버 (해당 -arch 옵션을 지원하고 자식 프로세스를 실행하는 드라이버)의 출처를 확인 했으므로 선택할 수있는 옵션이나 환경 변수가 없습니다. (; 페이지의 끝 there에서 예)와 driverdriver.c 때문에 프로세스가 아니라 병렬보다 (순차적으로 시작되는 파일을 수정

  • 다운로드 애플 드라이버 :

    난 당신이 왼쪽 볼 수있는 유일한 옵션

    은)
  • 기반으로 별도의 I386과 파워를 수행하고

난이 도움이되기를 바랍니다 lipo 사용하여 최종 빌드 객체에게 등 (실행 파일, 공유 라이브러리)에 가입!

+0

감사! 필자는 드라이버 코드 (darwin-driver.c)를 살펴 봤지만 fork()에 대한 호출을 빨리 찾을 수 없으므로 그렇게하지 않을 것입니다.다른 한편, 어제 우리는 신속하게 ppc 빌드를 만들었고 lipo는 사용하기가 다소 단순 해 보였으므로 i386과 ppc .so를 lipo와 병합합니다. 고맙습니다! –

+2

드라이버는 fork()를 직접 호출하지 않고 시스템 고유의 비헤이비어를 숨기는 pexecute()라는 함수를 호출합니다 (GCC는 Windows와 같은 POSIX가 아닌 플랫폼에서도 작동합니다!이 라이브러리는 libiberty입니다). GCC). –

1

하나의 코어를 끄기 만하면됩니까? 분명히 Apple Developer Tools (XCode 외)를 설치하면 프로세서 시스템 환경 설정 패널이 제공되어 하나의 코어를 끌 수 있습니다. 이 테스트하려고했지만 Xcode 설치가 어떤 이유로 실패했습니다 ...

편집 : 나는 얼마 전이지만, 그냥 생각났다. 왜 -march = i386 및 -march = ppc를 별도로 빌드 한 다음 lipo를 사용하여 바이너리를 결합합니까?

+1

방금 ​​설치 했으므로 광고 된대로 작동합니다. 개발자 도구를 설치 한 후 prefPane을 설치하지 못하면 기본 위치에 dev 도구를 설치 한 경우/Developer/Extras/PreferencePanes /에서 찾을 수 있습니다. –

+0

우리는 현재 PPC 전용 버전 (기한, 마감 시간)을 구축하고 있으므로 테스트 할 수 없습니다. 하지만 GCC는 단지 하나의 코어가 활성화되어 있고 두 번째 프로세스가 행복하게 생성된다는 사실에 대해 GCC가 아무런 도움이되지 않았기 때문에 이것이/Library/Application Support/HW Prefs/CPU Palette과 같은 역할을한다고 생각합니다. –