Browse Source

add 'shared' config to vendor libraries

flysand7 1 year ago
parent
commit
cf937c6341

BIN
a.out


+ 7 - 1
vendor/OpenEXRCore/exr_base.odin

@@ -1,7 +1,13 @@
 package vendor_openexr
 package vendor_openexr
 
 
+OPENEXRCORE_SHARED :: #config(OPENEXRCORE_SHARED, false)
+
 when ODIN_OS == .Windows {
 when ODIN_OS == .Windows {
-	foreign import lib "OpenEXRCore-3_1.lib"
+	when OPENEXRCORE_SHARED {
+		#panic("Dynamic linking is not supported for OpenEXRCore yet")
+	} else {
+		foreign import lib "OpenEXRCore-3_1.lib"
+	}
 } else {
 } else {
 	foreign import lib "system:OpenEXRCore-3_1"
 	foreign import lib "system:OpenEXRCore-3_1"
 }
 }

+ 5 - 0
vendor/commonmark/cmark.odin

@@ -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",

+ 6 - 7
vendor/glfw/bindings/bindings.odin

@@ -22,15 +22,14 @@ 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 { 
-        	"../lib/darwin/libglfw3.a",
-        	"system:Cocoa.framework",
-        	"system:IOKit.framework",
-        	"system:OpenGL.framework",
-    	}
+	foreign import glfw { 
+		"../lib/darwin/libglfw3.a",
+		"system:Cocoa.framework",
+		"system:IOKit.framework",
+		"system:OpenGL.framework",
+	}
 } else {
 } else {
 	foreign import glfw "system:glfw"
 	foreign import glfw "system:glfw"
 }
 }

+ 1 - 1
vendor/glfw/constants.odin

@@ -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
vendor/glfw/native_darwin.odin

@@ -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
vendor/glfw/native_windows.odin

@@ -4,10 +4,20 @@ package glfw
 
 
 import win32 "core:sys/windows"
 import win32 "core:sys/windows"
 
 
-when GLFW_DYNAMIC {
-    foreign import glfw { "lib/glfw3dll.lib", "system:user32.lib", "system:gdi32.lib", "system:shell32.lib" }
+when GLFW_SHARED {
+    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")

+ 18 - 5
vendor/lua/5.1/lua.odin

@@ -7,12 +7,25 @@ import c "core:c/libc"
 
 
 #assert(size_of(c.int) == size_of(b32))
 #assert(size_of(c.int) == size_of(b32))
 
 
-when ODIN_OS == .Windows {
-	foreign import lib "windows/lua5.1.dll.lib"
-} else when ODIN_OS == .Linux {
-	foreign import lib "linux/liblua5.1.a"
+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 {
 } else {
-	foreign import lib "system:liblua5.1.a"
+	when ODIN_OS == .Windows {
+		foreign import lib "windows/lua5.1.dll.lib"
+	} else when ODIN_OS == .Linux {
+		foreign import lib "linux/liblua5.1.a"
+	} else {
+		foreign import lib "system:liblua5.1.a"
+	}
 }
 }
 
 
 VERSION	        :: "Lua 5.1"
 VERSION	        :: "Lua 5.1"

+ 18 - 5
vendor/lua/5.2/lua.odin

@@ -7,12 +7,25 @@ import c "core:c/libc"
 
 
 #assert(size_of(c.int) == size_of(b32))
 #assert(size_of(c.int) == size_of(b32))
 
 
-when ODIN_OS == .Windows {
-	foreign import lib "windows/lua52dll.lib"
-} else when ODIN_OS == .Linux {
-	foreign import lib "linux/liblua52.a"
+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 {
 } else {
-	foreign import lib "system:liblua52.a"
+	when ODIN_OS == .Windows {
+		foreign import lib "windows/lua52dll.lib"
+	} else when ODIN_OS == .Linux {
+		foreign import lib "linux/liblua52.a"
+	} else {
+		foreign import lib "system:liblua52.a"
+	}
 }
 }
 
 
 VERSION_MAJOR       :: "5"
 VERSION_MAJOR       :: "5"

+ 18 - 5
vendor/lua/5.3/lua.odin

@@ -7,12 +7,25 @@ import c "core:c/libc"
 
 
 #assert(size_of(c.int) == size_of(b32))
 #assert(size_of(c.int) == size_of(b32))
 
 
-when ODIN_OS == .Windows {
-	foreign import lib "windows/lua53dll.lib"
-} else when ODIN_OS == .Linux {
-	foreign import lib "linux/liblua53.a"
+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 {
 } else {
-	foreign import lib "system:liblua53.a"
+	when ODIN_OS == .Windows {
+		foreign import lib "windows/lua53dll.lib"
+	} else when ODIN_OS == .Linux {
+		foreign import lib "linux/liblua53.a"
+	} else {
+		foreign import lib "system:liblua53.a"
+	}
 }
 }
 
 
 VERSION_MAJOR       :: "5"
 VERSION_MAJOR       :: "5"

+ 26 - 5
vendor/lua/5.4/lua.odin

@@ -7,12 +7,33 @@ import c "core:c/libc"
 
 
 #assert(size_of(c.int) == size_of(b32))
 #assert(size_of(c.int) == size_of(b32))
 
 
-when ODIN_OS == .Windows {
-	foreign import lib "windows/lua54dll.lib"
-} else when ODIN_OS == .Linux {
-	foreign import lib "linux/liblua54.a"
+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 {
 } else {
-	foreign import lib "system:liblua54.a"
+	when ODIN_OS == .Windows {
+		foreign import lib "windows/lua54dll.lib"
+	} else when ODIN_OS == .Linux {
+		foreign import lib "linux/liblua54.a"
+	} else {
+		foreign import lib "system:liblua54.a"
+	}
 }
 }
 
 
 VERSION_MAJOR       :: "5"
 VERSION_MAJOR       :: "5"

+ 6 - 0
vendor/miniaudio/common.odin

@@ -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 {

+ 10 - 4
vendor/portmidi/portmidi.odin

@@ -3,11 +3,17 @@ 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 {
-	foreign import lib {
-		"portmidi_s.lib",
-		"system:Winmm.lib",
-		"system:Advapi32.lib",
+	when PORTMIDI_SHARED {
+		#panic("Shared linking not supported for portmidi on windows yet")
+	} else {
+		foreign import lib {
+			"portmidi_s.lib",
+			"system:Winmm.lib",
+			"system:Advapi32.lib",
+		}
 	}
 	}
 } else {
 } else {
 	foreign import lib "system:portmidi"
 	foreign import lib "system:portmidi"

+ 46 - 16
vendor/raylib/raygui.odin

@@ -2,30 +2,60 @@ 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 {
-	foreign import lib {
-		"windows/raygui.lib",
+	when RAYGUI_SHARED {
+		foreign import lib {
+			"windows/rayguidll.lib",
+		}
+	} else {
+		foreign import lib {
+			"windows/raygui.lib",
+		}
 	}
 	}
 } else when ODIN_OS == .Linux  {
 } else when ODIN_OS == .Linux  {
-	foreign import lib { 
-		"linux/libraygui.a",
-		// "system:dl",
-		// "system:pthread",
+	when RAYGUI_SHARED {
+		// Note(bumbread): can't panic here, because the users might be expecting to
+		// only use raylib. Let's have them get the error at link-time instead..
+		//#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 {
-		foreign import lib {
-			"macos-arm64/libraygui.a",
-			// "system:Cocoa.framework",
-			// "system:OpenGL.framework",
-			// "system:IOKit.framework",
+		when RAYGUI_SHARED {
+			// #panic("Cannot link libraygui.450.dylib: not in the vendor collection")
+		} else {
+			foreign import lib {
+				"macos-arm64/libraygui.a",
+				// "system:Cocoa.framework",
+				// "system:OpenGL.framework",
+				// "system:IOKit.framework",
+			}
 		}
 		}
 	} else {
 	} else {
-		foreign import lib {
-			"macos/libraygui.a",
-			// "system:Cocoa.framework",
-			// "system:OpenGL.framework",
-			// "system:IOKit.framework",
+		when RAYGUI_SHARED {
+			// #panic("Cannot link libraygui.450.dylib: not in the vendor collection")
+		} else {
+			foreign import lib {
+				"macos/libraygui.a",
+				// "system:Cocoa.framework",
+				// "system:OpenGL.framework",
+				// "system:IOKit.framework",
+			}
 		}
 		}
 	}
 	}
 } else {
 } else {

+ 64 - 21
vendor/raylib/raylib.odin

@@ -95,35 +95,78 @@ 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 {
-	@(extra_linker_flags="/NODEFAULTLIB:libcmt")
-	foreign import lib {
-		"windows/raylib.lib",
-		"system:Winmm.lib",
-		"system:Gdi32.lib",
-		"system:User32.lib",
-		"system:Shell32.lib",
+	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")
+		foreign import lib {
+			"windows/raylib.lib",
+			"system:Winmm.lib",
+			"system:Gdi32.lib",
+			"system:User32.lib",
+			"system:Shell32.lib",
+		}
 	}
 	}
 } else when ODIN_OS == .Linux  {
 } else when ODIN_OS == .Linux  {
-	foreign import lib { 
-		"linux/libraylib.a",
-		"system:dl",
-		"system:pthread",
+	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 { 
+			"linux/libraylib.a",
+			"system:dl",
+			"system:pthread",
+		}
 	}
 	}
 } else when ODIN_OS == .Darwin {
 } else when ODIN_OS == .Darwin {
 	when ODIN_ARCH == .arm64 {
 	when ODIN_ARCH == .arm64 {
-		foreign import lib {
-			"macos-arm64/libraylib.a",
-			"system:Cocoa.framework",
-			"system:OpenGL.framework",
-			"system:IOKit.framework",
+		when RAYLIB_SHARED {
+			foreign import lib {
+				"macos-arm64/libraylib.450.dylib",
+				"system:Cocoa.framework",
+				"system:OpenGL.framework",
+				"system:IOKit.framework",
+			}
+		} else {
+			foreign import lib {
+				"macos-arm64/libraylib.a",
+				"system:Cocoa.framework",
+				"system:OpenGL.framework",
+				"system:IOKit.framework",
+			}
 		}
 		}
 	} else {
 	} else {
-		foreign import lib {
-			"macos/libraylib.a",
-			"system:Cocoa.framework",
-			"system:OpenGL.framework",
-			"system:IOKit.framework",
+		when RAYLIB_SHARED {
+			foreign import lib {
+				"macos/libraylib.450.dylib",
+				"system:Cocoa.framework",
+				"system:OpenGL.framework",
+				"system:IOKit.framework",
+			}
+		} else {
+			foreign import lib {
+				"macos/libraylib.a",
+				"system:Cocoa.framework",
+				"system:OpenGL.framework",
+				"system:IOKit.framework",
+			}
 		}
 		}
 	}
 	}
 } else {
 } else {