회사에서 하는 일을 기준으로 잊어먹지 않기위해 정리해 둡니다. ^^
기본적인 과정은 다음과 같다.
동일한 소스코드를 가지고, target 을 세개를 만든다.
1. i386 빌드를 위한 타켓 -> BSD Dynamic Library
2. PPC 빌드를 위한 타켓 -> BSD Dynamic Library
3. 위 두개 타겟을 가지고 lipo 를 이용한 스크립트를 실행시켜 universal binary 로 만들 타겟 -> Special Targets Aggregate
일단, MakeFile 에 있는 빌드 옵션들을 x-code 환경에 적어줘야 한다.
여기서 설명하는 x-code 버전은 3.0 을 기준으로 한다.
1. i386 타겟을 더블클릭한다.
2. Build -> Architectures -> Valid Architectures 항목을 i386으로 정해준다.
3. Build -> Build Locations -> Base SDK Path 값을 $(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk 으로 변경
4. Build -> Linking -> Other Linker Flags 값을
-Wl,-executable_path,/Users/jslee/Documents/DEV/FF-Extension/mozilla-u/build/ppc/dist/universal/xulrunner/XUL.framework/Versions/Current -lxpcomglue_s -lxpcom -lnspr4 -lplds4 -lplc4 -liconv
5. Build -> Search Paths -> Header Search Paths 값을 미리 컴파일한 "gecko sdk path"/include 경로를 적어준다. 이때 주의사항은 i386 이면 i386 gecko sdk path 를 적어주고, PPC 타겟이면 ppc gecko sdk path 를 적어준다.
6. Build -> Search Paths -> Library Search Paths 값을 미리 컴파일한 "gecko sdk path"/lib 경로와, 미리 universal binary 로 컴파일한 XUL.Framework 를 링크 시켜준다.
7. Build -> GCC 4.0 - Language -> Other C++ Flags 값에 -fshort-wchar 를 적어준다.
8. Build -> GCC 4.0 - Preprocessing -> Preprocessor Macros 값에 XP_UNIX=1 와 XP_MACOSX=1 값을 차례로 넣어준다.
이렇게 한후 하나씩 빌드해서 무리없이 빌드 되는것을 확인한다.
9. universal binary 로 만들 타겟 을 선택하여 new -> New Build Phase -> New Run Script Build Phase 실행
10. 9 에서 나오는 창에 script 란에 다음을 입력
lipo -create $TARGET_BUILD_DIR/libfpweblink-i386.dylib $TARGET_BUILD_DIR/libfpweblink-ppc.dylib -output $TARGET_BUILD_DIR/fpweblink.dylib
11. universal binary 로 만들 타겟 을 더블클릭하여 정보 창을 띄운다. 정보창에서 Direct Dependencies 에
- PPC Target
- i386 Target
두가지를 등록한다.
12. universal binary 타겟을 clean target 후 build 하면 의존성 걸려 있는 타겟들 부터 새로 빌드한후, universal binary 까지 만드는 것을 볼 수 있다.