Skip to content

Commit a9b4631

Browse files
committed
docs: update docs and add scripts for native build
Update documentation and add shell scripts in dev-utils/ folder for cloning source code and building natively. Add special flags and details for working around MSVC windows quirks.
1 parent 5d0a84a commit a9b4631

File tree

3 files changed

+160
-5
lines changed

3 files changed

+160
-5
lines changed

dev-utils/itk-wasm-native-build.sh

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#!/bin/bash
2+
if [$OSTYPE == "cygwin"] || [$OSTYPE == "msys"] || [$OSTYPE =="win32"]; then
3+
echo "Windows platform detected ... adding \"/Zc:__cplusplus /DNOMINMAX\" to \$CXXFLAGS"
4+
export CXXFLAGS="/Zc:__cplusplus /DNOMINMAX"
5+
fi
6+
#if [[ "$OSTYPE" == "cygwin" || "$OSTYPE" == "msys" || "$OSTYPE" =="win32" ]]; then
7+
8+
cmake -BITK-build -SITK \
9+
-DBUILD_TESTING=OFF \
10+
-DCMAKE_CXX_STANDARD:STRING=17 \
11+
-DCMAKE_BUILD_TYPE:STRING=Debug \
12+
-DCMAKE_CONFIGURATION_TYPES:STRING=Debug \
13+
-DBUILD_EXAMPLES:BOOL=OFF \
14+
-DBUILD_TESTING:BOOL=OFF \
15+
-DBUILD_SHARED_LIBS=OFF \
16+
-DBUILD_STATIC_LIBS=ON \
17+
-DDCMTK_LINK_STATIC=ON \
18+
-DITK_LEGACY_REMOVE:BOOL=ON \
19+
-DITK_BUILD_DEFAULT_MODULES:BOOL=ON \
20+
-DITKGroup_IO:BOOL=ON \
21+
-DH5_HAVE_GETPWUID:BOOL=OFF \
22+
-DModule_ITKIOMINC:BOOL=ON \
23+
-DModule_MGHIO:BOOL=ON \
24+
-DModule_IOMeshSWC:BOOL=ON \
25+
-DModule_IOScanco:BOOL=ON \
26+
-DModule_IOFDF:BOOL=ON \
27+
-DModule_ITKDCMTK:BOOL=ON \
28+
-DModule_ITKImageFunction:BOOL=ON \
29+
-DModule_MinimalPathExtraction:BOOL=ON \
30+
-DModule_MorphologicalContourInterpolation:BOOL=ON \
31+
-DModule_SmoothingRecursiveYvvGaussianFilter:BOOL=ON \
32+
-DModule_Cuberille:BOOL=ON \
33+
-DModule_TotalVariation:BOOL=ON \
34+
-DModule_IOMeshSTL:BOOL=ON \
35+
-DModule_GenericLabelInterpolator:BOOL=ON \
36+
-DModule_MeshToPolyData=ON \
37+
-DDO_NOT_BUILD_ITK_TEST_DRIVER:BOOL=ON \
38+
-DOPJ_USE_THREAD:BOOL=OFF \
39+
-DDCMTK_WITH_THREADS:BOOL=OFF \
40+
-DDCMTK_BUILD_APPS:BOOL=OFF \
41+
-DNO_FLOAT_EXCEPTIONS:BOOL=ON \
42+
-DITK_MSVC_STATIC_RUNTIME_LIBRARY=ON
43+
44+
cmake --build ITK-build --config Debug -j16
45+
46+
cmake -BITK-Wasm-build \
47+
-SITK-Wasm \
48+
-DBUILD_TESTING=ON \
49+
-DCMAKE_CXX_STANDARD:STRING=20 \
50+
-DCMAKE_BUILD_TYPE:STRING=Debug \
51+
-DCMAKE_CONFIGURATION_TYPES:STRING=Debug \
52+
-DBUILD_SHARED_LIBS=OFF \
53+
-DITK_DIR=$PWD/ITK-build
54+
55+
cmake --build ITK-Wasm-build --config Debug -j16
56+
57+
cmake -Bpackages-dicom \
58+
-SITK-Wasm/packages/dicom \
59+
-DBUILD_TESTING=ON \
60+
-DCMAKE_CXX_STANDARD:STRING=20 \
61+
-DCMAKE_BUILD_TYPE:STRING=Debug \
62+
-DCMAKE_CONFIGURATION_TYPES:STRING=Debug \
63+
-DITK_DIR=$PWD/ITK-build
64+
65+
cmake --build packages-dicom --config Debug -j16
66+
67+
ctest --test-dir ITK-Wasm-build -C Debug
68+
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#!/bin/bash
2+
3+
# workdir
4+
work_dir="~/itk-wasm-native"
5+
6+
# main
7+
itk_repository="https://github.com/KitwareMedical/ITK.git"
8+
itk_branch="itkwasm-main-mutable"
9+
dcmtk_repository="https://github.com/InsightSoftwareConsortium/DCMTK.git"
10+
dcmtk_tag="fe7cff5de40b67ae0490d476ddf17689c06bcaf4"
11+
wasm_repository="https://github.com/InsightSoftwareConsortium/ITK-Wasm"
12+
wasm_branch="main"
13+
14+
# dev-override
15+
#itk_repository="https://github.com/jadh4v/ITK.git"
16+
#itk_branch="itkwasm-2024-06-06"
17+
#wasm_repository="https://github.com/jadh4v/ITK-Wasm"
18+
#wasm_branch="dicom-seg"
19+
20+
echo "itk_repository = $itk_repository"
21+
echo "itk_branch = $itk_branch"
22+
echo "wasm_repository = $wasm_repository"
23+
echo "wasm_branch = $wasm_branch"
24+
25+
mkdir $work_dir
26+
27+
cd $work_dir
28+
29+
git clone $itk_repository --branch=$itk_branch
30+
31+
git clone $wasm_repository --branch=$wasm_branch
32+
33+
#dcmtk_repository="https://github.com/jadh4v/DCMTK.git"
34+
#dcmtk_tag="62ebb7bb6e9ffb5311ff0f7baaa935b9b85296ec"
35+
#echo "dcmtk_repository = $dcmtk_repository"
36+
#echo "dcmtk_tag = $dcmtk_tag"
37+
38+
#sed -i -e '/^set(DCMTK_GIT_REPOSITORY/c\set(DCMTK_GIT_REPOSITORY "'$dcmtk_repository'")' \
39+
# ITK/Modules/ThirdParty/DCMTK/DCMTKGitTag.cmake
40+
41+
#sed -i -e '/^set(DCMTK_GIT_TAG/c\set(DCMTK_GIT_TAG "'$dcmtk_tag'")' \
42+
# ITK/Modules/ThirdParty/DCMTK/DCMTKGitTag.cmake
43+

docs/development/hacking_itk_wasm.md

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,65 @@ ITK-Wasm's [C++ core](../introduction/parts.md#cxx-core) can be developed with n
3636
2. Build the `WebAssemblyInterface` module from this module against ITK
3737
3. Run the tests
3838

39+
We recommend using the scripts provided in [dev-utils](../../dev-utils/) folder
40+
to [grab the source code](../../dev-utils/itk-wasm-native-get-source.sh) and run [native build commands](../../dev-utils/itk-wasm-native-build.sh).
41+
Note that you will need to include certain CXX compiler flags for the native windows build as shown in the script.
42+
The build script also demonstrates how to native build sub-packages such as @itk-wasm/dicom with additional ITK dependencies turned on.
43+
3944
From a command line, these steps in brief are:
4045

4146
```sh
47+
# For Windows build (with mingw-bash or git-bash terminal)
48+
export CXXFLAGS="/Zc:__cplusplus /DNOMINMAX"
49+
4250
# Build ITK
43-
git clone https://github.com/InsightSoftwareConsortium/ITK
44-
cmake -BITK-build -SITK -DBUILD_TESTING=OFF -DModule_MeshToPolyData=ON
45-
cmake --build ITK-build
51+
git clone https://github.com/InsightSoftwareConsortium/ITK --branch=itkwasm-main-mutable
52+
# cmake -BITK-build -SITK -DBUILD_TESTING=OFF -DModule_MeshToPolyData=ON -DITK_MSVC_STATIC_RUNTIME_LIBRARY=ON
53+
cmake -BITK-build -SITK \
54+
-DBUILD_TESTING=OFF \
55+
-DCMAKE_CXX_STANDARD:STRING=17 \
56+
-DCMAKE_BUILD_TYPE:STRING=Debug \
57+
-DCMAKE_CONFIGURATION_TYPES:STRING=Debug \
58+
-DBUILD_EXAMPLES:BOOL=OFF \
59+
-DBUILD_TESTING:BOOL=OFF \
60+
-DBUILD_SHARED_LIBS=OFF \
61+
-DBUILD_STATIC_LIBS=ON \
62+
-DDCMTK_LINK_STATIC=ON \
63+
-DITK_LEGACY_REMOVE:BOOL=ON \
64+
-DITK_BUILD_DEFAULT_MODULES:BOOL=ON \
65+
-DModule_MeshToPolyData=ON \
66+
-DDO_NOT_BUILD_ITK_TEST_DRIVER:BOOL=ON \
67+
-DOPJ_USE_THREAD:BOOL=OFF \
68+
-DDCMTK_WITH_THREADS:BOOL=OFF \
69+
-DDCMTK_BUILD_APPS:BOOL=OFF \
70+
-DNO_FLOAT_EXCEPTIONS:BOOL=ON \
71+
-DITK_MSVC_STATIC_RUNTIME_LIBRARY=ON
72+
cmake --build ITK-build --config Debug -j16
4673

4774
# Build the WebAssemblyInterface module from this module against ITK
4875
git clone https://github.com/InsightSoftwareConsortium/ITK-Wasm
49-
cmake -Bitk-wasm-build -Sitk-wasm -DBUILD_TESTING=ON -DITK_DIR=$PWD/ITK-build
50-
cmake --build itk-wasm-build
76+
cmake -BITK-Wasm-build \
77+
-SITK-Wasm \
78+
-DBUILD_TESTING=ON \
79+
-DCMAKE_CXX_STANDARD:STRING=20 \
80+
-DCMAKE_BUILD_TYPE:STRING=Debug \
81+
-DCMAKE_CONFIGURATION_TYPES:STRING=Debug \
82+
-DBUILD_SHARED_LIBS=OFF \
83+
-DITK_DIR=$PWD/ITK-build
84+
cmake --build ITK-Wasm-build --config Debug -j16
5185

5286
# Run the tests
5387
ctest --test-dir itk-wasm-build
88+
89+
cmake -Bpackages-dicom \
90+
-SITK-Wasm/packages/dicom \
91+
-DBUILD_TESTING=ON \
92+
-DCMAKE_CXX_STANDARD:STRING=20 \
93+
-DCMAKE_BUILD_TYPE:STRING=Debug \
94+
-DCMAKE_CONFIGURATION_TYPES:STRING=Debug \
95+
-DITK_DIR=$PWD/ITK-build
96+
97+
cmake --build packages-dicom --config Debug -j16
5498
```
5599

56100
For additional guidance on C++ development, see the [ITK Software Guide].

0 commit comments

Comments
 (0)