1
0
Fork 0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-12-23 01:59:43 +01:00
VVVVVV/desktop_version/.gitignore

20 lines
210 B
Text
Raw Normal View History

# Build objects
build/
flibitBuild/
CMakeCache.txt
CMakeFiles/
cmake_install.cmake
Makefile
VVVVVV.exe
VVVVVV
*.a
2020-01-13 04:34:50 +01:00
*.gch
Don't recompile all files when the commit hash is changed The previous implementation of showing the commit hash on the title screen used a preprocessor definition added at CMake time to pass the hash and date. This was passed for every file compiled, so if the date or hash changed, then every file would be recompiled. This is especially annoying if you're working on the game and switching branches all the time - the game has at least 50 source files to recompile! To fix this, we'll switch to using a generated file, named Version.h.out, that only gets included by the necessary files (which there is only one of - Render.cpp). It will be autogenerated by CMake (by using CONFIGURE_FILE(), which takes a templated file and does a find-and-replace on it, not unlike C macros), and since there's only one file that includes it, only one file will need to be recompiled when it changes. And also to prevent Version.h.out being a required file, it will only be included if necessary (i.e. OFFICIAL_BUILD is off). Since the C preprocessor can't ignore non-existing include files and will always error on them, I wrapped the #include in an #ifdef VERSION_H_EXISTS, and CMake will add the VERSION_H_OUT_EXISTS define when generating Version.h.out. The wrapper is named Version.h, so any file that #includes the commit hash and date should #include Version.h instead of Version.h.out. As an added bonus, I've also made it so CMake will print "This is interim commit [HASH] (committed [DATE])" at configure time if the game is going to be compiled with an interim commit hash. Now, there is also the issue that the commit hash change will only be noticed in the first place if CMake needs to be re-ran for anything, but that's a less severe issue than requiring recompilation of 50(!) or so files.
2020-12-26 00:24:48 +01:00
src/Version.h.out
Optimize recompilation from changing commit hash This reworks how the commit hash and date are compiled so that if they're changed (and they're changed often), only one source file needs to be recompiled in order to update it everywhere in the game, no matter how many source files use the hash or date. The commit hash and date are now declared in InterimVersion.h (and they need `extern "C"` guards because otherwise it results in a link fail on MSVC because MSVC is stupid). To do this, what now happens is that upon every rebuild, InterimVersion.in.c is processed to create InterimVersion.out.c, then InterimVersion.out.c is compiled into its own static library that is then linked with VVVVVV. (Why didn't I just simply add it to the list of VVVVVV source files? Well, doing it _now_ does nothing because at that point the horse is already out of the barn, and the VVVVVV executable has already been declared, so I can't modify its sources. And I can't do it before either, because we depend on the VVVVVV executable existing to do the interim version logic. I could probably work around this by cleverly moving around lines, but that'd separate related logic from each other.) And yes, the naming convention has changed. Not only did I rename Version to InterimVersion (to clearly differentiate it from ReleaseVersion, which I'll be adding later), I also named the files InterimVersion.in.c and InterimVersion.out.c instead of InterimVersion.c.in and InterimVersion.c.out. I needed to put the file extension on the end because otherwise CMake wouldn't recognize what kind of language it is, and I mean like yeah duh of course it doesn't, my text editor doesn't recognize it either.
2022-08-23 06:21:23 +02:00
src/InterimVersion.out.c
# Game data
data.zip
# macOS files
.DS_Store