From 171d917b7e4d0c488f5807fd5ae5928f4b7c625c Mon Sep 17 00:00:00 2001 From: Thomas la Cour Date: Tue, 20 Aug 2024 18:43:40 +0200 Subject: [PATCH] odin manifest file --- .gitignore | 3 ++ build.bat | 25 +++++++++++--- examples/demo/demo.rc | 75 ++++++++++++++++++++++++++++++++++++++++++ misc/emblem.ico | Bin 0 -> 3638 bytes misc/odin.manifest | 8 +++++ misc/odin.rc | 75 ++++++++++++++++++++++++++++++++++++++++++ misc/sourcefile.ico | Bin 0 -> 3638 bytes 7 files changed, 181 insertions(+), 5 deletions(-) create mode 100644 examples/demo/demo.rc create mode 100644 misc/emblem.ico create mode 100644 misc/odin.manifest create mode 100644 misc/odin.rc create mode 100644 misc/sourcefile.ico diff --git a/.gitignore b/.gitignore index 553e16005..32e5f5b0f 100644 --- a/.gitignore +++ b/.gitignore @@ -266,6 +266,9 @@ bin/ *.exe *.obj *.pdb +*.res +desktop.ini +Thumbs.db # - Linux/MacOS odin diff --git a/build.bat b/build.bat index b458c0c67..6eeeaf9d5 100644 --- a/build.bat +++ b/build.bat @@ -22,9 +22,9 @@ if "%VSCMD_ARG_TGT_ARCH%" neq "x64" ( for /f "usebackq tokens=1,2 delims=,=- " %%i in (`wmic os get LocalDateTime /value`) do @if %%i==LocalDateTime ( set CURR_DATE_TIME=%%j ) - set curr_year=%CURR_DATE_TIME:~0,4% set curr_month=%CURR_DATE_TIME:~4,2% +set curr_day=%CURR_DATE_TIME:~6,2% :: Make sure this is a decent name and not generic set exe_name=odin.exe @@ -53,18 +53,29 @@ rem See https://learn.microsoft.com/en-us/cpp/build/reference/utf-8-set-source-a set compiler_flags= %compiler_flags% /utf-8 set compiler_defines= -DODIN_VERSION_RAW=\"%odin_version_raw%\" +rem fileversion is defined as {Major,Minor,Build,Private: u16} so a bit limited +set rc_flags=-nologo -v ^ +-DV1=%curr_year% -DV2=%curr_month% -DV3=%curr_day% -DV4=%nightly% ^ +-DVF=%curr_year%.%curr_month%.%curr_day%.%nightly% + if not exist .git\ goto skip_git_hash for /f "tokens=1,2" %%i IN ('git show "--pretty=%%cd %%h" "--date=format:%%Y-%%m" --no-patch --no-notes HEAD') do ( set odin_version_raw=dev-%%i set GIT_SHA=%%j ) -if %ERRORLEVEL% equ 0 set compiler_defines=%compiler_defines% -DGIT_SHA=\"%GIT_SHA%\" +if %ERRORLEVEL% equ 0 ( + set compiler_defines=%compiler_defines% -DGIT_SHA=\"%GIT_SHA%\" + set rc_flags=%rc_flags% -DGIT_SHA=%GIT_SHA% -DVP=%odin_version_raw%:%GIT_SHA% +) else ( + set rc_flags=%rc_flags% -DVP=%odin_version_raw% +) :skip_git_hash if %nightly% equ 1 set compiler_defines=%compiler_defines% -DNIGHTLY if %release_mode% EQU 0 ( rem Debug set compiler_flags=%compiler_flags% -Od -MDd -Z7 + set rc_flags=%rc_flags% -D_DEBUG ) else ( rem Release set compiler_flags=%compiler_flags% -O2 -MT -Z7 set compiler_defines=%compiler_defines% -DNO_ARRAY_BOUNDS_CHECK @@ -82,6 +93,8 @@ set libs= ^ kernel32.lib ^ Synchronization.lib ^ bin\llvm\windows\LLVM-C.lib +set odin_res=misc\odin.res +set odin_rc=misc\odin.rc rem DO NOT TOUCH! rem THIS TILDE STUFF IS FOR DEVELOPMENT ONLY! @@ -93,7 +106,7 @@ if %tilde_backend% EQU 1 ( rem DO NOT TOUCH! -set linker_flags= -incremental:no -opt:ref -subsystem:console +set linker_flags= -incremental:no -opt:ref -subsystem:console -MANIFEST:EMBED if %release_mode% EQU 0 ( rem Debug set linker_flags=%linker_flags% -debug /NATVIS:src\odin_compiler.natvis @@ -102,19 +115,21 @@ if %release_mode% EQU 0 ( rem Debug ) set compiler_settings=%compiler_includes% %compiler_flags% %compiler_warnings% %compiler_defines% -set linker_settings=%libs% %linker_flags% +set linker_settings=%libs% %odin_res% %linker_flags% del *.pdb > NUL 2> NUL del *.ilk > NUL 2> NUL +rc %rc_flags% %odin_rc% cl %compiler_settings% "src\main.cpp" "src\libtommath.cpp" /link %linker_settings% -OUT:%exe_name% +mt -nologo -inputresource:%exe_name%;#1 -manifest misc\odin.manifest -outputresource:%exe_name%;#1 -validate_manifest -identity:"odin, processorArchitecture=amd64, version=%curr_year%.%curr_month%.%curr_day%.%nightly%, type=win32" if %errorlevel% neq 0 goto end_of_build call build_vendor.bat if %errorlevel% neq 0 goto end_of_build rem If the demo doesn't run for you and your CPU is more than a decade old, try -microarch:native -if %release_mode% EQU 0 odin run examples/demo -vet -strict-style -- Hellope World +if %release_mode% EQU 0 odin run examples/demo -vet -strict-style -resource:examples/demo/demo.rc -- Hellope World rem Many non-compiler devs seem to run debug build but don't realize. if %release_mode% EQU 0 echo: & echo Debug compiler built. Note: run "build.bat release" if you want a faster, release mode compiler. diff --git a/examples/demo/demo.rc b/examples/demo/demo.rc new file mode 100644 index 000000000..ef3ec2fec --- /dev/null +++ b/examples/demo/demo.rc @@ -0,0 +1,75 @@ + +#define Filename "demo.exe" +#define FileDescription "Odin demo project." +#define ProductName "Odin Programming Language Demo" + +#include "winres.h" + +LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT +#pragma code_page(65001) + +#define IDI_ICON1 101 + +#define Q(x) #x +#define QUOTE(x) Q(x) +#define FMTVER(x,y,z,w) QUOTE(x.y.z.w) + +#ifndef V1 +#define V1 1 +#endif +#ifndef V2 +#define V2 0 +#endif +#ifndef V3 +#define V3 0 +#endif +#ifndef V4 +#define V4 0 +#endif +#ifndef ODIN_VERSION +#define ODIN_VERSION FMTVER(V1,V2,V3,V4) +#endif +#ifndef GIT_SHA +#define GIT_SHA _ +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION V1,V2,V3,V4 + PRODUCTVERSION V1,V2,V3,V4 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "0409FDE9" + BEGIN + VALUE "CompanyName", "https://odin-lang.org/" + VALUE "FileDescription", "Odin Demo" + VALUE "FileVersion", FMTVER(V1,V2,V3,V4) + VALUE "InternalName", "demo.exe" + VALUE "LegalCopyright", "Copyright (c) 2016-2024 Ginger Bill. All rights reserved." + VALUE "OriginalFilename", "demo.exe" + VALUE "ProductName", "Odin Programming Language Demo" + VALUE "ProductVersion", QUOTE(ODIN_VERSION) + VALUE "Comments", QUOTE(ODIN_VERSION) + // PrivateBuild + // SpecialBuild + // custom values + VALUE "GitSha", QUOTE(GIT_SHA) + END + END + BLOCK "VarFileInfo" + BEGIN + //0xFDE9=65001=CP_UTF8 + VALUE "Translation", 0x0409, 0xFDE9 + END +END + +IDI_ICON1 ICON "..\\..\\misc\\sourcefile.ico" diff --git a/misc/emblem.ico b/misc/emblem.ico new file mode 100644 index 0000000000000000000000000000000000000000..f5644b4179eff9e731ed9450df8f9a4b5256395b GIT binary patch literal 3638 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 literal 0 HcmV?d00001 diff --git a/misc/odin.manifest b/misc/odin.manifest new file mode 100644 index 000000000..d42403b22 --- /dev/null +++ b/misc/odin.manifest @@ -0,0 +1,8 @@ + + + + + UTF-8 + + + diff --git a/misc/odin.rc b/misc/odin.rc new file mode 100644 index 000000000..e45d6661b --- /dev/null +++ b/misc/odin.rc @@ -0,0 +1,75 @@ + +#include "winres.h" + +// https://learn.microsoft.com/en-us/windows/win32/menurc/stringfileinfo-block + +LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT +#pragma code_page(65001) // CP_UTF8 + +#define IDI_ICON1 101 +#define IDI_ICON2 102 + +#ifndef V1 +#define V1 1 +#endif +#ifndef V2 +#define V2 0 +#endif +#ifndef V3 +#define V3 0 +#endif +#ifndef V4 +#define V4 0 +#endif +#ifndef VF +#define VF "1.0.0.0" +#endif +#ifndef VP +#define VP "1.0.0.0" +#endif +#ifndef GIT_SHA +#define GIT_SHA 0 +#endif + +#define Q(x) #x +#define QUOTE(x) Q(x) + +VS_VERSION_INFO VERSIONINFO + FILEVERSION V1,V2,V3,V4 + PRODUCTVERSION V1,V2,V3,V4 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "0409FDE9" + BEGIN + VALUE "CompanyName", "https://odin-lang.org/" + VALUE "FileDescription", "Odin general-purpose programming language." // note this is shown in the task manager + VALUE "FileVersion", QUOTE(VF) + VALUE "InternalName", "odin.exe" + VALUE "LegalCopyright", "Copyright (c) 2016-2024 Ginger Bill. All rights reserved." + VALUE "OriginalFilename", "odin.exe" + VALUE "ProductName", "The Odin Programming Language" + VALUE "ProductVersion", QUOTE(VP) + VALUE "Comments", QUOTE(git-sha: GIT_SHA) + // custom values + VALUE "GitSha", QUOTE(GIT_SHA) + END + END + BLOCK "VarFileInfo" + BEGIN + //0xFDE9=65001=CP_UTF8 + VALUE "Translation", 0x0409, 0xFDE9 + END +END + +IDI_ICON1 ICON "emblem.ico" +IDI_ICON2 ICON "sourcefile.ico" diff --git a/misc/sourcefile.ico b/misc/sourcefile.ico new file mode 100644 index 0000000000000000000000000000000000000000..5f377263317d1e04162f53b437547ee687674658 GIT binary patch literal 3638 zcmeHJX;4&G7XF$C0!|bN7!zeN8DkRTl9@1LNL*sZBr0T?L{JkoL~%yUX2vWsA}Rqv zlL*>0i(Aw|0ZDK`+|b4df~+mdW`n)a^g{1%>24>LD(1d!q#Bb-DwUcaQh*cw zIp>{w?(Op(KmadHngsInL$Mz)1wde+TVLk`NXWZK$va|#XNmB3KecY(z72!H0H@Ol zv)K&2UJr}K0+Y!EtJMmJMGgDSQ(#;2!8Gm#d$SToqY*lt4qB}i{r&w=DwS}k8^Knr z04)lIbx#N^*x1%r_sg451IT^f&p=A&>r>~J_7nMRm z6ah=&e3+XKqI-J)t|gB_*P$g~OeBwsAAk{#1AA&EnCc{$v+n~Zy99?#4|&!U+{&8+ zwRjimHwEEpW+Z4+KkRlpbRSGM&L=_oSr9DJYG@^8xbR^B z>h?s#&arTkeKQ3Qfh~OM8J$6kd}I323P zi_o((44hE`tD+e#$w817C7>#2HFB5x!Jv_&Pt^xgYa!ZG#z0fOi`*v%I`S8xA^CpL zdKm`Py~tm256XAE1e&IyQmIHy7<6Pki5p+cgq^iQ+j0VzH;%@wa~WW08?lW+?lNB} z+G}C#7DIo%92{-NmDH)I+5R|Kn;EptiVL}GQCGYTHk%FImFcKl?+Z!cd*nPVU>OGT zwrZ3lMd4!pI@qihXgkC>mpl!{tG)5fh6q%PR-&mi6<1HBLcDK1j&FPdIdNXt7k@9B z%d<#aD-;R^y2SfYnYI82-Wo&l@*y@9^4=It>}R6BBo%tHM~>W8o5ctN`K^_=!(t@= z1-Tpy$wMZSlmE660|Ns;)dGGc=I!n4JN7?bUf+G^;}Z}N5Ez({5aby$JSr+SHumsg z(qXEq+S=Ou{6>ws?O_o9BLAfYBE0n4}b-zYSau|tI;n#1pckoGec6I06l(x0qJHr2JLt|5Oi+dNXlALQ*Bk_yk z>Pz2Vt{K{9?UlOvstca}|4u8fI8}N2%#gv^bLU6mg~yH;6_=bSy;Fy;zbQNE;h&dZ zuy6kX>foWTh76A69Q~IEzU$4;sV~0Vot3?3uiHSFBg*x_Q?_oS{I{oueU_H)F7=L# z%$*+ihyU0}Q6GK$$)}r={^>H;J0HfFbjiUa(E^+-k@4m;EI_muoHhALH(q+pj z>Ww#7M6X=+7BPr_d-a+GkNDJ!3l}Y>qGMiq`IT4y8XX?~+UrYV<2-Tdnd!45s5x`z zQP0kQj{3`j=U<2-gf_e=Ds0;H8UEDFC;srqCnNv#=UGpMM?F1^0u)6>OnUI4-%oyc z%7jNAeQfIEB!_^JI7J1AjJt3A{SQo-7#hak2SSv?i}>@)fAsI}8ADNHeF6f5JddA` z@3F}3_4V|2ecuzm8@|i`2k>3E_sHNROTmccHJtaa|1mhUz6a(JiTED~A9pK}!S5j; zLJ{%3^VvauPT@~_5|N*qQ~3FW?_>OI!p|r?C)+g=*!x>uvkE`MxOj)~w7oSCOwj^Z zkIn`yPJ-^jR;bRVxcWaod)VvJ!Bu|>Cp`e`vFE@l>Y+Rm1J$K$NDi)a%?u8G7ud2T zE?!}3cYu`~Kz~sjY>GxSA4!C~xg2c6Zg8EYa2RE<6fK0cvjXaqiO@(JAQr`guHFp0 zvJR&5HDG$qqqkr_Sfk1{BbW!&C{JGuYhy0-74JY(x(b?av&sDOIb_!^qDqti&ZI*7 z4l)nP>LJOV1CFs0&SX%L@d|Dc8=IyZ*9#LNt2qFRK}&qr;PR1AT)d=`oWi;E`8b&} z8((jk>*Axf^ZQ*~!E*%9iTr%W&wTtm$MeK*>$eL0pHv_=HYSc*>bGpUzdPaJ(8x%_ zD={%c%pwSO(amcyF>YM&!ix(dBNr`>9@6K|BU}?1Nyx^H&w48A>1Rlc*>l|b3>Vvk z61s8gQ(Vjv96D{fTMr9&aZd2$huykhm|uo;LMCH*CJ7$W1p=Q@z5+l0(Zf35)+ukd adZ)?%cy}Kh1eCtNPzVJoBS_;VzW)VtF8j6s literal 0 HcmV?d00001