Skip to content

Commit 87f07ae

Browse files
authored
Merge branch 'master' into master
2 parents a60b302 + cc20b32 commit 87f07ae

File tree

5 files changed

+78
-44
lines changed

5 files changed

+78
-44
lines changed

.github/workflows/wheels.yml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@ jobs:
1313
CIBW_TEST_COMMAND: pytest -v {project}/tests
1414
CIBW_BEFORE_BUILD_LINUX: "yum install -y cmake wget; pip install cython; bash {project}/ci/embree3.bash"
1515
CIBW_REPAIR_WHEEL_COMMAND_LINUX: "LD_LIBRARY_PATH=/root/embree/lib; auditwheel repair -w {dest_dir} {wheel}"
16+
CIBW_BEFORE_BUILD_WINDOWS: "pip install delvewheel"
17+
CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: "delvewheel repair --add-path embree3\\bin; --no-mangle tbb12.dll;embree3.dll -w {dest_dir} {wheel}"
1618
strategy:
1719
matrix:
18-
os: [ubuntu-latest]
20+
os: [ubuntu-latest, windows-latest]
1921
steps:
2022
- uses: actions/checkout@v1
2123
- uses: actions/setup-python@v1
@@ -25,6 +27,10 @@ jobs:
2527
- name: Install cibuildwheel
2628
run: |
2729
python -m pip install cibuildwheel==2.3.1
30+
- name: Install Embree On Windows
31+
if: matrix.os == 'windows-latest'
32+
run: |
33+
ci/embree3.bat
2834
- name: Build wheels
2935
run: |
3036
python -m cibuildwheel --output-dir wheelhouse
@@ -34,10 +40,8 @@ jobs:
3440
path: ./wheelhouse
3541
- name: Upload To PyPi
3642
env:
37-
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
38-
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
39-
# TODO : remove `if false` statement after secrets are set in Github UI
40-
if: false
43+
TWINE_USERNAME: __token__
44+
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
4145
run: |
4246
pip install twine
4347
twine upload ./wheelhouse/*

.travis.yml

Lines changed: 0 additions & 11 deletions
This file was deleted.

ci/embree3.bat

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
curl -L -o embree.zip https://github.com/embree/embree/releases/download/v3.13.3/embree-3.13.3.x64.vc14.windows.zip
2+
7z x embree.zip
3+
move embree-3.13.3.x64.vc14.windows embree3

embree.pyx

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ from enum import Enum
99
from libc.stdio cimport printf
1010
from libc.stdlib cimport free
1111

12+
__version__ = '0.0.3'
13+
1214
# In this section, we define an aligned memory allocation function,
1315
# "aligned_alloc". This should be used throughout this .pyx file to
1416
# ensure that memory allocated for use by Embree is 16-byte
@@ -20,13 +22,21 @@ from libc.stdlib cimport free
2022
IF UNAME_SYSNAME == "Windows":
2123
cdef extern from "<malloc.h>":
2224
cdef void *_aligned_malloc(size_t size, size_t alignment)
25+
cdef void _aligned_free(void *memblock)
2326
cdef void *aligned_alloc(size_t size, size_t alignment):
2427
return _aligned_malloc(size, alignment)
28+
# memory obtained from _aligned_malloc()
29+
# must be freed with _aligned_free()
30+
# while posix_memalign() just uses regular free()
31+
cdef void aligned_free(void *memblock):
32+
_aligned_free(memblock)
2533
ELIF UNAME_SYSNAME == "Darwin":
2634
# malloc is 16-byte mem aligned by default on Darwin
2735
from libc.stdlib cimport malloc
2836
cdef void *aligned_alloc(size_t size, size_t alignment):
2937
return malloc(size)
38+
cdef void aligned_free(void *memblock):
39+
free(memblock)
3040
ELSE:
3141
from posix.stdlib cimport posix_memalign
3242
cdef void *aligned_alloc(size_t size, size_t alignment):
@@ -41,6 +51,8 @@ ELSE:
4151
elif code != 0:
4252
raise Exception('posix_memalign: unknown error code')
4353
return ptr
54+
cdef void aligned_free(void *memblock):
55+
free(memblock)
4456

4557
DEF RTC_MAX_INSTANCE_LEVEL_COUNT = 1
4658

@@ -793,7 +805,7 @@ cdef class Ray1M:
793805
self._M = M
794806

795807
def __dealloc__(self):
796-
free(self._ray)
808+
aligned_free(self._ray)
797809

798810
@property
799811
def size(self):
@@ -863,7 +875,7 @@ cdef class RayHit1M:
863875
self._M = M
864876

865877
def __dealloc__(self):
866-
free(self._rayhit)
878+
aligned_free(self._rayhit)
867879

868880
@property
869881
def size(self):
@@ -984,27 +996,27 @@ cdef class RayHitNp:
984996
hit.instID[i] = <unsigned *>aligned_alloc(N*sizeof(unsigned), 0x10)
985997

986998
def __dealloc__(self):
987-
free(self._rayhit.ray.org_x)
988-
free(self._rayhit.ray.org_y)
989-
free(self._rayhit.ray.org_z)
990-
free(self._rayhit.ray.tnear)
991-
free(self._rayhit.ray.dir_x)
992-
free(self._rayhit.ray.dir_y)
993-
free(self._rayhit.ray.dir_z)
994-
free(self._rayhit.ray.time)
995-
free(self._rayhit.ray.tfar)
996-
free(self._rayhit.ray.mask)
997-
free(self._rayhit.ray.id)
998-
free(self._rayhit.ray.flags)
999-
free(self._rayhit.hit.Ng_x)
1000-
free(self._rayhit.hit.Ng_y)
1001-
free(self._rayhit.hit.Ng_z)
1002-
free(self._rayhit.hit.u)
1003-
free(self._rayhit.hit.v)
1004-
free(self._rayhit.hit.primID)
1005-
free(self._rayhit.hit.geomID)
999+
aligned_free(self._rayhit.ray.org_x)
1000+
aligned_free(self._rayhit.ray.org_y)
1001+
aligned_free(self._rayhit.ray.org_z)
1002+
aligned_free(self._rayhit.ray.tnear)
1003+
aligned_free(self._rayhit.ray.dir_x)
1004+
aligned_free(self._rayhit.ray.dir_y)
1005+
aligned_free(self._rayhit.ray.dir_z)
1006+
aligned_free(self._rayhit.ray.time)
1007+
aligned_free(self._rayhit.ray.tfar)
1008+
aligned_free(self._rayhit.ray.mask)
1009+
aligned_free(self._rayhit.ray.id)
1010+
aligned_free(self._rayhit.ray.flags)
1011+
aligned_free(self._rayhit.hit.Ng_x)
1012+
aligned_free(self._rayhit.hit.Ng_y)
1013+
aligned_free(self._rayhit.hit.Ng_z)
1014+
aligned_free(self._rayhit.hit.u)
1015+
aligned_free(self._rayhit.hit.v)
1016+
aligned_free(self._rayhit.hit.primID)
1017+
aligned_free(self._rayhit.hit.geomID)
10061018
for i in range(RTC_MAX_INSTANCE_LEVEL_COUNT):
1007-
free(self._rayhit.hit.instID[i])
1019+
aligned_free(self._rayhit.hit.instID[i])
10081020

10091021
@property
10101022
def size(self):

setup.py

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,51 @@
1-
21
import os
32

43
from setuptools import find_packages, setup
54
from setuptools.extension import Extension
6-
75
from Cython.Build import cythonize
86

7+
# the current working directory
8+
cwd = os.path.abspath(os.path.expanduser(
9+
os.path.dirname(__file__)))
10+
11+
include = ['/opt/local/include',
12+
os.path.expanduser('~/embree/include')]
13+
library = ['/opt/local/lib',
14+
os.path.expanduser('~/embree/lib')]
15+
16+
if os.name == 'nt':
17+
include = [
18+
'c:/Program Files/Intel/Embree3/include',
19+
os.path.join(cwd, 'embree3', 'include')]
20+
library = [
21+
'c:/Program Files/Intel/Embree3/lib',
22+
os.path.join(cwd, 'embree3', 'lib')]
23+
924
extensions = [
1025
Extension(
1126
'embree',
1227
['embree.pyx'],
1328
libraries=['embree3'],
14-
include_dirs=['/opt/local/include',
15-
os.path.expanduser('~/embree/include')],
16-
library_dirs=['/opt/local/lib',
17-
os.path.expanduser('~/embree/lib')]
29+
include_dirs=include,
30+
library_dirs=library
1831
)
1932
]
2033

34+
with open(os.path.join(cwd, 'README.md'), 'r') as f:
35+
long_description = f.read()
36+
with open(os.path.join(cwd, 'embree.pyx'), 'r') as f:
37+
# use eval to get a clean string of version from file
38+
__version__ = eval(
39+
next(line for line in f if
40+
line.startswith('__version__')).split('=')[-1])
41+
2142
setup(
2243
name='embree',
44+
version=__version__,
45+
description='Ray queries on triangular meshes.',
46+
long_description=long_description,
47+
long_description_content_type='text/markdown',
48+
install_requires=['numpy'],
2349
packages=find_packages(),
2450
ext_modules=cythonize(extensions),
2551
zip_safe=False

0 commit comments

Comments
 (0)