From 260872546b7200d89fd6b483162d7433c5d2d835 Mon Sep 17 00:00:00 2001 From: Ben Visness Date: Mon, 7 Aug 2023 22:10:32 -0500 Subject: [PATCH] Get it all working on Windows again for real --- orca.bat | 7 ++++ samples/pong/build.bat | 2 +- samples/ui/build.bat | 2 +- scripts/bundle.py | 28 ++++++++-------- scripts/checksums.json | 8 ++--- scripts/dev.py | 74 ++++++++++++++++++++++++------------------ 6 files changed, 70 insertions(+), 51 deletions(-) create mode 100644 orca.bat diff --git a/orca.bat b/orca.bat new file mode 100644 index 0000000..99adab7 --- /dev/null +++ b/orca.bat @@ -0,0 +1,7 @@ +@echo off + +rem Get the directory of this batch script +set "script_dir=%~dp0" + +python3 "%script_dir%orca" %* +exit /b %errorlevel% diff --git a/samples/pong/build.bat b/samples/pong/build.bat index 7ba6677..4cd29cb 100644 --- a/samples/pong/build.bat +++ b/samples/pong/build.bat @@ -14,4 +14,4 @@ set wasmFlags=--target=wasm32^ clang %wasmFlags% -o .\module.wasm ..\..\sdk\orca.c ..\..\cstdlib\src\*.c src\main.c -python3 ..\..\scripts\mkapp.py --orca-dir ..\.. --name Pong --icon icon.png --resource-dir data module.wasm +orca bundle --orca-dir ..\.. --name Pong --icon icon.png --resource-dir data module.wasm diff --git a/samples/ui/build.bat b/samples/ui/build.bat index 768432c..5717a40 100644 --- a/samples/ui/build.bat +++ b/samples/ui/build.bat @@ -14,4 +14,4 @@ set wasmFlags=--target=wasm32^ clang %wasmFlags% -o .\module.wasm ..\..\sdk\orca.c ..\..\cstdlib\src\*.c src\main.c -python3 ..\..\scripts\mkapp.py --orca-dir ..\.. --name UI --resource-dir data module.wasm +orca bundle --orca-dir ..\.. --name UI --resource-dir data module.wasm diff --git a/scripts/bundle.py b/scripts/bundle.py index 10f7ae7..1cd4791 100644 --- a/scripts/bundle.py +++ b/scripts/bundle.py @@ -184,12 +184,12 @@ def windows_make_app(args): #----------------------------------------------------------- app_name = args.name bundle_name = app_name - bundle_dir = args.out_dir + '/' + bundle_name - exe_dir = bundle_dir + '/bin' - res_dir = bundle_dir + '/resources' - guest_dir = bundle_dir + '/app' - wasm_dir = guest_dir + '/wasm' - data_dir = guest_dir + '/data' + bundle_dir = os.path.join(args.out_dir, bundle_name) + exe_dir = os.path.join(bundle_dir, 'bin') + res_dir = os.path.join(bundle_dir, 'resources') + guest_dir = os.path.join(bundle_dir, 'app') + wasm_dir = os.path.join(guest_dir, 'wasm') + data_dir = os.path.join(guest_dir, 'data') if os.path.exists(bundle_dir): shutil.rmtree(bundle_dir) @@ -203,10 +203,10 @@ def windows_make_app(args): #----------------------------------------------------------- #NOTE: copy orca runtime executable and libraries #----------------------------------------------------------- - orca_exe = args.orca_dir + '/build/bin/orca.exe' - milepost_lib = args.orca_dir + '/build/bin/milepost.dll' - gles_lib = args.orca_dir + '/milepost/build/bin/libGLESv2.dll' - egl_lib = args.orca_dir + '/milepost/build/bin/libEGL.dll' + orca_exe = os.path.join(args.orca_dir, 'build/bin/orca.exe') + milepost_lib = os.path.join(args.orca_dir, 'build/bin/milepost.dll') + gles_lib = os.path.join(args.orca_dir, 'milepost/build/bin/libGLESv2.dll') + egl_lib = os.path.join(args.orca_dir, 'milepost/build/bin/libEGL.dll') shutil.copy(orca_exe, exe_dir) shutil.copy(milepost_lib, exe_dir) @@ -236,10 +236,10 @@ def windows_make_app(args): #NOTE: copy runtime resources #----------------------------------------------------------- # default fonts - shutil.copy(args.orca_dir + '/resources/OpenSansLatinSubset.ttf', res_dir) - shutil.copy(args.orca_dir + '/resources/Menlo.ttf', res_dir) - shutil.copy(args.orca_dir + '/resources/Menlo Bold.ttf', res_dir) - shutil.copy(args.orca_dir + '/resources/Menlo Italics.ttf', res_dir) + shutil.copy(os.path.join(args.orca_dir, 'resources/OpenSansLatinSubset.ttf'), res_dir) + shutil.copy(os.path.join(args.orca_dir, 'resources/Menlo.ttf'), res_dir) + shutil.copy(os.path.join(args.orca_dir, 'resources/Menlo Bold.ttf'), res_dir) + shutil.copy(os.path.join(args.orca_dir, 'resources/Menlo Italics.ttf'), res_dir) #----------------------------------------------------------- #NOTE make icon diff --git a/scripts/checksums.json b/scripts/checksums.json index 5570ef0..74cea47 100644 --- a/scripts/checksums.json +++ b/scripts/checksums.json @@ -1,10 +1,10 @@ { "scripts/files/angle-windows-2019-2023-07-05.zip": "a333b5ccc8462151ee8df65c43cfacd70d9db2413f2e495da65670737b5b2d96", "scripts/files/angle-macos-jank-2023-07-05.zip": "c234b8db179a24757ab9f46610a032123718dd9bed967d2bf8e27d0d17eb0aff", - "milepost/lib/libEGL.dll": "b7bf51f83e88129ddc20c0c2cb904ec04c89059a30a2cd29b9b1ea11c80388fb", - "milepost/lib/libEGL.dll.lib": "4cec54c534136da413dea86bd271ccb9c5ae88e40aa91d1de7a01e701be8e1d7", - "milepost/lib/libGLESv2.dll": "193b53b0a16b702eaa28a73e84527acf7aecfd665e3e3f54a8d9db9ae73111e1", - "milepost/lib/libGLESv2.dll.lib": "ee87aac129efe8fe871825d181b85da1b1ea6626cb48be52c2e689f2804b953f", + "milepost/build/bin/libEGL.dll": "b7bf51f83e88129ddc20c0c2cb904ec04c89059a30a2cd29b9b1ea11c80388fb", + "milepost/build/bin/libEGL.dll.lib": "4cec54c534136da413dea86bd271ccb9c5ae88e40aa91d1de7a01e701be8e1d7", + "milepost/build/bin/libGLESv2.dll": "193b53b0a16b702eaa28a73e84527acf7aecfd665e3e3f54a8d9db9ae73111e1", + "milepost/build/bin/libGLESv2.dll.lib": "ee87aac129efe8fe871825d181b85da1b1ea6626cb48be52c2e689f2804b953f", "milepost/build/bin/libEGL.dylib": "96baea4b1c8578d30738764784d07b509d1153df694c094faba2ee8ccbfde2a9", "milepost/build/bin/libGLESv2.dylib": "98ce9f6248a6447ba9199e96b8f6d87df9548d43ce583a2615717aab168ecb71" } diff --git a/scripts/dev.py b/scripts/dev.py index 9f3e33d..571b9d0 100644 --- a/scripts/dev.py +++ b/scripts/dev.py @@ -129,7 +129,7 @@ def build_milepost_lib_win(release): "ole32.lib", "shell32.lib", "shlwapi.lib", - "/LIBPATH:./bin", + "/LIBPATH:./build/bin", "libEGL.dll.lib", "libGLESv2.dll.lib", "/DELAYLOAD:libEGL.dll", @@ -137,17 +137,17 @@ def build_milepost_lib_win(release): ] subprocess.run([ - "cl", + "cl", "/nologo", "/we4013", "/Zi", "/Zc:preprocessor", "/DMP_BUILD_DLL", "/std:c11", "/experimental:c11atomics", *includes, - "src/milepost.c", "/Fo:bin/milepost.o", + "src/milepost.c", "/Fo:build/bin/milepost.o", "/LD", "/link", "/MANIFEST:EMBED", "/MANIFESTINPUT:src/win32_manifest.xml", *libs, - "/OUT:bin/milepost.dll", - "/IMPLIB:bin/milepost.dll.lib", + "/OUT:build/bin/milepost.dll", + "/IMPLIB:build/bin/milepost.dll.lib", ], check=True) @@ -240,19 +240,19 @@ def build_wasm3(release): def build_wasm3_lib_win(release): - for f in glob.iglob(".\\ext\\wasm3\\source\\*.c"): + for f in glob.iglob("./ext/wasm3/source/*.c"): name = os.path.splitext(os.path.basename(f))[0] subprocess.run([ "cl", "/nologo", "/Zi", "/Zc:preprocessor", "/c", - *(["/O2"] if release else []), - f"/Fo:bin\\obj\\{name}.obj", - "/I", ".\\ext\\wasm3\\source", + "/O2", + f"/Fo:build/obj/{name}.obj", + "/I", "./ext/wasm3/source", f, ], check=True) subprocess.run([ - "lib", "/nologo", "/out:bin\\wasm3.lib", - "bin\\obj\\*.obj", + "lib", "/nologo", "/out:build/bin/wasm3.lib", + "build/obj/*.obj", ], check=True) @@ -294,8 +294,8 @@ def build_orca(release): def build_orca_win(release): # copy libraries - shutil.copy("milepost\\bin\\milepost.dll", "bin") - shutil.copy("milepost\\bin\\milepost.dll.lib", "bin") + shutil.copy("milepost/build/bin/milepost.dll", "build/bin") + shutil.copy("milepost/build/bin/milepost.dll.lib", "build/bin") gen_all_bindings() @@ -303,12 +303,12 @@ def build_orca_win(release): includes = [ "/I", "src", "/I", "sdk", - "/I", "ext\wasm3\source", - "/I", "milepost\src", - "/I", "milepost\ext", + "/I", "ext/wasm3/source", + "/I", "milepost/src", + "/I", "milepost/ext", ] libs = [ - "/LIBPATH:bin", + "/LIBPATH:build/bin", "milepost.dll.lib", "wasm3.lib", ] @@ -318,9 +318,9 @@ def build_orca_win(release): "/Zi", "/Zc:preprocessor", "/std:c11", "/experimental:c11atomics", *includes, - "src\\main.c", + "src/main.c", "/link", *libs, - "/out:bin\\orca.exe", + "/out:build/bin/orca.exe", ], check=True) @@ -433,10 +433,10 @@ def verify_angle(): checkfiles = None if platform.system() == "Windows": checkfiles = [ - "milepost/lib/libEGL.dll", - "milepost/lib/libEGL.dll.lib", - "milepost/lib/libGLESv2.dll", - "milepost/lib/libGLESv2.dll.lib", + "milepost/build/bin/libEGL.dll", + "milepost/build/bin/libEGL.dll.lib", + "milepost/build/bin/libGLESv2.dll", + "milepost/build/bin/libGLESv2.dll.lib", ] elif platform.system() == "Darwin": checkfiles = [ @@ -466,7 +466,7 @@ def download_angle(): build = "windows-2019" extensions = [ ("dll", "milepost/build/bin/"), - ("lib", "milepost/build/lib/"), + ("lib", "milepost/build/bin/"), ] elif platform.system() == "Darwin": build = "macos-jank" @@ -494,7 +494,6 @@ def download_angle(): anglezip.extractall(path="scripts/files") os.makedirs("milepost/build/bin", exist_ok=True) - os.makedirs("milepost/build/lib", exist_ok=True) for angleDir in ["bin", "lib"]: for (ext, dest) in extensions: for filepath in glob.glob(f"scripts/files/angle/{angleDir}/*.{ext}"): @@ -543,10 +542,13 @@ def yeet(path): def install(args): - dest = os.path.expanduser(os.path.join("~", ".orca")) + if platform.system() == "Windows": + dest = os.path.join(os.getenv("LOCALAPPDATA"), "orca") + else: + dest = os.path.expanduser(os.path.join("~", ".orca")) if not args.no_confirm: - print("The Orca command-line tools will be installed to your home directory in:") + print("The Orca command-line tools will be installed to:") print(dest) print() while True: @@ -562,11 +564,21 @@ def install(args): yeet(bin_dir) shutil.copytree("scripts", os.path.join(bin_dir, "sys_scripts")) shutil.copy("orca", bin_dir) + if platform.system() == "Windows": + shutil.copy("orca.bat", bin_dir) # TODO: Customize these instructions for Windows print() - print("The Orca tools have been installed. Make sure the Orca tools are on your PATH by") - print("adding the following to your shell config:") - print() - print(f"export PATH=\"{bin_dir}:$PATH\"") + if platform.system() == "Windows": + print("The Orca tools have been installed. Make sure the Orca tools are on your PATH by") + print("adding the following path to your system PATH variable:") + print() + print(bin_dir) + print() + print("You can do this in the Windows settings by searching for \"environment variables\".") + else: + print("The Orca tools have been installed. Make sure the Orca tools are on your PATH by") + print("adding the following to your shell config:") + print() + print(f"export PATH=\"{bin_dir}:$PATH\"") print()