Просмотр исходного кода

Generalise 'build_web' program so it sounds less tied to the examples

Karl Zylinski 1 месяц назад
Родитель
Сommit
4ca5775e29

+ 4 - 2
.gitignore

@@ -5,5 +5,7 @@ raylib/
 *.exe
 *.rdi
 !/.sublime/karl2d.sublime-project
-examples/*/web
-examples/raylib_ports/*/web
+examples/*/build
+examples/*/bin
+examples/raylib_ports/*/build
+examples/raylib_ports/*/bin

+ 11 - 20
.sublime/karl2d.sublime-project

@@ -4,6 +4,7 @@
 		{
 			"file_regex": "^(.+)\\(([0-9]+):([0-9]+)\\) (.+)$",
 			"name": "Karl2D",
+			"working_dir": "$project_path/..",
 			"variants":
 			[
 				{
@@ -18,8 +19,7 @@
 				},
 				{
 					"name": "minimal (web)",
-					"shell_cmd": "odin run build_web_example -vet -strict-style -- minimal_web",
-					"working_dir": "$project_path/../examples",
+					"shell_cmd": "odin run build_web -vet -strict-style -- examples/minimal_web",
 				},
 				{
 					"name": "fonts",
@@ -28,8 +28,7 @@
 				},
 				{
 					"name": "fonts (web)",
-					"shell_cmd": "odin run build_web_example -- fonts",
-					"working_dir": "$project_path/../examples",
+					"shell_cmd": "odin run build_web -- examples/fonts",
 				},
 				{
 					"name": "render_texture",
@@ -43,8 +42,7 @@
 				},
 				{
 					"name": "render_texture (web)",
-					"shell_cmd": "odin run build_web_example -- render_texture",
-					"working_dir": "$project_path/../examples",
+					"shell_cmd": "odin run build_web -- examples/render_texture",
 				},
 				{
 					"name": "multitexture",
@@ -58,8 +56,7 @@
 				},
 				{
 					"name": "multitexture (webgl)",
-					"shell_cmd": "odin run build_web_example -- multitexture",
-					"working_dir": "$project_path/../examples",
+					"shell_cmd": "odin run build_web -- examples/multitexture",
 				},
 				{
 					"name": "snake",
@@ -68,8 +65,7 @@
 				},
 				{
 					"name": "snake (web)",
-					"shell_cmd": "odin run build_web_example -- snake",
-					"working_dir": "$project_path/../examples",
+					"shell_cmd": "odin run build_web -- examples/snake",
 				},
 				{
 					"name": "box2d",
@@ -78,8 +74,7 @@
 				},
 				{
 					"name": "box2d (web)",
-					"shell_cmd": "odin run build_web_example -- box2d",
-					"working_dir": "$project_path/../examples",
+					"shell_cmd": "odin run build_web -- examples/box2d",
 				},
 				{
 					"name": "premultiplied_alpha",
@@ -108,8 +103,7 @@
 				},
 				{
 					"name": "bunnymark (web)",
-					"shell_cmd": "odin run build_web_example -- raylib_ports/bunnymark",
-					"working_dir": "$project_path/../examples",
+					"shell_cmd": "odin run build_web -- examples/raylib_ports/bunnymark",
 				},
 				{
 					"name": "mouse",
@@ -118,8 +112,7 @@
 				},
 				{
 					"name": "mouse (web)",
-					"shell_cmd": "odin run build_web_example -- mouse",
-					"working_dir": "$project_path/../examples",
+					"shell_cmd": "odin run build_web -- examples/mouse",
 				},
 				{
 					"name": "gamepad",
@@ -128,8 +121,7 @@
 				},
 				{
 					"name": "gamepad (web)",
-					"shell_cmd": "odin run build_web_example -- gamepad",
-					"working_dir": "$project_path/../examples",
+					"shell_cmd": "odin run build_web -- examples/gamepad",
 				},
 				{
 					"name": "palette",
@@ -138,8 +130,7 @@
 				},
 				{
 					"name": "palette (web)",
-					"shell_cmd": "odin run build_web_example -- palette",
-					"working_dir": "$project_path/../examples",
+					"shell_cmd": "odin run build_web -- examples/palette",
 				},
 				{
 					"name": "api_doc_builder",

+ 22 - 15
examples/build_web_example/build_web_example.odin → build_web/build_web.odin

@@ -1,11 +1,12 @@
-// This program builds the examples in a "web" version. You can use it as a basis for your own
-// Karl2D web build script.
+// This program builds a Karl2D game as a web version.
 //
 // Usage:
-//    odin run build_web_example -- example_directory_name 
+//    odin run build_web -- directory_name 
 //
-// Replace `example_directory_name` with the example you wish to build a web version of. The
-// resulting web application will be in `example_directory_name/web/build`.
+// For example:
+//    odin run build_web -- examples/minimal_web
+//
+// 
 //
 // This program copies the `odin.js` from `<odin>/core/wasm/js/odin.js` to the build folder. It also
 // copies an `index.html` file there than is used to host your web program. The example itself is
@@ -18,7 +19,7 @@ import os "core:os/os2"
 
 main :: proc() {
 	if len(os.args) != 2 {
-		fmt.eprintfln("Usage: 'odin run build_web_example -- example_directory_name'\nExample: 'odin run build_web_example -- minimal'")
+		fmt.eprintfln("Usage: 'odin run build_web -- directory_name'\nExample: 'odin run build_web -- examples/minimal_web'")
 		return
 	}
 
@@ -33,17 +34,23 @@ main :: proc() {
 	fmt.ensuref(dir_stat_err == nil, "Failed checking status of directory %v. Error: %v", dir, dir_stat_err)
 	fmt.ensuref(dir_stat.type == .Directory, "%v is not a directory!", dir)
 
-	web_dir := filepath.join({dir, "web"})
-	os.make_directory(web_dir, 0o644)
+	dir_name := dir_stat.name
+
+	bin_dir := filepath.join({dir, "bin"})
+	os.make_directory(bin_dir, 0o644)
+	bin_web_dir := filepath.join({bin_dir, "web"})
+	os.make_directory(bin_web_dir, 0o644)
 
-	web_build_dir := filepath.join({web_dir, "build"})
-	os.make_directory(web_build_dir, 0o644)
+	build_dir := filepath.join({dir, "build"})
+	os.make_directory(build_dir, 0o644)
+	build_web_dir := filepath.join({build_dir, "web"})
+	os.make_directory(build_web_dir, 0o644)
 
-	entry_odin_file_path := filepath.join({web_dir, fmt.tprintf("%v_web_entry.odin", filepath.stem(dir))})
+	entry_odin_file_path := filepath.join({build_web_dir, fmt.tprintf("%v_web_entry.odin", dir_name)})
 	write_entry_odin_err := os.write_entire_file(entry_odin_file_path, WEB_ENTRY_TEMPLATE)
 	fmt.ensuref(write_entry_odin_err == nil, "Failed writing %v. Error: %v", entry_odin_file_path, write_entry_odin_err)
 
-	entry_html_file_path := filepath.join({web_build_dir, "index.html"})
+	entry_html_file_path := filepath.join({bin_web_dir, "index.html"})
 	write_entry_html_err := os.write_entire_file(entry_html_file_path, WEB_ENTRY_INDEX)
 	fmt.ensuref(write_entry_html_err == nil, "Failed writing %v. Error: %v", entry_html_file_path, write_entry_html_err)
 
@@ -56,15 +63,15 @@ main :: proc() {
 
 	js_runtime_path := filepath.join({odin_root, "core", "sys", "wasm", "js", "odin.js"})
 	fmt.ensuref(os.exists(js_runtime_path), "File does not exist: %v -- It is the Odin Javascript runtime that this program needs to copy to the web build output folder!", js_runtime_path)
-	os.copy_file(filepath.join({web_build_dir, "odin.js"}), js_runtime_path)
+	os.copy_file(filepath.join({bin_web_dir, "odin.js"}), js_runtime_path)
 
-	wasm_out_path := filepath.join({web_build_dir, "main.wasm"})
+	wasm_out_path := filepath.join({bin_web_dir, "main.wasm"})
 
 	_, build_std_out, build_std_err, _ := os.process_exec({
 		command = {
 			"odin",
 			"build",
-			web_dir,
+			build_web_dir,
 			fmt.tprintf("-out:%v", wasm_out_path),
 			"-target:js_wasm32",
 			"-debug",

+ 0 - 0
examples/build_web_example/web_entry_templates/index_template.html → build_web/web_entry_templates/index_template.html


+ 1 - 1
examples/build_web_example/web_entry_templates/web_entry_template.odin → build_web/web_entry_templates/web_entry_template.odin

@@ -3,7 +3,7 @@
 // frame.
 package karl2d_web_entry
 
-import ex ".."
+import ex "../.."
 import "base:runtime"
 import "core:log"