]> OCCT Git - occt.git/commitdiff
Testing - WebAssembly build validation #256
authorPasukhin Dmitry <dpasukhi@opencascade.com>
Fri, 14 Feb 2025 16:08:45 +0000 (17:08 +0100)
committerGitHub <noreply@github.com>
Fri, 14 Feb 2025 16:08:45 +0000 (16:08 +0000)
Add WebAssembly build workflow for Ubuntu and update CMake warnings for OpenGL usage
Add workaround for platform-specific macros setup before project command
Update CMake configuration for Emscripten and Android toolchains;
Disable default features for vcpkg manifest
Update GitHub workflows to support multiple build types and improve compiler flag handling
Disabled DETools module for Emscripten support in CMake configuration

.github/workflows/build-multiconfig-mingw.yml
.github/workflows/build-multiconfig-msvc.yml
.github/workflows/build-multiconfig-ubuntu.yml
.github/workflows/build-occt-wasm-ubuntu.yml [new file with mode: 0644]
.github/workflows/build-occt-with-vcpkg.yml
CMakeLists.txt

index 373ab385625839791454fc80e57ed7ab133b8018..374c92ccf23309657cd6acbf89470f13abdb043b 100644 (file)
@@ -27,6 +27,7 @@ jobs:
               cxx: "x86_64-w64-mingw32-g++",
               package: "mingw-w64-x86_64-toolchain",
               thirdparty_dir: "/mingw64",
+              compiler_flags: "",
               dependencies: "mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja mingw-w64-x86_64-rapidjson mingw-w64-x86_64-freetype mingw-w64-x86_64-draco mingw-w64-x86_64-freeimage mingw-w64-x86_64-tbb mingw-w64-x86_64-tk mingw-w64-x86_64-tcl mingw-w64-x86_64-openvr mingw-w64-x86_64-jemalloc mingw-w64-x86_64-mesa mingw-w64-x86_64-angleproject mingw-w64-x86_64-llvm-openmp mingw-w64-x86_64-winpthreads-git mingw-w64-x86_64-libwinpthread-git mingw-w64-cross-mingwarm64-winpthreads"
             }
           - {
@@ -35,6 +36,7 @@ jobs:
               cxx: "clang++",
               package: "mingw-w64-clang-x86_64-toolchain",
               thirdparty_dir: "/clang64",
+              compiler_flags: "-D CMAKE_CXX_FLAGS=\"-Wall -Wextra\" -D CMAKE_C_FLAGS=\"-Wall -Wextra\"",
               dependencies: "mingw-w64-clang-x86_64-cmake mingw-w64-clang-x86_64-ninja mingw-w64-clang-x86_64-rapidjson mingw-w64-clang-x86_64-freetype mingw-w64-clang-x86_64-draco mingw-w64-clang-x86_64-freeimage mingw-w64-clang-x86_64-tbb mingw-w64-clang-x86_64-tk mingw-w64-clang-x86_64-tcl mingw-w64-clang-x86_64-openvr mingw-w64-clang-x86_64-jemalloc mingw-w64-clang-x86_64-mesa mingw-w64-clang-x86_64-angleproject mingw-w64-clang-x86_64-llvm-openmp mingw-w64-clang-x86_64-winpthreads-git mingw-w64-clang-x86_64-libwinpthread-git mingw-w64-cross-mingwarm64-winpthreads"
             }
           - {
@@ -43,8 +45,10 @@ jobs:
               cxx: "x86_64-w64-mingw32-g++",
               package: "mingw-w64-ucrt-x86_64-toolchain",
               thirdparty_dir: "/ucrt64",
+              compiler_flags: "",
               dependencies: "mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-gcc-libs mingw-w64-ucrt-x86_64-omp mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-ninja mingw-w64-ucrt-x86_64-rapidjson mingw-w64-ucrt-x86_64-freetype mingw-w64-ucrt-x86_64-draco mingw-w64-ucrt-x86_64-freeimage mingw-w64-ucrt-x86_64-tbb mingw-w64-ucrt-x86_64-tk mingw-w64-ucrt-x86_64-tcl mingw-w64-ucrt-x86_64-openvr mingw-w64-ucrt-x86_64-jemalloc mingw-w64-ucrt-x86_64-mesa mingw-w64-ucrt-x86_64-angleproject mingw-w64-ucrt-x86_64-llvm-openmp mingw-w64-ucrt-x86_64-winpthreads-git mingw-w64-ucrt-x86_64-libwinpthread-git mingw-w64-cross-mingwarm64-winpthreads"
             }
+        build_type: [Debug, Release]
 
     steps:
     - name: Checkout repository
@@ -77,14 +81,14 @@ jobs:
               -D CMAKE_C_COMPILER=${{ matrix.config.cc }} \
               -D CMAKE_CXX_COMPILER=${{ matrix.config.cxx }} \
               -D CMAKE_PREFIX_PATH=$MSYSTEM_PREFIX \
-              -D CMAKE_CXX_FLAGS="-Wall -Wextra" \
-              -D CMAKE_C_FLAGS="-Wall -Wextra" ..
+              -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} \
+              ${{ matrix.config.compiler_flags }} ..
 
     - name: Build basic
       shell: msys2 {0}
       run: |
         cd build
-        cmake --build . -- -j 4
+        cmake --build . --config ${{ matrix.build_type }} -- -j 4
 
     - name: Clear up after build
       shell: pwsh
@@ -105,9 +109,9 @@ jobs:
               -D BUILD_OPT_PROFILE=Production \
               -D BUILD_LIBRARY_TYPE=Shared \
               -D USE_TK=ON \
-              -D CMAKE_BUILD_TYPE=Debug \
+              -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} \
               -D USE_MMGR_TYPE=JEMALLOC \
-              -D INSTALL_DIR="${{ github.workspace }}/install" \
+              -D INSTALL_DIR="${{ github.workspace }}/install-${{ matrix.build_type }}" \
               -D USE_FREETYPE=ON \
               -D USE_DRACO=ON \
               -D USE_FFMPEG=OFF \
@@ -118,20 +122,19 @@ jobs:
               -D USE_TBB=OFF \
               -D USE_RAPIDJSON=ON \
               -D USE_OPENGL=ON \
-              -D CMAKE_CXX_FLAGS="-Wall -Wextra" \
-              -D CMAKE_C_FLAGS="-Wall -Wextra" ..
+              ${{ matrix.config.compiler_flags }} ..
 
     - name: Build full shared
       shell: msys2 {0}
       run: |
         cd build
-        cmake --build . --target install --config Debug -- -j 4
+        cmake --build . --target install --config ${{ matrix.build_type }} -- -j 4
     
     - name: Clear up after build
       shell: pwsh
       run: |
         Remove-Item -Recurse -Force build
-        Remove-Item -Recurse -Force ${{ github.workspace }}/install
+        Remove-Item -Recurse -Force ${{ github.workspace }}/install-${{ matrix.build_type }}
 
     - name: Configure full static
       shell: msys2 {0}
@@ -144,12 +147,12 @@ jobs:
               -D CMAKE_PREFIX_PATH=$MSYSTEM_PREFIX \
               -D BUILD_USE_PCH=OFF \
               -D BUILD_INCLUDE_SYMLINK=ON \
-              -D BUILD_OPT_PROFILE=Production \
+              -D BUILD_OPT_PROFILE=Default \
               -D BUILD_LIBRARY_TYPE=Static \
               -D USE_TK=ON \
-              -D CMAKE_BUILD_TYPE=Debug \
+              -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} \
               -D USE_MMGR_TYPE=JEMALLOC \
-              -D INSTALL_DIR="${{ github.workspace }}/install" \
+              -D INSTALL_DIR="${{ github.workspace }}/install-${{ matrix.build_type }}" \
               -D USE_FREETYPE=ON \
               -D USE_DRACO=ON \
               -D USE_FFMPEG=OFF \
@@ -160,20 +163,19 @@ jobs:
               -D USE_TBB=OFF \
               -D USE_RAPIDJSON=ON \
               -D USE_OPENGL=ON \
-              -D CMAKE_CXX_FLAGS="-Wall -Wextra" \
-              -D CMAKE_C_FLAGS="-Wall -Wextra" ..
+              ${{ matrix.config.compiler_flags }} ..
 
     - name: Build full static
       shell: msys2 {0}
       run: |
         cd build
-        cmake --build . --target install --config Debug -- -j 4
+        cmake --build . --target install --config ${{ matrix.build_type }} -- -j 4
 
     - name: Clear up after build
       shell: pwsh
       run: |
         Remove-Item -Recurse -Force build
-        Remove-Item -Recurse -Force ${{ github.workspace }}/install
+        Remove-Item -Recurse -Force ${{ github.workspace }}/install-${{ matrix.build_type }}
 
     - name: Configure full with DEBUG define
       shell: msys2 {0}
@@ -190,8 +192,8 @@ jobs:
               -D BUILD_OPT_PROFILE=Production \
               -D BUILD_LIBRARY_TYPE=Shared \
               -D USE_TK=ON \
-              -D CMAKE_BUILD_TYPE=Debug \
-              -D INSTALL_DIR="${{ github.workspace }}/install" \
+              -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} \
+              -D INSTALL_DIR="${{ github.workspace }}/install-${{ matrix.build_type }}" \
               -D USE_FREETYPE=ON \
               -D USE_DRACO=ON \
               -D USE_FFMPEG=OFF \
@@ -201,16 +203,17 @@ jobs:
               -D USE_VTK=OFF \
               -D USE_TBB=OFF \
               -D USE_RAPIDJSON=ON \
-              -D USE_OPENGL=ON ..
+              -D USE_OPENGL=ON \
+              ${{ matrix.config.compiler_flags }} ..
 
     - name: Build full with DEBUG define
       shell: msys2 {0}
       run: |
         cd build
-        cmake --build . --target install --config Debug -- -j 4
+        cmake --build . --target install --config ${{ matrix.build_type }} -- -j 4
       
     - name: Clear up after build
       shell: pwsh
       run: |
         Remove-Item -Recurse -Force build
-        Remove-Item -Recurse -Force ${{ github.workspace }}/install
+        Remove-Item -Recurse -Force ${{ github.workspace }}/install-${{ matrix.build_type }}
index c4881d9b91570c46fa7c03f6946a0c0ce77c9db8..ae47bbac330f89bc8858dd9c4eb400287ec923b4 100644 (file)
@@ -141,7 +141,7 @@ jobs:
               -D CMAKE_CXX_COMPILER=${{ matrix.config.cxx }} `
               -D BUILD_USE_PCH=OFF `
               -D BUILD_INCLUDE_SYMLINK=ON `
-              -D BUILD_OPT_PROFILE=Production `
+              -D BUILD_OPT_PROFILE=Default `
               -D BUILD_LIBRARY_TYPE=Static `
               -D CMAKE_BUILD_TYPE=Debug `
               -D INSTALL_DIR=${{ github.workspace }}/install `
index 5fe89fb2fae7f8e43516eb143292b3ebc1ce5fa4..64d465722e00d27ccf510e0482487557ab6aaa41 100644 (file)
@@ -24,13 +24,16 @@ jobs:
           - {
               name: "GCC",
               cc: "gcc",
-              cxx: "g++"
+              cxx: "g++",
+              compiler_flags: ""
             }
           - {
               name: "Clang",
               cc: "clang",
-              cxx: "clang++"
+              cxx: "clang++",
+              compiler_flags: "-D CMAKE_CXX_FLAGS=\"-Werror -Wall -Wextra\" -D CMAKE_C_FLAGS=\"-Werror -Wall -Wextra\""
             }
+        build_type: [Debug, Release]
 
     steps:
     - name: Checkout repository
@@ -51,13 +54,13 @@ jobs:
         cmake -G "Ninja" \
               -D CMAKE_C_COMPILER=${{ matrix.config.cc }} \
               -D CMAKE_CXX_COMPILER=${{ matrix.config.cxx }} \
-              -D CMAKE_CXX_FLAGS="-Werror -Wall -Wextra" \
-              -D CMAKE_C_FLAGS="-Werror -Wall -Wextra" ..
+              -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} \
+              ${{ matrix.config.compiler_flags }} ..
 
     - name: Build basic
       run: |
         cd build
-        cmake --build . -- -j 4
+        cmake --build . --config ${{ matrix.build_type }} -- -j 4
 
     - name: Clear up after build
       run: |
@@ -75,9 +78,9 @@ jobs:
               -D BUILD_OPT_PROFILE=Production \
               -D BUILD_LIBRARY_TYPE=Shared \
               -D USE_TK=ON \
-              -D CMAKE_BUILD_TYPE=Debug \
+              -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} \
               -D USE_MMGR_TYPE=JEMALLOC \
-              -D INSTALL_DIR=${{ github.workspace }}/install \
+              -D INSTALL_DIR=${{ github.workspace }}/install-${{ matrix.build_type }} \
               -D 3RDPARTY_RAPIDJSON_DIR=${{ github.workspace }}/rapidjson-858451e5b7d1c56cf8f6d58f88cf958351837e53 \
               -D USE_FREETYPE=ON \
               -D USE_DRACO=ON \
@@ -89,18 +92,17 @@ jobs:
               -D USE_TBB=ON \
               -D USE_RAPIDJSON=ON \
               -D USE_OPENGL=ON \
-              -D CMAKE_CXX_FLAGS="-Werror -Wall -Wextra" \
-              -D CMAKE_C_FLAGS="-Werror -Wall -Wextra" ..
+              ${{ matrix.config.compiler_flags }} ..
 
     - name: Build full shared
       run: |
         cd build
-        cmake --build . --target install --config Debug -- -j 4
+        cmake --build . --target install --config ${{ matrix.build_type }} -- -j 4
     
     - name: Clear up after build
       run: |
         rm -rf build
-        rm -rf ${{ github.workspace }}/install
+        rm -rf ${{ github.workspace }}/install-${{ matrix.build_type }}
 
     - name: Configure full static
       run: |
@@ -111,12 +113,12 @@ jobs:
               -D CMAKE_CXX_COMPILER=${{ matrix.config.cxx }} \
               -D BUILD_USE_PCH=OFF \
               -D BUILD_INCLUDE_SYMLINK=ON \
-              -D BUILD_OPT_PROFILE=Production \
+              -D BUILD_OPT_PROFILE=Default \
               -D BUILD_LIBRARY_TYPE=Static \
               -D USE_TK=ON \
-              -D CMAKE_BUILD_TYPE=Debug \
+              -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} \
               -D USE_MMGR_TYPE=JEMALLOC \
-              -D INSTALL_DIR=${{ github.workspace }}/install \
+              -D INSTALL_DIR=${{ github.workspace }}/install-${{ matrix.build_type }} \
               -D 3RDPARTY_RAPIDJSON_DIR=${{ github.workspace }}/rapidjson-858451e5b7d1c56cf8f6d58f88cf958351837e53 \
               -D USE_FREETYPE=ON \
               -D USE_DRACO=ON \
@@ -128,18 +130,17 @@ jobs:
               -D USE_TBB=ON \
               -D USE_RAPIDJSON=ON \
               -D USE_OPENGL=ON \
-              -D CMAKE_CXX_FLAGS="-Werror -Wall -Wextra" \
-              -D CMAKE_C_FLAGS="-Werror -Wall -Wextra" ..
+              ${{ matrix.config.compiler_flags }} ..
 
     - name: Build full static
       run: |
         cd build
-        cmake --build . --target install --config Debug -- -j 4
+        cmake --build . --target install --config ${{ matrix.build_type }} -- -j 4
 
     - name: Clear up after build
       run: |
         rm -rf build
-        rm -rf ${{ github.workspace }}/install
+        rm -rf ${{ github.workspace }}/install-${{ matrix.build_type }}
 
     - name: Configure full with DEBUG define
       run: |
@@ -154,8 +155,8 @@ jobs:
               -D BUILD_OPT_PROFILE=Production \
               -D BUILD_LIBRARY_TYPE=Shared \
               -D USE_TK=ON \
-              -D CMAKE_BUILD_TYPE=Debug \
-              -D INSTALL_DIR=${{ github.workspace }}/install \
+              -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} \
+              -D INSTALL_DIR=${{ github.workspace }}/install-${{ matrix.build_type }} \
               -D 3RDPARTY_RAPIDJSON_DIR=${{ github.workspace }}/rapidjson-858451e5b7d1c56cf8f6d58f88cf958351837e53 \
               -D USE_FREETYPE=ON \
               -D USE_DRACO=ON \
@@ -171,9 +172,9 @@ jobs:
     - name: Build full with DEBUG define
       run: |
         cd build
-        cmake --build . --target install --config Debug -- -j 4
+        cmake --build . --target install --config ${{ matrix.build_type }} -- -j 4
       
     - name: Clear up after build
       run: |
         rm -rf build
-        rm -rf ${{ github.workspace }}/install
+        rm -rf ${{ github.workspace }}/install-${{ matrix.build_type }}
diff --git a/.github/workflows/build-occt-wasm-ubuntu.yml b/.github/workflows/build-occt-wasm-ubuntu.yml
new file mode 100644 (file)
index 0000000..9279687
--- /dev/null
@@ -0,0 +1,102 @@
+# This workflow validates the WebAssembly build on Ubuntu.
+# It is triggered on pushes to the master branch.
+# The workflow includes steps to install dependencies, configure, build, and clean up the project.
+
+name: WebAssembly build (Ubuntu)
+
+on:
+  push:
+    branches:
+      - 'master'
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
+  cancel-in-progress: true
+
+env:
+  USERNAME: Open-Cascade-SAS
+  VCPKG_EXE: ${{ github.workspace }}/vcpkg/vcpkg
+  FEED_URL: https://nuget.pkg.github.com/Open-Cascade-SAS/index.json
+  VCPKG_BINARY_SOURCES: "clear;nuget,https://nuget.pkg.github.com/Open-Cascade-SAS/index.json,readwrite"
+  EMSDK_VERSION: 3.1.74
+
+jobs:
+  wasm-build:
+    name: WebAssembly Build
+    runs-on: ubuntu-24.04
+
+    strategy:
+      matrix:
+        build_type: [Debug, Release]
+
+    steps:
+    - name: Checkout repository
+      uses: actions/checkout@v4.1.7
+
+    - name: Install dependencies
+      run: |
+        sudo apt-get update
+        sudo apt-get install -y build-essential ninja-build curl zip unzip tar nasm autoconf mono-complete
+        sudo apt-get install -y libxi-dev libgl1-mesa-dev libglu1-mesa-dev mesa-common-dev libxrandr-dev libxxf86vm-dev
+
+    - name: Setup vcpkg
+      run: |
+        git clone https://github.com/microsoft/vcpkg.git
+        ./vcpkg/bootstrap-vcpkg.sh
+
+    - name: Add NuGet sources
+      run: |
+        mono $(${VCPKG_EXE} fetch nuget | tail -n 1) \
+          sources add \
+          -Source "${FEED_URL}" \
+          -StorePasswordInClearText \
+          -Name GitHubPackages \
+          -UserName "${USERNAME}" \
+          -Password "${{ secrets.GITHUB_TOKEN }}"
+        mono $(${VCPKG_EXE} fetch nuget | tail -n 1) \
+          setapikey "${{ secrets.GITHUB_TOKEN }}" \
+          -Source "${FEED_URL}"
+
+    - name: Setup Emscripten
+      run: |
+        git clone https://github.com/emscripten-core/emsdk.git
+        cd emsdk
+        ./emsdk install ${EMSDK_VERSION}
+        ./emsdk activate ${EMSDK_VERSION}
+        echo "EMSDK=${{ github.workspace }}/emsdk" >> $GITHUB_ENV
+        echo "${{ github.workspace }}/emsdk" >> $GITHUB_PATH
+        echo "${{ github.workspace }}/emsdk/upstream/emscripten" >> $GITHUB_PATH
+
+    - name: Configure OCCT with vcpkg
+      run: |
+        source "${{ github.workspace }}/emsdk/emsdk_env.sh"
+        mkdir -p "build-${{ matrix.build_type }}"
+        cd "build-${{ matrix.build_type }}"
+        export VCPKG_ROOT="${{ github.workspace }}/vcpkg"
+        emcmake cmake -G "Ninja" \
+          -DCMAKE_TOOLCHAIN_FILE="${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" \
+          -DVCPKG_TARGET_TRIPLET=wasm32-emscripten \
+          -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE="$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake" \
+          -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
+          -DBUILD_USE_VCPKG=ON \
+          -DUSE_MMGR_TYPE=NATIVE \
+          -DBUILD_LIBRARY_TYPE=Static \
+          -DBUILD_MODULE_Draw=OFF \
+          -DUSE_FREETYPE=OFF \
+          -DUSE_TK=OFF \
+          -DUSE_TCL=OFF \
+          -DUSE_DRACO=ON \
+          -DUSE_FFMPEG=OFF \
+          -DUSE_FREEIMAGE=OFF \
+          -DUSE_OPENVR=OFF \
+          -DUSE_VTK=OFF \
+          -DUSE_TBB=OFF \
+          -DUSE_RAPIDJSON=ON \
+          -DINSTALL_DIR="${{ github.workspace }}/install-wasm-${{ matrix.build_type }}" \
+          -DCMAKE_CXX_FLAGS="-s WASM=1 -s EXPORTED_RUNTIME_METHODS=['ccall','cwrap'] -s ALLOW_MEMORY_GROWTH=1" \
+          -DCMAKE_EXECUTABLE_SUFFIX=".js" ..
+
+    - name: Build
+      run: |
+        cd build-${{ matrix.build_type }}
+        cmake --build . --config ${{ matrix.build_type }} --target install -- -j4
index a3a99f115e7f6a0b3a668c87073360008bbeb313..32ed7a1586aa9327f102fed7c95a0ebd11d4bdde 100644 (file)
@@ -25,7 +25,7 @@ jobs:
     runs-on: ${{ matrix.os }}
     strategy:
       matrix:
-        os: [ubuntu-24.04, ubuntu-22.04, ubuntu-20.04, windows-2022, windows-2019, macos-15, macos-14, macos-13]
+        os: [ubuntu-24.04, ubuntu-22.04, windows-2022, windows-2019, macos-15, macos-14, macos-13]
         build_type: [Debug, Release]
 
     steps:
index 3c6d24045633b6a3275fb32bec885c949dbb7964..d051f5ccce729ff7bd5f103aa32f3828077fe834 100644 (file)
@@ -32,6 +32,30 @@ if (BUILD_USE_VCPKG)
   endif()
 
   set (VCPKG_MANIFEST_DIR "${CMAKE_SOURCE_DIR}/adm/vcpkg")
+
+  # Disable default features for vcpkg manifest
+  set (VCPKG_MANIFEST_NO_DEFAULT_FEATURES 1)
+
+  # detection for Emscripten toolchain
+  if(CMAKE_TOOLCHAIN_FILE MATCHES ".*mscripten\.cmake$" OR "${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}" MATCHES ".*mscripten\.cmake$")
+    set(EMSCRIPTEN 1)
+  endif()
+
+  # detection for Android toolchain
+  if(CMAKE_TOOLCHAIN_FILE MATCHES ".*ndroid\.toolchain\.cmake$" OR "${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}" MATCHES ".*ndroid\.toolchain\.cmake$")
+    set(ANDROID 1)
+  endif()
+
+  # detection for android common variables
+  if (NOT "${CMAKE_ANDROID_NDK}" STREQUAL "" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Android" OR NOT "${ANDROID_NDK}" STREQUAL "")
+    set (ANDROID 1)
+  endif()
+else()
+  # Setting up the system and compiler specific variables.
+  # Can't be done on early stages with VCPKG enabled.
+  # VCPKG installing dependencies as soon as call PROJECT,
+  # but for then moment need to define required list of dependencies.
+  PROJECT (OCCT)
 endif()
 
 set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/adm/cmake")
@@ -99,6 +123,11 @@ else()
                          "Please use our contact form at https://occt3d.com/")
   unset (BUILD_SHARED_LIBS)
   unset (BUILD_SHARED_LIBRARY_NAME_POSTFIX)
+  if (BUILD_OPT_PROFILE STREQUAL "Production")
+    set (BUILD_OPT_PROFILE "Default" CACHE STRING "Select profile for compiler and linker." FORCE)
+    message(WARNING "Static libraries are not optimized for production builds. "
+                    "Please use shared libraries for production builds.")
+  endif()
 endif()
 
 if (WIN32)
@@ -378,6 +407,10 @@ if ("${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore" AND BUILD_MODULE_Draw)
   message (STATUS "Info. Draw module is turned off due to it is not supported on UWP")
   set (BUILD_MODULE_Draw OFF CACHE BOOL "${BUILD_MODULE_Draw_DESCR}" FORCE)
 endif()
+if (EMSCRIPTEN AND BUILD_MODULE_DETools)
+  message (STATUS "Info. DETools module is turned off due to it is not supported on Emscripten")
+  set (BUILD_MODULE_DETools OFF CACHE BOOL "${BUILD_MODULE_DETools_DESCR}" FORCE)
+endif()
 
 # accumulate used toolkits (first level) in BUILD_TOOLKITS variable
 list (APPEND BUILD_TOOLKITS ${BUILD_ADDITIONAL_TOOLKITS})
@@ -587,7 +620,9 @@ if (CAN_USE_GLES2 AND USE_GLES2)
   if (NOT IOS)
     list (APPEND OCCT_3RDPARTY_CMAKE_LIST "adm/cmake/egl")
     list (APPEND OCCT_3RDPARTY_CMAKE_LIST "adm/cmake/gles2")
-    OCCT_ADD_VCPKG_FEATURE ("angle")
+    if (NOT EMSCRIPTEN)
+      OCCT_ADD_VCPKG_FEATURE ("angle")
+    endif()
   endif()
 else()
   if (NOT CAN_USE_GLES2)
@@ -729,8 +764,12 @@ else()
   OCCT_CHECK_AND_UNSET ("INSTALL_QT")
 endif()
 
-# the name of the project
-project (OCCT)
+# VCPKG require delayed processing of 3rdparty.
+# That is why we delay the creating project and setting up
+# the platform specific variables.
+if (BUILD_USE_VCPKG)
+  project (OCCT)
+endif()
 
 # copying clang-format file to the root of the project
 file(COPY ${CMAKE_SOURCE_DIR}/.clang-format DESTINATION ${CMAKE_SOURCE_DIR})