view StoneWebViewer/WebAssembly/CMakeLists.txt @ 1526:61023b0d39c8

Reverted the Stone Web Viewer plugin to rev. 307a805d0587 (mistakenly changed to serve the RT Viewer and make it available in the Orthanc Explorer while it should have been done in a separate plugin)
author Benjamin Golinvaux <bgo@osimis.io>
date Sun, 02 Aug 2020 13:53:48 +0200
parents 433cf964838d
children
line wrap: on
line source

cmake_minimum_required(VERSION 2.8.3)

project(OrthancStone)

# Configuration of the Emscripten compiler for WebAssembly target
# ---------------------------------------------------------------
set(USE_WASM ON CACHE BOOL "")

set(EMSCRIPTEN_SET_LLVM_WASM_BACKEND ON CACHE BOOL "")

set(WASM_FLAGS "-s WASM=1 -s FETCH=1")
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
  set(WASM_FLAGS "${WASM_FLAGS} -s SAFE_HEAP=1")
endif()

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WASM_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WASM_FLAGS}")

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"ccall\", \"cwrap\"]'")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s ERROR_ON_UNDEFINED_SYMBOLS=1")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s ASSERTIONS=1 -s DISABLE_EXCEPTION_CATCHING=0")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_MEMORY=268435456")  # 256MB + resize
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=1")
add_definitions(
  -DDISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=1
)

# Stone of Orthanc configuration
# ---------------------------------------------------------------
set(ALLOW_DOWNLOADS ON)

include(${CMAKE_SOURCE_DIR}/../../OrthancStone/Resources/CMake/OrthancStoneParameters.cmake)

SET(ENABLE_DCMTK ON)
SET(ENABLE_DCMTK_NETWORKING OFF)
SET(ENABLE_DCMTK_TRANSCODING OFF)
SET(ENABLE_GOOGLE_TEST OFF)
SET(ENABLE_LOCALE ON)  # Necessary for text rendering
SET(ENABLE_WASM ON)
SET(ORTHANC_SANDBOXED ON)

# this will set up the build system for Stone of Orthanc and will
# populate the ORTHANC_STONE_SOURCES CMake variable
include(${ORTHANC_STONE_ROOT}/Resources/CMake/OrthancStoneConfiguration.cmake)

if (CMAKE_BUILD_TYPE MATCHES Debug)
  # specific flags go here
elseif (CMAKE_BUILD_TYPE MATCHES RelWithDebInfo)
  # specific flags go here
elseif (CMAKE_BUILD_TYPE MATCHES Release)
  # specific flags go here
else()
  message(FATAL_ERROR "CMAKE_BUILD_TYPE must match either Debug, RelWithDebInfo or Release" )
endif()

################################################################################

project(StoneWebViewer)


# Create the wrapper to call C++ from JavaScript
# ---------------------------------------------------------------

set(LIBCLANG "libclang-4.0.so.1" CACHE PATH "Version of clang to generate the code model")
set(STONE_WRAPPER ${CMAKE_CURRENT_BINARY_DIR}/stone.js)

add_custom_command(
  COMMAND
  ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/ParseWebAssemblyExports.py --libclang=${LIBCLANG} ${CMAKE_SOURCE_DIR}/StoneWebViewer.cpp > ${STONE_WRAPPER}
  DEPENDS
  ${CMAKE_SOURCE_DIR}/StoneWebViewer.cpp
  ${CMAKE_SOURCE_DIR}/ParseWebAssemblyExports.py
  OUTPUT
  ${STONE_WRAPPER}
  )

add_custom_target(StoneWrapper
  DEPENDS
  ${STONE_WRAPPER}
  )  


# Define the WASM module
# ---------------------------------------------------------------

add_executable(StoneWebViewer
  ${ORTHANC_STONE_SOURCES}
  ${AUTOGENERATED_SOURCES}
  StoneWebViewer.cpp
  )

# Make sure to have the wrapper generated
add_dependencies(StoneWebViewer StoneWrapper)


# Declare installation files for the module
# ---------------------------------------------------------------

install(
  TARGETS StoneWebViewer
  RUNTIME DESTINATION .
  )


# Declare installation files for the companion files (web scaffolding)
# please note that ${CMAKE_CURRENT_BINARY_DIR}/StoneWebViewer.js
# (the generated JS loader for the WASM module) is handled by the `install`
# section above: it is considered to be the binary output of 
# the linker.
# ---------------------------------------------------------------
install(
  FILES
  ${CMAKE_CURRENT_BINARY_DIR}/StoneWebViewer.wasm
  ${CMAKE_SOURCE_DIR}/../WebApplication/app.css
  ${CMAKE_SOURCE_DIR}/../WebApplication/app.js
  ${CMAKE_SOURCE_DIR}/../WebApplication/index.html
  ${STONE_WRAPPER}
  DESTINATION .
  )

install(
  FILES
  ${CMAKE_SOURCE_DIR}/../WebApplication/img/grid1x1.png
  ${CMAKE_SOURCE_DIR}/../WebApplication/img/grid1x2.png
  ${CMAKE_SOURCE_DIR}/../WebApplication/img/grid2x1.png
  ${CMAKE_SOURCE_DIR}/../WebApplication/img/grid2x2.png
  ${CMAKE_SOURCE_DIR}/../WebApplication/img/loading.gif
  DESTINATION img
  )