티스토리 뷰
1. 소개
- Emscripten은 LLVM을 사용하여 C/C++을 javaScript로 컴파일해준다.
- Emscripten은 웹에서 바로 사용할수있는 원시코드를 만든다. (원시언어이므로 platform에 상관없이 사용가능)
2. Building Projects
- Emscripten은 기존 gcc를 대신해 emcc를 사용하여 build한다.
기존 build방식 |
Emscripten build |
./configure make make install | ./emconfigure ./configure ./emmake make ./emcc [-Ox] project.bc -o project.js |
* configure란?
- configure 스크립트는 개발 중인 프로그램을 각기 다른 수많은 컴퓨터들에서 실행할 수 있도록 도와주도록 설계된 실행 스크립트이다. 소스 코드로부터 컴파일하기 직전에 사용자 컴퓨터의 라이브러리의 존재 여부를 확인하고 연결시킨다.
(configure 쉘을 이용해 현재프로세스에 적합한 makefile 구성 -> make명령으로 makefile실행 -> make install명령으로 실행파일 최종설치)
* make 관련 참고자료: https://wiki.kldp.org/KoreanDoc/html/gcc_and_make/gcc_and_make-3.html
- Clang을 사용하여 C/C++파일을 LLVM bitcode로 변환후 자바스크립트로 컴파일
* 해당 결과물중 .js의 경우는 Node.js에서도 사용이 가능.
- 스탠다드 라이브러리의 경우 링크 옵션 필요없이 자동으로 링킹.
- 서드파티 라이브러리의 경우에는 프로젝트와 마찬가지로 비트코드로 빌드후 다시 자바스크립트로 재컴파일해야한다.
* 참고자료 asm.js 와 wasm의 차이 (http://hacks.mozilla.or.kr/2017/05/why-webassembly-is-faster-than-asm-js/) |
3. Building to WebAssembly
- WebAssembly는 Emscripten projects를 웹상에서 binary formatin으로 실행되도록 해준다.
3.1 Setup
- 이미 WebAssembly에 작성되어져 있다.
* emcc 옵션중 -s WASM=0 로 설정할경우 .wasm파일이 생성되지 않는다. (default: WASM=1)
3.2 compiler output
- emcc를 사용하여 빌드할경우 .wasm파일이 포함되어져 있다.
> hello.html 호출시 hello.js 내에서 hello.wasm 호출하는 방식.
> 실제로 wasm파일이 syscalls 같은 시스템영역 컨트롤을 가능하게 작성된다.
4. Web server Setup
- 웹서버 MIME type에 application/wasm 을 추가할경우 사용가능
ex) 아파치의 경우 AddType application/wasm .wasm