Quick Start - Developing GHCJS
GHCJS contains a library,
ghc library, and several executable programs.
The repository has several submodules and some files must be generated before the package can be installed.
You need the same major version of GHC as the version of the GHCJS branch you're building.
cabal-install 3.0 is supported
GHCJS uses a C toolchain, mostly for build system related tasks like the C preprocessor, Autoconf scripts and tools like
hsc2hs. Direct support for using compiled foreign libraries from Haskell code may follow at a later date.
Please follow the installation instructions at https://emscripten.org/docs/getting_started/index.html
GHCJS requires the "upstream" emscripten backend, which is the default now. The earlier "fastcomp" backend will not work.
getting and preparing the source tree
$ git clone https://github.com/ghcjs/ghcjs.git $ cd ghcjs $ git submodule update --init --recursive
building the compiler
GHCJS depends on a few "local" packages in the source tree. You can use
stack to set up a build environment that contains
After the source tree has been prepared, the package can be installed. You may want ensure that binaries of earlier versions are overwritten:
cabal v2-install --overwrite-policy=always --install-method=copy --installdir=inplace/bin
At the time of writing,
cabal-install does not support creating symbolic links on Windows, even though this is the default installation method. A workaround is telling it to copy the executables instead:
cabal v1-install --prefix=inplace
v1 style Cabal sandbox
v1 style cabal sandboxes are also supported
if you want to build with a Cabal sandbox, use the
to add the local packages.
$ cabal v1-sandbox init $ cabal v1-install
or you can use stack:
$ stack --system-ghc --skip-ghc-check install --local-bin-dir=inplace/bin
ghcjs-boot program builds the "boot" libraries, like
template-haskell with GHCJS. After booting, GHCJS can compile regular Haskell programs and packages.
ghcjs-boot needs to be able to find the emscripten toolchain, a nodejs executable. The easiest way to do this is by running the
emsdk_env.sh script. After that, you can run
ghcjs-boot by pointing it to the boot libraries (the directory containing the
$ source ~/emsdk/emsdk_env.sh $ ./inplace/bin/ghcjs-boot -s ./lib/boot
GHCJS executables and library paths
After booting, you can add the directory containing the GHCJS binaries to
your executable PATH. The
ghcjs-boot program prints the location after
finishing building the libraries.
You can also create a symbolic link for the
programs, or use the
Generating a source distribution
if you work on boot packages that need some for an upstream library,
make sure to update the patches in
then regenerate the packages