fp: Support building via GCC on Windows
This commit is contained in:
parent
801b9051c9
commit
bca013bf05
2
External/tely
vendored
2
External/tely
vendored
@ -1 +1 @@
|
||||
Subproject commit aa6076510f62f915bc9dbcbb1a954f5aefaf17df
|
||||
Subproject commit 3083971c14bd0dc54d2d0e62c05c3616f5e7eb44
|
@ -80,7 +80,7 @@ void RebuildProgramIfRequired(int argc, char const **argv)
|
||||
}
|
||||
#endif
|
||||
|
||||
#define PRINT_HELP Dqn_Print_StdLnF(Dqn_PrintStd_Out, "USAGE: feely_pona_build [--help|--dry-run|--web|--fast-dev-build|--win|--linux]")
|
||||
#define PRINT_HELP Dqn_Print_StdLnF(Dqn_PrintStd_Out, "USAGE: feely_pona_build [--help|--dry-run|--web|--fast-dev-build|--msvc|--gcc]")
|
||||
int main(int argc, char const **argv)
|
||||
{
|
||||
Dqn_Library_Init(Dqn_LibraryOnInit_Nil);
|
||||
@ -88,8 +88,8 @@ int main(int argc, char const **argv)
|
||||
bool dry_run = false;
|
||||
bool target_web = false;
|
||||
bool dev_fast_build = false;
|
||||
bool windows_build = false;
|
||||
bool linux_build = false;
|
||||
bool msvc_build = false;
|
||||
bool gcc_build = false;
|
||||
for (Dqn_isize arg_index = 1; arg_index < argc; arg_index++) {
|
||||
Dqn_Str8 arg = Dqn_Str8_InitCStr8(argv[arg_index]);
|
||||
if (arg == DQN_STR8("--help")) {
|
||||
@ -101,10 +101,10 @@ int main(int argc, char const **argv)
|
||||
target_web = true;
|
||||
} else if (arg == DQN_STR8("--fast-dev-build")) {
|
||||
dev_fast_build = true;
|
||||
} else if (arg == DQN_STR8("--linux")) {
|
||||
linux_build = true;
|
||||
} else if (arg == DQN_STR8("--win")) {
|
||||
windows_build = true;
|
||||
} else if (arg == DQN_STR8("--gcc")) {
|
||||
gcc_build = true;
|
||||
} else if (arg == DQN_STR8("--msvc")) {
|
||||
msvc_build = true;
|
||||
} else {
|
||||
PRINT_HELP;
|
||||
return 0;
|
||||
@ -117,21 +117,21 @@ int main(int argc, char const **argv)
|
||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "-- Dqn_CPPBuild v0");
|
||||
#endif
|
||||
|
||||
if (windows_build && linux_build) {
|
||||
if (msvc_build && gcc_build) {
|
||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out,
|
||||
"Both '--win' and '--linux' were specified but only one is supported at a time for this build program.");
|
||||
"Both '--msvc' and '--gcc' were specified but only one is supported at a time for this build program.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!windows_build && !linux_build) {
|
||||
if (!msvc_build && !gcc_build) {
|
||||
#if defined(DQN_OS_WIN32)
|
||||
windows_build = true;
|
||||
msvc_build = true;
|
||||
#else
|
||||
linux_build = true;
|
||||
gcc_build = true;
|
||||
#endif
|
||||
}
|
||||
|
||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "Building for %s", windows_build ? "Windows" : "Linux");
|
||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "Building for %s", msvc_build ? "Windows" : "Linux");
|
||||
|
||||
uint64_t build_timings[2] = {};
|
||||
build_timings[0] = Dqn_OS_PerfCounterNow();
|
||||
@ -140,11 +140,11 @@ int main(int argc, char const **argv)
|
||||
Dqn_Str8 const code_dir = exe_dir;
|
||||
Dqn_Str8 const build_dir = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/Build", DQN_STR_FMT(exe_dir));
|
||||
Dqn_Str8 const tely_dir = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/External/tely", DQN_STR_FMT(exe_dir));
|
||||
Dqn_CPPBuildFlagsStyle flags_style = windows_build ? Dqn_CPPBuildFlagsStyle_MSVC : Dqn_CPPBuildFlagsStyle_GCC;
|
||||
Dqn_CPPBuildFlagsStyle flags_style = msvc_build ? Dqn_CPPBuildFlagsStyle_MSVC : Dqn_CPPBuildFlagsStyle_GCC;
|
||||
|
||||
Dqn_FArray32<Dqn_Str8> common_compile_flags = {};
|
||||
Dqn_FArray32<Dqn_Str8> common_link_flags = {};
|
||||
if (windows_build) {
|
||||
if (msvc_build) {
|
||||
Dqn_FArray_AddAssert(&common_compile_flags, DQN_STR8("cl"));
|
||||
Dqn_FArray_AddAssert(&common_compile_flags, DQN_STR8("-W4"));
|
||||
Dqn_FArray_AddAssert(&common_compile_flags, DQN_STR8("-Z7"));
|
||||
@ -169,7 +169,7 @@ int main(int argc, char const **argv)
|
||||
DQN_DEFER { robocopy_timings[1] = Dqn_OS_PerfCounterNow(); };
|
||||
|
||||
Dqn_FArray8<Dqn_Str8> common_copy_cmd_args = {};
|
||||
if (windows_build) {
|
||||
if (msvc_build) {
|
||||
Dqn_FArray_AddCArrayAssert(&common_copy_cmd_args, {
|
||||
DQN_STR8("robocopy"),
|
||||
DQN_STR8("/NJH"),
|
||||
@ -188,7 +188,7 @@ int main(int argc, char const **argv)
|
||||
DQN_HARD_ASSERT(Dqn_Fs_MakeDir(textures_dest));
|
||||
|
||||
Dqn_FArray8<Dqn_FArray8<Dqn_Str8>> copy_cmd_list = {};
|
||||
if (windows_build) {
|
||||
if (msvc_build) {
|
||||
Dqn_FArray8<Dqn_Str8> copy_atlas = common_copy_cmd_args;
|
||||
Dqn_FArray_AddCArrayAssert(©_atlas, {
|
||||
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/Data/Textures", DQN_STR_FMT(exe_dir)),
|
||||
@ -230,7 +230,7 @@ int main(int argc, char const **argv)
|
||||
Dqn_Str8 rendered_line = Dqn_Slice_Str8Render(scratch.arena, copy_cmd_slice, DQN_STR8(" "));
|
||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "[BUILD] Executing '%.*s'", DQN_STR_FMT(rendered_line));
|
||||
if (!dry_run) {
|
||||
if (windows_build) {
|
||||
if (msvc_build) {
|
||||
// NOTE: Robocopy returns 1 on success so we don't use the ExecOrAbort function
|
||||
Dqn_OS_Exec(copy_cmd_slice, /*working_dir*/ {});
|
||||
} else {
|
||||
@ -268,7 +268,7 @@ int main(int argc, char const **argv)
|
||||
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/glfw/deps/mingw", DQN_STR_FMT(raylib_dir)),
|
||||
});
|
||||
|
||||
if (windows_build) {
|
||||
if (msvc_build) {
|
||||
Dqn_FArray_AddCArrayAssert(&compile_flags, {
|
||||
DQN_STR8("cl"),
|
||||
DQN_STR8("-w"),
|
||||
@ -301,7 +301,7 @@ int main(int argc, char const **argv)
|
||||
|
||||
Dqn_CPPBuildCompileFile build_file = {};
|
||||
build_file.input_file_path = base_file;
|
||||
build_file.output_file_path = Dqn_Str8_InitF(scratch.allocator, "raylib_%.*s.%s", DQN_STR_FMT(file_stem), windows_build ? "obj" : "o");
|
||||
build_file.output_file_path = Dqn_Str8_InitF(scratch.allocator, "raylib_%.*s.%s", DQN_STR_FMT(file_stem), msvc_build ? "obj" : "o");
|
||||
build_context.compile_files = Dqn_Slice_Init(&build_file, 1);
|
||||
Dqn_FArray_AddAssert(&raylib_pc_output_files, build_file.output_file_path);
|
||||
|
||||
@ -315,7 +315,7 @@ int main(int argc, char const **argv)
|
||||
{
|
||||
Dqn_CPPBuildCompileFile build_file = {};
|
||||
build_file.input_file_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/rglfw.c", DQN_STR_FMT(raylib_dir));
|
||||
build_file.output_file_path = Dqn_Str8_InitF(scratch.allocator, "raylib_rglfw.%s", windows_build ? "obj" : "o");
|
||||
build_file.output_file_path = Dqn_Str8_InitF(scratch.allocator, "raylib_rglfw.%s", msvc_build ? "obj" : "o");
|
||||
build_context.compile_files = Dqn_Slice_InitCArray(scratch.arena, {build_file});
|
||||
Dqn_FArray_AddAssert(&raylib_pc_output_files, build_file.output_file_path);
|
||||
|
||||
@ -345,7 +345,7 @@ int main(int argc, char const **argv)
|
||||
},
|
||||
});
|
||||
|
||||
Dqn_FArray_AddAssert(&sokol_audio_pc_output_files, Dqn_Str8_InitF(scratch.allocator, "sokol_audio.%s", windows_build ? "obj" : "o"));
|
||||
Dqn_FArray_AddAssert(&sokol_audio_pc_output_files, Dqn_Str8_InitF(scratch.allocator, "sokol_audio.%s", msvc_build ? "obj" : "o"));
|
||||
|
||||
Dqn_FArray32<Dqn_Str8> compile_flags = common_compile_flags;
|
||||
Dqn_FArray_AddAssert(&compile_flags, DQN_STR8("-c"));
|
||||
@ -361,7 +361,7 @@ int main(int argc, char const **argv)
|
||||
|
||||
// NOTE: Feely Pona Sprite Packer ==============================================================
|
||||
uint64_t feely_pona_sprite_packer_timings[2] = {};
|
||||
if (windows_build) {
|
||||
if (msvc_build) {
|
||||
feely_pona_sprite_packer_timings[0] = Dqn_OS_PerfCounterNow();
|
||||
DQN_DEFER { feely_pona_sprite_packer_timings[1] = Dqn_OS_PerfCounterNow(); };
|
||||
|
||||
@ -387,20 +387,35 @@ int main(int argc, char const **argv)
|
||||
// NOTE: Link to raylib object files and windows libs ======================================
|
||||
Dqn_FArray_AddArrayAssert(&feely_pona_platform_link_flags, raylib_pc_output_files.data, raylib_pc_output_files.size);
|
||||
Dqn_FArray_AddArrayAssert(&feely_pona_platform_link_flags, sokol_audio_pc_output_files.data, sokol_audio_pc_output_files.size);
|
||||
if (windows_build) {
|
||||
if (msvc_build) {
|
||||
Dqn_FArray_AddCArrayAssert(&feely_pona_platform_link_flags, {
|
||||
DQN_STR8("gdi32.lib"),
|
||||
DQN_STR8("opengl32.lib"),
|
||||
DQN_STR8("winmm.lib"),
|
||||
DQN_STR8("gdi32.lib"), // raylib
|
||||
DQN_STR8("opengl32.lib"), // raylib
|
||||
DQN_STR8("winmm.lib"), // raylib
|
||||
DQN_STR8("user32.lib"),
|
||||
DQN_STR8("shell32.lib"),
|
||||
});
|
||||
} else {
|
||||
Dqn_FArray_AddCArrayAssert(&feely_pona_platform_link_flags, {
|
||||
DQN_STR8("-lpthread"),
|
||||
});
|
||||
|
||||
#if defined(DQN_OS_UNIX)
|
||||
Dqn_FArray_AddCArrayAssert(&feely_pona_platform_link_flags, {
|
||||
DQN_STR8("-ldl"),
|
||||
DQN_STR8("-lasound"),
|
||||
});
|
||||
#else
|
||||
Dqn_FArray_AddCArrayAssert(&feely_pona_platform_link_flags, {
|
||||
DQN_STR8("-lgdi32"), // raylib
|
||||
DQN_STR8("-lopengl32"), // raylib
|
||||
DQN_STR8("-lwinmm"), // raylib
|
||||
DQN_STR8("-lole32"), // sokol_audio
|
||||
DQN_STR8("-lbcrypt"), // dqn
|
||||
DQN_STR8("-lwininet"), // dqn
|
||||
DQN_STR8("-ldbghelp"), // dqn
|
||||
});
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -413,7 +428,7 @@ int main(int argc, char const **argv)
|
||||
Dqn_CPPBuildCompileFile build_file = {};
|
||||
build_file.input_file_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_unity.h", DQN_STR_FMT(code_dir));
|
||||
build_file.output_file_path = Dqn_FsPath_ConvertF(scratch.arena, "terry_cherry");
|
||||
if (windows_build) {
|
||||
if (msvc_build) {
|
||||
build_file.prefix_flags = Dqn_Slice_InitCArray(scratch.arena, {DQN_STR8("-Tp")});
|
||||
} else {
|
||||
build_file.prefix_flags = Dqn_Slice_InitCArray(scratch.arena, {DQN_STR8("-xc++")});
|
||||
@ -442,7 +457,7 @@ int main(int argc, char const **argv)
|
||||
|
||||
// NOTE: Feely Pona DLL ========================================================================
|
||||
uint64_t feely_pona_dll_timings[2] = {};
|
||||
if (windows_build) {
|
||||
if (msvc_build) {
|
||||
feely_pona_dll_timings[0] = Dqn_OS_PerfCounterNow();
|
||||
DQN_DEFER { feely_pona_dll_timings[1] = Dqn_OS_PerfCounterNow(); };
|
||||
|
||||
@ -472,7 +487,7 @@ int main(int argc, char const **argv)
|
||||
|
||||
// NOTE: Feely Pona platform ===================================================================
|
||||
uint64_t feely_pona_platform_timings[2] = {};
|
||||
if (windows_build) {
|
||||
if (msvc_build) {
|
||||
feely_pona_platform_timings[0] = Dqn_OS_PerfCounterNow();
|
||||
DQN_DEFER { feely_pona_platform_timings[1] = Dqn_OS_PerfCounterNow(); };
|
||||
|
||||
@ -515,7 +530,7 @@ int main(int argc, char const **argv)
|
||||
// NOTE: raylib emscripten =====================================================================
|
||||
uint64_t raylib_emscripten_timings[2] = {};
|
||||
uint64_t feely_pona_emscripten_timings[2] = {};
|
||||
if (windows_build && target_web) {
|
||||
if (msvc_build && target_web) {
|
||||
Dqn_Str8 const raylib_emscripten_lib_name = DQN_STR8("raylib_emscripten.a");
|
||||
bool debug_build = false;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user