Skip to content

Commit e7e945a

Browse files
committed
Use netgen-occt to build netgen
1 parent f9d7d3a commit e7e945a

11 files changed

+114
-35
lines changed

.gitlab-ci.yml

+16-4
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,23 @@ push_github:
3232
- "echo off"
3333
- call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64"
3434
- set CI_DIR=C:\ci\%CI_PIPELINE_ID%
35-
- set CLCACHE_BASEDIR=C:\ci\%CI_PIPELINE_ID%
35+
- set CCACHE_BASEDIR=C:\ci\%CI_PIPELINE_ID%
3636
- set NETGEN_BUILD_DIR=%CI_DIR%\build
3737
- set INSTALL_DIR=%CI_DIR%\install
3838
- set SRC_DIR=%CI_DIR%\src
3939
- set NETGENDIR=%INSTALL_DIR%\bin
4040
- set PYTHONPATH=%INSTALL_DIR%\lib\site-packages
41-
- set PATH=%NETGENDIR%;%PATH%
41+
- echo %PATH%
42+
- set PATH=%INSTALL_DIR%\bin;C:\python312;C:\python312\bin;C:\python312\Scripts;C:\tools\;%PATH%
43+
- echo %PATH%
44+
- set CCACHE_HARDLINK=1
45+
- set CCACHE_NOHASHDIR=1
46+
- C:\tools\ccache -s
47+
- C:\tools\ccache -M 20G
48+
- dir C:\python312
49+
- python.exe --version
50+
- python.exe -m pip install -U netgen-occt netgen-occt-devel
51+
- cmake --version
4252

4353
build_win:
4454
<<: *win
@@ -54,12 +64,14 @@ build_win:
5464
- >-
5565
cmake %SRC_DIR%
5666
-G Ninja
67+
-DCMAKE_PREFIX=C:/python312
68+
-DPython3_ROOT_DIR=C:/python312
5769
-DCMAKE_INSTALL_PREFIX=%INSTALL_DIR%
5870
-DCHECK_RANGE=ON
5971
-DUSE_CGNS=ON
6072
-DUSE_OCC=ON
6173
-DUSE_CCACHE=ON
62-
-DENABLE_UNIT_TESTS=ON
74+
-DENABLE_UNIT_TESTS=OFF
6375
-DCMAKE_BUILD_TYPE=Release
6476
- cmake --build . --target install --config Release
6577

@@ -69,7 +81,7 @@ test_win:
6981
script:
7082
- pip install pytest-check
7183
- cd tests\pytest
72-
- python test_tutorials.py new_results.json
84+
- REM python test_tutorials.py new_results.json
7385
- cd %NETGEN_BUILD_DIR%\netgen
7486
- ctest -C Release -V --output-on-failure
7587
- cd ..

CMakeLists.txt

+11-3
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ if(USE_CCACHE)
164164
find_program(CCACHE_FOUND NAMES ccache ccache.bat)
165165
if(CCACHE_FOUND)
166166
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_FOUND})
167+
message(STATUS "Using ccache ${CCACHE_FOUND}")
167168
endif(CCACHE_FOUND)
168169
endif(USE_CCACHE)
169170

@@ -398,7 +399,12 @@ if (USE_OCC)
398399
endif()
399400

400401
target_link_libraries(occ_libs INTERFACE ${OCC_LIBRARIES})
401-
include_directories(${OpenCASCADE_INCLUDE_DIR})
402+
get_target_property(occ_include_dir TKernel INTERFACE_INCLUDE_DIRECTORIES)
403+
if(NOT occ_include_dir)
404+
set(occ_include_dir ${OpenCASCADE_INCLUDE_DIR})
405+
endif()
406+
target_include_directories(occ_libs INTERFACE ${occ_include_dir})
407+
message(STATUS "OpenCasCade include dirs: ${occ_include_dir}")
402408
if(NOT OpenCASCADE_BUILD_SHARED_LIBS)
403409
if(OpenCASCADE_WITH_FREETYPE)
404410
find_library( FREETYPE NAMES freetype HINTS ${OpenCASCADE_LIBRARY_DIR})
@@ -413,10 +419,12 @@ if (USE_OCC)
413419
find_package(Threads REQUIRED)
414420
target_link_libraries(occ_libs INTERFACE Threads::Threads)
415421
endif()
416-
message(STATUS "OCC DIRS ${OpenCASCADE_INCLUDE_DIR}")
417422
if(WIN32 AND USE_GUI)
418-
target_link_libraries(nggui PRIVATE occ_libs Ws2_32.lib)
423+
target_link_libraries(nggui PRIVATE Ws2_32.lib)
419424
endif(WIN32 AND USE_GUI)
425+
if(USE_GUI)
426+
target_link_libraries(nggui PRIVATE occ_libs)
427+
endif(USE_GUI)
420428
endif (USE_OCC)
421429

422430
#######################################################################

cmake/SuperBuild.cmake

+8-21
Original file line numberDiff line numberDiff line change
@@ -120,27 +120,14 @@ if(BUILD_OCC)
120120
list(APPEND NETGEN_DEPENDENCIES project_occ)
121121
set(OpenCascade_ROOT ${OCC_DIR})
122122
else(BUILD_OCC)
123-
if(WIN32 AND NOT OCC_INCLUDE_DIR AND NOT OpenCASCADE_DIR)
124-
# we can download prebuilt occ binaries for windows
125-
ExternalProject_Add(win_download_occ
126-
${SUBPROJECT_ARGS}
127-
URL ${OCC_DOWNLOAD_URL_WIN}
128-
UPDATE_COMMAND "" # Disable update
129-
BUILD_IN_SOURCE 1
130-
CONFIGURE_COMMAND ""
131-
BUILD_COMMAND ""
132-
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory . ${CMAKE_INSTALL_PREFIX}
133-
)
134-
list(APPEND NETGEN_DEPENDENCIES win_download_occ)
135-
else()
136-
find_package(OpenCascade NAMES OpenCasCade OpenCASCADE opencascade)
137-
if(NOT OpenCascade_FOUND)
138-
message(FATAL_ERROR "Opencascade not found, either\n\
139-
- set OpenCascade_DIR to a directory containting opencascadeConfig.cmake\n\
140-
- build OpenCascade automatically by passing -DBUILD_OCC=ON\n\
141-
- disable OpenCascade by passing -DUSE_OCC=OFF\n\
142-
")
143-
endif()
123+
find_package(OpenCascade NAMES OpenCasCade OpenCASCADE opencascade)
124+
if(NOT OpenCascade_FOUND)
125+
message(FATAL_ERROR "Opencascade not found, either\n\
126+
- install pip packages netgen-occt-devel netgen-occ\n\
127+
- set OpenCascade_DIR to a directory containting opencascadeConfig.cmake\n\
128+
- build OpenCascade automatically by passing -DBUILD_OCC=ON\n\
129+
- disable OpenCascade by passing -DUSE_OCC=OFF\n\
130+
")
144131
endif()
145132
endif(BUILD_OCC)
146133
endif(USE_OCC)

python/__init__.py

+55
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,65 @@
11
import os
22
import sys
3+
from pathlib import Path
34

45
from . import config
56
_netgen_bin_dir=os.path.realpath(os.path.join(os.path.dirname(__file__),'..',config.NETGEN_PYTHON_RPATH_BIN))
67
_netgen_lib_dir=os.path.realpath(os.path.join(os.path.dirname(__file__),'..',config.NETGEN_PYTHON_RPATH))
78

9+
def load_occ_libs():
10+
try:
11+
try:
12+
import importlib.metadata as metadata
13+
except ImportError:
14+
import importlib_metadata as metadata
15+
import ctypes
16+
metadata.metadata('netgen-occt')
17+
lib_names = [
18+
"TKOffset",
19+
"TKFillet",
20+
"TKDEIGES",
21+
"TKBool",
22+
"TKDESTEP",
23+
"TKXSBase",
24+
"TKDESTL",
25+
"TKXCAF",
26+
"TKVCAF",
27+
"TKCAF",
28+
"TKBO",
29+
"TKPrim",
30+
"TKLCAF",
31+
"TKCDF",
32+
"TKV3d",
33+
"TKHLR",
34+
"TKMesh",
35+
"TKService",
36+
"TKShHealing",
37+
"TKTopAlgo",
38+
"TKGeomAlgo",
39+
"TKBRep",
40+
"TKGeomBase",
41+
"TKG3d",
42+
"TKG2d",
43+
"TKMath",
44+
"TKDE",
45+
"TKernel",
46+
]
47+
lib_names.reverse()
48+
lib_paths = {}
49+
for f in metadata.files('netgen-occt'):
50+
if f.match('*libTK*') or f.match("*.dll"):
51+
p = f.locate()
52+
name = p.name.split('.')[0].lower().replace("lib","")
53+
lib_paths[name] = str(p)
54+
for lib_name in lib_names:
55+
p = lib_paths[lib_name.lower()]
56+
ctypes.CDLL(p, mode=ctypes.RTLD_GLOBAL)
57+
58+
except metadata.PackageNotFoundError:
59+
pass
60+
61+
load_occ_libs()
62+
863
__diagnostics_template = """
964
Netgen diagnostics:
1065
sys.platform: {sys.platform}

rules/CMakeLists.txt

+3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ if(EMSCRIPTEN)
88
set(rules_command ${CMAKE_BINARY_DIR}/makerls)
99
else(EMSCRIPTEN)
1010
add_executable(makerls rules/makerlsfile.cpp)
11+
if(USE_CCACHE)
12+
set_target_properties(makerls PROPERTIES RULE_LAUNCH_COMPILE "")
13+
endif(USE_CCACHE)
1114
set(rules_command makerls)
1215
endif()
1316

setup.py

+11-3
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,21 @@
44
import sys
55
import pathlib
66
import sysconfig
7+
import importlib.metadata
78

89
from skbuild import setup
910
import skbuild.cmaker
1011
from subprocess import check_output
1112

12-
setup_requires = ['pybind11-stubgen==2.5']
13+
setup_requires = ['pybind11-stubgen>=2.5', 'netgen-occt-devel']
1314

1415
pyprefix = pathlib.Path(sys.prefix).as_posix()
1516

17+
def find_occt_dir():
18+
for f in importlib.metadata.files("netgen-occt-devel"):
19+
if f.match("OpenCASCADEConfig.cmake"):
20+
return f.locate().parent.resolve().absolute().as_posix()
21+
1622
def install_filter(cmake_manifest):
1723
print(cmake_manifest)
1824
return cmake_manifest
@@ -36,7 +42,7 @@ def _patched_parse_manifests(self):
3642
if len(version)>1:
3743
version = '.post'.join(version)
3844
if not 'NG_NO_DEV_PIP_VERSION' in os.environ:
39-
version += '.dev'
45+
version += '.dev0'
4046
else:
4147
version = version[0]
4248

@@ -47,6 +53,7 @@ def _patched_parse_manifests(self):
4753
cmake_args = [
4854
f'-DNETGEN_VERSION_GIT={git_version}',
4955
f'-DNETGEN_VERSION_PYTHON={version}',
56+
f'-DOpenCascade_DIR={find_occt_dir()}',
5057
]
5158

5259
if 'NETGEN_ARCH' in os.environ and os.environ['NETGEN_ARCH'] == 'avx2':
@@ -132,7 +139,7 @@ def _patched_parse_manifests(self):
132139
'-DUSE_GUI=ON',
133140
'-DUSE_NATIVE_ARCH=OFF',
134141
'-DBUILD_ZLIB=ON',
135-
'-DBUILD_OCC=ON',
142+
'-DBUILD_OCC=OFF',
136143
'-DUSE_OCC=ON',
137144
'-DBUILD_FOR_CONDA=ON',
138145
f'-DNETGEN_PYTHON_PACKAGE_NAME={name}',
@@ -149,6 +156,7 @@ def _patched_parse_manifests(self):
149156
license="LGPL2.1",
150157
packages=packages,
151158
#package_dir={'netgen': 'python'},
159+
install_requires=[f"netgen-occt=={importlib.metadata.version('netgen-occt-devel')}"],
152160
tests_require=['pytest'],
153161
#include_package_data=True,
154162
cmake_process_manifest_hook=install_filter,

tests/build_pip.ps1

+1
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ $env:NETGEN_ARCH = 'avx2'
1111
$pydir=$args[0]
1212
& $pydir\python.exe --version
1313
& $pydir\python.exe -m pip install scikit-build wheel numpy twine pybind11-stubgen
14+
& $pydir\python.exe -m pip install --upgrade netgen-occt==7.8.1 netgen-occt-devel==7.8.1
1415
& $pydir\python setup.py bdist_wheel -G"Visual Studio 16 2019"
1516
& $pydir\python -m twine upload dist\*.whl

tests/build_pip.sh

+5-3
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@ for pyversion in 312 311 310 39 38
2323
do
2424
export PYDIR="/opt/python/cp${pyversion}-cp${pyversion}/bin"
2525
echo $PYDIR
26-
$PYDIR/pip install -U pytest-check numpy wheel scikit-build pybind11-stubgen
26+
$PYDIR/pip install -U pytest-check numpy wheel scikit-build pybind11-stubgen netgen-occt==7.8.1 netgen-occt-devel==7.8.1
2727
$PYDIR/pip install -i https://pypi.anaconda.org/mpi4py/simple/ --pre mpi4py
2828

2929
rm -rf _skbuild
3030
NETGEN_ARCH=avx2 $PYDIR/pip wheel .
31-
auditwheel repair netgen_mesher*-cp${pyversion}-*.whl
32-
rm netgen_mesher-*.whl
31+
mkdir -p wheelhouse
32+
#auditwheel repair netgen_mesher*-cp${pyversion}-*.whl
33+
rename linux_x86_64 manylinux_2_17_x86_64.manylinux2014_x86_64 netgen_mesher*-cp${pyversion}-*.whl
34+
mv netgen_mesher*-cp${pyversion}-*.whl wheelhouse/
3335

3436
$PYDIR/pip install wheelhouse/netgen_mesher*-cp${pyversion}-*.whl
3537
$PYDIR/python3 -c 'import netgen'

tests/build_pip_mac.sh

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ export PATH=$PYDIR:/Applications/CMake.app/Contents/bin:$PATH
77
export NETGEN_CCACHE=1
88

99
$PYDIR/python3 --version
10-
$PYDIR/pip3 install --user numpy twine scikit-build wheel pybind11-stubgen
10+
$PYDIR/python3 -m pip install --user numpy twine scikit-build wheel pybind11-stubgen
11+
$PYDIR/python3 -m pip install --user -U netgen-occt==7.8.1 netgen-occt-devel==7.8.1
1112

1213
export CMAKE_OSX_ARCHITECTURES='arm64;x86_64'
1314
export NETGEN_ARCH='avx2'

tests/pytest/test_array.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import netgen
12
from pyngcore import *
23
from numpy import sort, array
34

tests/pytest/test_bitarray.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import netgen
12
from pyngcore import BitArray
23

34
def test_bitarray():

0 commit comments

Comments
 (0)