annotate Samples/README.md @ 1367:fd2d848c0d6d broker

ignores
author Benjamin Golinvaux <bgo@osimis.io>
date Sat, 18 Apr 2020 14:44:56 +0200
parents a3b453a833e2
children 5b750a4e1b52
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1360
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
1 General
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
2 =======
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
3 These samples assume that a recent version of Orthanc is checked out in an
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
4 `orthanc` folder next to the `orthanc-stone` folder. Let's call the top folder
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
5 the `devroot` folder. This name does not matter and is not used anywhere.
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
6
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
7 Here's the directory layout that we suggest:
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
8
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
9 ```
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
10 devroot/
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
11 |
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
12 +- orthanc/
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
13 |
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
14 +- orthanc-stone/
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
15 |
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
16 ...
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
17 ```
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
18
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
19 Orthanc can be retrieved with:
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
20 ```
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
21 hg clone https://hg.orthanc-server.com/orthanc
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
22 ```
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
23
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
24 WebAssembly samples
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
25 ===================
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
26
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
27 Building the WebAssembly samples require the Emscripten SDK
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
28 (https://emscripten.org/). This SDK goes far beyond the simple compilation to
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
29 the wasm (Web Assembly) bytecode and provides a comprehensive library that
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
30 eases porting native C and C++ programs and libraries. The Emscripten SDK also
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
31 makes it easy to generate the companion Javascript files requires to use a
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
32 wasm module in a web application.
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
33
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
34 Although Emscripten runs on all major platforms, Stone of Orthanc is developed
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
35 and tested with the Linux version of Emscripten.
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
36
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
37 Emscripten runs perfectly fine under the Windows Subsystem for Linux (that is
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
38 the environment used quite often by the Stone of Orthanc team)
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
39
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
40 **Important note:** The following examples **and the build scripts** will
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
41 assume that you have installed the Emscripten SDK in `~/apps/emsdk`.
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
42
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
43 The following packages should get you going (a Debian-like distribution such
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
44 as Debian or Ubuntu is assumed)
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
45
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
46 ```
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
47 sudo apt-get update
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
48 sudo apt-get install -y build-essential curl wget git python cmake pkg-config
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
49 sudo apt-get install -y mercurial unzip npm ninja-build p7zip-full gettext-base
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
50 ```
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
51
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
52 SingleFrameViewer
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
53 -----------------
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
54
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
55 This sample application displays a single frame of a Dicom instance that can
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
56 be loaded from Orthanc, either by using the Orthanc REST API or through the
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
57 Dicomweb server functionality of Orthanc.
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
58
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
59 This barebones sample uses plain Javascript and requires the
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
60 Emscripten toolchain and cmake, in addition to a few standard packages.
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
61
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
62 Here's how you can build it: create the following script (for instance,
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
63 `build-wasm-SingleFrameViewer.sh`) one level above the orthanc-stone repository,
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
64 thus, in the folder we have called `devroot`.
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
65
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
66 If you feel confident, you can also simply read the following script and
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
67 enter the commands interactively in the terminal.
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
68
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
69 ```
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
70 #!/bin/bash
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
71
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
72 if [ ! -d "orthanc-stone" ]; then
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
73 echo "This script must be run from the folder one level above orthanc-stone"
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
74 exit 1
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
75 fi
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
76
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
77 if [[ ! $# -eq 1 ]]; then
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
78 echo "Usage:"
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
79 echo " $0 [BUILD_TYPE]"
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
80 echo ""
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
81 echo " with:"
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
82 echo " BUILD_TYPE = Debug, RelWithDebInfo or Release"
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
83 echo ""
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
84 exit 1
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
85 fi
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
86
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
87 # define the variables that we'll use
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
88 buildType=$1
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
89 buildFolderName="`pwd`/out/build-stone-wasm-SingleFrameViewer-$buildType"
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
90 installFolderName="`pwd`/out/install-stone-wasm-SingleFrameViewer-$buildType"
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
91
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
92 # configure the environment to use Emscripten
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
93 . ~/apps/emsdk/emsdk_env.sh
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
94
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
95
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
96 mkdir -p $buildFolderName
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
97
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
98 # change current folder to the build folder
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
99 pushd $buildFolderName
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
100
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
101 emcmake cmake -G "Ninja" \
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
102 -DCMAKE_BUILD_TYPE=$buildType \
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
103 -DCMAKE_INSTALL_PREFIX=$installFolderName \
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
104 -DSTATIC_BUILD=ON -DOPENSSL_NO_CAPIENG=ON -DALLOW_DOWNLOADS=ON \
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
105 ../orthanc-stone/Samples/WebAssembly/SingleFrameViewer
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
106
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
107 # perform build + installation
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
108 ninja install
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
109
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
110 # restore the original working folder
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
111 popd
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
112
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
113 echo "If all went well, the output files can be found in $installFolderName:"
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
114
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
115 ls $installFolderName```
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
116 ```
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
117
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
118 Simply navigate to the dev root, and execute the script:
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
119
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
120 ```
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
121 ./build-wasm-SingleFrameViewer.sh RelWithDebInfo
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
122 ```
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
123
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
124 I suggest that you do *not* use the `Debug` confirmation unless you really
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
125 need it, for the additional checks that are made will lead to a very long
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
126 build time and much slower execution (more severe than with a native non-wasm
a3b453a833e2 Some real doc
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
127 target)