Files
FreeCADWasmDev/cMake/FreeCADWebDependencies.cmake
wangdequan b5a086fda5
Some checks failed
FreeCAD master CI / Prepare (push) Has been cancelled
FreeCAD master CI / Pixi (push) Has been cancelled
FreeCAD master CI / Ubuntu (push) Has been cancelled
FreeCAD master CI / Windows (push) Has been cancelled
FreeCAD master CI / Lint (push) Has been cancelled
FreeCAD master CI / WrapUp (push) Has been cancelled
CodeQL Advanced / Analyze (actions) (push) Has been cancelled
CodeQL Advanced / Analyze (python) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
Stale Issues / stale (push) Has been cancelled
FreeCAD WebAssembly development snapshot
2026-08-20 07:00:53 +08:00

157 lines
9.5 KiB
CMake

# SPDX-License-Identifier: LGPL-2.1-or-later
set(FREECAD_WEB_DEPENDENCY_ROOT "${CMAKE_SOURCE_DIR}/build-web" CACHE PATH
"Root containing the installed Emscripten dependencies")
set(FREECAD_WEB_YAML_ROOT "${FREECAD_WEB_DEPENDENCY_ROOT}/yaml-install" CACHE PATH
"yaml-cpp Emscripten installation prefix")
set(FREECAD_WEB_EIGEN_ROOT "${FREECAD_WEB_DEPENDENCY_ROOT}/eigen-install" CACHE PATH
"Eigen 3.4.0 installation prefix")
set(FREECAD_WEB_BOOST_ROOT "${FREECAD_WEB_DEPENDENCY_ROOT}/boost-install" CACHE PATH
"Boost 1.83.0 Emscripten installation prefix")
set(FREECAD_WEB_QT_ROOT "${FREECAD_WEB_DEPENDENCY_ROOT}/qt-install" CACHE PATH
"Qt Emscripten installation prefix")
set(FREECAD_WEB_PYTHON_ROOT "${FREECAD_WEB_DEPENDENCY_ROOT}/python-install" CACHE PATH
"CPython Emscripten installation prefix")
set(FREECAD_WEB_ICU_ROOT "${FREECAD_WEB_DEPENDENCY_ROOT}/icu-install" CACHE PATH
"ICU 68.2 Emscripten installation prefix")
set(FREECAD_WEB_ZLIB_ROOT "${FREECAD_WEB_DEPENDENCY_ROOT}/zlib-install" CACHE PATH
"zlib 1.3 Emscripten installation prefix")
set(FREECAD_WEB_XERCESC_ROOT "${FREECAD_WEB_DEPENDENCY_ROOT}/xerces-install" CACHE PATH
"Xerces-C 3.2.4 Emscripten installation prefix")
set(FREECAD_WEB_OCCT_ROOT "${FREECAD_WEB_DEPENDENCY_ROOT}/occt-install" CACHE PATH
"OpenCASCADE 7.6.3 Emscripten installation prefix")
set(FREECAD_WEB_HOST_PYTHON_EXECUTABLE "" CACHE FILEPATH
"Native Python used for configure-time generators in a Web build")
function(_freecad_web_require path description)
if(NOT EXISTS "${path}")
message(FATAL_ERROR
"FREECAD_WEB requires ${description} at ${path}. "
"Run tools/prepare_web_dependencies.sh first or set the matching "
"FREECAD_WEB_*_ROOT cache variable.")
endif()
endfunction()
set(_freecad_web_yaml_dir "${FREECAD_WEB_YAML_ROOT}/lib/cmake/yaml-cpp")
set(_freecad_web_eigen_include "${FREECAD_WEB_EIGEN_ROOT}/include/eigen3")
set(_freecad_web_boost_include "${FREECAD_WEB_BOOST_ROOT}/include")
set(_freecad_web_boost_library_dir "${FREECAD_WEB_BOOST_ROOT}/lib")
set(_freecad_web_qt_cmake_root "${FREECAD_WEB_QT_ROOT}/lib/cmake")
set(_freecad_web_python_include "${FREECAD_WEB_PYTHON_ROOT}/include/python3.12")
set(_freecad_web_python_library "${FREECAD_WEB_PYTHON_ROOT}/lib/libpython3.12.a")
set(_freecad_web_icu_include "${FREECAD_WEB_ICU_ROOT}/include")
set(_freecad_web_icu_uc_library "${FREECAD_WEB_ICU_ROOT}/lib/libicuuc.a")
set(_freecad_web_icu_i18n_library "${FREECAD_WEB_ICU_ROOT}/lib/libicui18n.a")
set(_freecad_web_icu_data_library "${FREECAD_WEB_ICU_ROOT}/lib/libicudata.a")
set(_freecad_web_zlib_include "${FREECAD_WEB_ZLIB_ROOT}/include")
set(_freecad_web_zlib_library "${FREECAD_WEB_ZLIB_ROOT}/lib/libz.a")
set(_freecad_web_xerces_include "${FREECAD_WEB_XERCESC_ROOT}/include")
set(_freecad_web_xerces_library "${FREECAD_WEB_XERCESC_ROOT}/lib/libxerces-c.a")
set(_freecad_web_occt_dir "${FREECAD_WEB_OCCT_ROOT}/lib/cmake/opencascade")
_freecad_web_require("${_freecad_web_yaml_dir}/yaml-cpp-config.cmake" "yaml-cpp CMake package")
_freecad_web_require("${_freecad_web_eigen_include}/signature_of_eigen3_matrix_library" "Eigen Web headers")
_freecad_web_require("${_freecad_web_eigen_include}/Eigen/src/Core/util/Macros.h" "Eigen version header")
_freecad_web_require("${_freecad_web_boost_include}/boost/version.hpp" "Boost Web headers")
foreach(_freecad_web_boost_component program_options regex thread date_time atomic)
_freecad_web_require("${_freecad_web_boost_library_dir}/libboost_${_freecad_web_boost_component}.a"
"Boost Web ${_freecad_web_boost_component} library")
endforeach()
_freecad_web_require("${_freecad_web_qt_cmake_root}/Qt5/Qt5Config.cmake" "Qt5 CMake package")
_freecad_web_require("${_freecad_web_qt_cmake_root}/Qt5Core/Qt5CoreConfig.cmake" "Qt5Core CMake package")
_freecad_web_require("${_freecad_web_qt_cmake_root}/Qt5Network/Qt5NetworkConfig.cmake" "Qt5Network CMake package")
_freecad_web_require("${_freecad_web_qt_cmake_root}/Qt5Xml/Qt5XmlConfig.cmake" "Qt5Xml CMake package")
_freecad_web_require("${_freecad_web_python_include}/Python.h" "CPython 3.12 Web headers")
_freecad_web_require("${_freecad_web_python_library}" "CPython 3.12 Web static library")
_freecad_web_require("${_freecad_web_icu_include}/unicode/utypes.h" "ICU Web headers")
_freecad_web_require("${_freecad_web_icu_uc_library}" "ICU Web uc static library")
_freecad_web_require("${_freecad_web_icu_i18n_library}" "ICU Web i18n static library")
_freecad_web_require("${_freecad_web_icu_data_library}" "ICU Web data static library")
_freecad_web_require("${_freecad_web_zlib_include}/zlib.h" "zlib Web headers")
_freecad_web_require("${_freecad_web_zlib_library}" "zlib Web static library")
_freecad_web_require("${_freecad_web_xerces_include}/xercesc/util/PlatformUtils.hpp" "Xerces-C Web headers")
_freecad_web_require("${_freecad_web_xerces_library}" "Xerces-C Web static library")
_freecad_web_require("${_freecad_web_occt_dir}/OpenCASCADEConfig.cmake" "OpenCASCADE Web CMake package")
_freecad_web_require("${FREECAD_WEB_OCCT_ROOT}/include/opencascade/Standard_Version.hxx" "OpenCASCADE Web headers")
_freecad_web_require("${FREECAD_WEB_OCCT_ROOT}/lib/libTKernel.a" "OpenCASCADE Web foundation library")
if(NOT FREECAD_WEB_HOST_PYTHON_EXECUTABLE)
find_program(_freecad_web_host_python NAMES python3.12 python3)
if(NOT _freecad_web_host_python)
message(FATAL_ERROR
"FREECAD_WEB needs a native Python 3.12 interpreter for configure-time generators. "
"Set FREECAD_WEB_HOST_PYTHON_EXECUTABLE.")
endif()
set(FREECAD_WEB_HOST_PYTHON_EXECUTABLE "${_freecad_web_host_python}" CACHE FILEPATH
"Native Python used for configure-time generators in a Web build" FORCE)
endif()
# Emscripten's package root mode excludes arbitrary host paths, so direct the
# package lookups at the validated target installations. Python deliberately
# combines a native interpreter with WebAssembly development artifacts.
set("yaml-cpp_DIR" "${_freecad_web_yaml_dir}" CACHE PATH "Web yaml-cpp package" FORCE)
set(EIGEN3_INCLUDE_DIR "${_freecad_web_eigen_include}" CACHE PATH "Eigen Web headers" FORCE)
set(Boost_ROOT "${FREECAD_WEB_BOOST_ROOT}" CACHE PATH "Boost Web installation prefix" FORCE)
set(BOOST_ROOT "${FREECAD_WEB_BOOST_ROOT}" CACHE PATH "Boost Web installation prefix" FORCE)
set(Boost_NO_SYSTEM_PATHS ON CACHE BOOL "Use only the Boost Web installation" FORCE)
set(Boost_USE_STATIC_LIBS ON CACHE BOOL "Use Boost Web static libraries" FORCE)
set(Boost_USE_MULTITHREADED OFF CACHE BOOL "Use single-threaded Boost Web libraries" FORCE)
set(Boost_INCLUDE_DIR "${_freecad_web_boost_include}" CACHE PATH "Boost Web headers" FORCE)
set(Boost_LIBRARY_DIR "${_freecad_web_boost_library_dir}" CACHE PATH "Boost Web libraries" FORCE)
set(Qt5_DIR "${_freecad_web_qt_cmake_root}/Qt5" CACHE PATH "Web Qt5 package" FORCE)
foreach(_freecad_web_qt_component Core Network Xml)
set("Qt5${_freecad_web_qt_component}_DIR"
"${_freecad_web_qt_cmake_root}/Qt5${_freecad_web_qt_component}"
CACHE PATH "Web Qt5${_freecad_web_qt_component} package" FORCE)
endforeach()
set(Python3_EXECUTABLE "${FREECAD_WEB_HOST_PYTHON_EXECUTABLE}" CACHE FILEPATH
"Native Python for Web configure-time generators" FORCE)
set(Python3_INCLUDE_DIR "${_freecad_web_python_include}" CACHE PATH
"CPython Web development headers" FORCE)
set(Python3_LIBRARY "${_freecad_web_python_library}" CACHE FILEPATH
"CPython Web static library" FORCE)
set(ICU_ROOT "${FREECAD_WEB_ICU_ROOT}" CACHE PATH "Web ICU installation prefix" FORCE)
set(ICU_INCLUDE_DIR "${_freecad_web_icu_include}" CACHE PATH "Web ICU headers" FORCE)
set(ICU_UC_LIBRARY "${_freecad_web_icu_uc_library}" CACHE FILEPATH "Web ICU uc library" FORCE)
set(ICU_UC_LIBRARY_RELEASE "${_freecad_web_icu_uc_library}" CACHE FILEPATH "Web ICU uc release library" FORCE)
set(ICU_I18N_LIBRARY "${_freecad_web_icu_i18n_library}" CACHE FILEPATH "Web ICU i18n library" FORCE)
set(ICU_I18N_LIBRARY_RELEASE "${_freecad_web_icu_i18n_library}" CACHE FILEPATH "Web ICU i18n release library" FORCE)
set(FREECAD_WEB_ICU_DATA_LIBRARY "${_freecad_web_icu_data_library}" CACHE FILEPATH
"Web ICU data static library" FORCE)
set(ZLIB_ROOT "${FREECAD_WEB_ZLIB_ROOT}" CACHE PATH "zlib Web installation prefix" FORCE)
set(ZLIB_USE_STATIC_LIBS ON CACHE BOOL "Use the zlib Web static library" FORCE)
set(ZLIB_INCLUDE_DIR "${_freecad_web_zlib_include}" CACHE PATH "zlib Web headers" FORCE)
set(ZLIB_LIBRARY "${_freecad_web_zlib_library}" CACHE FILEPATH "zlib Web static library" FORCE)
set(ZLIB_LIBRARY_RELEASE "${_freecad_web_zlib_library}" CACHE FILEPATH
"zlib Web release library" FORCE)
set(XercesC_INCLUDE_DIR "${_freecad_web_xerces_include}" CACHE PATH
"Xerces-C Web headers" FORCE)
set(XercesC_LIBRARY "${_freecad_web_xerces_library}" CACHE FILEPATH
"Xerces-C Web static library" FORCE)
set(OpenCASCADE_DIR "${_freecad_web_occt_dir}" CACHE PATH
"OpenCASCADE Web CMake package" FORCE)
set(OCCT_CMAKE_FALLBACK OFF CACHE BOOL "Use the OpenCASCADE Web CMake package" FORCE)
unset(_freecad_web_yaml_dir)
unset(_freecad_web_eigen_include)
unset(_freecad_web_boost_include)
unset(_freecad_web_boost_library_dir)
unset(_freecad_web_qt_cmake_root)
unset(_freecad_web_python_include)
unset(_freecad_web_python_library)
unset(_freecad_web_icu_include)
unset(_freecad_web_icu_uc_library)
unset(_freecad_web_icu_i18n_library)
unset(_freecad_web_icu_data_library)
unset(_freecad_web_zlib_include)
unset(_freecad_web_zlib_library)
unset(_freecad_web_xerces_include)
unset(_freecad_web_xerces_library)
unset(_freecad_web_occt_dir)
unset(_freecad_web_host_python)