D언어로 Emscripten하고 싶은 이야기
4773 단어 EmscriptenLLVMdlang
웹 브라우저에서 실행할 수 있는 개발 환경 및 플랫폼입니다.
변환 과정은 다음과 같다.
C/C++ →(clang)→ LLVM-IR →(Emscripten)→ JavaScript
Clang LLVM의 백엔드로 JavaScript를 사용하고 있다는 것입니다.
D언어er적으로는, D에도 LDC라고 하는 LLVM계의 컴파일러가 있으므로,
D 프로그램도 JavaScript로 컴파일 할 수있는 것은! ? 그리고 꿈이 퍼집니다.
3년 전
Emscripten과 LDC를 사용하면 D 언어 SDL 게임이 브라우저에서 실행될 수 있습니다 - ABA의 일지
h tp // 아바. 하테나 bぉg. 코m/엔트리/20130331/p1
↑는 LDC에 -output-ll 옵션을 붙여 LLVM-IR을 출력, emcc로 링크라고 하는 방법이었습니다.
지금 환경에서 시험하면 emcc 연결에 실패. LLVM 버전 차이로 인해?
올해
Emscripten 호환 ldc2를 사용하는 본격적인 시도가있었습니다.
RUNNING A D GAME IN THE BROWSER
htp : // 여기. 오, 이런. 오 rg/wp/? p=103
dscripten
htps : // 기주 b. 코 m / 아세 17 / dsc 리 p
그런데, Github의 설명에 있는 ./fetch_toolchain 를 두드려도 왠지 실패…
이하, 여러가지 시행착오한 결과가 됩니다.
Emscripten 지원 ldc2 만들기
fetch_toolchain을 참조하면서 환경을 만듭니다.
이번에는 Mac을 사용했습니다.
Windows에서도 MinGW나 cygwin을 사용하면 할 수 있을지도 모릅니다만,
지금까지 수라의 길인 느낌입니다.
※또한, 미리 JavaSE를 인스톨 해 둘 필요가 있습니다.
toolchains 디렉토리 준비
llvm의 prefix 경로에 대한 도구 체인 디렉토리를 만듭니다.
mkdir -p $HOME/toolchains/llvm-js
Emscripten SDK 얻기
git clone --depth=1 -b master --single-branch https://github.com/kripken/emscripten.git $HOME/toolchains/emscripten
emscripten-llvm 빌드
작업 디렉토리에서 emscripten의 llvm과 clang을 가져옵니다.
git clone --depth=1 -b master --single-branch https://github.com/kripken/emscripten-fastcomp.git emscripten-llvm
git clone --depth=1 -b master --single-branch https://github.com/kripken/emscripten-fastcomp-clang.git emscripten-llvm/tools/clang
emscripten-llvm을 빌드.
mkdir -p bin/emscripten-llvm
cd bin/emscripten-llvm
../../emscripten-llvm/configure --enable-targets=host,js --disable-timestamps --disable-jit --enable-optimized --disable-assertions --enable-bindings=none --disable-docs --prefix=$HOME/toolchains/llvm-js
# 2プロセスでビルド(メモリを大量に食うので控えめに)
make -j2
# ビルド結果をインストール
make install
ldc2 빌드
작업 디렉토리로 이동하여 ldc를 가져옵니다.
git clone --recursive https://github.com/ldc-developers/ldc.git ldc
git checkout '9566fc58c800aad27b13f2c8d1f4a63b299e0e3e'
dscripten을 얻고 패치합니다.
git clone --recursive https://github.com/Ace17/dscripten.git dscripten
patch -d ldc -p1 -i (作業dir)/dscripten/ldc.patch
ldc2 빌드
mkdir -p bin/ldc
cd bin/ldc
cmake -G "Unix Makefiles" -D "CMAKE_INSTALL_PREFIX=$HOME/toolchains/llvm-js" -D "LLVM_CONFIG=$HOME/toolchains/llvm-js/bin/llvm-config" ../../ldc
# 2プロセスでビルド(メモリを大量に食うので控えめに)
make -j2
# ビルド結果をインストール
make install
데모를 빌드해보세요
export PATH=$HOME/toolchains/llvm-js/bin:$PATH
export PATH=$HOME/toolchains/emscripten:$PATH
EMMAKEN_JUST_CONFIGURE=1 PATH=$HOME/toolchains/llvm-js/bin:$PATH $HOME/toolchains/emscripten/emcc
cd dscripten
./build_asmjs
동작 확인을 위해 HTTP 서버를 설정
ruby -run -e httpd ./dscripten -p 8000
브라우저에서 localhost를 통해 열기
무언가 무작위 피하는 게임이었습니다.
현시점에서 사용할 수 있는 것은 D언어의 서브 세트
D언어에는 그 언어 사양을 실현하는데 상당히 거대한 DRuntime이 필요합니다만,
아직 이 Emscripten 환경에서 서비스되지 않았습니다.
dscripten의/rt 이하에 일단 그들 문장이 있습니다만…,
아직 필요 최소한이라고 하는 느낌입니다. 향후 확충에 기대하네요.
그래서 현시점에서는, RUNNING A D GAME IN THE BROWSER 에도 쓰고 있습니다만,
동적 배열, 연관 배열, 클래스, new 연산자, 런타임 형식 정보, 예외를 사용할 수 없습니다.
thread 관련은 Shared Array Buffer 대기합니다.
런타임 피쳐 레벨은 C 언어에 해당합니다.
그러나 컴파일 타임의 강력한 D2 사양은 그대로 사용할 수 있습니다.
또한 라이브러리는 Phobos는 사용할 수 없지만 SDL은 사용할 수있는 것 같습니다.
열심히하면 OpenGL도 사용할 수 있습니까? 조금 불편하지만 게임은 만들 수 있을 것 같다.
여담
어제 emscripten night!! #2 라는 Emscripten의 공부회가 열려 있었다고 합니다.
우연히는 참가하지 않았습니다만, 좀처럼 진한 이야기가 타임 라인을 흐르고 있었습니다.
Reference
이 문제에 관하여(D언어로 Emscripten하고 싶은 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ueshita/items/7ebf9331685d345200f8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Emscripten 호환 ldc2를 사용하는 본격적인 시도가있었습니다.
RUNNING A D GAME IN THE BROWSER
htp : // 여기. 오, 이런. 오 rg/wp/? p=103
dscripten
htps : // 기주 b. 코 m / 아세 17 / dsc 리 p
그런데, Github의 설명에 있는 ./fetch_toolchain 를 두드려도 왠지 실패…
이하, 여러가지 시행착오한 결과가 됩니다.
Emscripten 지원 ldc2 만들기
fetch_toolchain을 참조하면서 환경을 만듭니다.
이번에는 Mac을 사용했습니다.
Windows에서도 MinGW나 cygwin을 사용하면 할 수 있을지도 모릅니다만,
지금까지 수라의 길인 느낌입니다.
※또한, 미리 JavaSE를 인스톨 해 둘 필요가 있습니다.
toolchains 디렉토리 준비
llvm의 prefix 경로에 대한 도구 체인 디렉토리를 만듭니다.
mkdir -p $HOME/toolchains/llvm-js
Emscripten SDK 얻기
git clone --depth=1 -b master --single-branch https://github.com/kripken/emscripten.git $HOME/toolchains/emscripten
emscripten-llvm 빌드
작업 디렉토리에서 emscripten의 llvm과 clang을 가져옵니다.
git clone --depth=1 -b master --single-branch https://github.com/kripken/emscripten-fastcomp.git emscripten-llvm
git clone --depth=1 -b master --single-branch https://github.com/kripken/emscripten-fastcomp-clang.git emscripten-llvm/tools/clang
emscripten-llvm을 빌드.
mkdir -p bin/emscripten-llvm
cd bin/emscripten-llvm
../../emscripten-llvm/configure --enable-targets=host,js --disable-timestamps --disable-jit --enable-optimized --disable-assertions --enable-bindings=none --disable-docs --prefix=$HOME/toolchains/llvm-js
# 2プロセスでビルド(メモリを大量に食うので控えめに)
make -j2
# ビルド結果をインストール
make install
ldc2 빌드
작업 디렉토리로 이동하여 ldc를 가져옵니다.
git clone --recursive https://github.com/ldc-developers/ldc.git ldc
git checkout '9566fc58c800aad27b13f2c8d1f4a63b299e0e3e'
dscripten을 얻고 패치합니다.
git clone --recursive https://github.com/Ace17/dscripten.git dscripten
patch -d ldc -p1 -i (作業dir)/dscripten/ldc.patch
ldc2 빌드
mkdir -p bin/ldc
cd bin/ldc
cmake -G "Unix Makefiles" -D "CMAKE_INSTALL_PREFIX=$HOME/toolchains/llvm-js" -D "LLVM_CONFIG=$HOME/toolchains/llvm-js/bin/llvm-config" ../../ldc
# 2プロセスでビルド(メモリを大量に食うので控えめに)
make -j2
# ビルド結果をインストール
make install
데모를 빌드해보세요
export PATH=$HOME/toolchains/llvm-js/bin:$PATH
export PATH=$HOME/toolchains/emscripten:$PATH
EMMAKEN_JUST_CONFIGURE=1 PATH=$HOME/toolchains/llvm-js/bin:$PATH $HOME/toolchains/emscripten/emcc
cd dscripten
./build_asmjs
동작 확인을 위해 HTTP 서버를 설정
ruby -run -e httpd ./dscripten -p 8000
브라우저에서 localhost를 통해 열기
무언가 무작위 피하는 게임이었습니다.
현시점에서 사용할 수 있는 것은 D언어의 서브 세트
D언어에는 그 언어 사양을 실현하는데 상당히 거대한 DRuntime이 필요합니다만,
아직 이 Emscripten 환경에서 서비스되지 않았습니다.
dscripten의/rt 이하에 일단 그들 문장이 있습니다만…,
아직 필요 최소한이라고 하는 느낌입니다. 향후 확충에 기대하네요.
그래서 현시점에서는, RUNNING A D GAME IN THE BROWSER 에도 쓰고 있습니다만,
동적 배열, 연관 배열, 클래스, new 연산자, 런타임 형식 정보, 예외를 사용할 수 없습니다.
thread 관련은 Shared Array Buffer 대기합니다.
런타임 피쳐 레벨은 C 언어에 해당합니다.
그러나 컴파일 타임의 강력한 D2 사양은 그대로 사용할 수 있습니다.
또한 라이브러리는 Phobos는 사용할 수 없지만 SDL은 사용할 수있는 것 같습니다.
열심히하면 OpenGL도 사용할 수 있습니까? 조금 불편하지만 게임은 만들 수 있을 것 같다.
여담
어제 emscripten night!! #2 라는 Emscripten의 공부회가 열려 있었다고 합니다.
우연히는 참가하지 않았습니다만, 좀처럼 진한 이야기가 타임 라인을 흐르고 있었습니다.
Reference
이 문제에 관하여(D언어로 Emscripten하고 싶은 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ueshita/items/7ebf9331685d345200f8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
mkdir -p $HOME/toolchains/llvm-js
git clone --depth=1 -b master --single-branch https://github.com/kripken/emscripten.git $HOME/toolchains/emscripten
git clone --depth=1 -b master --single-branch https://github.com/kripken/emscripten-fastcomp.git emscripten-llvm
git clone --depth=1 -b master --single-branch https://github.com/kripken/emscripten-fastcomp-clang.git emscripten-llvm/tools/clang
mkdir -p bin/emscripten-llvm
cd bin/emscripten-llvm
../../emscripten-llvm/configure --enable-targets=host,js --disable-timestamps --disable-jit --enable-optimized --disable-assertions --enable-bindings=none --disable-docs --prefix=$HOME/toolchains/llvm-js
# 2プロセスでビルド(メモリを大量に食うので控えめに)
make -j2
# ビルド結果をインストール
make install
git clone --recursive https://github.com/ldc-developers/ldc.git ldc
git checkout '9566fc58c800aad27b13f2c8d1f4a63b299e0e3e'
git clone --recursive https://github.com/Ace17/dscripten.git dscripten
patch -d ldc -p1 -i (作業dir)/dscripten/ldc.patch
mkdir -p bin/ldc
cd bin/ldc
cmake -G "Unix Makefiles" -D "CMAKE_INSTALL_PREFIX=$HOME/toolchains/llvm-js" -D "LLVM_CONFIG=$HOME/toolchains/llvm-js/bin/llvm-config" ../../ldc
# 2プロセスでビルド(メモリを大量に食うので控えめに)
make -j2
# ビルド結果をインストール
make install
export PATH=$HOME/toolchains/llvm-js/bin:$PATH
export PATH=$HOME/toolchains/emscripten:$PATH
EMMAKEN_JUST_CONFIGURE=1 PATH=$HOME/toolchains/llvm-js/bin:$PATH $HOME/toolchains/emscripten/emcc
cd dscripten
./build_asmjs
동작 확인을 위해 HTTP 서버를 설정
ruby -run -e httpd ./dscripten -p 8000
브라우저에서 localhost를 통해 열기
무언가 무작위 피하는 게임이었습니다.
현시점에서 사용할 수 있는 것은 D언어의 서브 세트
D언어에는 그 언어 사양을 실현하는데 상당히 거대한 DRuntime이 필요합니다만,
아직 이 Emscripten 환경에서 서비스되지 않았습니다.
dscripten의/rt 이하에 일단 그들 문장이 있습니다만…,
아직 필요 최소한이라고 하는 느낌입니다. 향후 확충에 기대하네요.
그래서 현시점에서는, RUNNING A D GAME IN THE BROWSER 에도 쓰고 있습니다만,
동적 배열, 연관 배열, 클래스, new 연산자, 런타임 형식 정보, 예외를 사용할 수 없습니다.
thread 관련은 Shared Array Buffer 대기합니다.
런타임 피쳐 레벨은 C 언어에 해당합니다.
그러나 컴파일 타임의 강력한 D2 사양은 그대로 사용할 수 있습니다.
또한 라이브러리는 Phobos는 사용할 수 없지만 SDL은 사용할 수있는 것 같습니다.
열심히하면 OpenGL도 사용할 수 있습니까? 조금 불편하지만 게임은 만들 수 있을 것 같다.
여담
어제 emscripten night!! #2 라는 Emscripten의 공부회가 열려 있었다고 합니다.
우연히는 참가하지 않았습니다만, 좀처럼 진한 이야기가 타임 라인을 흐르고 있었습니다.
Reference
이 문제에 관하여(D언어로 Emscripten하고 싶은 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ueshita/items/7ebf9331685d345200f8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
어제 emscripten night!! #2 라는 Emscripten의 공부회가 열려 있었다고 합니다.
우연히는 참가하지 않았습니다만, 좀처럼 진한 이야기가 타임 라인을 흐르고 있었습니다.
Reference
이 문제에 관하여(D언어로 Emscripten하고 싶은 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ueshita/items/7ebf9331685d345200f8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)