X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=build.c;h=3cb9299dbe0b4d4cd9d86a7c54137d4fce465751;hb=refs%2Fheads%2Fmaster;hp=68e485a80a8376aab728044ece7e3c05fd69ee42;hpb=670daa775dec0954adb27354c3e37c66fc6567dd;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/build.c b/build.c index 68e485a..731bc10 100644 --- a/build.c +++ b/build.c @@ -5,7 +5,12 @@ #include "vg/vg_build.h" #include "vg/vg_build_utils_shader.h" #include "vg/vg_msg.h" -#include "addon_types.h" +#include "src/addon_types.h" + +#include "vg/vg_m.h" +#include "src/model.h" +#include "src/model.c" +#include "src/array_file.c" /* * Addon metadata utilities @@ -24,7 +29,7 @@ void write_msg( vg_msg *msg, const char *path ){ } void write_generic_addon_inf( u32 type, const char *title, - const char *content, const char *dest ) + const char *content, const char *dest, u32 flags ) { u8 descriptor_buf[ 512 ]; vg_msg descriptor = {0}; @@ -36,6 +41,8 @@ void write_generic_addon_inf( u32 type, const char *title, vg_msg_wkvnum( &descriptor, "type", k_vg_msg_u32, 1, &type ); vg_msg_end_frame( &descriptor ); vg_msg_wkvstr( &descriptor, "content", content ); + if( flags ) + vg_msg_wkvnum( &descriptor, "flags", k_vg_msg_u32, 1, &flags ); write_msg( &descriptor, dest ); } @@ -49,38 +56,103 @@ void build_game_metadata(void) vg_info( "Building game metadata\n" ); write_generic_addon_inf( k_addon_type_board, "Longboard", "board.mdl", - "boards_src/skaterift_long/addon.inf"); + "content_skaterift/boards/skaterift_long/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_board, "Fractal", "board.mdl", - "boards_src/skaterift_fract/addon.inf"); + "content_skaterift/boards/skaterift_fract/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_board, "Striped", "board.mdl", - "boards_src/skaterift_striped/addon.inf"); + "content_skaterift/boards/skaterift_striped/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_board, "Licco", "board.mdl", - "boards_src/skaterift_licco/addon.inf"); + "content_skaterift/boards/skaterift_licco/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_board, "Hypno", "board.mdl", - "boards_src/skaterift_spiral/addon.inf"); + "content_skaterift/boards/skaterift_spiral/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_board, "Shark", "board.mdl", - "boards_src/skaterift_shark/addon.inf"); + "content_skaterift/boards/skaterift_shark/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_player, "De'folde", "ch_new.mdl", - "playermodels_src/skaterift_new/addon.inf" ); + "content_skaterift/playermodels/skaterift_new/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_player, "Jordan", "ch_jordan.mdl", - "playermodels_src/skaterift_jordan/addon.inf" ); + "content_skaterift/playermodels/skaterift_jordan/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_player, "Outlaw", "ch_outlaw.mdl", - "playermodels_src/skaterift_outlaw/addon.inf" ); + "content_skaterift/playermodels/skaterift_outlaw/addon.inf", 0 ); write_generic_addon_inf( k_addon_type_player, "Chip", "ch_chip.mdl", - "playermodels_src/skaterift_chip/addon.inf" ); + "content_skaterift/playermodels/skaterift_chip/addon.inf", ADDON_REG_HIDDEN ); write_generic_addon_inf( k_addon_type_player, "Aaron", "ch_aaron.mdl", - "playermodels_src/skaterift_aaron/addon.inf" ); + "content_skaterift/playermodels/skaterift_aaron/addon.inf", 0 ); + write_generic_addon_inf( k_addon_type_player, + "JC", "ch_john.mdl", + "content_skaterift/playermodels/skaterift_john/addon.inf", ADDON_REG_HIDDEN ); + write_generic_addon_inf( k_addon_type_player, + "Ela", "ch_ela.mdl", + "content_skaterift/playermodels/skaterift_ela/addon.inf", 0 ); + write_generic_addon_inf( k_addon_type_player, + "Custom", "ch_sr2t.mdl", + "content_skaterift/playermodels/sr2t/addon.inf", 0 ); + write_generic_addon_inf( k_addon_type_player, + "Pro", "ch_pro.mdl", + "content_skaterift/playermodels/skaterift_pro/addon.inf", 0 ); + write_generic_addon_inf( k_addon_type_player, + "Amin", "ch_amin.mdl", + "content_skaterift/playermodels/skaterift_amin/addon.inf", 0 ); + + write_generic_addon_inf( k_addon_type_player, + "Jesus", "ch_jesus.mdl", + "content_skaterift/playermodels/skaterift_jesus/addon.inf", ADDON_REG_HIDDEN ); + write_generic_addon_inf( k_addon_type_player, + "FBI", "ch_fbi.mdl", + "content_skaterift/playermodels/skaterift_fbi/addon.inf", ADDON_REG_HIDDEN ); + write_generic_addon_inf( k_addon_type_player, + "FBI2", "ch_fbi2.mdl", + "content_skaterift/playermodels/skaterift_fbi2/addon.inf", ADDON_REG_HIDDEN ); + write_generic_addon_inf( k_addon_type_player, + "President", "ch_president.mdl", + "content_skaterift/playermodels/skaterift_president/addon.inf", ADDON_REG_HIDDEN ); + + struct + { + const char *title, *location, *file; + u32 flags; + } + maps[] = + { + { "Mt.Zero Island", "Australia", "content_skaterift/maps/mp_mtzero/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_MTZERO | ADDON_REG_PREMIUM }, + { "Flat World", "...", "content_skaterift/maps/dev_flatworld/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_HIDDEN }, + { "Heaven", "...", "content_skaterift/maps/dev_heaven/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_HIDDEN }, + { "Valley", "Cambodia", "content_skaterift/maps/mp_line1/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_VALLEY | ADDON_REG_PREMIUM }, + { "Training Island", "Australia", "content_skaterift/maps/dev_tutorial/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_VOLC }, + { "Center Island", "Australia", "content_skaterift/maps/dev_hub/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_HUB }, + { "Downtown", "USA, Georgia", "content_skaterift/maps/mp_spawn/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_CITY | ADDON_REG_PREMIUM }, + { "Moon", "Venus", "content_skaterift/maps/vm/addon.inf", ADDON_REG_VENUS | ADDON_REG_PREMIUM }, + }; + + for( u32 i=0; iuid.buffer ); vg_syscall( "mkdir -p bin/%s/savedata", proj->uid.buffer ); vg_syscall( "mkdir -p bin/%s/tools", proj->uid.buffer ); - vg_syscall( "cp blender_export.py bin/%s/tools/", proj->uid.buffer ); + vg_syscall( "cp bin/skaterift_blender.zip bin/%s/tools/", proj->uid.buffer ); } + +#include "src/build_control_overlay.c" -void build_game_bin( struct vg_project *proj ) +void build_game_bin( struct vg_project *proj, struct vg_compiler_env *env ) { static int meta = 0; - if( !meta ){ + if( !meta ) + { meta = 1; build_shaders(); build_game_metadata(); vg_low( "\n\n" ); } - vg_project_new_target( proj, "skaterift", k_obj_type_exe ); - vg_add_engine( proj, &(struct vg_engine_config ) + build_control_overlay(); + + struct vg_compiler_conf conf = {0}; + + if( env->platform == k_platform_windows ) + { + // getaddrinfo and cotaskmemfree + vg_strcat( &conf.link, "-lws2_32 -lole32 " ); + } + + vg_make_app( proj, &(struct vg_engine_config ) { .fixed_update_hz = 60, .legacy_support_vg_msg1 = 1, @@ -167,69 +255,124 @@ void build_game_bin( struct vg_project *proj ) .use_3d = 1, .custom_game_settings = 0, .custom_shaders = 1 - }); + }, + env, &conf, "src/client.c", "skaterift" ); - vg_add_source( proj, "skaterift.c " ); vg_add_controller_database( proj ); - vg_compile_project( proj ); } -void build_sqlite_for_env( struct vg_env *env, struct vg_project *out_proj ) +void build_crash_reporter( struct vg_project *proj, struct vg_compiler_env *env ) { - struct vg_env sqlite_env = *env; + struct vg_compiler_conf conf = {0}; + vg_strcat( &conf.link, "-lgdi32 -lcomctl32 -lwininet -ldbghelp " ); + vg_strcat( &conf.include, "-I. -I./vg -I./vg/dep " ); + + vg_str sources = {0}; + vg_strcat( &sources, "vg/src/vgcrashreport.c \\\n " ); + vg_compiler_run( proj, env, &conf, sources.buffer, "vgcrashreport", k_obj_type_exe ); +} + +#if 0 +struct compile_result +build_sqlite_for_env( struct vg_compiler_env *env ) +{ + struct vg_project sqlite_proj; + vg_project_init( &sqlite_proj, "bin", ".sqlite3", env, 0 ); + + struct vg_compiler_env sqlite_env = *env; sqlite_env.optimization = 3; /* force optimization always */ sqlite_env.debug_asan = 0; - vg_project_init( out_proj, env, "sqlite3" ); - vg_project_new_target( out_proj, "sqlite3", k_obj_type_obj ); + struct vg_compiler_conf conf = {0}; + vg_strcat( &conf.link, "-ldl " ); - vg_add_source( out_proj, "-c dep/sqlite3/sqlite3.c " ); - vg_link( out_proj, "-ldl " ); - vg_compile_project( out_proj ); + return vg_compiler_run( &sqlite_proj, &sqlite_env, &conf, + "dep/sqlite3/sqlite3.c ", "sqlite3", + k_obj_type_obj ); } +#endif -void compile_server( struct vg_project *proj ) +void compile_server( struct vg_project *proj, struct vg_compiler_env *env ) { - struct vg_project sqlite_project; - build_sqlite_for_env( proj->env, &sqlite_project ); - - vg_project_new_target( proj, "server", k_obj_type_exe ); - vg_add_source( proj, "gameserver.c vg/vg_tool.c vg/vg_steam.c \\\n " ); - vg_add_source( proj, sqlite_project.compiled_objects.buffer ); - vg_include_dir( proj, "-I./dep " ); - vg_library_dir( proj, "-L./vg/dep/steam " ); - vg_link( proj, "-ldl -lpthread -lm -lsdkencryptedappticket -lsteam_api " ); +#if 0 + struct compile_result sqlite = build_sqlite_for_env( env ); +#endif + + vg_str sources = {0}; + vg_strcat( &sources, "src/gameserver.c vg/vg_tool.c vg/vg_steam.c \\\n " ); +#if 0 + vg_strcat( &sources, sqlite.path.buffer ); +#endif + + struct vg_compiler_conf conf = {0}; + vg_strcat( &conf.include, "-Isrc -I./dep " ); + vg_strcat( &conf.include, "-I. -I./vg -I./vg/dep -DVG_MULTITHREAD " ); + vg_strcat( &conf.library, "-L./vg/dep/steam " ); + vg_strcat( &conf.link, "-ldl -lpthread -lm " + "-lsdkencryptedappticket -lsteam_api " ); + vg_add_blob( proj, "vg/dep/steam/libsteam_api.so", "" ); vg_add_blob( proj, "vg/dep/steam/libsdkencryptedappticket.so", "" ); - vg_compile_project( proj ); + vg_compiler_run( proj, env, &conf, sources.buffer, "server", k_obj_type_exe ); +} + +struct compile_result compile_tools( struct vg_project *proj, struct vg_compiler_env *env ) +{ + struct vg_compiler_conf conf = {0}; + vg_strcat( &conf.include, "-I. -I./vg -I./vg/dep -Isrc -I./dep " ); + vg_strcat( &conf.link, "-lm " ); + return vg_compiler_run( proj, env, &conf, "src/skaterift_lib.c", "skaterift", k_obj_type_shared ); } /* * Scripts * -------------------------------------------------------------------------- */ -void s_release_all(void){ +void s_compile_tools(void) +{ + vg_info( "running script: s_compile_tools(void)\n" ); + + struct vg_project proj; + vg_project_init( &proj, "bin", "skaterift-tools", NULL, 0 ); + + struct vg_compiler_env env = vg_release_env; + + env.platform = k_platform_linux; + struct compile_result r0 = compile_tools( &proj, &env ); + + env.platform = k_platform_windows; + struct compile_result r1 = compile_tools( &proj, &env ); + + vg_syscall("cp %s skaterift_blender/", r0.path ); + vg_syscall("cp %s skaterift_blender/", r1.path ); + vg_syscall( "zip -r bin/skaterift_blender.zip skaterift_blender/ " + "-x skaterift_blender/__pycache__/\\*"); +} + +void s_release_all(void) +{ vg_info( "running script: s_release_all(void)\n" ); struct vg_project content_proj, windows_proj, linux_proj; - struct vg_env env = vg_release_env; + struct vg_compiler_env env = vg_release_env; env.platform = k_platform_anyplatform; - vg_project_init( &content_proj, &env, "skaterift" ); + vg_project_init( &content_proj, "bin", "skaterift", &env, 1 ); build_game_content( &content_proj ); /* binaries for windows */ env = vg_release_env; env.platform = k_platform_windows; - vg_project_init( &windows_proj, &env, "skaterift" ); - build_game_bin( &windows_proj ); + vg_project_init( &windows_proj, "bin", "skaterift", &env, 1 ); + build_game_bin( &windows_proj, &env ); + build_crash_reporter( &windows_proj, &env ); /* binaries for linux */ env = vg_release_env; env.platform = k_platform_linux; - vg_project_init( &linux_proj, &env, "skaterift" ); - build_game_bin( &linux_proj ); + vg_project_init( &linux_proj, "bin", "skaterift", &env, 1 ); + build_game_bin( &linux_proj, &env ); /* package them up for storage */ vg_tarball_project( &content_proj ); @@ -247,38 +390,189 @@ void s_testing_build(void) vg_info( "running script: s_testing_build(void)\n" ); struct vg_project test_proj; - vg_project_init( &test_proj, &vg_test_env, "skaterift-test" ); + vg_project_init( &test_proj, "bin", "skaterift-test", NULL, 0 ); - build_game_bin( &test_proj ); + build_game_bin( &test_proj, &vg_test_env ); + build_game_content( &test_proj ); + vg_add_blob( &test_proj, "steam_appid.txt", "" ); +} + +void s_testing_build_win(void) +{ + vg_info( "running script: s_testing_build_win(void)\n" ); + + struct vg_project test_proj; + vg_project_init( &test_proj, "bin", "skaterift-test-win", NULL, 0 ); + + + struct vg_compiler_env env = + { + .optimization = 0, + .debug_asan = 0, + .platform = k_platform_windows, + .arch = k_architecture_x86_64, + .compiler = k_compiler_zigcc, + .libc = k_libc_version_native + }; + build_game_bin( &test_proj, &env ); build_game_content( &test_proj ); vg_add_blob( &test_proj, "steam_appid.txt", "" ); } +void s_cr_build(void) +{ + vg_info( "running script: s_cr_build(void)\n" ); + + struct vg_project test_proj; + vg_project_init( &test_proj, "bin", "crashreport-dev", NULL, 0 ); + + struct vg_compiler_env env = + { + .optimization = 0, + .debug_asan = 0, + .platform = k_platform_windows, + .arch = k_architecture_x86_64, + .compiler = k_compiler_zigcc, + .libc = k_libc_version_native + }; + + struct vg_compiler_conf conf = {0}; + vg_strcat( &conf.link, "-lgdi32 -lcomctl32 -lwininet -ldbghelp " ); + vg_strcat( &conf.include, "-I. -I./vg -I./vg/dep " ); + + vg_str sources = {0}; + vg_strcat( &sources, "vg/src/vgcrashreport.c \\\n " ); + vg_compiler_run( &test_proj, &env, &conf, sources.buffer, "vgcrashreport", k_obj_type_exe ); +} + + +void s_utest_build(void) +{ + vg_info( "running script: s_utest_build(void)\n" ); + + struct vg_compiler_env *env = &vg_test_env; + struct vg_project test_proj; + vg_project_init( &test_proj, "bin", "utest", NULL, 0 ); + + struct vg_compiler_conf conf = {0}; + + if( env->platform == k_platform_windows ) + { + vg_strcat( &conf.link, "-lws2_32 -lole32 " ); + } + + vg_make_app( &test_proj, &(struct vg_engine_config ) + { + .fixed_update_hz = 60, + .log_source_info = 1, + .use_3d = 0, + .custom_game_settings = 0, + .custom_shaders = 0 + }, + env, &conf, "src/utest.c", "utest" ); + + vg_add_controller_database( &test_proj ); + vg_syscall( "mkdir -p bin/%s/cfg", test_proj.uid.buffer ); +} + void s_testing_server(void) { vg_info( "running script: s_testing_server(void)\n" ); struct vg_project test_proj; - vg_project_init( &test_proj, &vg_test_env, "skaterift-test-server" ); - compile_server( &test_proj ); + vg_project_init( &test_proj, "bin", "skaterift-test-server", &vg_test_env, 0 ); + compile_server( &test_proj, &vg_test_env ); +} + +void s_dbtest_build(void) +{ + vg_info( "running script: s_dbtest_build(void)\n" ); + + struct vg_project test_proj; + vg_project_init( &test_proj, "bin", "dbtest", &vg_test_env, 0 ); + + vg_str sources = {0}; + vg_strcat( &sources, "src/dbtest.c vg/vg_tool.c \\\n " ); + + struct vg_compiler_conf conf = {0}; + vg_strcat( &conf.include, "-Isrc -I./dep " ); + vg_strcat( &conf.include, "-I. -I./vg -I./vg/dep " ); + vg_strcat( &conf.library, "-L./vg/dep/steam " ); + vg_strcat( &conf.link, "-ldl -lpthread -lm " ); + vg_compiler_run( &test_proj, &vg_test_env, &conf, sources.buffer, "dbtest", k_obj_type_exe ); } -int main( int argc, char *argv[] ) +int main( int argc, const char *argv[] ) { - char *arg; - while( vg_argp( argc, argv ) ){ - if( vg_long_opt( "release-all" ) ) - s_release_all(); + vg_log_init(); + +#if 0 + vg_stack_allocator s0; + vg_stack_init( &s0, NULL, VG_MB(2), NULL ); + u32 size0; + void *buf0 = vg_file_read( &s0, "content_skaterift/textures/prem.qoi", &size0, 0 ); + vg_mem_dumphex( stdout, buf0, 0, 1024 ); - if( vg_long_opt( "testing-build" ) ) - s_testing_build(); + vg_stack_allocator s1; + vg_stack_init( &s1, NULL, VG_MB(2), NULL ); + u32 size1; + void *buf1 = vg_file_read( &s1, "content_skaterift/textures/guide_pump.qoi", &size1, 0 ); + + vg_mem_dumphex( stdout, buf1, 0, 1024 ); + + return 0; +#endif + + _vg_opt_init( argc, argv ); + + const char *arg; + + if( (arg = vg_long_opt_arg( "glsl-dir", "Specify output directory for preprocessed GLSL" )) ) + { + vg_shaderbuild.preprocessed_dir = arg; + build_shaders(); + } - if( vg_long_opt( "testing-server" ) ) - s_testing_server(); + if( vg_opt('r', NULL) ) + vg_test_env.optimization = 3; - if( vg_opt('r') ) - vg_test_env.optimization = 3; + if( vg_long_opt( "tsan", NULL ) ) + { + vg_test_env.debug_asan = 0; + vg_test_env.thread_san = 1; } + if( vg_long_opt( "no-asan", NULL ) ) + vg_test_env.debug_asan = 0; + + if( vg_long_opt( "release-all", NULL ) ) + s_release_all(); + + if( vg_long_opt( "testing-build", NULL ) ) + s_testing_build(); + if( vg_long_opt( "testing-build-win", NULL ) ) + s_testing_build_win(); + + if( vg_long_opt( "utest", NULL ) ) + s_utest_build(); + + if( vg_long_opt( "cr", NULL ) ) + s_cr_build(); + + if( vg_long_opt( "testing-server", NULL ) ) + s_testing_server(); + + if( vg_long_opt( "dbtest", NULL ) ) + s_dbtest_build(); + + if( vg_long_opt( "tools", NULL ) ) + s_compile_tools(); + + if( (arg = vg_long_opt_arg( "strdjb2", NULL )) ) + printf( "vg_strdjb2('%s'): %u\n", arg, vg_strdjb2(arg) ); + + if( !_vg_opt_check() ) + return 0; + vg_success( "All scripts completed\n" ); }