2
0
Эх сурвалжийг харах

Enable `odin check examples/all` for JS.

Jeroen van Rijn 3 сар өмнө
parent
commit
ae5c92ac38

+ 6 - 0
.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'

+ 0 - 3
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 {

+ 36 - 0
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
+}

+ 1 - 1
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.")
 }
 

+ 13 - 0
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
+}

+ 148 - 0
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() {}

+ 2 - 7
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"

+ 3 - 3
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() {}

+ 2 - 5
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"

+ 42 - 96
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"

+ 13 - 0
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"

+ 7 - 14
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"