Skip to content

Commit 297c827

Browse files
Merge branch 'master' of github.com:intrepidcs/python_ics
2 parents b40a952 + c089f37 commit 297c827

6 files changed

Lines changed: 102 additions & 36 deletions

File tree

.github/workflows/wheels.yml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: Build
2+
3+
on: [push, pull_request]
4+
5+
jobs:
6+
build_wheels:
7+
name: Build wheels on ${{ matrix.os }}
8+
runs-on: ${{ matrix.os }}
9+
strategy:
10+
matrix:
11+
os: [ubuntu-20.04, windows-2019, macOS-11]
12+
13+
steps:
14+
- uses: actions/checkout@v3
15+
16+
# Used to host cibuildwheel
17+
- uses: actions/setup-python@v3
18+
19+
- name: Install cibuildwheel
20+
run: python -m pip install cibuildwheel==2.12.1
21+
22+
- name: Build wheels
23+
run: python -m cibuildwheel --output-dir wheelhouse
24+
25+
- uses: actions/upload-artifact@v3
26+
with:
27+
path: ./wheelhouse/*.whl
28+
if-no-files-found: error

build_libicsneo.py

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ def checkout():
1616
subprocess.check_output(
1717
['git', 'checkout', LIBICSNEO_COMMIT], cwd='libicsneo')
1818

19-
if not os.path.isdir('libusb'):
19+
if not os.path.isdir('libusb') and sys.platform == 'darwin':
2020
subprocess.check_output(
2121
['git', 'clone', 'https://github.com/libusb/libusb.git'])
22-
subprocess.check_output(['git', 'checkout', LIBUSB_COMMIT], cwd='libusb')
22+
subprocess.check_output(['git', 'checkout', LIBUSB_COMMIT], cwd='libusb')
2323

2424

2525
def _build_libusb():
@@ -37,11 +37,19 @@ def _build_libusb():
3737
subprocess.check_output(['make', 'install'], cwd='libusb')
3838

3939

40-
def _build_icsneo():
40+
def _build_icsneo_linux():
4141
subprocess.check_output(['git', 'clean', '-xdf'], cwd='libicsneo')
4242
subprocess.check_output(['mkdir', '-p', 'libicsneo/build'])
4343

44-
subprocess.check_output(['cmake', '..', '-DCMAKE_BUILD_TYPE=RelWithDebInfo', '-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64',
44+
subprocess.check_output(['cmake', '..', '-DCMAKE_BUILD_TYPE=Release', '-DLIBICSNEO_BUILD_ICSNEOLEGACY=ON'], cwd='libicsneo/build')
45+
subprocess.check_output(['cmake', '--build', '.', '--target',
46+
'icsneolegacy', '--parallel', CPUS], cwd='libicsneo/build')
47+
48+
def _build_icsneo_macos():
49+
subprocess.check_output(['git', 'clean', '-xdf'], cwd='libicsneo')
50+
subprocess.check_output(['mkdir', '-p', 'libicsneo/build'])
51+
52+
subprocess.check_output(['cmake', '..', '-DCMAKE_BUILD_TYPE=Release', '-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64',
4553
'-DLIBICSNEO_BUILD_ICSNEOLEGACY=ON', '-DCMAKE_OSX_DEPLOYMENT_TARGET=10.13',
4654
'-DLIBUSB_LIBRARIES=/tmp/libusb/lib/libusb-1.0.0.dylib',
4755
'-DLIBUSB_INCLUDE_DIR=/tmp/libusb/include/libusb-1.0'], cwd='libicsneo/build')
@@ -53,15 +61,23 @@ def _build_icsneo():
5361

5462

5563
def build():
56-
_build_libusb()
57-
_build_icsneo()
64+
print("Building libicsneo...")
65+
if sys.platform == 'darwin':
66+
_build_libusb()
67+
_build_icsneo_macos()
68+
elif sys.platform == 'linux':
69+
_build_icsneo_linux()
5870

5971

6072
def copy():
61-
shutil.copyfile('/tmp/libusb/lib/libusb-1.0.0.dylib',
62-
'ics/libusb-1.0.0.dylib')
63-
shutil.copyfile('libicsneo/build/libicsneolegacy.dylib',
64-
'ics/libicsneolegacy.dylib')
73+
if sys.platform == 'darwin':
74+
shutil.copyfile('/tmp/libusb/lib/libusb-1.0.0.dylib',
75+
'ics/libusb-1.0.0.dylib')
76+
shutil.copyfile('libicsneo/build/libicsneolegacy.dylib',
77+
'ics/libicsneolegacy.dylib')
78+
elif sys.platform == 'linux':
79+
shutil.copyfile('libicsneo/build/libicsneolegacy.so',
80+
'ics/libicsneolegacy.so')
6581

6682

6783
def clean():

generate_icsneo40_structs.py

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -844,34 +844,38 @@ def generate_all_files():
844844
import os
845845
import pathlib
846846

847-
try:
848-
if sys.argv[0] == 'setup.py':
849-
raise IndexError
850-
# Grab the filename from the command line
851-
filename = sys.argv[1]
852-
filename = os.path.normpath(filename)
853-
print(f"Parsing '{filename}'...")
854-
except IndexError as _:
855-
# use our default path if it isn't supplied
856-
filename = 'include/ics/icsnVC40.h'
857-
if not pathlib.Path(filename).exists():
858-
raise FileNotFoundError(filename)
847+
filename = 'include/ics/icsnVC40.h'
848+
if __name__ == '__main__':
849+
try:
850+
if sys.argv[0] == 'setup.py':
851+
raise IndexError
852+
# Grab the filename from the command line
853+
filename = sys.argv[1]
854+
filename = os.path.normpath(filename)
855+
print(f"Parsing '{filename}'...")
856+
except IndexError as _:
857+
# use our default path if it isn't supplied
858+
filename = 'include/ics/icsnVC40.h'
859+
if not pathlib.Path(filename).exists():
860+
raise FileNotFoundError(filename)
859861
generate(filename)
860862

861863
# Internal Header
862-
try:
863-
if sys.argv[0] == 'setup.py':
864-
raise IndexError
865-
# Grab the filename from the command line
866-
filename_internal = sys.argv[2]
867-
filename_internal = os.path.normpath(filename_internal)
868-
print(f"Parsing '{filename_internal}'...")
869-
except IndexError as _:
870-
# use our default path if it isn't supplied
864+
if __name__ == '__main__':
871865
filename_internal = 'include/ics/icsnVC40Internal.h'
872-
if pathlib.Path(filename_internal).exists():
873-
print("WARNING: Generating internal header!")
874-
generate(filename_internal)
866+
try:
867+
if sys.argv[0] == 'setup.py':
868+
raise IndexError
869+
# Grab the filename from the command line
870+
filename_internal = sys.argv[2]
871+
filename_internal = os.path.normpath(filename_internal)
872+
print(f"Parsing '{filename_internal}'...")
873+
except IndexError as _:
874+
# use our default path if it isn't supplied
875+
filename_internal = 'include/ics/icsnVC40Internal.h'
876+
if pathlib.Path(filename_internal).exists():
877+
print("WARNING: Generating internal header!")
878+
generate(filename_internal)
875879

876880

877881
if __name__ == '__main__':

pyproject.toml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
[tool.cibuildwheel]
2+
build = "{*-win32,*-win_amd64,*-macosx_universal2,*-manylinux_x86_64,*-manylinux_aarch64}"
3+
skip = "cp36-* pp* *-manylinux_i686 *-musllinux_*"
4+
environment = {DISTUTILS_DEBUG=1}
5+
before-build = "python -m pip install wheel"
6+
manylinux-x86_64-image = "quay.io/pypa/manylinux_2_28_x86_64"
7+
8+
[tool.cibuildwheel.linux]
9+
before-build = "dnf install -y libpcap-devel cmake libusbx-devel clang clang-tools-extra"
10+
11+
[tool.cibuildwheel.macos]
12+
archs = ["universal2"]
13+
before-build = "brew install automake libtool cmake clang-format"
14+
15+
[tool.cibuildwheel.windows]
16+
before-build = "choco install llvm"

setup.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def run(self):
5959
import generate_icsneo40_structs
6060
extract_icsneo40_defines.extract()
6161
generate_icsneo40_structs.generate_all_files()
62-
if 'DARWIN' in platform.system().upper():
62+
if platform.system().upper() in ('DARWIN', 'LINUX'):
6363
import build_libicsneo
6464
build_libicsneo.checkout()
6565
build_libicsneo.build()
@@ -111,6 +111,8 @@ def read(fname):
111111
package_data = {}
112112
if 'DARWIN' in platform.system().upper():
113113
package_data['ics'] = ['*.dylib']
114+
elif 'LINUX' in platform.system().upper():
115+
package_data[''] = ['*.so']
114116

115117
setup(name='python_ics',
116118
version=VERSION_STRING,

src/dll.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ bool __initialize(char* name)
1919
#elif (defined(__APPLE__))
2020
LIBRARY = new ice::Library("@loader_path/libicsneolegacy.dylib");
2121
#else
22-
LIBRARY = new ice::Library("libicsneolegacy.so");
22+
LIBRARY = new ice::Library("${ORIGIN}/libicsneolegacy.so");
2323
#endif
2424
}
2525
else

0 commit comments

Comments
 (0)