use #exists to provide good errors for common missing libraries

This commit is contained in:
Laytan Laats
2024-06-04 20:13:51 +02:00
parent b47a15733d
commit 3e159736cd
24 changed files with 143 additions and 110 deletions
+1
View File
@@ -8330,6 +8330,7 @@ gb_internal ExprKind check_basic_directive_expr(CheckerContext *c, Operand *o, A
name == "assert" || name == "assert" ||
name == "defined" || name == "defined" ||
name == "config" || name == "config" ||
name == "exists" ||
name == "load" || name == "load" ||
name == "load_hash" || name == "load_hash" ||
name == "load_directory" || name == "load_directory" ||
+18 -4
View File
@@ -1,9 +1,23 @@
package cgltf package cgltf
when ODIN_OS == .Windows { foreign import lib "lib/cgltf.lib" } @(private)
else when ODIN_OS == .Linux { foreign import lib "lib/cgltf.a" } LIB :: (
else when ODIN_OS == .Darwin { foreign import lib "lib/darwin/cgltf.a" } "lib/cgltf.lib" when ODIN_OS == .Windows
else { foreign import lib "system:cgltf" } else "lib/cgltf.a" when ODIN_OS == .Linux
else "lib/darwin/cgltf.a" when ODIN_OS == .Darwin
else ""
)
when LIB != "" {
when !#exists(LIB) {
// Windows library is shipped with the compiler, so a Windows specific message should not be needed.
#panic("Could not find the compiled cgltf library, it can be compiled by running `make -C \"" + ODIN_ROOT + "vendor/cgltf/src\"`")
}
foreign import lib { LIB }
} else {
foreign import lib "system:cgltf"
}
import "core:c" import "core:c"
+8 -4
View File
@@ -8,12 +8,16 @@ when MINIAUDIO_SHARED {
#panic("Shared linking for miniaudio is not supported yet") #panic("Shared linking for miniaudio is not supported yet")
} }
when ODIN_OS == .Windows { @(private)
foreign import lib "lib/miniaudio.lib" LIB :: "lib/miniaudio.lib" when ODIN_OS == .Windows else "lib/miniaudio.a"
} else {
foreign import lib "lib/miniaudio.a" when !#exists(LIB) {
// Windows library is shipped with the compiler, so a Windows specific message should not be needed.
#panic("Could not find the compiled miniaudio library, it can be compiled by running `make -C \"" + ODIN_ROOT + "vendor/miniaudio/src\"`")
} }
foreign import lib { LIB }
BINDINGS_VERSION_MAJOR :: 0 BINDINGS_VERSION_MAJOR :: 0
BINDINGS_VERSION_MINOR :: 11 BINDINGS_VERSION_MINOR :: 11
BINDINGS_VERSION_REVISION :: 21 BINDINGS_VERSION_REVISION :: 21
+1 -5
View File
@@ -2,11 +2,7 @@ package miniaudio
import "core:c" import "core:c"
when ODIN_OS == .Windows { foreign import lib { LIB }
foreign import lib "lib/miniaudio.lib"
} else {
foreign import lib "lib/miniaudio.a"
}
/************************************************************************************************************************************************************ /************************************************************************************************************************************************************
************************************************************************************************************************************************************* *************************************************************************************************************************************************************
+1 -5
View File
@@ -2,11 +2,7 @@ package miniaudio
import "core:c" import "core:c"
when ODIN_OS == .Windows { foreign import lib { LIB }
foreign import lib "lib/miniaudio.lib"
} else {
foreign import lib "lib/miniaudio.a"
}
/************************************************************************************************************************************************************ /************************************************************************************************************************************************************
+1 -5
View File
@@ -1,10 +1,6 @@
package miniaudio package miniaudio
when ODIN_OS == .Windows { foreign import lib { LIB }
foreign import lib "lib/miniaudio.lib"
} else {
foreign import lib "lib/miniaudio.a"
}
import "core:c" import "core:c"
+1 -5
View File
@@ -2,11 +2,7 @@ package miniaudio
import "core:c" import "core:c"
when ODIN_OS == .Windows { foreign import lib { LIB }
foreign import lib "lib/miniaudio.lib"
} else {
foreign import lib "lib/miniaudio.a"
}
/* /*
Delay Delay
+1 -5
View File
@@ -2,11 +2,7 @@ package miniaudio
import "core:c" import "core:c"
when ODIN_OS == .Windows { foreign import lib { LIB }
foreign import lib "lib/miniaudio.lib"
} else {
foreign import lib "lib/miniaudio.a"
}
/************************************************************************************************************************************************************ /************************************************************************************************************************************************************
+1 -5
View File
@@ -2,11 +2,7 @@ package miniaudio
import "core:c" import "core:c"
when ODIN_OS == .Windows { foreign import lib { LIB }
foreign import lib "lib/miniaudio.lib"
} else {
foreign import lib "lib/miniaudio.a"
}
/************************************************************************************************************************************************************ /************************************************************************************************************************************************************
+1 -5
View File
@@ -2,11 +2,7 @@ package miniaudio
import "core:c" import "core:c"
when ODIN_OS == .Windows { foreign import lib { LIB }
foreign import lib "lib/miniaudio.lib"
} else {
foreign import lib "lib/miniaudio.a"
}
/************************************************************************************************************************************************************** /**************************************************************************************************************************************************************
+1 -5
View File
@@ -2,11 +2,7 @@ package miniaudio
import "core:c" import "core:c"
when ODIN_OS == .Windows { foreign import lib { LIB }
foreign import lib "lib/miniaudio.lib"
} else {
foreign import lib "lib/miniaudio.a"
}
waveform_type :: enum c.int { waveform_type :: enum c.int {
sine, sine,
+1 -5
View File
@@ -2,11 +2,7 @@ package miniaudio
import "core:c" import "core:c"
when ODIN_OS == .Windows { foreign import lib { LIB }
foreign import lib "lib/miniaudio.lib"
} else {
foreign import lib "lib/miniaudio.a"
}
/* /*
Slot Allocator Slot Allocator
+1 -5
View File
@@ -2,11 +2,7 @@ package miniaudio
import "core:c/libc" import "core:c/libc"
when ODIN_OS == .Windows { foreign import lib { LIB }
foreign import lib "lib/miniaudio.lib"
} else {
foreign import lib "lib/miniaudio.a"
}
MAX_LOG_CALLBACKS :: 4 MAX_LOG_CALLBACKS :: 4
+1 -5
View File
@@ -2,11 +2,7 @@ package miniaudio
import "core:c" import "core:c"
when ODIN_OS == .Windows { foreign import lib { LIB }
foreign import lib "lib/miniaudio.lib"
} else {
foreign import lib "lib/miniaudio.a"
}
/************************************************************************************************************************************************************ /************************************************************************************************************************************************************
+1 -5
View File
@@ -2,11 +2,7 @@ package miniaudio
import "core:c" import "core:c"
when ODIN_OS == .Windows { foreign import lib { LIB }
foreign import lib "lib/miniaudio.lib"
} else {
foreign import lib "lib/miniaudio.a"
}
/************************************************************************************************************************************************************ /************************************************************************************************************************************************************
+1 -5
View File
@@ -1,10 +1,6 @@
package miniaudio package miniaudio
when ODIN_OS == .Windows { foreign import lib { LIB }
foreign import lib "lib/miniaudio.lib"
} else {
foreign import lib "lib/miniaudio.a"
}
@(default_calling_convention="c", link_prefix="ma_") @(default_calling_convention="c", link_prefix="ma_")
foreign lib { foreign lib {
+1 -5
View File
@@ -2,11 +2,7 @@ package miniaudio
import "core:c" import "core:c"
when ODIN_OS == .Windows { foreign import lib { LIB }
foreign import lib "lib/miniaudio.lib"
} else {
foreign import lib "lib/miniaudio.a"
}
@(default_calling_convention="c", link_prefix="ma_") @(default_calling_convention="c", link_prefix="ma_")
foreign lib { foreign lib {
+1 -5
View File
@@ -2,11 +2,7 @@ package miniaudio
import "core:c" import "core:c"
when ODIN_OS == .Windows { foreign import lib { LIB }
foreign import lib "lib/miniaudio.lib"
} else {
foreign import lib "lib/miniaudio.a"
}
/************************************************************************************************************************************************************ /************************************************************************************************************************************************************
+19 -6
View File
@@ -2,13 +2,26 @@ package stb_image
import c "core:c/libc" import c "core:c/libc"
@(private)
LIB :: (
"../lib/stb_image.lib" when ODIN_OS == .Windows
else "../lib/stb_image.a" when ODIN_OS == .Linux
else "../lib/darwin/stb_image.a" when ODIN_OS == .Darwin
else ""
)
when LIB != "" {
when !#exists(LIB) {
// The STB libraries are shipped with the compiler on Windows so a Windows specific message should not be needed.
#panic("Could not find the compiled STB libraries, they can be compiled by running `make -C \"" + ODIN_ROOT + "vendor/stb/src\"`")
}
foreign import stbi { LIB }
} else {
foreign import stbi "system:stb_image"
}
#assert(size_of(c.int) == size_of(b32)) #assert(size_of(c.int) == size_of(b32))
when ODIN_OS == .Windows { foreign import stbi "../lib/stb_image.lib" }
else when ODIN_OS == .Linux { foreign import stbi "../lib/stb_image.a" }
else when ODIN_OS == .Darwin { foreign import stbi "../lib/darwin/stb_image.a" }
else { foreign import stbi "system:stb_image" }
#assert(size_of(b32) == size_of(c.int)) #assert(size_of(b32) == size_of(c.int))
// //
+17 -4
View File
@@ -2,11 +2,24 @@ package stb_image
import c "core:c/libc" import c "core:c/libc"
when ODIN_OS == .Windows { foreign import lib "../lib/stb_image_resize.lib" } @(private)
else when ODIN_OS == .Linux { foreign import lib "../lib/stb_image_resize.a" } RESIZE_LIB :: (
else when ODIN_OS == .Darwin { foreign import lib "../lib/darwin/stb_image_resize.a" } "../lib/stb_image_resize.lib" when ODIN_OS == .Windows
else { foreign import lib "system:stb_image_resize" } else "../lib/stb_image_resize.a" when ODIN_OS == .Linux
else "../lib/darwin/stb_image_resize.a" when ODIN_OS == .Darwin
else ""
)
when RESIZE_LIB != "" {
when !#exists(RESIZE_LIB) {
// The STB libraries are shipped with the compiler on Windows so a Windows specific message should not be needed.
#panic("Could not find the compiled STB libraries, they can be compiled by running `make -C \"" + ODIN_ROOT + "vendor/stb/src\"`")
}
foreign import lib { RESIZE_LIB }
} else {
foreign import lib "system:stb_image_resize"
}
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
// //
+17 -4
View File
@@ -2,11 +2,24 @@ package stb_image
import c "core:c/libc" import c "core:c/libc"
when ODIN_OS == .Windows { foreign import stbiw "../lib/stb_image_write.lib" } @(private)
else when ODIN_OS == .Linux { foreign import stbiw "../lib/stb_image_write.a" } WRITE_LIB :: (
else when ODIN_OS == .Darwin { foreign import stbiw "../lib/darwin/stb_image_write.a" } "../lib/stb_image_write.lib" when ODIN_OS == .Windows
else { foreign import stbiw "system:stb_image_write" } else "../lib/stb_image_write.a" when ODIN_OS == .Linux
else "../lib/darwin/stb_image_write.a" when ODIN_OS == .Darwin
else ""
)
when WRITE_LIB != "" {
when !#exists(WRITE_LIB) {
// The STB libraries are shipped with the compiler on Windows so a Windows specific message should not be needed.
#panic("Could not find the compiled STB libraries, they can be compiled by running `make -C \"" + ODIN_ROOT + "vendor/stb/src\"`")
}
foreign import stbiw { WRITE_LIB }
} else {
foreign import stbiw "system:stb_image_write"
}
write_func :: proc "c" (ctx: rawptr, data: rawptr, size: c.int) write_func :: proc "c" (ctx: rawptr, data: rawptr, size: c.int)
+17 -4
View File
@@ -4,10 +4,23 @@ import "core:c"
#assert(size_of(b32) == size_of(c.int)) #assert(size_of(b32) == size_of(c.int))
when ODIN_OS == .Windows { foreign import lib "../lib/stb_rect_pack.lib" } @(private)
else when ODIN_OS == .Linux { foreign import lib "../lib/stb_rect_pack.a" } LIB :: (
else when ODIN_OS == .Darwin { foreign import lib "../lib/darwin/stb_rect_pack.a" } "../lib/stb_rect_pack.lib" when ODIN_OS == .Windows
else { foreign import lib "system:stb_rect_pack" } else "../lib/stb_rect_pack.a" when ODIN_OS == .Linux
else "../lib/darwin/stb_rect_pack.a" when ODIN_OS == .Darwin
else ""
)
when LIB != "" {
when !#exists(LIB) {
#panic("Could not find the compiled STB libraries, they can be compiled by running `make -C \"" + ODIN_ROOT + "vendor/stb/src\"`")
}
foreign import lib { LIB }
} else {
foreign import lib "system:stb_rect_pack"
}
Coord :: distinct c.int Coord :: distinct c.int
_MAXVAL :: max(Coord) _MAXVAL :: max(Coord)
+16 -4
View File
@@ -3,11 +3,23 @@ package stb_truetype
import c "core:c" import c "core:c"
import stbrp "vendor:stb/rect_pack" import stbrp "vendor:stb/rect_pack"
when ODIN_OS == .Windows { foreign import stbtt "../lib/stb_truetype.lib" } @(private)
else when ODIN_OS == .Linux { foreign import stbtt "../lib/stb_truetype.a" } LIB :: (
else when ODIN_OS == .Darwin { foreign import stbtt "../lib/darwin/stb_truetype.a" } "../lib/stb_truetype.lib" when ODIN_OS == .Windows
else { foreign import stbtt "system:stb_truetype" } else "../lib/stb_truetype.a" when ODIN_OS == .Linux
else "../lib/darwin/stb_truetype.a" when ODIN_OS == .Darwin
else ""
)
when LIB != "" {
when !#exists(LIB) {
#panic("Could not find the compiled STB libraries, they can be compiled by running `make -C \"" + ODIN_ROOT + "vendor/stb/src\"`")
}
foreign import stbtt { LIB }
} else {
foreign import stbtt "system:stb_truetype"
}
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
+15 -5
View File
@@ -2,13 +2,23 @@ package stb_vorbis
import c "core:c/libc" import c "core:c/libc"
@(private)
LIB :: (
"../lib/stb_vorbis.lib" when ODIN_OS == .Windows
else "../lib/stb_vorbis.a" when ODIN_OS == .Linux
else "../lib/darwin/stb_vorbis.a" when ODIN_OS == .Darwin
else ""
)
when ODIN_OS == .Windows { foreign import lib "../lib/stb_vorbis.lib" } when LIB != "" {
else when ODIN_OS == .Linux { foreign import lib "../lib/stb_vorbis.a" } when !#exists(LIB) {
else when ODIN_OS == .Darwin { foreign import lib "../lib/darwin/stb_vorbis.a" } #panic("Could not find the compiled STB libraries, they can be compiled by running `make -C \"" + ODIN_ROOT + "vendor/stb/src\"`")
else { foreign import lib "system:stb_vorbis" } }
foreign import lib { LIB }
} else {
foreign import lib "system:stb_vorbis"
}
/////////// THREAD SAFETY /////////// THREAD SAFETY