aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2025-06-03 20:01:22 +0200
committerJeroen van Rijn <Kelimion@users.noreply.github.com>2025-06-04 11:08:25 +0200
commitae5c92ac38dd7facce8a61b110e08b1b4a2a4238 (patch)
tree16e78531439db7fce856f93ff4f064647f40eaad
parent986cfbcaf4aa6300109e93c114e439d2578887af (diff)
Enable `odin check examples/all` for JS.
-rw-r--r--.github/workflows/ci.yml6
-rw-r--r--core/compress/common.odin3
-rw-r--r--core/path/filepath/path_js.odin36
-rw-r--r--core/sys/info/sysinfo.odin2
-rw-r--r--core/time/timezone/tz_js.odin13
-rw-r--r--examples/all/all_js.odin148
-rw-r--r--examples/all/all_linux.odin9
-rw-r--r--examples/all/all_main.odin6
-rw-r--r--examples/all/all_posix.odin7
-rw-r--r--examples/all/all_vendor.odin138
-rw-r--r--examples/all/all_vendor_js.odin13
-rw-r--r--examples/all/all_vendor_windows.odin21
12 files changed, 273 insertions, 129 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 356a977b0..3b378b693 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -159,6 +159,12 @@ jobs:
- name: Odin check examples/all for OpenBSD amd64
if: matrix.os == 'ubuntu-latest'
run: ./odin check examples/all -vet -strict-style -disallow-do -target:openbsd_amd64
+ - name: Odin check examples/all for js_wasm32
+ if: matrix.os == 'ubuntu-latest'
+ run: ./odin check examples/all -vet -strict-style -disallow-do -no-entry-point -target:js_wasm32
+ - name: Odin check examples/all for js_wasm64p32
+ if: matrix.os == 'ubuntu-latest'
+ run: ./odin check examples/all -vet -strict-style -disallow-do -no-entry-point -target:js_wasm64p32
- name: Odin check examples/all/sdl3 for Linux i386
if: matrix.os == 'ubuntu-latest'
diff --git a/core/compress/common.odin b/core/compress/common.odin
index 242538e78..f4429b667 100644
--- a/core/compress/common.odin
+++ b/core/compress/common.odin
@@ -139,9 +139,6 @@ Context_Memory_Input :: struct #packed {
}
when size_of(rawptr) == 8 {
#assert(size_of(Context_Memory_Input) == 64)
-} else {
- // e.g. `-target:windows_i386`
- #assert(size_of(Context_Memory_Input) == 52)
}
Context_Stream_Input :: struct #packed {
diff --git a/core/path/filepath/path_js.odin b/core/path/filepath/path_js.odin
new file mode 100644
index 000000000..3b5ac04f5
--- /dev/null
+++ b/core/path/filepath/path_js.odin
@@ -0,0 +1,36 @@
+package filepath
+
+import "base:runtime"
+
+import "core:strings"
+
+SEPARATOR :: '/'
+SEPARATOR_STRING :: `/`
+LIST_SEPARATOR :: ':'
+
+is_reserved_name :: proc(path: string) -> bool {
+ return false
+}
+
+is_abs :: proc(path: string) -> bool {
+ return strings.has_prefix(path, "/")
+}
+
+abs :: proc(path: string, allocator := context.allocator) -> (string, bool) {
+ if is_abs(path) {
+ return strings.clone(string(path), allocator), true
+ }
+
+ return path, false
+}
+
+join :: proc(elems: []string, allocator := context.allocator) -> (joined: string, err: runtime.Allocator_Error) #optional_allocator_error {
+ for e, i in elems {
+ if e != "" {
+ runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD(ignore = context.temp_allocator == allocator)
+ p := strings.join(elems[i:], SEPARATOR_STRING, context.temp_allocator) or_return
+ return clean(p, allocator)
+ }
+ }
+ return "", nil
+} \ No newline at end of file
diff --git a/core/sys/info/sysinfo.odin b/core/sys/info/sysinfo.odin
index f624a1718..75cc237c6 100644
--- a/core/sys/info/sysinfo.odin
+++ b/core/sys/info/sysinfo.odin
@@ -1,6 +1,6 @@
package sysinfo
-when !(ODIN_ARCH == .amd64 || ODIN_ARCH == .i386 || ODIN_ARCH == .arm32 || ODIN_ARCH == .arm64 || ODIN_ARCH == .riscv64) {
+when !(ODIN_ARCH == .amd64 || ODIN_ARCH == .i386 || ODIN_ARCH == .arm32 || ODIN_ARCH == .arm64 || ODIN_ARCH == .riscv64 || ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32) {
#assert(false, "This package is unsupported on this architecture.")
}
diff --git a/core/time/timezone/tz_js.odin b/core/time/timezone/tz_js.odin
new file mode 100644
index 000000000..d63e40033
--- /dev/null
+++ b/core/time/timezone/tz_js.odin
@@ -0,0 +1,13 @@
+#+build js
+#+private
+package timezone
+
+import "core:time/datetime"
+
+local_tz_name :: proc(allocator := context.allocator) -> (name: string, success: bool) {
+ return
+}
+
+_region_load :: proc(_reg_str: string, allocator := context.allocator) -> (out_reg: ^datetime.TZ_Region, success: bool) {
+ return nil, true
+} \ No newline at end of file
diff --git a/examples/all/all_js.odin b/examples/all/all_js.odin
new file mode 100644
index 000000000..28b85f537
--- /dev/null
+++ b/examples/all/all_js.odin
@@ -0,0 +1,148 @@
+#+build js
+package all
+
+// Imports "every" package
+// This is useful for knowing what exists and producing documentation with `odin doc`
+
+@(require) import "core:bufio"
+@(require) import "core:bytes"
+@(require) import "core:c"
+
+@(require) import "core:compress"
+@(require) import "core:compress/shoco"
+@(require) import "core:compress/gzip"
+@(require) import "core:compress/zlib"
+
+@(require) import "core:container/avl"
+@(require) import "core:container/bit_array"
+@(require) import "core:container/priority_queue"
+@(require) import "core:container/queue"
+@(require) import "core:container/small_array"
+@(require) import "core:container/lru"
+@(require) import "core:container/intrusive/list"
+@(require) import "core:container/rbtree"
+@(require) import "core:container/topological_sort"
+
+@(require) import "core:crypto"
+@(require) import "core:crypto/aead"
+@(require) import "core:crypto/aegis"
+@(require) import "core:crypto/aes"
+@(require) import "core:crypto/blake2b"
+@(require) import "core:crypto/blake2s"
+@(require) import "core:crypto/chacha20"
+@(require) import "core:crypto/chacha20poly1305"
+@(require) import chash "core:crypto/hash"
+@(require) import "core:crypto/deoxysii"
+@(require) import "core:crypto/ed25519"
+@(require) import "core:crypto/hkdf"
+@(require) import "core:crypto/hmac"
+@(require) import "core:crypto/kmac"
+@(require) import "core:crypto/legacy/keccak"
+@(require) import "core:crypto/legacy/md5"
+@(require) import "core:crypto/legacy/sha1"
+@(require) import "core:crypto/pbkdf2"
+@(require) import "core:crypto/poly1305"
+@(require) import "core:crypto/ristretto255"
+@(require) import "core:crypto/sha2"
+@(require) import "core:crypto/sha3"
+@(require) import "core:crypto/shake"
+@(require) import "core:crypto/sm3"
+@(require) import "core:crypto/tuplehash"
+@(require) import "core:crypto/x25519"
+@(require) import "core:crypto/x448"
+
+@(require) import "core:debug/pe"
+@(require) import "core:debug/trace"
+
+@(require) import "core:dynlib"
+@(require) import "core:net"
+
+@(require) import "core:encoding/base32"
+@(require) import "core:encoding/base64"
+@(require) import "core:encoding/cbor"
+@(require) import "core:encoding/csv"
+@(require) import "core:encoding/endian"
+@(require) import "core:encoding/hxa"
+@(require) import "core:encoding/ini"
+@(require) import "core:encoding/json"
+@(require) import "core:encoding/varint"
+@(require) import "core:encoding/xml"
+@(require) import "core:encoding/uuid"
+@(require) import "core:encoding/uuid/legacy"
+
+@(require) import "core:fmt"
+@(require) import "core:hash"
+@(require) import "core:hash/xxhash"
+
+@(require) import "core:image"
+@(require) import "core:image/bmp"
+@(require) import "core:image/netpbm"
+@(require) import "core:image/png"
+@(require) import "core:image/qoi"
+@(require) import "core:image/tga"
+
+@(require) import "core:io"
+@(require) import "core:log"
+
+@(require) import "core:math"
+@(require) import "core:math/big"
+@(require) import "core:math/bits"
+@(require) import "core:math/fixed"
+@(require) import "core:math/linalg"
+@(require) import "core:math/linalg/glsl"
+@(require) import "core:math/linalg/hlsl"
+@(require) import "core:math/noise"
+@(require) import "core:math/rand"
+@(require) import "core:math/ease"
+@(require) import "core:math/cmplx"
+
+@(require) import "core:mem"
+@(require) import "core:mem/tlsf"
+@(require) import "core:mem/virtual"
+
+@(require) import "core:odin/ast"
+@(require) import doc_format "core:odin/doc-format"
+
+@(require) import "core:odin/tokenizer"
+@(require) import "core:os"
+@(require) import "core:path/slashpath"
+
+@(require) import "core:relative"
+
+@(require) import "core:reflect"
+@(require) import "base:runtime"
+@(require) import "base:sanitizer"
+@(require) import "core:simd"
+@(require) import "core:simd/x86"
+@(require) import "core:slice"
+@(require) import "core:slice/heap"
+@(require) import "core:sort"
+@(require) import "core:strconv"
+@(require) import "core:strings"
+@(require) import "core:sync"
+
+@(require) import "core:terminal"
+@(require) import "core:terminal/ansi"
+
+@(require) import "core:text/edit"
+@(require) import "core:text/i18n"
+@(require) import "core:text/match"
+@(require) import "core:text/regex"
+@(require) import "core:text/scanner"
+@(require) import "core:text/table"
+
+@(require) import "core:thread"
+@(require) import "core:time"
+@(require) import "core:time/datetime"
+@(require) import "core:time/timezone"
+
+
+@(require) import "core:sys/orca"
+@(require) import "core:sys/info"
+
+@(require) import "core:unicode"
+@(require) import "core:unicode/utf8"
+@(require) import "core:unicode/utf8/utf8string"
+@(require) import "core:unicode/utf16"
+
+main :: proc() {} \ No newline at end of file
diff --git a/examples/all/all_linux.odin b/examples/all/all_linux.odin
index dde712b8d..2b70fa1e1 100644
--- a/examples/all/all_linux.odin
+++ b/examples/all/all_linux.odin
@@ -1,10 +1,5 @@
#+build linux
package all
-import linux "core:sys/linux"
-
-import xlib "vendor:x11/xlib"
-
-_ :: linux
-
-_ :: xlib
+@(require) import "core:sys/linux"
+@(require) import "vendor:x11/xlib" \ No newline at end of file
diff --git a/examples/all/all_main.odin b/examples/all/all_main.odin
index de037f6cd..26d41a77a 100644
--- a/examples/all/all_main.odin
+++ b/examples/all/all_main.odin
@@ -1,3 +1,4 @@
+#+build !js
package all
// Imports every package
@@ -152,9 +153,6 @@ import utf8 "core:unicode/utf8"
import utf8string "core:unicode/utf8/utf8string"
import utf16 "core:unicode/utf16"
-main :: proc(){}
-
-
_ :: bufio
_ :: bytes
_ :: c
@@ -280,3 +278,5 @@ _ :: utf8
_ :: utf8string
_ :: utf16
_ :: sanitizer
+
+main :: proc() {} \ No newline at end of file
diff --git a/examples/all/all_posix.odin b/examples/all/all_posix.odin
index 61b33a5c6..3e05f74ff 100644
--- a/examples/all/all_posix.odin
+++ b/examples/all/all_posix.odin
@@ -1,8 +1,5 @@
#+build darwin, openbsd, freebsd, netbsd
package all
-import posix "core:sys/posix"
-import kqueue "core:sys/kqueue"
-
-_ :: posix
-_ :: kqueue
+@(require) import "core:sys/posix"
+@(require) import "core:sys/kqueue" \ No newline at end of file
diff --git a/examples/all/all_vendor.odin b/examples/all/all_vendor.odin
index ebbfe786b..a41f9f986 100644
--- a/examples/all/all_vendor.odin
+++ b/examples/all/all_vendor.odin
@@ -1,102 +1,48 @@
+#+build !js
package all
-import cgltf "vendor:cgltf"
-// import commonmark "vendor:commonmark"
-import ENet "vendor:ENet"
-import exr "vendor:OpenEXRCore"
-import ggpo "vendor:ggpo"
-import gl "vendor:OpenGL"
-import glfw "vendor:glfw"
-import microui "vendor:microui"
-import miniaudio "vendor:miniaudio"
-import PM "vendor:portmidi"
-import rl "vendor:raylib"
-import zlib "vendor:zlib"
-
-import SDL "vendor:sdl2"
-import SDLNet "vendor:sdl2/net"
-import IMG "vendor:sdl2/image"
-import MIX "vendor:sdl2/mixer"
-import TTF "vendor:sdl2/ttf"
-
-import vk "vendor:vulkan"
+@(require) import "vendor:cgltf"
+@(require) import "vendor:ENet"
+@(require) import "vendor:OpenEXRCore"
+@(require) import "vendor:ggpo"
+@(require) import "vendor:OpenGL"
+@(require) import "vendor:glfw"
+@(require) import "vendor:microui"
+@(require) import "vendor:miniaudio"
+@(require) import "vendor:portmidi"
+@(require) import "vendor:raylib"
+@(require) import "vendor:zlib"
+
+@(require) import "vendor:sdl2"
+@(require) import "vendor:sdl2/net"
+@(require) import "vendor:sdl2/image"
+@(require) import "vendor:sdl2/mixer"
+@(require) import "vendor:sdl2/ttf"
+
+@(require) import "vendor:vulkan"
// NOTE(bill): only one can be checked at a time
-import lua_5_4 "vendor:lua/5.4"
-
-import nvg "vendor:nanovg"
-import nvg_gl "vendor:nanovg/gl"
-import fontstash "vendor:fontstash"
-
-_ :: cgltf
-// _ :: commonmark
-_ :: ENet
-_ :: exr
-_ :: ggpo
-_ :: gl
-_ :: glfw
-_ :: microui
-_ :: miniaudio
-_ :: PM
-_ :: rl
-_ :: zlib
-
-_ :: SDL
-_ :: SDLNet
-_ :: IMG
-_ :: MIX
-_ :: TTF
-
-_ :: vk
-
-_ :: lua_5_4
-
-_ :: nvg
-_ :: nvg_gl
-_ :: fontstash
-
+@(require) import lua54 "vendor:lua/5.4"
+@(require) import "vendor:nanovg"
+@(require) import "vendor:nanovg/gl"
+@(require) import "vendor:fontstash"
// NOTE: needed for doc generator
-
-import NS "core:sys/darwin/Foundation"
-import CF "core:sys/darwin/CoreFoundation"
-import SEC "core:sys/darwin/Security"
-import MTL "vendor:darwin/Metal"
-import MTK "vendor:darwin/MetalKit"
-import CA "vendor:darwin/QuartzCore"
-
-_ :: NS
-_ :: CF
-_ :: SEC
-_ :: MTL
-_ :: MTK
-_ :: CA
-
-
-import DXC "vendor:directx/dxc"
-import D3D11 "vendor:directx/d3d11"
-import D3D12 "vendor:directx/d3d12"
-import DXGI "vendor:directx/dxgi"
-
-_ :: DXC
-_ :: D3D11
-_ :: D3D12
-_ :: DXGI
-
-
-import cm "vendor:commonmark"
-_ :: cm
-
-
-import stb_easy_font "vendor:stb/easy_font"
-import stbi "vendor:stb/image"
-import stbrp "vendor:stb/rect_pack"
-import stbtt "vendor:stb/truetype"
-import stb_vorbis "vendor:stb/vorbis"
-
-_ :: stb_easy_font
-_ :: stbi
-_ :: stbrp
-_ :: stbtt
-_ :: stb_vorbis
-
+@(require) import "core:sys/darwin/Foundation"
+@(require) import "core:sys/darwin/CoreFoundation"
+@(require) import "core:sys/darwin/Security"
+@(require) import "vendor:darwin/Metal"
+@(require) import "vendor:darwin/MetalKit"
+@(require) import "vendor:darwin/QuartzCore"
+
+@(require) import "vendor:directx/dxc"
+@(require) import "vendor:directx/d3d11"
+@(require) import "vendor:directx/d3d12"
+@(require) import "vendor:directx/dxgi"
+@(require) import "vendor:commonmark"
+
+@(require) import "vendor:stb/easy_font"
+@(require) import stbi "vendor:stb/image"
+@(require) import "vendor:stb/rect_pack"
+@(require) import "vendor:stb/truetype"
+@(require) import "vendor:stb/vorbis" \ No newline at end of file
diff --git a/examples/all/all_vendor_js.odin b/examples/all/all_vendor_js.odin
new file mode 100644
index 000000000..d7975541d
--- /dev/null
+++ b/examples/all/all_vendor_js.odin
@@ -0,0 +1,13 @@
+#+build js
+package all
+
+@(require) import "vendor:box2d"
+@(require) import "vendor:cgltf"
+@(require) import "vendor:fontstash"
+@(require) import "vendor:microui"
+@(require) import "vendor:stb/easy_font"
+@(require) import "vendor:stb/image"
+@(require) import "vendor:stb/rect_pack"
+@(require) import "vendor:stb/truetype"
+@(require) import "vendor:wgpu"
+@(require) import "vendor:wasm/WebGL" \ No newline at end of file
diff --git a/examples/all/all_vendor_windows.odin b/examples/all/all_vendor_windows.odin
index 3daf527ce..b71b69a5a 100644
--- a/examples/all/all_vendor_windows.odin
+++ b/examples/all/all_vendor_windows.odin
@@ -1,16 +1,9 @@
+#+build windows
package all
-import wgpu "vendor:wgpu"
-import wgpu_glfw_glue "vendor:wgpu/glfwglue"
-import wgpu_sdl_glue "vendor:wgpu/sdl2glue"
-import b2 "vendor:box2d"
-import game_input "vendor:windows/GameInput"
-import XAudio2 "vendor:windows/XAudio2"
-
-_ :: wgpu
-_ :: wgpu_glfw_glue
-_ :: wgpu_sdl_glue
-_ :: b2
-_ :: game_input
-_ :: XAudio2
-
+@(require) import "vendor:wgpu/glfwglue"
+@(require) import "vendor:wgpu/sdl2glue"
+@(require) import "vendor:wgpu"
+@(require) import "vendor:box2d"
+@(require) import "vendor:windows/GameInput"
+@(require) import "vendor:windows/XAudio2" \ No newline at end of file