aboutsummaryrefslogtreecommitdiff
path: root/core/dynlib
diff options
context:
space:
mode:
authorScitoshi Nakayobro <matthewtpeterson1@gmail.com>2019-12-30 19:09:59 -0500
committerScitoshi Nakayobro <matthewtpeterson1@gmail.com>2019-12-30 19:09:59 -0500
commitd79ee7d530d08b20ab61e305f6c49d53ea96bb79 (patch)
tree29f07fb94c0070b1a42671ff1f477e78961b8420 /core/dynlib
parent7e271310ff7a844270a981bb8fc1f961bb45f319 (diff)
Implement dynlib core library for unix/darwin; not 100% about the build tags
Diffstat (limited to 'core/dynlib')
-rw-r--r--core/dynlib/lib_unix.odin21
-rw-r--r--core/dynlib/lib_windows.odin1
2 files changed, 22 insertions, 0 deletions
diff --git a/core/dynlib/lib_unix.odin b/core/dynlib/lib_unix.odin
new file mode 100644
index 000000000..4eac9829d
--- /dev/null
+++ b/core/dynlib/lib_unix.odin
@@ -0,0 +1,21 @@
+// +build linux, darwin
+package dynlib
+
+import "core:os"
+
+load_library :: proc(path: string, global_symbols := false) -> (Library, bool) {
+ flags := os.RTLD_NOW;
+ if global_symbols do flags |= os.RTLD_GLOBAL;
+ lib := os.dlopen(path, flags);
+ return Library(lib), lib != nil;
+}
+
+unload_library :: proc(library: Library) {
+ os.dlclose(rawptr(library));
+}
+
+symbol_address :: proc(library: Library, symbol: string) -> (ptr: rawptr, found: bool) {
+ ptr = os.dlsym(rawptr(library), symbol);
+ found = ptr != nil;
+ return;
+} \ No newline at end of file
diff --git a/core/dynlib/lib_windows.odin b/core/dynlib/lib_windows.odin
index bb45032da..cabd4b4cc 100644
--- a/core/dynlib/lib_windows.odin
+++ b/core/dynlib/lib_windows.odin
@@ -1,3 +1,4 @@
+// +build windows
package dynlib
import "core:sys/win32"