일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Objective C
- Magnify Anim
- embedd
- apns
- so file
- V8 Engine
- SO 파일
- Google V8 Engine
- apache
- Push
- PageControl
- ios framework
- sha1 convert hashkey
- 공인인증서 정보
- IMAGE
- IOS10
- android log dump
- ios
- 공인인증서 만료일
- apk 다운사이징
- Android
- appbarlayout
- FlexiblePageView
- Status Bar
- 인증서 정보 뽑아내기
- JavaScript Engine
- 안드로이드
- java
- v8 engine xcode build
- Android NDK시스템
- Today
- Total
caTea 블로그
V8 engine xcode build and embed 본문
구글 자바스크립트 엔진을 사용하여 이것저것 개발하기위해 개발환경을 만들어보자
한국어로 된 자료가 많이 없어서 내가 만든다.. (V8엔진 사이트가 불친절한것도 있는거같기두..)
필자가 개발한 환경
M1 Pro 노트북
Macos 13.0.1 벤츄라
Xcode 14.2
1. 개발 관련 구글 툴 받기
먼저 v8엔진 소스를 받기 전에 v8엔진 빌드 툴부터 받는다
터미널에서 아래 명령어를 실행한다
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git |
2. 환경변수 등록
이거 받고 환경변수로 등록해준다
.zprofile 파일 수정 후 터미널 재실행
PATH="/Users/abcdefg123456/workspace/v8engine/depot_tools:${PATH}" export PATH |
3. 구글 V8 Engine 소스코드 및 개발환경 받기
그 다음 적당한 디렉토리에 V8프로젝트를 받을 폴더 생성 해주고 아래 명령어 실행하면
공식사이트에서 하라는 명령어들을 모두 해준다 빌드 환경까지 내려받아주는듯 fetch 실행바이너리는 depot_tools에 있다
그래서 환경변수를 설정해주어야한다 내부적으로 gclient 실행까지 해주는듯하다
fetch v8 |
4. gm, v8gen 환경변수 등록
그다음 gm , v8gen 명령어를 수행해야 컴파일 빌드 스크립트를 만들어주는데 경로 찾아가기 귀찬으니까 환경변수로 등록하자
alias gm=/Users/abcdefg123456/workspace/v8engine/v8/tools/dev/gm.py alias v8gen=/Users/abcdefg123456/workspace/v8engine/v8/tools/dev/v8gen.py |
5. 임베디드용 컴파일 빌드 스크립트 생성
난 xcode에 맥용으로 엔진을 임베디드하여 사용할꺼기 때문에 아래 명령어로 생성한다 (메뉴얼에 이렇게 있더라..)
v8gen arm64.release.sample |
6. 컴파일 실행
ninja -C out.gn/arm64.release.sample v8_monolith |
7. 라이브러리 생성 완료
아래 경로 가보면 .a파일이 3개 생겼을꺼다
/Users/abcdefg123456/workspace/v8engine/v8/out.gn/arm64.release.sample/obj |
근데 문제가 발생했다
가져가 사용해보니 에러가 나데?
첫번째 문제
빌드가 정상적으로 되어서 라이브러리 파일을 프로젝트에 넣고 실행해보니 에러로그가 콘솔에 올라온다.
v8_enable_pointer_compression 이 플래그를 false로 해주어야 포인터 충돌이 안난다 공식문서에는 ios만 하라고 되어있는데
Macos에는 모두 넣어줘야한다
다시빌드했다..
/Users/abcdefg123456/workspace/v8engine/v8/out.gn/arm64.release.sample/args.gn 파일을 열어서 수정해준다
dcheck_always_on = false is_component_build = false is_debug = false target_cpu = "arm64" use_custom_libcxx = false v8_enable_i18n_support = false v8_monolithic = true v8_use_external_startup_data = false v8_enable_pointer_compression = false is_clang = true target_os = "mac" |
두번째 문제
아래 붉은색 소스에서 자꾸 앱 크래시가 난다
Fatal process OOM in Failed to reserve virtual memory for CodeRange
std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform(); v8::Platform *p = platform.get(); v8::V8::InitializePlatform(platform.get()); v8::V8::Initialize(); v8::Isolate::CreateParams create_params; create_params.array_buffer_allocator = v8::ArrayBuffer::Allocator::NewDefaultAllocator(); v8::Isolate* isolate = v8::Isolate::New(create_params); |
문제는 v8엔진이 시스템 로우 레벨단 메모리 핸들링을하는데 애플이 막아놓은것이였다.. 찾는데 오래걸렸다
Disable Executeable Memory Protection 을 체크 하면 정상 동작된다
이제 정말 끝이다 v8엔진을 맘껏 핸들링할수있다!!
갖고 놀아봐야겠다
'macos | ios' 카테고리의 다른 글
swift Dictionary NSDictionary 차이점 (0) | 2018.05.30 |
---|---|
FlexiblePageControl Objective c (0) | 2017.11.23 |
lipo 명령어 ios simulator, iosphone framework 라이브러리 합치기 (0) | 2017.07.13 |
ios http/https 대응 (0) | 2016.10.19 |
ios10 push notification 세팅 (0) | 2016.10.14 |