user-guide: fix examples of ghci commands
[ghc.git] / iserv / iserv-bin.cabal
1 Name: iserv-bin
2 Version: 0.0
3 Copyright: XXX
4 License: BSD3
5 -- XXX License-File: LICENSE
6 Author: XXX
7 Maintainer: XXX
8 Synopsis: iserv allows GHC to delegate Tempalte Haskell computations
9 Description:
10   GHC can be provided with a path to the iserv binary with
11   @-pgmi=/path/to/iserv-bin@, and will in combination with
12   @-fexternal-interpreter@, compile Template Haskell though the
13   @iserv-bin@ delegate. This is very similar to how ghcjs has been
14   compiling Template Haskell, by spawning a separate delegate (so
15   called runner on the javascript vm) and evaluating the splices
16   there.
17   .
18   iserv can also be used in combination with cross compilation. For
19   this, the @iserv-proxy@ needs to be built on the host, targeting the
20   host (as it is running on the host). @cabal install -flibrary
21   -fproxy@ will yield the proxy.
22   .
23   Using the cabal for the target @arch-platform-target-cabal install
24   -flibrary@ will build the required library that contains the ffi
25   @startSlave@ function, which needs to be invoked on the target
26   (e.g. in an iOS application) to start the remote iserv slave.
27   .
28   calling the GHC cross compiler with @-fexternal-interpreter
29   -pgmi=$HOME/.cabal/bin/iserv-proxy -opti\<ip address\> -opti\<port\>@
30   will cause it to compile Template Haskell via the remote at \<ip address\>.
31   .
32   Thus to get cross compilation with Template Haskell follow the
33   following receipt:
34   .
35   * compile the iserv library for your target
36   .
37       > iserv $ arch-platform-target-cabal install -flibrary
38   .
39   * setup an application for your target that calls the
40   * startSlave function. This could be either haskell or your
41   * targets ffi capable language, if needed.
42   .
43       >  void startSlave(false /* verbose */, 5000 /* port */,
44       >                  "/path/to/storagelocation/on/target");
45   .
46   * build the iserv-proxy
47   .
48       > iserv $ cabal install -flibrary -fproxy
49   * Start your iserv-slave app on your target running on say @10.0.0.1:5000@
50   * compiler your sources with -fexternal-interpreter and the proxy
51   .
52       > project $ arch-platform-target-ghc ModuleContainingTH.hs \
53       >             -fexternal-interpreter \
54       >             -pgmi=$HOME/.cabal/bin/iserv-proxy \
55       >             -opti10.0.0.1 -opti5000
56   .
57   Should something not work as expected, provide @-opti-v@ for verbose
58   logging of the @iserv-proxy@.
59
60 Category: Development
61 build-type: Simple
62 cabal-version: >=1.10
63
64 Flag library
65     Description:   Build iserv library
66     Default:       False
67
68 Flag proxy
69     Description:   Build iserv-proxy
70     Default:       False
71
72 Library
73     If flag(library)
74        Buildable: True
75     Else
76        Buildable: False
77     Default-Language: Haskell2010
78     Hs-Source-Dirs: src
79     Exposed-Modules: Lib
80                    , Remote.Message
81                    , Remote.Slave
82                    , GHCi.Utils
83     Build-Depends: base       >= 4   && < 5,
84                    binary     >= 0.7 && < 0.9,
85                    bytestring >= 0.10 && < 0.11,
86                    containers >= 0.5 && < 0.6,
87                    deepseq    >= 1.4 && < 1.5,
88                    ghci       == 8.3,
89                    network    >= 2.6 && < 2.7,
90                    directory  >= 1.3 && < 1.4,
91                    filepath   >= 1.4 && < 1.5
92    if os(windows)
93        Cpp-Options: -DWINDOWS
94    else
95        Build-Depends: unix   >= 2.7 && < 2.8
96
97 Executable iserv
98     Default-Language: Haskell2010
99     ghc-options: -no-hs-main
100     Main-Is: Main.hs
101     C-Sources: cbits/iservmain.c
102     Hs-Source-Dirs: src
103     include-dirs: .
104     If flag(library)
105        Other-Modules: GHCi.Utils
106     Else
107        Other-Modules: GHCi.Utils
108                     , Lib
109     Build-Depends: array      >= 0.5 && < 0.6,
110                    base       >= 4   && < 5,
111                    binary     >= 0.7 && < 0.9,
112                    bytestring >= 0.10 && < 0.11,
113                    containers >= 0.5 && < 0.6,
114                    deepseq    >= 1.4 && < 1.5,
115                    ghci       == 8.3
116
117     if os(windows)
118         Cpp-Options: -DWINDOWS
119     else
120         Build-Depends: unix   >= 2.7 && < 2.8
121
122 Executable iserv-proxy
123    If flag(proxy)
124       Buildable: True
125    Else
126       Buildable: False
127    Default-Language: Haskell2010
128    Main-Is: Remote.hs
129    Hs-Source-Dirs: proxy-src
130    Build-Depends: array      >= 0.5 && < 0.6,
131                   base       >= 4   && < 5,
132                   binary     >= 0.7 && < 0.9,
133                   bytestring >= 0.10 && < 0.11,
134                   containers >= 0.5 && < 0.6,
135                   deepseq    >= 1.4 && < 1.5,
136                   ghci       == 8.3,
137                   directory  >= 1.3 && < 1.4,
138                   network    >= 2.6,
139                   filepath   >= 1.4 && < 1.5,
140                   iserv-bin