|
3 | 3 | import os |
4 | 4 | import shutil |
5 | 5 | import sys |
| 6 | +from pathlib import Path |
6 | 7 |
|
7 | | -LIBICSNEO_COMMIT = "9ef93eb73e1ada72ccc7a571744b9db1a564f18b" |
8 | | -LIBUSB_COMMIT = "4239bc3a50014b8e6a5a2a59df1fff3b7469543b" |
| 8 | +ROOT = Path.cwd() |
9 | 9 | CPUS = str(multiprocessing.cpu_count()) |
10 | 10 |
|
| 11 | +LIBUSB_VERSION = "1.0.27" |
| 12 | +LIBUSB_ROOT = f"{ROOT}/libusb/{LIBUSB_VERSION}" |
| 13 | +LIBUSB_SOURCE = f"{LIBUSB_ROOT}/source" |
| 14 | +LIBUSB_BUILD = f"{LIBUSB_ROOT}/build" |
| 15 | +LIBUSB_INSTALL = f"{LIBUSB_ROOT}/install" |
11 | 16 |
|
12 | | -def checkout(): |
13 | | - if not os.path.isdir("libicsneo"): |
14 | | - subprocess.check_output(["git", "clone", "https://github.com/intrepidcs/libicsneo.git"]) |
15 | | - subprocess.check_output(["git", "checkout", LIBICSNEO_COMMIT], cwd="libicsneo") |
| 17 | +LIBICSNEO_VERSION = "e37d939" |
| 18 | +LIBICSNEO_ROOT = f"{ROOT}/libicsneo/{LIBICSNEO_VERSION}" |
| 19 | +LIBICSNEO_SOURCE = f"{LIBICSNEO_ROOT}/source" |
| 20 | +LIBICSNEO_BUILD = f"{LIBICSNEO_ROOT}/build" |
| 21 | +LIBICSNEO_INSTALL = f"{LIBICSNEO_ROOT}/install" |
16 | 22 |
|
17 | | - if not os.path.isdir("libusb") and sys.platform == "darwin": |
18 | | - subprocess.check_output(["git", "clone", "https://github.com/libusb/libusb.git"]) |
19 | | - subprocess.check_output(["git", "checkout", LIBUSB_COMMIT], cwd="libusb") |
| 23 | +LIBPCAP_VERSION = "1.10.4" |
| 24 | +LIBPCAP_ROOT = f"{ROOT}/libpcap/{LIBPCAP_VERSION}" |
| 25 | +LIBPCAP_SOURCE = f"{LIBPCAP_ROOT}/source" |
| 26 | +LIBPCAP_BUILD = f"{LIBPCAP_ROOT}/build" |
| 27 | +LIBPCAP_INSTALL = f"{LIBPCAP_ROOT}/install" |
20 | 28 |
|
| 29 | +def checkout(): |
| 30 | + if not os.path.isdir(LIBICSNEO_SOURCE): |
| 31 | + os.makedirs(LIBICSNEO_ROOT, exist_ok=True) |
| 32 | + subprocess.check_output(["git", "clone", "https://github.com/intrepidcs/libicsneo.git", LIBICSNEO_SOURCE], cwd=LIBICSNEO_ROOT) |
| 33 | + subprocess.check_output(["git", "checkout", LIBICSNEO_VERSION], cwd=LIBICSNEO_SOURCE) |
| 34 | + |
| 35 | + if not os.path.isdir(LIBUSB_SOURCE): |
| 36 | + os.makedirs(LIBUSB_ROOT, exist_ok=True) |
| 37 | + subprocess.check_output(["curl", "-LO", f"https://github.com/libusb/libusb/releases/download/v{LIBUSB_VERSION}/libusb-{LIBUSB_VERSION}.tar.bz2"], cwd=LIBUSB_ROOT) |
| 38 | + subprocess.check_output(["tar", "-xf", f"libusb-{LIBUSB_VERSION}.tar.bz2"], cwd=LIBUSB_ROOT) |
| 39 | + subprocess.check_output(["mv", f"libusb-{LIBUSB_VERSION}", "source"], cwd=LIBUSB_ROOT) |
| 40 | + subprocess.check_output(["rm", f"libusb-{LIBUSB_VERSION}.tar.bz2"], cwd=LIBUSB_ROOT) |
| 41 | + |
| 42 | + if not os.path.isdir(LIBPCAP_SOURCE): |
| 43 | + os.makedirs(LIBPCAP_ROOT, exist_ok=True) |
| 44 | + subprocess.check_output(["curl", "-LO", f"https://www.tcpdump.org/release/libpcap-{LIBPCAP_VERSION}.tar.gz"], cwd=LIBPCAP_ROOT) |
| 45 | + subprocess.check_output(["tar", "-xf", f"libpcap-{LIBPCAP_VERSION}.tar.gz"], cwd=LIBPCAP_ROOT) |
| 46 | + subprocess.check_output(["mv", f"libpcap-{LIBPCAP_VERSION}", "source"], cwd=LIBPCAP_ROOT) |
| 47 | + subprocess.check_output(["rm", f"libpcap-{LIBPCAP_VERSION}.tar.gz"], cwd=LIBPCAP_ROOT) |
21 | 48 |
|
22 | 49 | def _build_libusb(): |
23 | | - subprocess.check_output(["git", "clean", "-xdf"], cwd="libusb") |
24 | | - |
25 | | - subprocess.check_output(["./bootstrap.sh"], cwd="libusb") |
26 | | - |
| 50 | + os.makedirs(LIBUSB_BUILD, exist_ok=True) |
27 | 51 | env = os.environ.copy() |
28 | | - env["CFLAGS"] = "-arch x86_64 -arch arm64 -mmacosx-version-min=10.13" |
29 | | - env["CXXFLAGS"] = "-arch x86_64 -arch arm64 -mmacosx-version-min=10.13" |
30 | | - subprocess.check_output(["./configure", "--disable-static", "--prefix=/tmp/libusb"], cwd="libusb", env=env) |
31 | | - |
32 | | - subprocess.check_output(["make", "-j" + CPUS], cwd="libusb") |
33 | | - subprocess.check_output(["make", "install"], cwd="libusb") |
34 | | - |
35 | | - |
36 | | -def _build_icsneo_linux(): |
| 52 | + if sys.platform == "darwin": |
| 53 | + env["CFLAGS"] = "-arch x86_64 -arch arm64 -mmacosx-version-min=10.13" |
| 54 | + env["CXXFLAGS"] = "-arch x86_64 -arch arm64 -mmacosx-version-min=10.13" |
| 55 | + else: |
| 56 | + env["CFLAGS"] = "-fPIC" |
| 57 | + env["CXXFLAGS"] = "-fPIC" |
| 58 | + subprocess.check_output([ |
| 59 | + f"{LIBUSB_SOURCE}/configure", |
| 60 | + "--disable-shared", |
| 61 | + "--enable-static", |
| 62 | + f"--prefix={LIBUSB_INSTALL}", |
| 63 | + "--disable-udev" |
| 64 | + ], cwd=LIBUSB_BUILD, env=env) |
| 65 | + |
| 66 | + subprocess.check_output(["make", "-j" + CPUS], cwd=LIBUSB_BUILD) |
| 67 | + subprocess.check_output(["make", "install"], cwd=LIBUSB_BUILD) |
| 68 | + |
| 69 | +def _build_libpcap(): |
| 70 | + os.makedirs(LIBPCAP_BUILD, exist_ok=True) |
| 71 | + env = os.environ.copy() |
| 72 | + if sys.platform == "darwin": |
| 73 | + env["CFLAGS"] = "-arch x86_64 -arch arm64 -mmacosx-version-min=10.13" |
| 74 | + env["CXXFLAGS"] = "-arch x86_64 -arch arm64 -mmacosx-version-min=10.13" |
| 75 | + else: |
| 76 | + env["CFLAGS"] = "-fPIC" |
| 77 | + env["CXXFLAGS"] = "-fPIC" |
| 78 | + subprocess.check_output([ |
| 79 | + f"{LIBPCAP_SOURCE}/configure", |
| 80 | + "--disable-shared", |
| 81 | + f"--prefix={LIBPCAP_INSTALL}", |
| 82 | + ], cwd=LIBPCAP_BUILD, env=env) |
| 83 | + |
| 84 | + subprocess.check_output(["make", "-j" + CPUS], cwd=LIBPCAP_BUILD) |
| 85 | + subprocess.check_output(["make", "install"], cwd=LIBPCAP_BUILD) |
| 86 | + |
| 87 | +def _build_libicsneo_linux(): |
37 | 88 | subprocess.check_output(["git", "clean", "-xdf"], cwd="libicsneo") |
38 | 89 | subprocess.check_output(["mkdir", "-p", "libicsneo/build"]) |
39 | 90 |
|
40 | 91 | subprocess.check_output( |
41 | | - ["cmake", "..", "-DCMAKE_BUILD_TYPE=Release", "-DLIBICSNEO_BUILD_ICSNEOLEGACY=ON"], cwd="libicsneo/build" |
| 92 | + [ |
| 93 | + "cmake", |
| 94 | + "-DCMAKE_BUILD_TYPE=Release", |
| 95 | + "-DLIBICSNEO_BUILD_ICSNEOLEGACY=ON", |
| 96 | + f"-DCMAKE_PREFIX_PATH={LIBUSB_INSTALL};{LIBPCAP_INSTALL}", |
| 97 | + "-S", LIBICSNEO_SOURCE, |
| 98 | + "-B", LIBICSNEO_BUILD |
| 99 | + ] |
42 | 100 | ) |
43 | 101 | subprocess.check_output( |
44 | | - ["cmake", "--build", ".", "--target", "icsneolegacy", "--parallel", CPUS], cwd="libicsneo/build" |
| 102 | + ["cmake", "--build", LIBICSNEO_BUILD, "--target", "icsneolegacy", "--parallel", CPUS] |
45 | 103 | ) |
46 | 104 |
|
47 | | - |
48 | | -def _build_icsneo_macos(): |
49 | | - subprocess.check_output(["git", "clean", "-xdf"], cwd="libicsneo") |
50 | | - subprocess.check_output(["mkdir", "-p", "libicsneo/build"]) |
51 | | - |
| 105 | +def _build_libicsneo_macos(): |
52 | 106 | subprocess.check_output( |
53 | 107 | [ |
54 | 108 | "cmake", |
55 | | - "..", |
56 | 109 | "-DCMAKE_BUILD_TYPE=Release", |
57 | 110 | "-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64", |
58 | 111 | "-DLIBICSNEO_BUILD_ICSNEOLEGACY=ON", |
59 | 112 | "-DCMAKE_OSX_DEPLOYMENT_TARGET=10.13", |
60 | | - "-DLIBUSB_LIBRARIES=/tmp/libusb/lib/libusb-1.0.0.dylib", |
61 | | - "-DLIBUSB_INCLUDE_DIR=/tmp/libusb/include/libusb-1.0", |
62 | | - ], |
63 | | - cwd="libicsneo/build", |
| 113 | + f"-DCMAKE_PREFIX_PATH={LIBUSB_INSTALL};{LIBPCAP_INSTALL}", |
| 114 | + "-S", LIBICSNEO_SOURCE, |
| 115 | + "-B", LIBICSNEO_BUILD |
| 116 | + ] |
64 | 117 | ) |
65 | 118 |
|
66 | 119 | subprocess.check_output( |
67 | | - ["cmake", "--build", ".", "--target", "icsneolegacy", "--parallel", CPUS], cwd="libicsneo/build" |
68 | | - ) |
69 | | - subprocess.check_output( |
70 | | - [ |
71 | | - "install_name_tool", |
72 | | - "-change", |
73 | | - "/tmp/libusb/lib/libusb-1.0.0.dylib", |
74 | | - "@loader_path/libusb-1.0.0.dylib", |
75 | | - "libicsneolegacy.dylib", |
76 | | - ], |
77 | | - cwd="libicsneo/build", |
| 120 | + ["cmake", "--build", LIBICSNEO_BUILD, "--target", "icsneolegacy", "--parallel", CPUS] |
78 | 121 | ) |
79 | 122 |
|
80 | | - |
81 | 123 | def build(): |
82 | 124 | print("Building libicsneo...") |
| 125 | + _build_libusb() |
| 126 | + _build_libpcap() |
83 | 127 | if sys.platform == "darwin": |
84 | | - _build_libusb() |
85 | | - _build_icsneo_macos() |
| 128 | + _build_libicsneo_macos() |
86 | 129 | elif sys.platform == "linux": |
87 | | - _build_icsneo_linux() |
88 | | - |
| 130 | + _build_libicsneo_linux() |
89 | 131 |
|
90 | 132 | def copy(): |
91 | 133 | if sys.platform == "darwin": |
92 | | - shutil.copyfile("/tmp/libusb/lib/libusb-1.0.0.dylib", "ics/libusb-1.0.0.dylib") |
93 | | - shutil.copyfile("libicsneo/build/libicsneolegacy.dylib", "ics/libicsneolegacy.dylib") |
| 134 | + shutil.copyfile(f"{LIBICSNEO_BUILD}/libicsneolegacy.dylib", "ics/libicsneolegacy.dylib") |
94 | 135 | elif sys.platform == "linux": |
95 | | - shutil.copyfile("libicsneo/build/libicsneolegacy.so", "ics/libicsneolegacy.so") |
| 136 | + shutil.copyfile(f"{LIBICSNEO_BUILD}/libicsneolegacy.so", "ics/libicsneolegacy.so") |
96 | 137 |
|
97 | 138 |
|
98 | 139 | def clean(): |
99 | 140 | shutil.rmtree("libicsneo") |
100 | 141 | shutil.rmtree("libusb") |
101 | | - shutil.rmtree("/tmp/libusb") |
102 | | - |
| 142 | + shutil.rmtree("libpcap") |
103 | 143 |
|
104 | 144 | if __name__ == "__main__": |
105 | 145 | if "--clean" in sys.argv: |
|
0 commit comments