iserv-proxy.cabal 2.94 KB
Newer Older
1 2
Name: iserv-proxy
Version: 8.5
3 4 5 6 7
Copyright: XXX
License: BSD3
-- XXX License-File: LICENSE
Author: XXX
Maintainer: XXX
Moritz Angermann's avatar
Moritz Angermann committed
8
Synopsis: iserv allows GHC to delegate Tempalte Haskell computations
9
Description:
Moritz Angermann's avatar
Moritz Angermann committed
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
  GHC can be provided with a path to the iserv binary with
  @-pgmi=/path/to/iserv-bin@, and will in combination with
  @-fexternal-interpreter@, compile Template Haskell though the
  @iserv-bin@ delegate. This is very similar to how ghcjs has been
  compiling Template Haskell, by spawning a separate delegate (so
  called runner on the javascript vm) and evaluating the splices
  there.
  .
  iserv can also be used in combination with cross compilation. For
  this, the @iserv-proxy@ needs to be built on the host, targeting the
  host (as it is running on the host). @cabal install -flibrary
  -fproxy@ will yield the proxy.
  .
  Using the cabal for the target @arch-platform-target-cabal install
  -flibrary@ will build the required library that contains the ffi
  @startSlave@ function, which needs to be invoked on the target
  (e.g. in an iOS application) to start the remote iserv slave.
  .
  calling the GHC cross compiler with @-fexternal-interpreter
  -pgmi=$HOME/.cabal/bin/iserv-proxy -opti\<ip address\> -opti\<port\>@
  will cause it to compile Template Haskell via the remote at \<ip address\>.
  .
  Thus to get cross compilation with Template Haskell follow the
  following receipt:
  .
  * compile the iserv library for your target
  .
      > iserv $ arch-platform-target-cabal install -flibrary
  .
  * setup an application for your target that calls the
  * startSlave function. This could be either haskell or your
  * targets ffi capable language, if needed.
  .
      >  void startSlave(false /* verbose */, 5000 /* port */,
      >                  "/path/to/storagelocation/on/target");
  .
  * build the iserv-proxy
  .
      > iserv $ cabal install -flibrary -fproxy
  * Start your iserv-slave app on your target running on say @10.0.0.1:5000@
  * compiler your sources with -fexternal-interpreter and the proxy
  .
      > project $ arch-platform-target-ghc ModuleContainingTH.hs \
      >             -fexternal-interpreter \
      >             -pgmi=$HOME/.cabal/bin/iserv-proxy \
      >             -opti10.0.0.1 -opti5000
  .
  Should something not work as expected, provide @-opti-v@ for verbose
  logging of the @iserv-proxy@.

60 61 62 63
Category: Development
build-type: Simple
cabal-version: >=1.10

Moritz Angermann's avatar
Moritz Angermann committed
64 65
Executable iserv-proxy
   Default-Language: Haskell2010
66 67
   Main-Is: Main.hs
   Hs-Source-Dirs: src
Moritz Angermann's avatar
Moritz Angermann committed
68 69 70 71 72 73
   Build-Depends: array      >= 0.5 && < 0.6,
                  base       >= 4   && < 5,
                  binary     >= 0.7 && < 0.9,
                  bytestring >= 0.10 && < 0.11,
                  containers >= 0.5 && < 0.6,
                  deepseq    >= 1.4 && < 1.5,
Ben Gamari's avatar
Ben Gamari committed
74
                  ghci       == 8.5,
Moritz Angermann's avatar
Moritz Angermann committed
75
                  directory  >= 1.3 && < 1.4,
Moritz Angermann's avatar
Moritz Angermann committed
76
                  network    >= 2.6,
Moritz Angermann's avatar
Moritz Angermann committed
77
                  filepath   >= 1.4 && < 1.5,
78
                  libiserv   == 8.5