Browse Source

Merge pull request #5268 from Kelimion/check-js

Allow `odin check examples/all` for js_wasm
Jeroen van Rijn 2 months ago
parent
commit
77594a0dc9

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

+ 151 - 277
examples/all/all_main.odin

@@ -1,282 +1,156 @@
+#+build !js
 package all
 
 // Imports every package
 // This is useful for knowing what exists and producing documentation with `odin doc`
 
-import bufio            "core:bufio"
-import bytes            "core:bytes"
-
-import c                "core:c"
-import libc             "core:c/libc"
-
-import compress         "core:compress"
-import shoco            "core:compress/shoco"
-import gzip             "core:compress/gzip"
-import zlib             "core:compress/zlib"
-
-import avl              "core:container/avl"
-import bit_array        "core:container/bit_array"
-import priority_queue   "core:container/priority_queue"
-import queue            "core:container/queue"
-import small_array      "core:container/small_array"
-import lru              "core:container/lru"
-import list             "core:container/intrusive/list"
-import rbtree           "core:container/rbtree"
-import topological_sort "core:container/topological_sort"
-
-import crypto           "core:crypto"
-import aead             "core:crypto/aead"
-import aegis            "core:crypto/aegis"
-import aes              "core:crypto/aes"
-import blake2b          "core:crypto/blake2b"
-import blake2s          "core:crypto/blake2s"
-import chacha20         "core:crypto/chacha20"
-import chacha20poly1305 "core:crypto/chacha20poly1305"
-import crypto_hash      "core:crypto/hash"
-import deoxysii         "core:crypto/deoxysii"
-import ed25519          "core:crypto/ed25519"
-import hkdf             "core:crypto/hkdf"
-import hmac             "core:crypto/hmac"
-import kmac             "core:crypto/kmac"
-import keccak           "core:crypto/legacy/keccak"
-import md5              "core:crypto/legacy/md5"
-import sha1             "core:crypto/legacy/sha1"
-import pbkdf2           "core:crypto/pbkdf2"
-import poly1305         "core:crypto/poly1305"
-import ristretto255     "core:crypto/ristretto255"
-import sha2             "core:crypto/sha2"
-import sha3             "core:crypto/sha3"
-import shake            "core:crypto/shake"
-import sm3              "core:crypto/sm3"
-import tuplehash        "core:crypto/tuplehash"
-import x25519           "core:crypto/x25519"
-import x448             "core:crypto/x448"
-
-import pe               "core:debug/pe"
-import trace            "core:debug/trace"
-
-import dynlib           "core:dynlib"
-import net              "core:net"
-
-import base32           "core:encoding/base32"
-import base64           "core:encoding/base64"
-import cbor             "core:encoding/cbor"
-import csv              "core:encoding/csv"
-import endian           "core:encoding/endian"
-import hxa              "core:encoding/hxa"
-import ini              "core:encoding/ini"
-import json             "core:encoding/json"
-import varint           "core:encoding/varint"
-import xml              "core:encoding/xml"
-import uuid             "core:encoding/uuid"
-import uuid_legacy      "core:encoding/uuid/legacy"
-
-import fmt              "core:fmt"
-import hash             "core:hash"
-import xxhash           "core:hash/xxhash"
-
-import image            "core:image"
-import bmp              "core:image/bmp"
-import netpbm           "core:image/netpbm"
-import png              "core:image/png"
-import qoi              "core:image/qoi"
-import tga              "core:image/tga"
-
-import io               "core:io"
-import log              "core:log"
-
-import math             "core:math"
-import big              "core:math/big"
-import bits             "core:math/bits"
-import fixed            "core:math/fixed"
-import linalg           "core:math/linalg"
-import glm              "core:math/linalg/glsl"
-import hlm              "core:math/linalg/hlsl"
-import noise            "core:math/noise"
-import rand             "core:math/rand"
-import ease             "core:math/ease"
-import cmplx            "core:math/cmplx"
-
-import mem              "core:mem"
-import tlsf             "core:mem/tlsf"
-import virtual          "core:mem/virtual"
-
-import ast              "core:odin/ast"
-import doc_format       "core:odin/doc-format"
-import odin_parser      "core:odin/parser"
-import odin_tokenizer   "core:odin/tokenizer"
-
-import spall            "core:prof/spall"
-
-import os               "core:os"
-
-import slashpath        "core:path/slashpath"
-import filepath         "core:path/filepath"
-
-import relative         "core:relative"
-
-import reflect          "core:reflect"
-import runtime          "base:runtime"
-import sanitizer        "base:sanitizer"
-import simd             "core:simd"
-import x86              "core:simd/x86"
-import slice            "core:slice"
-import slice_heap       "core:slice/heap"
-import sort             "core:sort"
-import strconv          "core:strconv"
-import strings          "core:strings"
-import sync             "core:sync"
-import testing          "core:testing"
-
-import terminal         "core:terminal"
-import ansi             "core:terminal/ansi"
-
-import edit             "core:text/edit"
-import i18n             "core:text/i18n"
-import match            "core:text/match"
-import regex            "core:text/regex"
-import scanner          "core:text/scanner"
-import table            "core:text/table"
-
-import thread           "core:thread"
-import time             "core:time"
-import datetime         "core:time/datetime"
-import timezone         "core:time/timezone"
-import flags            "core:flags"
-
-import orca             "core:sys/orca"
-import sysinfo          "core:sys/info"
-
-import unicode          "core:unicode"
-import utf8             "core:unicode/utf8"
-import utf8string       "core:unicode/utf8/utf8string"
-import utf16            "core:unicode/utf16"
-
-main :: proc(){}
-
-
-_ :: bufio
-_ :: bytes
-_ :: c
-_ :: libc
-_ :: compress
-_ :: shoco
-_ :: gzip
-_ :: zlib
-_ :: avl
-_ :: bit_array
-_ :: priority_queue
-_ :: queue
-_ :: small_array
-_ :: lru
-_ :: list
-_ :: rbtree
-_ :: topological_sort
-_ :: crypto
-_ :: crypto_hash
-_ :: aead
-_ :: aegis
-_ :: aes
-_ :: blake2b
-_ :: blake2s
-_ :: chacha20
-_ :: chacha20poly1305
-_ :: deoxysii
-_ :: ed25519
-_ :: hmac
-_ :: hkdf
-_ :: kmac
-_ :: keccak
-_ :: md5
-_ :: pbkdf2
-_ :: poly1305
-_ :: ristretto255
-_ :: sha1
-_ :: sha2
-_ :: sha3
-_ :: shake
-_ :: sm3
-_ :: tuplehash
-_ :: x25519
-_ :: x448
-_ :: pe
-_ :: trace
-_ :: dynlib
-_ :: net
-_ :: base32
-_ :: base64
-_ :: csv
-_ :: hxa
-_ :: ini
-_ :: json
-_ :: varint
-_ :: xml
-_ :: endian
-_ :: cbor
-_ :: fmt
-_ :: hash
-_ :: xxhash
-_ :: image
-_ :: bmp
-_ :: netpbm
-_ :: png
-_ :: qoi
-_ :: tga
-_ :: io
-_ :: log
-_ :: math
-_ :: big
-_ :: bits
-_ :: fixed
-_ :: linalg
-_ :: glm
-_ :: hlm
-_ :: noise
-_ :: rand
-_ :: ease
-_ :: cmplx
-_ :: mem
-_ :: tlsf
-_ :: virtual
-_ :: ast
-_ :: doc_format
-_ :: odin_parser
-_ :: odin_tokenizer
-_ :: os
-_ :: spall
-_ :: slashpath
-_ :: filepath
-_ :: relative
-_ :: reflect
-_ :: runtime
-_ :: simd
-_ :: x86
-_ :: slice
-_ :: slice_heap
-_ :: sort
-_ :: strconv
-_ :: strings
-_ :: sync
-_ :: testing
-_ :: terminal
-_ :: ansi
-_ :: scanner
-_ :: i18n
-_ :: match
-_ :: regex
-_ :: table
-_ :: edit
-_ :: thread
-_ :: time
-_ :: datetime
-_ :: timezone
-_ :: flags
-_ :: orca
-_ :: sysinfo
-_ :: unicode
-_ :: uuid
-_ :: uuid_legacy
-_ :: utf8
-_ :: utf8string
-_ :: utf16
-_ :: sanitizer
+@(require) import "core:bufio"
+@(require) import "core:bytes"
+
+@(require) import "core:c"
+@(require) import "core:c/libc"
+
+@(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/parser"
+@(require) import "core:odin/tokenizer"
+
+@(require) import "core:prof/spall"
+
+@(require) import "core:os"
+
+@(require) import "core:path/slashpath"
+@(require) import "core:path/filepath"
+
+@(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:testing"
+
+@(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:flags"
+
+@(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 - 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"