+void build_sqlite3( enum compiler compiler ){
+ vg_build_start( "sqlite3.o", compiler );
+ vg_build_object( "-c dep/sqlite3/sqlite3.c " );
+ vg_build_link( "-ldl " );
+ vg_build();
+}
+
+/* new game server */
+void build_gameserver( enum compiler compiler ){
+ build_sqlite3( compiler );
+ vg_build_start( "skaterift_gameserver", compiler );
+
+ if( compiler == k_compiler_gcc )
+ vg_build_object( "gameserver.c bin/sqlite3.o-gcc/sqlite3.o " );
+ else
+ vg_build_object( "gameserver.c bin/sqlite3.o-clang/sqlite3.o " );
+
+ vg_build_include( "-I./dep " );
+
+ vg_build_link( "-ldl -lpthread -lm -lsdkencryptedappticket -lsteam_api " );
+ vg_build_library_dir( "-L./vg/dep/steam " );
+
+ //vg_build_bin_dependency_file( "vg/dep/steam/steamclient.so" );?????
+ vg_build_bin_dependency_file( "vg/dep/steam/libsteam_api.so" );
+ vg_build_bin_dependency_file( "vg/dep/steam/libsdkencryptedappticket.so" );
+
+ vg_build();
+ compiled_something = 1;
+}
+
+void build_servermonitor( enum compiler compiler ){
+ vg_build_start( "skaterift_servermonitor", compiler );
+ vg_build_object( "servermonitor_client.c " );
+
+ vg_build_add_link_for_graphics();
+ vg_build_include( "-I./vg/dep " );
+ vg_build_copy_graphics_dependencies();
+
+ vg_build();
+ compiled_something = 1;
+}
+
+void build_aadb_edit( enum compiler compiler ){
+ vg_build_start( "aadb_edit", compiler );
+ vg_build_object( "aadb_edit.c " );
+ vg_build();
+ compiled_something = 1;
+}
+
+void write_msg( vg_msg *msg, const char *path ){
+ FILE *fp = fopen( path, "wb" );
+ if( !fp ){
+ vg_error( "Cannot open %s for writing.\n", path );
+ exit(0);
+ }
+
+ fwrite( msg->buf, msg->cur.co, 1, fp );
+ fclose( fp );
+ vg_success( "Written %s (%ub)\n", path, msg->cur );
+}
+
+void write_generic_addon_inf( u32 type, const char *title,
+ const char *content, const char *dest ){
+ u8 descriptor_buf[ 512 ];
+ vg_msg descriptor = {0};
+ descriptor.buf = descriptor_buf;
+ descriptor.max = sizeof(descriptor_buf);
+ vg_msg_frame( &descriptor, "workshop" );
+ vg_msg_wkvstr( &descriptor, "title", title );
+ vg_msg_wkvstr( &descriptor, "author", "Skaterift" );
+ vg_msg_wkvu32( &descriptor, "type", type );
+ vg_msg_end_frame( &descriptor );
+ vg_msg_wkvstr( &descriptor, "content", content );
+ write_msg( &descriptor, dest );
+}
+
+void build_shaders(void);
+void build_game( enum compiler compiler ){
+ static int shaders_built = 0;
+ if( !shaders_built ){
+ shaders_built = 1;
+ build_shaders();
+ }
+