Daemon
Daemon copied to clipboard
cmake: make DaemonPlatform/Architecture/Compiler/BuildInfo autonomous and reusable
Some revamp of the DaemonPlatform/DaemonArchitecture/DaemonCompiler/DaemonBuildInfo helper code for CMake.
I want this framework to be reusable for other projects, the first user outside of the engine may be the NaCl loader itself, and I may use it for NetRadiant as well at some point. So I made the code fully autonomous and contained in a single folder (so it can be copied and kept it sync easily).
It happens that the endian stuff we did in the DaemonCompiler code using Endian.h was useless (it was not doing better than what the qprocessordetection.h code does anyway), so I removed it.
I also renamed GAME_PIE to NACL_PIE because it's an NaCl option, it was named GAME_PIE because we only build games as NaCl, but for a self-contained framework we better name the NaCl option NACL. For now this code sets GAME_PIE to the NACL_PIE value but once the game is modified to use NACL_PIE the code setting the GAME_PIE alias will be deleted.
Why would we need a variable called NACL_PIE? There is no PIE for NaCl and never will be.
I want this framework to be reusable for other projects
Note that some of the facilities here duplicate CMake built-in functionality, or have more fully developed alternatives available from other projects. Effort is likely to be wasted in such cases:
- For
daemon_write_generated(file.cpp ${contents}), CMake'sfile(GENERATED OUTPUT file.cpp CONTENTS ${contents})is a drop-in replacement, modulodaemon_write_generatedadding stuff to the path name. See theslipher/cmake-filegeneratedbranch. - The build info stuff largely duplicates the functionality of CMake's
configure_file. - For a platform-independent resource compiler implemented as CMake script / embedding files (though that's not actually part of this PR currently), there is https://github.com/vector-of-bool/cmrc
DaemonArchitecture looks most likely to be useful. I think I saw a similar thing with SDL, but Daemon's looked more complete.
Why would we need a variable called NACL_PIE? There is no PIE for NaCl and never will be.
Well maybe I'm wrong about that: the native_client scons build has a nacl_pic option. It has an effect only for PNaCl toolchains, not Saigo.
Then again, there is a comment explaining that it is not useful:
# Since PNaCl has no reason to generate PIC at all until there is some
# form of ELF shared object support (if that ever happens at all),
# perhaps we'll never really need to test this.
Also there is another comment confirming that Saigo does not have PIC.