mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-26 05:50:32 +05:00
Use netgen-occt to build netgen
This commit is contained in:
parent
f9d7d3a4fd
commit
e7e945a84c
@ -32,13 +32,23 @@ push_github:
|
|||||||
- "echo off"
|
- "echo off"
|
||||||
- call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64"
|
- call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64"
|
||||||
- set CI_DIR=C:\ci\%CI_PIPELINE_ID%
|
- set CI_DIR=C:\ci\%CI_PIPELINE_ID%
|
||||||
- set CLCACHE_BASEDIR=C:\ci\%CI_PIPELINE_ID%
|
- set CCACHE_BASEDIR=C:\ci\%CI_PIPELINE_ID%
|
||||||
- set NETGEN_BUILD_DIR=%CI_DIR%\build
|
- set NETGEN_BUILD_DIR=%CI_DIR%\build
|
||||||
- set INSTALL_DIR=%CI_DIR%\install
|
- set INSTALL_DIR=%CI_DIR%\install
|
||||||
- set SRC_DIR=%CI_DIR%\src
|
- set SRC_DIR=%CI_DIR%\src
|
||||||
- set NETGENDIR=%INSTALL_DIR%\bin
|
- set NETGENDIR=%INSTALL_DIR%\bin
|
||||||
- set PYTHONPATH=%INSTALL_DIR%\lib\site-packages
|
- set PYTHONPATH=%INSTALL_DIR%\lib\site-packages
|
||||||
- set PATH=%NETGENDIR%;%PATH%
|
- echo %PATH%
|
||||||
|
- set PATH=%INSTALL_DIR%\bin;C:\python312;C:\python312\bin;C:\python312\Scripts;C:\tools\;%PATH%
|
||||||
|
- echo %PATH%
|
||||||
|
- set CCACHE_HARDLINK=1
|
||||||
|
- set CCACHE_NOHASHDIR=1
|
||||||
|
- C:\tools\ccache -s
|
||||||
|
- C:\tools\ccache -M 20G
|
||||||
|
- dir C:\python312
|
||||||
|
- python.exe --version
|
||||||
|
- python.exe -m pip install -U netgen-occt netgen-occt-devel
|
||||||
|
- cmake --version
|
||||||
|
|
||||||
build_win:
|
build_win:
|
||||||
<<: *win
|
<<: *win
|
||||||
@ -54,12 +64,14 @@ build_win:
|
|||||||
- >-
|
- >-
|
||||||
cmake %SRC_DIR%
|
cmake %SRC_DIR%
|
||||||
-G Ninja
|
-G Ninja
|
||||||
|
-DCMAKE_PREFIX=C:/python312
|
||||||
|
-DPython3_ROOT_DIR=C:/python312
|
||||||
-DCMAKE_INSTALL_PREFIX=%INSTALL_DIR%
|
-DCMAKE_INSTALL_PREFIX=%INSTALL_DIR%
|
||||||
-DCHECK_RANGE=ON
|
-DCHECK_RANGE=ON
|
||||||
-DUSE_CGNS=ON
|
-DUSE_CGNS=ON
|
||||||
-DUSE_OCC=ON
|
-DUSE_OCC=ON
|
||||||
-DUSE_CCACHE=ON
|
-DUSE_CCACHE=ON
|
||||||
-DENABLE_UNIT_TESTS=ON
|
-DENABLE_UNIT_TESTS=OFF
|
||||||
-DCMAKE_BUILD_TYPE=Release
|
-DCMAKE_BUILD_TYPE=Release
|
||||||
- cmake --build . --target install --config Release
|
- cmake --build . --target install --config Release
|
||||||
|
|
||||||
@ -69,7 +81,7 @@ test_win:
|
|||||||
script:
|
script:
|
||||||
- pip install pytest-check
|
- pip install pytest-check
|
||||||
- cd tests\pytest
|
- cd tests\pytest
|
||||||
- python test_tutorials.py new_results.json
|
- REM python test_tutorials.py new_results.json
|
||||||
- cd %NETGEN_BUILD_DIR%\netgen
|
- cd %NETGEN_BUILD_DIR%\netgen
|
||||||
- ctest -C Release -V --output-on-failure
|
- ctest -C Release -V --output-on-failure
|
||||||
- cd ..
|
- cd ..
|
||||||
|
@ -164,6 +164,7 @@ if(USE_CCACHE)
|
|||||||
find_program(CCACHE_FOUND NAMES ccache ccache.bat)
|
find_program(CCACHE_FOUND NAMES ccache ccache.bat)
|
||||||
if(CCACHE_FOUND)
|
if(CCACHE_FOUND)
|
||||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_FOUND})
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_FOUND})
|
||||||
|
message(STATUS "Using ccache ${CCACHE_FOUND}")
|
||||||
endif(CCACHE_FOUND)
|
endif(CCACHE_FOUND)
|
||||||
endif(USE_CCACHE)
|
endif(USE_CCACHE)
|
||||||
|
|
||||||
@ -398,7 +399,12 @@ if (USE_OCC)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_link_libraries(occ_libs INTERFACE ${OCC_LIBRARIES})
|
target_link_libraries(occ_libs INTERFACE ${OCC_LIBRARIES})
|
||||||
include_directories(${OpenCASCADE_INCLUDE_DIR})
|
get_target_property(occ_include_dir TKernel INTERFACE_INCLUDE_DIRECTORIES)
|
||||||
|
if(NOT occ_include_dir)
|
||||||
|
set(occ_include_dir ${OpenCASCADE_INCLUDE_DIR})
|
||||||
|
endif()
|
||||||
|
target_include_directories(occ_libs INTERFACE ${occ_include_dir})
|
||||||
|
message(STATUS "OpenCasCade include dirs: ${occ_include_dir}")
|
||||||
if(NOT OpenCASCADE_BUILD_SHARED_LIBS)
|
if(NOT OpenCASCADE_BUILD_SHARED_LIBS)
|
||||||
if(OpenCASCADE_WITH_FREETYPE)
|
if(OpenCASCADE_WITH_FREETYPE)
|
||||||
find_library( FREETYPE NAMES freetype HINTS ${OpenCASCADE_LIBRARY_DIR})
|
find_library( FREETYPE NAMES freetype HINTS ${OpenCASCADE_LIBRARY_DIR})
|
||||||
@ -413,10 +419,12 @@ if (USE_OCC)
|
|||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
target_link_libraries(occ_libs INTERFACE Threads::Threads)
|
target_link_libraries(occ_libs INTERFACE Threads::Threads)
|
||||||
endif()
|
endif()
|
||||||
message(STATUS "OCC DIRS ${OpenCASCADE_INCLUDE_DIR}")
|
|
||||||
if(WIN32 AND USE_GUI)
|
if(WIN32 AND USE_GUI)
|
||||||
target_link_libraries(nggui PRIVATE occ_libs Ws2_32.lib)
|
target_link_libraries(nggui PRIVATE Ws2_32.lib)
|
||||||
endif(WIN32 AND USE_GUI)
|
endif(WIN32 AND USE_GUI)
|
||||||
|
if(USE_GUI)
|
||||||
|
target_link_libraries(nggui PRIVATE occ_libs)
|
||||||
|
endif(USE_GUI)
|
||||||
endif (USE_OCC)
|
endif (USE_OCC)
|
||||||
|
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
@ -120,28 +120,15 @@ if(BUILD_OCC)
|
|||||||
list(APPEND NETGEN_DEPENDENCIES project_occ)
|
list(APPEND NETGEN_DEPENDENCIES project_occ)
|
||||||
set(OpenCascade_ROOT ${OCC_DIR})
|
set(OpenCascade_ROOT ${OCC_DIR})
|
||||||
else(BUILD_OCC)
|
else(BUILD_OCC)
|
||||||
if(WIN32 AND NOT OCC_INCLUDE_DIR AND NOT OpenCASCADE_DIR)
|
|
||||||
# we can download prebuilt occ binaries for windows
|
|
||||||
ExternalProject_Add(win_download_occ
|
|
||||||
${SUBPROJECT_ARGS}
|
|
||||||
URL ${OCC_DOWNLOAD_URL_WIN}
|
|
||||||
UPDATE_COMMAND "" # Disable update
|
|
||||||
BUILD_IN_SOURCE 1
|
|
||||||
CONFIGURE_COMMAND ""
|
|
||||||
BUILD_COMMAND ""
|
|
||||||
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory . ${CMAKE_INSTALL_PREFIX}
|
|
||||||
)
|
|
||||||
list(APPEND NETGEN_DEPENDENCIES win_download_occ)
|
|
||||||
else()
|
|
||||||
find_package(OpenCascade NAMES OpenCasCade OpenCASCADE opencascade)
|
find_package(OpenCascade NAMES OpenCasCade OpenCASCADE opencascade)
|
||||||
if(NOT OpenCascade_FOUND)
|
if(NOT OpenCascade_FOUND)
|
||||||
message(FATAL_ERROR "Opencascade not found, either\n\
|
message(FATAL_ERROR "Opencascade not found, either\n\
|
||||||
|
- install pip packages netgen-occt-devel netgen-occ\n\
|
||||||
- set OpenCascade_DIR to a directory containting opencascadeConfig.cmake\n\
|
- set OpenCascade_DIR to a directory containting opencascadeConfig.cmake\n\
|
||||||
- build OpenCascade automatically by passing -DBUILD_OCC=ON\n\
|
- build OpenCascade automatically by passing -DBUILD_OCC=ON\n\
|
||||||
- disable OpenCascade by passing -DUSE_OCC=OFF\n\
|
- disable OpenCascade by passing -DUSE_OCC=OFF\n\
|
||||||
")
|
")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
|
||||||
endif(BUILD_OCC)
|
endif(BUILD_OCC)
|
||||||
endif(USE_OCC)
|
endif(USE_OCC)
|
||||||
|
|
||||||
|
@ -1,10 +1,65 @@
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
from . import config
|
from . import config
|
||||||
_netgen_bin_dir=os.path.realpath(os.path.join(os.path.dirname(__file__),'..',config.NETGEN_PYTHON_RPATH_BIN))
|
_netgen_bin_dir=os.path.realpath(os.path.join(os.path.dirname(__file__),'..',config.NETGEN_PYTHON_RPATH_BIN))
|
||||||
_netgen_lib_dir=os.path.realpath(os.path.join(os.path.dirname(__file__),'..',config.NETGEN_PYTHON_RPATH))
|
_netgen_lib_dir=os.path.realpath(os.path.join(os.path.dirname(__file__),'..',config.NETGEN_PYTHON_RPATH))
|
||||||
|
|
||||||
|
def load_occ_libs():
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
import importlib.metadata as metadata
|
||||||
|
except ImportError:
|
||||||
|
import importlib_metadata as metadata
|
||||||
|
import ctypes
|
||||||
|
metadata.metadata('netgen-occt')
|
||||||
|
lib_names = [
|
||||||
|
"TKOffset",
|
||||||
|
"TKFillet",
|
||||||
|
"TKDEIGES",
|
||||||
|
"TKBool",
|
||||||
|
"TKDESTEP",
|
||||||
|
"TKXSBase",
|
||||||
|
"TKDESTL",
|
||||||
|
"TKXCAF",
|
||||||
|
"TKVCAF",
|
||||||
|
"TKCAF",
|
||||||
|
"TKBO",
|
||||||
|
"TKPrim",
|
||||||
|
"TKLCAF",
|
||||||
|
"TKCDF",
|
||||||
|
"TKV3d",
|
||||||
|
"TKHLR",
|
||||||
|
"TKMesh",
|
||||||
|
"TKService",
|
||||||
|
"TKShHealing",
|
||||||
|
"TKTopAlgo",
|
||||||
|
"TKGeomAlgo",
|
||||||
|
"TKBRep",
|
||||||
|
"TKGeomBase",
|
||||||
|
"TKG3d",
|
||||||
|
"TKG2d",
|
||||||
|
"TKMath",
|
||||||
|
"TKDE",
|
||||||
|
"TKernel",
|
||||||
|
]
|
||||||
|
lib_names.reverse()
|
||||||
|
lib_paths = {}
|
||||||
|
for f in metadata.files('netgen-occt'):
|
||||||
|
if f.match('*libTK*') or f.match("*.dll"):
|
||||||
|
p = f.locate()
|
||||||
|
name = p.name.split('.')[0].lower().replace("lib","")
|
||||||
|
lib_paths[name] = str(p)
|
||||||
|
for lib_name in lib_names:
|
||||||
|
p = lib_paths[lib_name.lower()]
|
||||||
|
ctypes.CDLL(p, mode=ctypes.RTLD_GLOBAL)
|
||||||
|
|
||||||
|
except metadata.PackageNotFoundError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
load_occ_libs()
|
||||||
|
|
||||||
__diagnostics_template = """
|
__diagnostics_template = """
|
||||||
Netgen diagnostics:
|
Netgen diagnostics:
|
||||||
sys.platform: {sys.platform}
|
sys.platform: {sys.platform}
|
||||||
|
@ -8,6 +8,9 @@ if(EMSCRIPTEN)
|
|||||||
set(rules_command ${CMAKE_BINARY_DIR}/makerls)
|
set(rules_command ${CMAKE_BINARY_DIR}/makerls)
|
||||||
else(EMSCRIPTEN)
|
else(EMSCRIPTEN)
|
||||||
add_executable(makerls rules/makerlsfile.cpp)
|
add_executable(makerls rules/makerlsfile.cpp)
|
||||||
|
if(USE_CCACHE)
|
||||||
|
set_target_properties(makerls PROPERTIES RULE_LAUNCH_COMPILE "")
|
||||||
|
endif(USE_CCACHE)
|
||||||
set(rules_command makerls)
|
set(rules_command makerls)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
14
setup.py
14
setup.py
@ -4,15 +4,21 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
import pathlib
|
import pathlib
|
||||||
import sysconfig
|
import sysconfig
|
||||||
|
import importlib.metadata
|
||||||
|
|
||||||
from skbuild import setup
|
from skbuild import setup
|
||||||
import skbuild.cmaker
|
import skbuild.cmaker
|
||||||
from subprocess import check_output
|
from subprocess import check_output
|
||||||
|
|
||||||
setup_requires = ['pybind11-stubgen==2.5']
|
setup_requires = ['pybind11-stubgen>=2.5', 'netgen-occt-devel']
|
||||||
|
|
||||||
pyprefix = pathlib.Path(sys.prefix).as_posix()
|
pyprefix = pathlib.Path(sys.prefix).as_posix()
|
||||||
|
|
||||||
|
def find_occt_dir():
|
||||||
|
for f in importlib.metadata.files("netgen-occt-devel"):
|
||||||
|
if f.match("OpenCASCADEConfig.cmake"):
|
||||||
|
return f.locate().parent.resolve().absolute().as_posix()
|
||||||
|
|
||||||
def install_filter(cmake_manifest):
|
def install_filter(cmake_manifest):
|
||||||
print(cmake_manifest)
|
print(cmake_manifest)
|
||||||
return cmake_manifest
|
return cmake_manifest
|
||||||
@ -36,7 +42,7 @@ if len(version)>2:
|
|||||||
if len(version)>1:
|
if len(version)>1:
|
||||||
version = '.post'.join(version)
|
version = '.post'.join(version)
|
||||||
if not 'NG_NO_DEV_PIP_VERSION' in os.environ:
|
if not 'NG_NO_DEV_PIP_VERSION' in os.environ:
|
||||||
version += '.dev'
|
version += '.dev0'
|
||||||
else:
|
else:
|
||||||
version = version[0]
|
version = version[0]
|
||||||
|
|
||||||
@ -47,6 +53,7 @@ arch = None
|
|||||||
cmake_args = [
|
cmake_args = [
|
||||||
f'-DNETGEN_VERSION_GIT={git_version}',
|
f'-DNETGEN_VERSION_GIT={git_version}',
|
||||||
f'-DNETGEN_VERSION_PYTHON={version}',
|
f'-DNETGEN_VERSION_PYTHON={version}',
|
||||||
|
f'-DOpenCascade_DIR={find_occt_dir()}',
|
||||||
]
|
]
|
||||||
|
|
||||||
if 'NETGEN_ARCH' in os.environ and os.environ['NETGEN_ARCH'] == 'avx2':
|
if 'NETGEN_ARCH' in os.environ and os.environ['NETGEN_ARCH'] == 'avx2':
|
||||||
@ -132,7 +139,7 @@ cmake_args += [
|
|||||||
'-DUSE_GUI=ON',
|
'-DUSE_GUI=ON',
|
||||||
'-DUSE_NATIVE_ARCH=OFF',
|
'-DUSE_NATIVE_ARCH=OFF',
|
||||||
'-DBUILD_ZLIB=ON',
|
'-DBUILD_ZLIB=ON',
|
||||||
'-DBUILD_OCC=ON',
|
'-DBUILD_OCC=OFF',
|
||||||
'-DUSE_OCC=ON',
|
'-DUSE_OCC=ON',
|
||||||
'-DBUILD_FOR_CONDA=ON',
|
'-DBUILD_FOR_CONDA=ON',
|
||||||
f'-DNETGEN_PYTHON_PACKAGE_NAME={name}',
|
f'-DNETGEN_PYTHON_PACKAGE_NAME={name}',
|
||||||
@ -149,6 +156,7 @@ setup(
|
|||||||
license="LGPL2.1",
|
license="LGPL2.1",
|
||||||
packages=packages,
|
packages=packages,
|
||||||
#package_dir={'netgen': 'python'},
|
#package_dir={'netgen': 'python'},
|
||||||
|
install_requires=[f"netgen-occt=={importlib.metadata.version('netgen-occt-devel')}"],
|
||||||
tests_require=['pytest'],
|
tests_require=['pytest'],
|
||||||
#include_package_data=True,
|
#include_package_data=True,
|
||||||
cmake_process_manifest_hook=install_filter,
|
cmake_process_manifest_hook=install_filter,
|
||||||
|
@ -11,5 +11,6 @@ $env:NETGEN_ARCH = 'avx2'
|
|||||||
$pydir=$args[0]
|
$pydir=$args[0]
|
||||||
& $pydir\python.exe --version
|
& $pydir\python.exe --version
|
||||||
& $pydir\python.exe -m pip install scikit-build wheel numpy twine pybind11-stubgen
|
& $pydir\python.exe -m pip install scikit-build wheel numpy twine pybind11-stubgen
|
||||||
|
& $pydir\python.exe -m pip install --upgrade netgen-occt==7.8.1 netgen-occt-devel==7.8.1
|
||||||
& $pydir\python setup.py bdist_wheel -G"Visual Studio 16 2019"
|
& $pydir\python setup.py bdist_wheel -G"Visual Studio 16 2019"
|
||||||
& $pydir\python -m twine upload dist\*.whl
|
& $pydir\python -m twine upload dist\*.whl
|
||||||
|
@ -23,13 +23,15 @@ for pyversion in 312 311 310 39 38
|
|||||||
do
|
do
|
||||||
export PYDIR="/opt/python/cp${pyversion}-cp${pyversion}/bin"
|
export PYDIR="/opt/python/cp${pyversion}-cp${pyversion}/bin"
|
||||||
echo $PYDIR
|
echo $PYDIR
|
||||||
$PYDIR/pip install -U pytest-check numpy wheel scikit-build pybind11-stubgen
|
$PYDIR/pip install -U pytest-check numpy wheel scikit-build pybind11-stubgen netgen-occt==7.8.1 netgen-occt-devel==7.8.1
|
||||||
$PYDIR/pip install -i https://pypi.anaconda.org/mpi4py/simple/ --pre mpi4py
|
$PYDIR/pip install -i https://pypi.anaconda.org/mpi4py/simple/ --pre mpi4py
|
||||||
|
|
||||||
rm -rf _skbuild
|
rm -rf _skbuild
|
||||||
NETGEN_ARCH=avx2 $PYDIR/pip wheel .
|
NETGEN_ARCH=avx2 $PYDIR/pip wheel .
|
||||||
auditwheel repair netgen_mesher*-cp${pyversion}-*.whl
|
mkdir -p wheelhouse
|
||||||
rm netgen_mesher-*.whl
|
#auditwheel repair netgen_mesher*-cp${pyversion}-*.whl
|
||||||
|
rename linux_x86_64 manylinux_2_17_x86_64.manylinux2014_x86_64 netgen_mesher*-cp${pyversion}-*.whl
|
||||||
|
mv netgen_mesher*-cp${pyversion}-*.whl wheelhouse/
|
||||||
|
|
||||||
$PYDIR/pip install wheelhouse/netgen_mesher*-cp${pyversion}-*.whl
|
$PYDIR/pip install wheelhouse/netgen_mesher*-cp${pyversion}-*.whl
|
||||||
$PYDIR/python3 -c 'import netgen'
|
$PYDIR/python3 -c 'import netgen'
|
||||||
|
@ -7,7 +7,8 @@ export PATH=$PYDIR:/Applications/CMake.app/Contents/bin:$PATH
|
|||||||
export NETGEN_CCACHE=1
|
export NETGEN_CCACHE=1
|
||||||
|
|
||||||
$PYDIR/python3 --version
|
$PYDIR/python3 --version
|
||||||
$PYDIR/pip3 install --user numpy twine scikit-build wheel pybind11-stubgen
|
$PYDIR/python3 -m pip install --user numpy twine scikit-build wheel pybind11-stubgen
|
||||||
|
$PYDIR/python3 -m pip install --user -U netgen-occt==7.8.1 netgen-occt-devel==7.8.1
|
||||||
|
|
||||||
export CMAKE_OSX_ARCHITECTURES='arm64;x86_64'
|
export CMAKE_OSX_ARCHITECTURES='arm64;x86_64'
|
||||||
export NETGEN_ARCH='avx2'
|
export NETGEN_ARCH='avx2'
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import netgen
|
||||||
from pyngcore import *
|
from pyngcore import *
|
||||||
from numpy import sort, array
|
from numpy import sort, array
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import netgen
|
||||||
from pyngcore import BitArray
|
from pyngcore import BitArray
|
||||||
|
|
||||||
def test_bitarray():
|
def test_bitarray():
|
||||||
|
Loading…
Reference in New Issue
Block a user