From 56bb588ca7d718bc3eb7970ea4427925487542da Mon Sep 17 00:00:00 2001 From: kichikuou Date: Fri, 1 Jan 2021 21:52:55 +0900 Subject: [PATCH] Support building with Microsoft Visual Studio --- deps/fmgen | 2 +- src/CMakeLists.txt | 58 ++++++++++++++++++++++++++++++++++++++---- src/fileio.cpp | 1 + src/res3/Script1.rc | 2 +- src/sdlmain.cpp | 6 ++++- src/sys/ags.cpp | 1 + src/sys/ags_cursor.cpp | 1 + src/sys/ags_draw.cpp | 9 ++++--- src/sys/ags_gl3.cpp | 1 + src/sys/ags_gm3.cpp | 1 + src/sys/ags_pms.cpp | 1 + src/sys/ags_vsp.cpp | 1 + src/sys/ags_vsp2l.cpp | 1 + src/sys/ags_window.cpp | 1 + src/sys/dri.cpp | 5 ++-- src/sys/msgskip.cpp | 1 + src/sys/nact.h | 2 +- src/sys/nact_crc32.cpp | 1 + src/win/nact_win.cpp | 5 ++-- 19 files changed, 83 insertions(+), 17 deletions(-) diff --git a/deps/fmgen b/deps/fmgen index d74357e..7246b59 160000 --- a/deps/fmgen +++ b/deps/fmgen @@ -1 +1 @@ -Subproject commit d74357ec4ba2dfbc1d59c085b57d0636662f8d52 +Subproject commit 7246b59cac8f9228a842899f208e6b2757f97501 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ba6639e..81361fa 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -48,16 +48,64 @@ elseif (EMSCRIPTEN) else() # NOT (ANDROID OR EMSCRIPTEN) add_executable(system3) + target_link_libraries(system3 PRIVATE fmgen) - include(FindPkgConfig) - pkg_check_modules(SDL2 REQUIRED IMPORTED_TARGET sdl2) - pkg_check_modules(SDL2TTF REQUIRED IMPORTED_TARGET SDL2_ttf) - target_link_libraries(system3 PRIVATE PkgConfig::SDL2 PkgConfig::SDL2TTF fmgen) + if (MSVC) + if (CMAKE_VS_PLATFORM_NAME STREQUAL "Win32") + set(ARCH "x86") + else() + set(ARCH "x64") + endif() + + include(FetchContent) + FetchContent_Declare(sdl2 + URL http://libsdl.org/release/SDL2-devel-2.0.14-VC.zip) + FetchContent_GetProperties(sdl2) + if (NOT sdl2_POPULATED) + FetchContent_Populate(sdl2) + endif() + set(SDL2_LIB_DIR "${sdl2_SOURCE_DIR}/lib/${ARCH}") + add_library(SDL2 SHARED IMPORTED) + target_include_directories(SDL2 INTERFACE ${sdl2_SOURCE_DIR}/include) + set_target_properties(SDL2 PROPERTIES + IMPORTED_LOCATION ${SDL2_LIB_DIR}/SDL2.dll + IMPORTED_IMPLIB ${SDL2_LIB_DIR}/SDL2.lib + ) + target_link_libraries(SDL2 INTERFACE ${SDL2_LIB_DIR}/SDL2main.lib) + + FetchContent_Declare(sdl2_ttf + URL http://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-devel-2.0.15-VC.zip) + FetchContent_GetProperties(sdl2_ttf) + if (NOT sdl2_ttf_POPULATED) + FetchContent_Populate(sdl2_ttf) + endif() + set(SDL2TTF_LIB_DIR "${sdl2_ttf_SOURCE_DIR}/lib/${ARCH}") + add_library(SDL2TTF SHARED IMPORTED) + target_include_directories(SDL2TTF INTERFACE ${sdl2_ttf_SOURCE_DIR}/include) + set_target_properties(SDL2TTF PROPERTIES + IMPORTED_LOCATION ${SDL2TTF_LIB_DIR}/SDL2_ttf.dll + IMPORTED_IMPLIB ${SDL2TTF_LIB_DIR}/SDL2_ttf.lib + ) + + target_compile_definitions(system3 PRIVATE _CRT_NONSTDC_NO_DEPRECATE _CRT_SECURE_NO_WARNINGS) + target_compile_options(system3 PRIVATE /utf-8) + target_link_libraries(system3 PRIVATE SDL2 SDL2TTF) + set_target_properties(system3 PROPERTIES + VS_DEBUGGER_ENVIRONMENT "PATH=${SDL2_LIB_DIR}$${SDL2TTF_LIB_DIR}$$ENV{PATH}") + set_directory_properties(PROPERTIES VS_STARTUP_PROJECT system3) + else() + include(FindPkgConfig) + pkg_check_modules(SDL2 REQUIRED IMPORTED_TARGET sdl2) + pkg_check_modules(SDL2TTF REQUIRED IMPORTED_TARGET SDL2_ttf) + target_link_libraries(system3 PRIVATE PkgConfig::SDL2 PkgConfig::SDL2TTF) + endif() if (CMAKE_SYSTEM_NAME STREQUAL "Windows") target_sources(system3 PRIVATE win/nact_win.cpp win/mako.cpp res3/Script1.rc) target_link_libraries(system3 PRIVATE winmm) - set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static") + if (MSYS) + set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static") + endif() else() pkg_check_modules(SDL2MIXER REQUIRED IMPORTED_TARGET SDL2_mixer) target_sources(system3 PRIVATE diff --git a/src/fileio.cpp b/src/fileio.cpp index ed8f215..f82bbb4 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -6,6 +6,7 @@ #include "fileio.h" #include +#include #include #ifdef __EMSCRIPTEN__ #include diff --git a/src/res3/Script1.rc b/src/res3/Script1.rc index c671a55..19106d7 100644 --- a/src/res3/Script1.rc +++ b/src/res3/Script1.rc @@ -7,7 +7,7 @@ // // Generated from the TEXTINCLUDE 2 resource. // -#include "afxres.h" +#include "winres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS diff --git a/src/sdlmain.cpp b/src/sdlmain.cpp index 5a660e8..99f177b 100644 --- a/src/sdlmain.cpp +++ b/src/sdlmain.cpp @@ -1,9 +1,13 @@ #include -#include #include "common.h" #include "fileio.h" #include "sys/nact.h" #include "sys/mako.h" +#ifdef _WIN32 +#include +#else +#include +#endif #ifdef __EMSCRIPTEN__ #include #include diff --git a/src/sys/ags.cpp b/src/sys/ags.cpp index d839d53..361140a 100644 --- a/src/sys/ags.cpp +++ b/src/sys/ags.cpp @@ -5,6 +5,7 @@ */ #include "ags.h" +#include #include "crc32.h" #include "../fileio.h" diff --git a/src/sys/ags_cursor.cpp b/src/sys/ags_cursor.cpp index 0c513a9..dced7b3 100644 --- a/src/sys/ags_cursor.cpp +++ b/src/sys/ags_cursor.cpp @@ -5,6 +5,7 @@ */ #include "ags.h" +#include void AGS::load_cursor(int page) { diff --git a/src/sys/ags_draw.cpp b/src/sys/ags_draw.cpp index 98f8a5d..df02f25 100644 --- a/src/sys/ags_draw.cpp +++ b/src/sys/ags_draw.cpp @@ -5,6 +5,7 @@ */ #include "ags.h" +#include #include "dri.h" #include "crc32.h" @@ -13,13 +14,13 @@ void AGS::load_cg(int page, int transparent) if (nact->sys_ver == 3) { // あゆみちゃん物語 フルカラー実写版 if(strncmp(acg, "CGA000.BMP", 10) == 0) { - char file_name[_MAX_PATH]; - sprintf_s(file_name, _MAX_PATH, "CGA%03d.BMP", page); + char file_name[16]; + sprintf(file_name, "CGA%03d.BMP", page); load_bmp(file_name); return; } else if(strncmp(acg, "CGB000.BMP", 10) == 0) { - char file_name[_MAX_PATH]; - sprintf_s(file_name, _MAX_PATH, "CGB%03d.BMP", page); + char file_name[16]; + sprintf(file_name, "CGB%03d.BMP", page); load_bmp(file_name); return; } diff --git a/src/sys/ags_gl3.cpp b/src/sys/ags_gl3.cpp index a229aa2..f041618 100644 --- a/src/sys/ags_gl3.cpp +++ b/src/sys/ags_gl3.cpp @@ -5,6 +5,7 @@ */ #include "ags.h" +#include void AGS::load_gl3(uint8* data, int page, int transparent) { diff --git a/src/sys/ags_gm3.cpp b/src/sys/ags_gm3.cpp index b223bef..73d3219 100644 --- a/src/sys/ags_gm3.cpp +++ b/src/sys/ags_gm3.cpp @@ -5,6 +5,7 @@ */ #include "ags.h" +#include void AGS::load_gm3(uint8* data, int page, int transparent) { diff --git a/src/sys/ags_pms.cpp b/src/sys/ags_pms.cpp index 6d8d2b5..206798a 100644 --- a/src/sys/ags_pms.cpp +++ b/src/sys/ags_pms.cpp @@ -6,6 +6,7 @@ #include "ags.h" #include "crc32.h" +#include void AGS::load_pms(uint8* data, int page, int transparent) { diff --git a/src/sys/ags_vsp.cpp b/src/sys/ags_vsp.cpp index 153aa1e..d0fec13 100644 --- a/src/sys/ags_vsp.cpp +++ b/src/sys/ags_vsp.cpp @@ -6,6 +6,7 @@ #include "ags.h" #include "crc32.h" +#include void AGS::load_vsp(uint8* data, int page, int transparent) { diff --git a/src/sys/ags_vsp2l.cpp b/src/sys/ags_vsp2l.cpp index 2c0ffa4..4bfe74a 100644 --- a/src/sys/ags_vsp2l.cpp +++ b/src/sys/ags_vsp2l.cpp @@ -5,6 +5,7 @@ */ #include "ags.h" +#include void AGS::load_vsp2l(uint8* data, int page, int transparent) { diff --git a/src/sys/ags_window.cpp b/src/sys/ags_window.cpp index 83115cc..6741ebe 100644 --- a/src/sys/ags_window.cpp +++ b/src/sys/ags_window.cpp @@ -5,6 +5,7 @@ */ #include "ags.h" +#include void AGS::clear_text_window(int index, bool erase) { diff --git a/src/sys/dri.cpp b/src/sys/dri.cpp index 6033e0a..0ba7652 100644 --- a/src/sys/dri.cpp +++ b/src/sys/dri.cpp @@ -5,13 +5,14 @@ */ #include "dri.h" +#include #include "crc32.h" #include "../fileio.h" uint8* DRI::load(const char* file_name, int page, int* size) { - char tmp_name[_MAX_PATH]; - strcpy_s(tmp_name, _MAX_PATH, file_name); + char tmp_name[20]; + strcpy_s(tmp_name, sizeof(tmp_name), file_name); FILEIO* fio = new FILEIO(); diff --git a/src/sys/msgskip.cpp b/src/sys/msgskip.cpp index 9cc6208..a367dfc 100644 --- a/src/sys/msgskip.cpp +++ b/src/sys/msgskip.cpp @@ -1,4 +1,5 @@ #include "msgskip.h" +#include #include "nact.h" #include "fileio.h" diff --git a/src/sys/nact.h b/src/sys/nact.h index c105277..f48c9e6 100644 --- a/src/sys/nact.h +++ b/src/sys/nact.h @@ -82,8 +82,8 @@ constexpr char SJIS_NEXT_PAGE [] = "\x8E\x9F\x82\xCC\x83\x79\x81\x5B\x83\x57"; / class AGS; class MAKO; -class MAKOConfig; class MsgSkip; +struct MAKOConfig; class NACT { diff --git a/src/sys/nact_crc32.cpp b/src/sys/nact_crc32.cpp index 28b1638..18f6071 100644 --- a/src/sys/nact_crc32.cpp +++ b/src/sys/nact_crc32.cpp @@ -5,6 +5,7 @@ */ #include "nact.h" +#include #include "crc32.h" #include "../fileio.h" diff --git a/src/win/nact_win.cpp b/src/win/nact_win.cpp index ac9db51..965cd6a 100644 --- a/src/win/nact_win.cpp +++ b/src/win/nact_win.cpp @@ -1,7 +1,8 @@ -#include "nact.h" #include #include +#undef ERROR #include +#include "nact.h" #include "SDL_syswm.h" #include "ags.h" #include "mako.h" @@ -122,7 +123,7 @@ INT_PTR CALLBACK TextDialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lPara void NACT::text_dialog() { HINSTANCE hinst = (HINSTANCE)GetModuleHandle(NULL); - int r = DialogBoxParam(hinst, MAKEINTRESOURCE(IDD_DIALOG1), get_hwnd(g_window), TextDialogProc, (LPARAM)this); + DialogBoxParam(hinst, MAKEINTRESOURCE(IDD_DIALOG1), get_hwnd(g_window), TextDialogProc, (LPARAM)this); } void NACT::platform_initialize()