add 'shared' config to vendor libraries

This commit is contained in:
flysand7
2023-10-14 21:21:34 +11:00
parent 77210ffa56
commit cf937c6341
15 changed files with 249 additions and 77 deletions
Executable
BIN
View File
Binary file not shown.
+6
View File
@@ -1,7 +1,13 @@
package vendor_openexr package vendor_openexr
OPENEXRCORE_SHARED :: #config(OPENEXRCORE_SHARED, false)
when ODIN_OS == .Windows { when ODIN_OS == .Windows {
when OPENEXRCORE_SHARED {
#panic("Dynamic linking is not supported for OpenEXRCore yet")
} else {
foreign import lib "OpenEXRCore-3_1.lib" foreign import lib "OpenEXRCore-3_1.lib"
}
} else { } else {
foreign import lib "system:OpenEXRCore-3_1" foreign import lib "system:OpenEXRCore-3_1"
} }
+5
View File
@@ -10,8 +10,13 @@ import "core:c"
import "core:c/libc" import "core:c/libc"
import "core:runtime" import "core:runtime"
COMMONMARK_SHARED :: #config(COMMONMARK_SHARED, false)
BINDING_VERSION :: Version_Info{major = 0, minor = 30, patch = 2} BINDING_VERSION :: Version_Info{major = 0, minor = 30, patch = 2}
when COMMONMARK_SHARED {
#panic("Shared linking for vendor:commonmark is not supported yet")
}
when ODIN_OS == .Windows { when ODIN_OS == .Windows {
foreign import lib { foreign import lib {
"cmark_static.lib", "cmark_static.lib",
-1
View File
@@ -22,7 +22,6 @@ when ODIN_OS == .Windows {
} }
} }
} else when ODIN_OS == .Linux { } else when ODIN_OS == .Linux {
// TODO: Add the billion-or-so static libs to link to in linux
foreign import glfw "system:glfw" foreign import glfw "system:glfw"
} else when ODIN_OS == .Darwin { } else when ODIN_OS == .Darwin {
foreign import glfw { foreign import glfw {
+1 -1
View File
@@ -1,7 +1,7 @@
package glfw package glfw
/* Config */ /* Config */
GLFW_DYNAMIC :: #config(GLFW_DYNAMIC, false) GLFW_SHARED :: #config(GLFW_SHARED, false)
/*** Constants ***/ /*** Constants ***/
/* Versions */ /* Versions */
+8 -1
View File
@@ -4,7 +4,14 @@ package glfw
import NS "vendor:darwin/foundation" import NS "vendor:darwin/foundation"
foreign import glfw { "lib/darwin/libglfw3.a" } when GLFW_SHARED {
#panic("Dynamic linking for glfw is not supported for darwin yet")
foreign import glfw {"_"}
} else {
foreign import glfw {
"lib/darwin/libglfw3.a"
}
}
@(default_calling_convention="c", link_prefix="glfw") @(default_calling_convention="c", link_prefix="glfw")
foreign glfw { foreign glfw {
+13 -3
View File
@@ -4,10 +4,20 @@ package glfw
import win32 "core:sys/windows" import win32 "core:sys/windows"
when GLFW_DYNAMIC { when GLFW_SHARED {
foreign import glfw { "lib/glfw3dll.lib", "system:user32.lib", "system:gdi32.lib", "system:shell32.lib" } foreign import glfw {
"lib/glfw3dll.lib",
"system:user32.lib",
"system:gdi32.lib",
"system:shell32.lib"
}
} else { } else {
foreign import glfw { "lib/glfw3_mt.lib", "system:user32.lib", "system:gdi32.lib", "system:shell32.lib" } foreign import glfw {
"lib/glfw3_mt.lib",
"system:user32.lib",
"system:gdi32.lib",
"system:shell32.lib"
}
} }
@(default_calling_convention="c", link_prefix="glfw") @(default_calling_convention="c", link_prefix="glfw")
+13
View File
@@ -7,6 +7,18 @@ import c "core:c/libc"
#assert(size_of(c.int) == size_of(b32)) #assert(size_of(c.int) == size_of(b32))
LUA_SHARED :: #config(LUA_SHARED, false)
when LUA_SHARED {
when ODIN_OS == .Windows {
// Does nothing special on windows
foreign import lib "windows/lua5.1.dll.lib"
} else when ODIN_OS == .Linux {
foreign import lib "linux/liblua5.1.so"
} else {
foreign import lib "system:liblua.so.5.1"
}
} else {
when ODIN_OS == .Windows { when ODIN_OS == .Windows {
foreign import lib "windows/lua5.1.dll.lib" foreign import lib "windows/lua5.1.dll.lib"
} else when ODIN_OS == .Linux { } else when ODIN_OS == .Linux {
@@ -14,6 +26,7 @@ when ODIN_OS == .Windows {
} else { } else {
foreign import lib "system:liblua5.1.a" foreign import lib "system:liblua5.1.a"
} }
}
VERSION :: "Lua 5.1" VERSION :: "Lua 5.1"
RELEASE :: "Lua 5.1.5" RELEASE :: "Lua 5.1.5"
+13
View File
@@ -7,6 +7,18 @@ import c "core:c/libc"
#assert(size_of(c.int) == size_of(b32)) #assert(size_of(c.int) == size_of(b32))
LUA_SHARED :: config(LUA_SHARED, false)
when LUA_SHARED {
when ODIN_OS == .Windows {
// Does nothing special on windows
foreign import lib "windows/lua52dll.lib"
} else when ODIN_OS == .Linux {
foreign import lib "linux/liblua52.so"
} else {
foreign import lib "system:liblua.so.5.2"
}
} else {
when ODIN_OS == .Windows { when ODIN_OS == .Windows {
foreign import lib "windows/lua52dll.lib" foreign import lib "windows/lua52dll.lib"
} else when ODIN_OS == .Linux { } else when ODIN_OS == .Linux {
@@ -14,6 +26,7 @@ when ODIN_OS == .Windows {
} else { } else {
foreign import lib "system:liblua52.a" foreign import lib "system:liblua52.a"
} }
}
VERSION_MAJOR :: "5" VERSION_MAJOR :: "5"
VERSION_MINOR :: "2" VERSION_MINOR :: "2"
+13
View File
@@ -7,6 +7,18 @@ import c "core:c/libc"
#assert(size_of(c.int) == size_of(b32)) #assert(size_of(c.int) == size_of(b32))
LUA_SHARED :: #config(LUA_SHARED, false)
when LUA_SHARED {
when ODIN_OS == .Windows {
// Does nothing special on windows
foreign import lib "windows/lua53dll.lib"
} else when ODIN_OS == .Linux {
foreign import lib "linux/liblua53.so"
} else {
foreign import lib "system:liblua.so.5.3"
}
} else {
when ODIN_OS == .Windows { when ODIN_OS == .Windows {
foreign import lib "windows/lua53dll.lib" foreign import lib "windows/lua53dll.lib"
} else when ODIN_OS == .Linux { } else when ODIN_OS == .Linux {
@@ -14,6 +26,7 @@ when ODIN_OS == .Windows {
} else { } else {
foreign import lib "system:liblua53.a" foreign import lib "system:liblua53.a"
} }
}
VERSION_MAJOR :: "5" VERSION_MAJOR :: "5"
VERSION_MINOR :: "3" VERSION_MINOR :: "3"
+21
View File
@@ -7,6 +7,26 @@ import c "core:c/libc"
#assert(size_of(c.int) == size_of(b32)) #assert(size_of(c.int) == size_of(b32))
LUA_SHARED :: #config(LUA_SHARED, false)
when LUA_SHARED {
when ODIN_OS == .Windows {
// LUA_SHARED does nothing special on windows
foreign import lib "windows/lua54dll.lib"
} else when ODIN_OS == .Linux {
foreign import lib "linux/liblua54.so"
} else {
// Note(bumbread): My linux system has a few aliases for this shared object
// lublua5.4.so, liblua.so, lublua.so.5.4, liblua.so.5.4.6. I don't know
// who enforces these numbers (probably ld?), and if it can be done in a
// unix-generic way, but in any way I think the most sane thing to do is to
// keep it close to what linux does and if it breaks, just special case those
// operating systems.
// Also there was no alias for liblua54.so, that seems to suggest that way
// of specifying it isn't portable
foreign import lib "system:liblua.so.5.4"
}
} else {
when ODIN_OS == .Windows { when ODIN_OS == .Windows {
foreign import lib "windows/lua54dll.lib" foreign import lib "windows/lua54dll.lib"
} else when ODIN_OS == .Linux { } else when ODIN_OS == .Linux {
@@ -14,6 +34,7 @@ when ODIN_OS == .Windows {
} else { } else {
foreign import lib "system:liblua54.a" foreign import lib "system:liblua54.a"
} }
}
VERSION_MAJOR :: "5" VERSION_MAJOR :: "5"
VERSION_MINOR :: "4" VERSION_MINOR :: "4"
+6
View File
@@ -2,6 +2,12 @@ package miniaudio
import "core:c" import "core:c"
MINIAUDIO_SHARED :: #config(MINIAUDIO_SHARED)
when MINIAUDIO_SHARED {
#panic("Shared linking for miniaudio is not supported yet")
}
when ODIN_OS == .Windows { when ODIN_OS == .Windows {
foreign import lib "lib/miniaudio.lib" foreign import lib "lib/miniaudio.lib"
} else when ODIN_OS == .Linux { } else when ODIN_OS == .Linux {
+6
View File
@@ -3,12 +3,18 @@ package portmidi
import "core:c" import "core:c"
import "core:strings" import "core:strings"
PORTMIDI_SHARED :: #config(PORTMIDI_SHARED, false)
when ODIN_OS == .Windows { when ODIN_OS == .Windows {
when PORTMIDI_SHARED {
#panic("Shared linking not supported for portmidi on windows yet")
} else {
foreign import lib { foreign import lib {
"portmidi_s.lib", "portmidi_s.lib",
"system:Winmm.lib", "system:Winmm.lib",
"system:Advapi32.lib", "system:Advapi32.lib",
} }
}
} else { } else {
foreign import lib "system:portmidi" foreign import lib "system:portmidi"
} }
+34 -4
View File
@@ -2,24 +2,53 @@ package raylib
import c "core:c/libc" import c "core:c/libc"
RAYGUI_SHARED :: #config(RAYGUI_SHARED, false)
when ODIN_OS == .Windows { when ODIN_OS == .Windows {
when RAYGUI_SHARED {
foreign import lib {
"windows/rayguidll.lib",
}
} else {
foreign import lib { foreign import lib {
"windows/raygui.lib", "windows/raygui.lib",
} }
}
} else when ODIN_OS == .Linux { } else when ODIN_OS == .Linux {
foreign import lib { when RAYGUI_SHARED {
"linux/libraygui.a", // Note(bumbread): can't panic here, because the users might be expecting to
// "system:dl", // only use raylib. Let's have them get the error at link-time instead..
// "system:pthread", //#panic("Cannot link libraygui.so: not in the vendor collection")
// Note(bumbread): unless we import something the rest of the bindings will
// make a compile-time error. This is a bit ugly for now, but in the future
// raygui probably needs to be in a separate package.
foreign import lib {"_"}
} else {
// #panic("Cannot link libraygui.a: not in the vendor collection")
// TODO(bumbread): apparently this one was missing. This might need
// to get rebuilt for linux
// foreign import lib {
// "linux/libraygui.a",
// // "system:dl",
// // "system:pthread",
// }
foreign import lib {"_"}
} }
} else when ODIN_OS == .Darwin { } else when ODIN_OS == .Darwin {
when ODIN_ARCH == .arm64 { when ODIN_ARCH == .arm64 {
when RAYGUI_SHARED {
// #panic("Cannot link libraygui.450.dylib: not in the vendor collection")
} else {
foreign import lib { foreign import lib {
"macos-arm64/libraygui.a", "macos-arm64/libraygui.a",
// "system:Cocoa.framework", // "system:Cocoa.framework",
// "system:OpenGL.framework", // "system:OpenGL.framework",
// "system:IOKit.framework", // "system:IOKit.framework",
} }
}
} else {
when RAYGUI_SHARED {
// #panic("Cannot link libraygui.450.dylib: not in the vendor collection")
} else { } else {
foreign import lib { foreign import lib {
"macos/libraygui.a", "macos/libraygui.a",
@@ -28,6 +57,7 @@ when ODIN_OS == .Windows {
// "system:IOKit.framework", // "system:IOKit.framework",
} }
} }
}
} else { } else {
foreign import lib "system:raygui" foreign import lib "system:raygui"
} }
+43
View File
@@ -95,7 +95,19 @@ MAX_TEXT_BUFFER_LENGTH :: #config(RAYLIB_MAX_TEXT_BUFFER_LENGTH, 1024)
#assert(size_of(rune) == size_of(c.int)) #assert(size_of(rune) == size_of(c.int))
RAYLIB_SHARED :: #config(RAYLIB_SHARED, false)
when ODIN_OS == .Windows { when ODIN_OS == .Windows {
when RAYLIB_SHARED {
@(extra_linker_flags="/NODEFAULTLIB:libcmt")
foreign import lib {
"windows/raylibdll.lib",
"system:Winmm.lib",
"system:Gdi32.lib",
"system:User32.lib",
"system:Shell32.lib",
}
} else {
@(extra_linker_flags="/NODEFAULTLIB:libcmt") @(extra_linker_flags="/NODEFAULTLIB:libcmt")
foreign import lib { foreign import lib {
"windows/raylib.lib", "windows/raylib.lib",
@@ -104,20 +116,50 @@ when ODIN_OS == .Windows {
"system:User32.lib", "system:User32.lib",
"system:Shell32.lib", "system:Shell32.lib",
} }
}
} else when ODIN_OS == .Linux { } else when ODIN_OS == .Linux {
when RAYLIB_SHARED {
foreign import lib {
// Note(bumbread): I'm not sure why in `linux/` folder there are
// multiple copies of raylib.so, but since these bindings are for
// particular version of the library, I better specify it. Ideally,
// though, it's best specified in terms of major (.so.4)
"linux/libraylib.so.450",
"system:dl",
"system:pthread",
}
} else {
foreign import lib { foreign import lib {
"linux/libraylib.a", "linux/libraylib.a",
"system:dl", "system:dl",
"system:pthread", "system:pthread",
} }
}
} else when ODIN_OS == .Darwin { } else when ODIN_OS == .Darwin {
when ODIN_ARCH == .arm64 { when ODIN_ARCH == .arm64 {
when RAYLIB_SHARED {
foreign import lib {
"macos-arm64/libraylib.450.dylib",
"system:Cocoa.framework",
"system:OpenGL.framework",
"system:IOKit.framework",
}
} else {
foreign import lib { foreign import lib {
"macos-arm64/libraylib.a", "macos-arm64/libraylib.a",
"system:Cocoa.framework", "system:Cocoa.framework",
"system:OpenGL.framework", "system:OpenGL.framework",
"system:IOKit.framework", "system:IOKit.framework",
} }
}
} else {
when RAYLIB_SHARED {
foreign import lib {
"macos/libraylib.450.dylib",
"system:Cocoa.framework",
"system:OpenGL.framework",
"system:IOKit.framework",
}
} else { } else {
foreign import lib { foreign import lib {
"macos/libraylib.a", "macos/libraylib.a",
@@ -126,6 +168,7 @@ when ODIN_OS == .Windows {
"system:IOKit.framework", "system:IOKit.framework",
} }
} }
}
} else { } else {
foreign import lib "system:raylib" foreign import lib "system:raylib"
} }