From 64d69162abfcc20967a65a238bbe1164a6fa5906 Mon Sep 17 00:00:00 2001 From: u130b8 <115743848+u130b8@users.noreply.github.com> Date: Thu, 7 Sep 2023 10:31:55 +0300 Subject: [PATCH 1/7] build release without crt by default, build debug with crt --- .gitignore | 4 +++- build.cmd | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 177af74..d7ac98d 100644 --- a/.gitignore +++ b/.gitignore @@ -57,4 +57,6 @@ dkms.conf /misc/supermiumman.png /bin.7z *.zip -*.res \ No newline at end of file +*.res + +release \ No newline at end of file diff --git a/build.cmd b/build.cmd index 4e3210f..f98bef9 100644 --- a/build.cmd +++ b/build.cmd @@ -12,8 +12,8 @@ if "%1" == "debug" ( set CL=/MT /Od /Zi /RTC1 /Fdprogmgr.pdb /fsanitize=address %DEFS% set LINK=/DEBUG ) else ( - set CL=/GL /O1 /DNDEBUG /GS- %DEFS% - set LINK=/LTCG /OPT:REF /OPT:ICF + set CL=/O1 /DNDEBUG /DPROGMGR_NO_CRT /GS- %DEFS% + set LINK=/NODEFAULTLIB /OPT:REF /OPT:ICF ) pushd "%DIR_RELEASE%" From acc63b5aa6b151db07b5ddfe7e028b09b6d4bd5a Mon Sep 17 00:00:00 2001 From: u130b8 <115743848+u130b8@users.noreply.github.com> Date: Thu, 7 Sep 2023 10:32:11 +0300 Subject: [PATCH 2/7] rename zipbuild to zip.cmd --- zipbuild.bat => zip.cmd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename zipbuild.bat => zip.cmd (100%) diff --git a/zipbuild.bat b/zip.cmd similarity index 100% rename from zipbuild.bat rename to zip.cmd From e0461949aec22205f0815981c89360d7e3929cab Mon Sep 17 00:00:00 2001 From: u130b8 <115743848+u130b8@users.noreply.github.com> Date: Thu, 7 Sep 2023 10:33:12 +0300 Subject: [PATCH 3/7] move UNICODE define out of defs --- build.cmd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.cmd b/build.cmd index f98bef9..f2df47c 100644 --- a/build.cmd +++ b/build.cmd @@ -1,6 +1,6 @@ @echo off -set DEFS=/DUNICODE +set DEFS= set DIR_ROOT=%~dp0. set DIR_PROGMGR=%DIR_ROOT%\progmgr set DIR_RELEASE=%DIR_ROOT%\release @@ -9,10 +9,10 @@ rmdir /S /Q "%DIR_RELEASE%" > nul 2>&1 if not exist "%DIR_RELEASE%" mkdir "%DIR_RELEASE%" if "%1" == "debug" ( - set CL=/MT /Od /Zi /RTC1 /Fdprogmgr.pdb /fsanitize=address %DEFS% + set CL=/MT /Od /Zi /RTC1 /Fdprogmgr.pdb /fsanitize=address /DUNICODE %DEFS% set LINK=/DEBUG ) else ( - set CL=/O1 /DNDEBUG /DPROGMGR_NO_CRT /GS- %DEFS% + set CL=/O1 /GS- /DUNICODE /DNDEBUG /DPROGMGR_NO_CRT %DEFS% set LINK=/NODEFAULTLIB /OPT:REF /OPT:ICF ) From 613b9983483966c8b8513f2a22a41740000811bb Mon Sep 17 00:00:00 2001 From: u130b8 <115743848+u130b8@users.noreply.github.com> Date: Thu, 7 Sep 2023 10:54:02 +0300 Subject: [PATCH 4/7] include git hash in build --- build.cmd | 15 +++++++++------ progmgr/resource.rc | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/build.cmd b/build.cmd index f2df47c..d72b240 100644 --- a/build.cmd +++ b/build.cmd @@ -1,6 +1,5 @@ @echo off -set DEFS= set DIR_ROOT=%~dp0. set DIR_PROGMGR=%DIR_ROOT%\progmgr set DIR_RELEASE=%DIR_ROOT%\release @@ -8,18 +7,22 @@ set DIR_RELEASE=%DIR_ROOT%\release rmdir /S /Q "%DIR_RELEASE%" > nul 2>&1 if not exist "%DIR_RELEASE%" mkdir "%DIR_RELEASE%" +git rev-parse HEAD > %DIR_RELEASE%\.git_hash +set /P GIT_HASH=<%DIR_RELEASE%\.git_hash +set "GIT_HASH=%GIT_HASH:~0,8%" + if "%1" == "debug" ( - set CL=/MT /Od /Zi /RTC1 /Fdprogmgr.pdb /fsanitize=address /DUNICODE %DEFS% + set CL=/MT /Od /Zi /RTC1 /Fdprogmgr.pdb /fsanitize=address /DUNICODE /DPROGMGR_GIT_HASH="%GIT_HASH%" set LINK=/DEBUG ) else ( - set CL=/O1 /GS- /DUNICODE /DNDEBUG /DPROGMGR_NO_CRT %DEFS% + set CL=/O1 /GS- /DUNICODE /DNDEBUG /DPROGMGR_NO_CRT /DPROGMGR_GIT_HASH="%GIT_HASH%" set LINK=/NODEFAULTLIB /OPT:REF /OPT:ICF ) pushd "%DIR_RELEASE%" -rc /nologo /i "%DIR_PROGMGR%" "%DIR_PROGMGR%\lang\dlg_en-US.rc" -rc /nologo /i "%DIR_PROGMGR%" "%DIR_PROGMGR%\lang\res_en-US.rc" -rc /nologo /i "%DIR_PROGMGR%" "%DIR_PROGMGR%\resource.rc" +rc /nologo /DPROGMGR_GIT_HASH="""%GIT_HASH%""" /i "%DIR_PROGMGR%" "%DIR_PROGMGR%\lang\dlg_en-US.rc" +rc /nologo /DPROGMGR_GIT_HASH="""%GIT_HASH%""" /i "%DIR_PROGMGR%" "%DIR_PROGMGR%\lang\res_en-US.rc" +rc /nologo /DPROGMGR_GIT_HASH="""%GIT_HASH%""" /i "%DIR_PROGMGR%" "%DIR_PROGMGR%\resource.rc" cl /nologo /W3 /WX /MP /Feprogmgr.exe ^ "%DIR_PROGMGR%\*.c" ^ "%DIR_PROGMGR%\resource.res" ^ diff --git a/progmgr/resource.rc b/progmgr/resource.rc index 65fc50d..65b0f4f 100644 --- a/progmgr/resource.rc +++ b/progmgr/resource.rc @@ -57,7 +57,7 @@ BEGIN VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR "\0" VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR "\0" VALUE "ProductName", VER_PRODUCTNAME_STR - VALUE "ProductVersion", VER_PRODUCTVERSION_STR "\0" + VALUE "ProductVersion", "git-" PROGMGR_GIT_HASH "\0" END END BLOCK "VarFileInfo" From 59937a869001fd797d172fcdd3edbe65b08a98b0 Mon Sep 17 00:00:00 2001 From: u130b8 <115743848+u130b8@users.noreply.github.com> Date: Thu, 7 Sep 2023 10:59:31 +0300 Subject: [PATCH 5/7] comment the no_crt situation --- build.cmd | 2 +- progmgr/progmgr.c | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/build.cmd b/build.cmd index d72b240..578afa9 100644 --- a/build.cmd +++ b/build.cmd @@ -15,7 +15,7 @@ if "%1" == "debug" ( set CL=/MT /Od /Zi /RTC1 /Fdprogmgr.pdb /fsanitize=address /DUNICODE /DPROGMGR_GIT_HASH="%GIT_HASH%" set LINK=/DEBUG ) else ( - set CL=/O1 /GS- /DUNICODE /DNDEBUG /DPROGMGR_NO_CRT /DPROGMGR_GIT_HASH="%GIT_HASH%" + set CL=/O1 /GS- /DUNICODE /DNDEBUG /DPROGMGR_GIT_HASH="%GIT_HASH%" set LINK=/NODEFAULTLIB /OPT:REF /OPT:ICF ) diff --git a/progmgr/progmgr.c b/progmgr/progmgr.c index 705fac9..3eacc33 100644 --- a/progmgr/progmgr.c +++ b/progmgr/progmgr.c @@ -166,7 +166,11 @@ int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, return 0; } -#ifdef PROGMGR_NO_CRT +// NOTE(u130b8): We're compiling without the C runtime by default in Release builds. +// But in Debug builds, we need the C runtime, otherwise the address sanitizer and +// MSVC debug tools break because they use the wWinMainCRTStartup entrypoint to initialize. + +#ifdef NDEBUG #pragma function(memset) void *memset(char* dst, int value, size_t count) { while (count--) { *dst++ = value; } From a074441a9969dd88698cfcef6178f0905dd90e7b Mon Sep 17 00:00:00 2001 From: u130b8 <115743848+u130b8@users.noreply.github.com> Date: Thu, 7 Sep 2023 11:06:58 +0300 Subject: [PATCH 6/7] fix failing build when PROGMGR_GIT_HASH is not defined --- progmgr/resource.rc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/progmgr/resource.rc b/progmgr/resource.rc index 65b0f4f..e614d41 100644 --- a/progmgr/resource.rc +++ b/progmgr/resource.rc @@ -41,6 +41,13 @@ CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "progmgr.exe.manifest" #define APSTUDIO_HIDDEN_SYMBOLS #include "version.inc" #undef APSTUDIO_HIDDEN_SYMBOLS + +// NOTE(u130b8): Example of using PROGMGR_GIT_HASH in the resource file +#ifdef PROGMGR_GIT_HASH +#undef VER_PRODUCTVERSION_STR +#define VER_PRODUCTVERSION_STR "git-" PROGMGR_GIT_HASH +#endif + VS_VERSION_INFO VERSIONINFO FILEVERSION VER_FILEVERSION PRODUCTVERSION VER_PRODUCTVERSION @@ -57,7 +64,7 @@ BEGIN VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR "\0" VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR "\0" VALUE "ProductName", VER_PRODUCTNAME_STR - VALUE "ProductVersion", "git-" PROGMGR_GIT_HASH "\0" + VALUE "ProductVersion", VER_PRODUCTVERSION_STR "\0" END END BLOCK "VarFileInfo" From d7a3802571ab1e0286b74cf28421a12d7f87f11d Mon Sep 17 00:00:00 2001 From: u130b8 <115743848+u130b8@users.noreply.github.com> Date: Thu, 7 Sep 2023 11:11:47 +0300 Subject: [PATCH 7/7] use custom defines to prevent vs builds from breaking --- build.cmd | 4 ++-- progmgr/progmgr.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.cmd b/build.cmd index 578afa9..112dbe7 100644 --- a/build.cmd +++ b/build.cmd @@ -12,10 +12,10 @@ set /P GIT_HASH=<%DIR_RELEASE%\.git_hash set "GIT_HASH=%GIT_HASH:~0,8%" if "%1" == "debug" ( - set CL=/MT /Od /Zi /RTC1 /Fdprogmgr.pdb /fsanitize=address /DUNICODE /DPROGMGR_GIT_HASH="%GIT_HASH%" + set CL=/MT /Od /Zi /RTC1 /Fdprogmgr.pdb /fsanitize=address /DUNICODE /DPROGMGR_DEBUG /DPROGMGR_GIT_HASH="%GIT_HASH%" set LINK=/DEBUG ) else ( - set CL=/O1 /GS- /DUNICODE /DNDEBUG /DPROGMGR_GIT_HASH="%GIT_HASH%" + set CL=/O1 /GS- /DUNICODE /DNDEBUG /DPROGMGR_RELEASE /DPROGMGR_GIT_HASH="%GIT_HASH%" set LINK=/NODEFAULTLIB /OPT:REF /OPT:ICF ) diff --git a/progmgr/progmgr.c b/progmgr/progmgr.c index 3eacc33..a503170 100644 --- a/progmgr/progmgr.c +++ b/progmgr/progmgr.c @@ -170,7 +170,7 @@ int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, // But in Debug builds, we need the C runtime, otherwise the address sanitizer and // MSVC debug tools break because they use the wWinMainCRTStartup entrypoint to initialize. -#ifdef NDEBUG +#ifdef PROGMGR_RELEASE #pragma function(memset) void *memset(char* dst, int value, size_t count) { while (count--) { *dst++ = value; }