|
1 | 1 | package io.github.bahaa.webgpu.samples.platform.macos.runtime; |
2 | 2 |
|
3 | | -import io.github.bahaa.webgpu.samples.platfrom.PlatformException; |
| 3 | +import io.github.bahaa.webgpu.samples.platform.PlatformException; |
4 | 4 |
|
5 | 5 | import java.lang.foreign.*; |
6 | 6 | import java.lang.invoke.MethodHandle; |
@@ -98,77 +98,76 @@ public static MemorySegment classCreateInstance(final MemorySegment clazz, final |
98 | 98 | } |
99 | 99 | } |
100 | 100 |
|
101 | | - private static class Meta { |
102 | | - private static final String LIB_OBJC = "libobjc.A.dylib"; |
103 | | - |
| 101 | + private enum Meta { |
| 102 | + ; |
| 103 | + static final Arena LIBRARY_ARENA = Arena.ofAuto(); |
| 104 | + private static final String LIB_OBJC = "objc.A"; |
| 105 | + static final SymbolLookup SYMBOL_LOOKUP = SymbolLookup |
| 106 | + .libraryLookup(System.mapLibraryName(LIB_OBJC), LIBRARY_ARENA) |
| 107 | + .or(SymbolLookup.loaderLookup()) |
| 108 | + .or(Linker.nativeLinker().defaultLookup()); |
104 | 109 | private static final MethodHandle objc_getClass; |
105 | 110 | private static final MethodHandle sel_registerName; |
106 | | - |
107 | 111 | private static final MethodHandle object_dispose; |
108 | | - |
109 | 112 | private static final MethodHandle objc_msgSend; |
110 | 113 | private static final MethodHandle objc_msgSendByte; |
111 | 114 | private static final MethodHandle objc_msgSendInt; |
112 | 115 | private static final MethodHandle objc_msgSendLong; |
113 | 116 | private static final MethodHandle objc_msgSendFloat; |
114 | 117 | private static final MethodHandle objc_msgSendAddr; |
115 | 118 | private static final MethodHandle objc_msgSendAddrAddrAddr; |
116 | | - |
117 | 119 | private static final MethodHandle class_createInstance; |
118 | 120 |
|
119 | 121 | static { |
120 | | - final var arena = Arena.ofAuto(); |
121 | | - |
122 | 122 | final var linker = Linker.nativeLinker(); |
123 | | - final var objc = SymbolLookup.libraryLookup(LIB_OBJC, arena); |
124 | 123 |
|
125 | | - objc_getClass = linker.downcallHandle(objc.find("objc_getClass").orElseThrow(), |
| 124 | + objc_getClass = linker.downcallHandle(SYMBOL_LOOKUP.find("objc_getClass").orElseThrow(), |
126 | 125 | FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS)); |
127 | 126 |
|
128 | | - sel_registerName = linker.downcallHandle(objc.find("sel_registerName").orElseThrow(), |
| 127 | + sel_registerName = linker.downcallHandle(SYMBOL_LOOKUP.find("sel_registerName").orElseThrow(), |
129 | 128 | FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS)); |
130 | 129 |
|
131 | | - object_dispose = linker.downcallHandle(objc.find("object_dispose").orElseThrow(), |
| 130 | + object_dispose = linker.downcallHandle(SYMBOL_LOOKUP.find("object_dispose").orElseThrow(), |
132 | 131 | FunctionDescriptor.ofVoid(ValueLayout.ADDRESS)); |
133 | 132 |
|
134 | 133 | objc_msgSend = linker.downcallHandle( |
135 | | - objc.find("objc_msgSend").orElseThrow(), |
| 134 | + SYMBOL_LOOKUP.find("objc_msgSend").orElseThrow(), |
136 | 135 | FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS), |
137 | 136 | Linker.Option.critical(false)); |
138 | 137 |
|
139 | 138 | objc_msgSendByte = linker.downcallHandle( |
140 | | - objc.find("objc_msgSend").orElseThrow(), |
| 139 | + SYMBOL_LOOKUP.find("objc_msgSend").orElseThrow(), |
141 | 140 | FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.JAVA_BYTE), |
142 | 141 | Linker.Option.critical(false)); |
143 | 142 |
|
144 | 143 | objc_msgSendInt = linker.downcallHandle( |
145 | | - objc.find("objc_msgSend").orElseThrow(), |
| 144 | + SYMBOL_LOOKUP.find("objc_msgSend").orElseThrow(), |
146 | 145 | FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.JAVA_INT), |
147 | 146 | Linker.Option.critical(false)); |
148 | 147 |
|
149 | 148 | objc_msgSendLong = linker.downcallHandle( |
150 | | - objc.find("objc_msgSend").orElseThrow(), |
| 149 | + SYMBOL_LOOKUP.find("objc_msgSend").orElseThrow(), |
151 | 150 | FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.JAVA_LONG), |
152 | 151 | Linker.Option.critical(false)); |
153 | 152 |
|
154 | 153 | objc_msgSendFloat = linker.downcallHandle( |
155 | | - objc.find("objc_msgSend").orElseThrow(), |
| 154 | + SYMBOL_LOOKUP.find("objc_msgSend").orElseThrow(), |
156 | 155 | FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.JAVA_FLOAT), |
157 | 156 | Linker.Option.critical(false)); |
158 | 157 |
|
159 | 158 | objc_msgSendAddr = linker.downcallHandle( |
160 | | - objc.find("objc_msgSend").orElseThrow(), |
| 159 | + SYMBOL_LOOKUP.find("objc_msgSend").orElseThrow(), |
161 | 160 | FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS), |
162 | 161 | Linker.Option.critical(false)); |
163 | 162 |
|
164 | 163 | objc_msgSendAddrAddrAddr = linker.downcallHandle( |
165 | | - objc.find("objc_msgSend").orElseThrow(), |
| 164 | + SYMBOL_LOOKUP.find("objc_msgSend").orElseThrow(), |
166 | 165 | FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS, |
167 | 166 | ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS), |
168 | 167 | Linker.Option.critical(false)); |
169 | 168 |
|
170 | 169 | class_createInstance = linker.downcallHandle( |
171 | | - objc.find("class_createInstance").orElseThrow(), |
| 170 | + SYMBOL_LOOKUP.find("class_createInstance").orElseThrow(), |
172 | 171 | FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.JAVA_INT), |
173 | 172 | Linker.Option.critical(false)); |
174 | 173 | } |
|
0 commit comments