diff options
| author | Jeroen van Rijn <Kelimion@users.noreply.github.com> | 2025-06-03 20:01:22 +0200 |
|---|---|---|
| committer | Jeroen van Rijn <Kelimion@users.noreply.github.com> | 2025-06-04 11:08:25 +0200 |
| commit | ae5c92ac38dd7facce8a61b110e08b1b4a2a4238 (patch) | |
| tree | 16e78531439db7fce856f93ff4f064647f40eaad | |
| parent | 986cfbcaf4aa6300109e93c114e439d2578887af (diff) | |
Enable `odin check examples/all` for JS.
| -rw-r--r-- | .github/workflows/ci.yml | 6 | ||||
| -rw-r--r-- | core/compress/common.odin | 3 | ||||
| -rw-r--r-- | core/path/filepath/path_js.odin | 36 | ||||
| -rw-r--r-- | core/sys/info/sysinfo.odin | 2 | ||||
| -rw-r--r-- | core/time/timezone/tz_js.odin | 13 | ||||
| -rw-r--r-- | examples/all/all_js.odin | 148 | ||||
| -rw-r--r-- | examples/all/all_linux.odin | 9 | ||||
| -rw-r--r-- | examples/all/all_main.odin | 6 | ||||
| -rw-r--r-- | examples/all/all_posix.odin | 7 | ||||
| -rw-r--r-- | examples/all/all_vendor.odin | 138 | ||||
| -rw-r--r-- | examples/all/all_vendor_js.odin | 13 | ||||
| -rw-r--r-- | examples/all/all_vendor_windows.odin | 21 |
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 |