Skip to content
Snippets Groups Projects
Forked from Kart Krew / RingRacers
Source project has a limited visibility.
  • James R.'s avatar
    d5c08ac0
    Backport 2021 SRB2 makefile overhaul · d5c08ac0
    James R. authored
    This is a squashed commit of the following commits from
    upstream:
    
    James R <justsomejames2@gmail.com> on 2021-05-01
    Commit 44d217807f71d15bd7ca69dad226458e7060ccab
    > Collect makefiles
    
    James R <justsomejames2@gmail.com> on 2021-05-04
    Commit f637e28d0c1877c44acd7b01f7130625d5ea4099
    > Remove bin, objs and dep directories
    
    James R <justsomejames2@gmail.com> on 2021-05-02
    Commit b31056c7d977fe3c2a5e0637589fd9521f1f6c04
    > Rewrite Makefile to be modular as well as more automated
    >
    > Some key points for programmers:
    > - Source code files are mostly listed in a 'Sourcefile'.
    >   So you no longer directly edit the object list. There
    >   can be multiple Sourcefiles and they can even live in
    >   subdirectories--the directory name will be prepended to
    >   every filename in the list. Of course, the Makefile
    >   still needs to be edited to read from each Sourcefile.
    > - Different rules are no longer required for source code
    >   files that live in subdirectories (such as sdl/ or
    >   hardware/). Subdirectories Just Work so go ham!
    >
    > In addition to those points, another important change is
    > that the bin directory is no longer divided into platform
    > subdirectories (Linux64, Mingw, etc). Executables now go
    > directly into bin. If you use DEBUGMODE or target 64-bit,
    > then subdirectories for 'debug' and '64' will be made
    > though.
    >
    > Oh by the way, I don't think make clean actually removed
    > files before on Windows. It should now. I also fixed as
    > many little inconsistencies like that as I noticed.
    >
    > And now just an overview of the technical aspects that
    > shouldn't affect anyone who doesn't REALLY care about the
    > Makefile...
    >
    > objs and dep directories have been moved to a make
    > directory. Makefile.cfg and its variants have been moved
    > out of their various subdirectories to src/Makefile.d
    > make distclean removes the bin and make directories
    > entirely, but make clean and cleandep still only affect
    > the current build target.
    >
    > When I say automation, I mean that a lot of copy pasting
    > in the Makefile has been reduced.
    
    James R <justsomejames2@gmail.com> on 2021-05-04
    Commit 53d1cbe8264196e46911c86bc4be13d44aa35dfe
    > Appveyor: update executable directory
    
    James R <justsomejames2@gmail.com> on 2021-05-04
    Commit 888073d64d1885cae0ad8b5d54bfec31e9793e0a
    > Fix make clean printing header
    
    James R <justsomejames2@gmail.com> on 2021-05-04
    Commit 3d7205d4942d1e1b2627fdf5acf9d9c82437a97b
    > Fix minor errors with Windows ECHO, DEL, MD
    >
    > - Quotes were not removed by ECHO.
    > - DEL would print an error on nonexistent file.
    > - MD would do this plus return a nonzero exit code.
    
    James R <justsomejames2@gmail.com> on 2021-05-05
    Commit f9813844e7f0dfa6229062b1ebd83e4e8150c120
    > Update CMakeLists.txt to use Sourcefiles
    >
    > This establishes (near) parity of source code file lists
    > between the Makefile and CMakeLists.txt
    >
    > To make that change I messed around CMakeLists.txt a bit.
    > It now uses target_sources and target_compile_definitions.
    > I also removed some MSVC stuff since we don't actually
    > care about MSVC--it made things easier.
    >
    > CMake minimum version 3.0 -> 3.13 for target_sources.
    
    James R <justsomejames2@gmail.com> on 2021-05-05
    Commit ec8b63d6759f0c124693ea6d5a521e8d82efd566
    > Makefile: remove last of unused flags
    
    James R <justsomejames2@gmail.com> on 2021-05-07
    Commit c06817d0085ee77b0027917bca91a24e60c7deba
    > Makefile: fix mingw/64 swapped with 32-bit
    
    James R <justsomejames2@gmail.com> on 2021-05-07
    Commit 9e7d80c2c44199126fa451c59fca0f98d23ad14d
    > Makefile: suppress DEL error
    
    James R <justsomejames2@gmail.com> on 2021-05-07
    Commit 87afa7655a71539c7cbc7db12df18c4253187fbc
    > CMake: fix ASM compile
    >
    > - target_sources from correct directory
    > - enable_language must be used in add_executable directory
    
    James R <justsomejames2@gmail.com> on 2021-05-08
    Commit 210c9419e4bddd1fe8e9be7cb66de31119fa0d68
    > Ignore -Wtrigraphs
    
    James R <justsomejames2@gmail.com> on 2021-06-16
    Commit 3a044e71cc7cf6c80d9836189511c1a58c108370
    > Disable EXE disassembly and compression by default
    >
    > NOOBJDUMP=1 and NOUPX=1 have been removed. Make 'dump'
    > target to disassemble. UPX=upx to compress executable.
    >
    > Setting UPX used to cause it to fail. That has been fixed.
    
    James R <justsomejames2@gmail.com> on 2021-06-16
    Commit c142b3241ddb8f1ea9b5090d20dffa43a17129ab
    > Makefile: alert full path of final executable
    >
    > With added textual contrast.
    
    James R <justsomejames2@gmail.com> on 2021-06-16
    Commit b04c79d8a7ba4ae8f888ab94d394b6714699e107
    > Say 'at'
    
    James R <justsomejames2@gmail.com> on 2021-06-21
    Commit 2d7a8c3c571bcc5335437e9db074c75af00408ce
    > Makefile: use shell commands to read in Sourcefile
    >
    > File function is not supported < Make 4.2.
    
    James R <justsomejames2@gmail.com> on 2021-06-21
    Commit d5146945a69ebf30e6fc1fbb64558e456e0b7459
    > Makefile: don't automatically set WINDOWSHELL unless PATH matches Windows norms
    >
    > This is for MSYS2, which requires unix shell commands.
    
    James R <justsomejames2@gmail.com> on 2021-06-22
    Commit 5f4d7e3c5b013afe03ae2a441c82ad79bae7c66c
    > Makefile: fail if old build directories exist
    >
    > After a checkout from before revision, old directories
    > such as bin/Linux64 only remain if untracked files exist
    > within. This may be confusing to the user. They may even
    > use an outdated executable if it is one of those untracked
    > files.
    
    James R <justsomejames2@gmail.com> on 2021-06-22
    Commit c3ad5de912fccfdd64c510f5684883afceaa7d36
    > Makefile: let variables be defined on Make line
    >
    > If a variable is defined as in 'make CC=gcc-10', then that
    > definition overrides anything other definition in the
    > Makefile.
    
    James R <justsomejames2@gmail.com> on 2021-06-22
    Commit ed85e994a46ace07cf022b38a9abac1698a8667e
    > Remove misplaced parentheses
    
    James R <justsomejames2@gmail.com> on 2021-06-29
    Commit c1ecfa306f6a0b168d4f6cbc3224ebebd4deec51
    > Makefile: 'dep' not 'deps'
    
    James R <justsomejames2@gmail.com> on 2021-06-29
    Commit 6c03f9b5b3590e01773f05bc1c31cc67a2d88fc2
    > fuck
    
    James R <justsomejames2@gmail.com> on 2021-06-29
    Commit abdf5c101cbe80657f210c0b90800e2c4c6f0c05
    > Makefile: report SHELL
    
    James R <justsomejames2@gmail.com> on 2021-06-29
    Commit 22ab611daa17bd23225f3afeeba39147c0d0fe17
    > Makefile: do not automatically set WINDOWSHELL
    >
    > According to this answer--
    > https://stackoverflow.com/a/45952425
    > --Make will always prefer a unix shell, even on Windows,
    > if one can be found in Path. So we can't check PATH to
    > determine if it's a Windows shell... this is just too much
    > bother.
    
    James R <justsomejames2@gmail.com> on 2021-06-29
    Commit f79e0ee540564fcec5da7c0dc4006906492a7f30
    > Appveyor: remove 64-bit target
    
    James R <justsomejames2@gmail.com> on 2021-06-29
    Commit faee657572f23cd6f8b68c077873e01c4278414e
    > Appveyor: update for new Makefile
    
    James R <justsomejames2@gmail.com> on 2021-06-29
    Commit 44b82dea58612e6f07830647e2b08555f54a7caa
    > Appveyor: remove redundant CFLAGS
    >
    > Also changed -Wno-error=implicit-fallthrough to
    > -Wno-implicit-fallthrough. For some reason Appveyor's
    > version of GCC is triggering these warnings despite the
    > comments, so just shut it up.
    
    James R <justsomejames2@gmail.com> on 2021-06-29
    Commit db919accd22350c087c1fd0e5122d8e490e2f171
    > Appveyor: suppress real time file names
    
    James R <justsomejames2@gmail.com> on 2021-07-12
    Commit 58fa44e8dc0444eecbe701f31872fad9fa563a6a
    > CMP0115
    
    SteelT <steeltitanium1@gmail.com> on 2021-07-16
    Commit 71f905f95bd4fe62dbca87208cf71b7309f12de1
    > Fix gme support being effectively disabled
    >
    > I found this easier than trying to adjust the makefile, as it uses the same thing to automatically generate the various NO* compile options.
    
    James R <justsomejames2@gmail.com> on 2021-08-14
    Commit 824b1ab28cdddfd1c018454a9af14dabaab49fcd
    > Makefile: use full stem in dependency generation
    >
    > Previously took only the filename, so the directory
    > component was stripped. This broke dependencies for
    > basically every file.
    
    GoldenTails <milestailsprower101n2@gmail.com> on 2021-08-28
    Commit 1a8ec7975c20e1d652cbbdb7a9e366192e41c05f
    > Makefile: Improve gcc detection
    >
    > Wasn't working for me until I fixed it.
    > Turns out gcc really doesn't like giving its name out.
    > Most of the time it reads argv[0].
    d5c08ac0
    History
    Backport 2021 SRB2 makefile overhaul
    James R. authored
    This is a squashed commit of the following commits from
    upstream:
    
    James R <justsomejames2@gmail.com> on 2021-05-01
    Commit 44d217807f71d15bd7ca69dad226458e7060ccab
    > Collect makefiles
    
    James R <justsomejames2@gmail.com> on 2021-05-04
    Commit f637e28d0c1877c44acd7b01f7130625d5ea4099
    > Remove bin, objs and dep directories
    
    James R <justsomejames2@gmail.com> on 2021-05-02
    Commit b31056c7d977fe3c2a5e0637589fd9521f1f6c04
    > Rewrite Makefile to be modular as well as more automated
    >
    > Some key points for programmers:
    > - Source code files are mostly listed in a 'Sourcefile'.
    >   So you no longer directly edit the object list. There
    >   can be multiple Sourcefiles and they can even live in
    >   subdirectories--the directory name will be prepended to
    >   every filename in the list. Of course, the Makefile
    >   still needs to be edited to read from each Sourcefile.
    > - Different rules are no longer required for source code
    >   files that live in subdirectories (such as sdl/ or
    >   hardware/). Subdirectories Just Work so go ham!
    >
    > In addition to those points, another important change is
    > that the bin directory is no longer divided into platform
    > subdirectories (Linux64, Mingw, etc). Executables now go
    > directly into bin. If you use DEBUGMODE or target 64-bit,
    > then subdirectories for 'debug' and '64' will be made
    > though.
    >
    > Oh by the way, I don't think make clean actually removed
    > files before on Windows. It should now. I also fixed as
    > many little inconsistencies like that as I noticed.
    >
    > And now just an overview of the technical aspects that
    > shouldn't affect anyone who doesn't REALLY care about the
    > Makefile...
    >
    > objs and dep directories have been moved to a make
    > directory. Makefile.cfg and its variants have been moved
    > out of their various subdirectories to src/Makefile.d
    > make distclean removes the bin and make directories
    > entirely, but make clean and cleandep still only affect
    > the current build target.
    >
    > When I say automation, I mean that a lot of copy pasting
    > in the Makefile has been reduced.
    
    James R <justsomejames2@gmail.com> on 2021-05-04
    Commit 53d1cbe8264196e46911c86bc4be13d44aa35dfe
    > Appveyor: update executable directory
    
    James R <justsomejames2@gmail.com> on 2021-05-04
    Commit 888073d64d1885cae0ad8b5d54bfec31e9793e0a
    > Fix make clean printing header
    
    James R <justsomejames2@gmail.com> on 2021-05-04
    Commit 3d7205d4942d1e1b2627fdf5acf9d9c82437a97b
    > Fix minor errors with Windows ECHO, DEL, MD
    >
    > - Quotes were not removed by ECHO.
    > - DEL would print an error on nonexistent file.
    > - MD would do this plus return a nonzero exit code.
    
    James R <justsomejames2@gmail.com> on 2021-05-05
    Commit f9813844e7f0dfa6229062b1ebd83e4e8150c120
    > Update CMakeLists.txt to use Sourcefiles
    >
    > This establishes (near) parity of source code file lists
    > between the Makefile and CMakeLists.txt
    >
    > To make that change I messed around CMakeLists.txt a bit.
    > It now uses target_sources and target_compile_definitions.
    > I also removed some MSVC stuff since we don't actually
    > care about MSVC--it made things easier.
    >
    > CMake minimum version 3.0 -> 3.13 for target_sources.
    
    James R <justsomejames2@gmail.com> on 2021-05-05
    Commit ec8b63d6759f0c124693ea6d5a521e8d82efd566
    > Makefile: remove last of unused flags
    
    James R <justsomejames2@gmail.com> on 2021-05-07
    Commit c06817d0085ee77b0027917bca91a24e60c7deba
    > Makefile: fix mingw/64 swapped with 32-bit
    
    James R <justsomejames2@gmail.com> on 2021-05-07
    Commit 9e7d80c2c44199126fa451c59fca0f98d23ad14d
    > Makefile: suppress DEL error
    
    James R <justsomejames2@gmail.com> on 2021-05-07
    Commit 87afa7655a71539c7cbc7db12df18c4253187fbc
    > CMake: fix ASM compile
    >
    > - target_sources from correct directory
    > - enable_language must be used in add_executable directory
    
    James R <justsomejames2@gmail.com> on 2021-05-08
    Commit 210c9419e4bddd1fe8e9be7cb66de31119fa0d68
    > Ignore -Wtrigraphs
    
    James R <justsomejames2@gmail.com> on 2021-06-16
    Commit 3a044e71cc7cf6c80d9836189511c1a58c108370
    > Disable EXE disassembly and compression by default
    >
    > NOOBJDUMP=1 and NOUPX=1 have been removed. Make 'dump'
    > target to disassemble. UPX=upx to compress executable.
    >
    > Setting UPX used to cause it to fail. That has been fixed.
    
    James R <justsomejames2@gmail.com> on 2021-06-16
    Commit c142b3241ddb8f1ea9b5090d20dffa43a17129ab
    > Makefile: alert full path of final executable
    >
    > With added textual contrast.
    
    James R <justsomejames2@gmail.com> on 2021-06-16
    Commit b04c79d8a7ba4ae8f888ab94d394b6714699e107
    > Say 'at'
    
    James R <justsomejames2@gmail.com> on 2021-06-21
    Commit 2d7a8c3c571bcc5335437e9db074c75af00408ce
    > Makefile: use shell commands to read in Sourcefile
    >
    > File function is not supported < Make 4.2.
    
    James R <justsomejames2@gmail.com> on 2021-06-21
    Commit d5146945a69ebf30e6fc1fbb64558e456e0b7459
    > Makefile: don't automatically set WINDOWSHELL unless PATH matches Windows norms
    >
    > This is for MSYS2, which requires unix shell commands.
    
    James R <justsomejames2@gmail.com> on 2021-06-22
    Commit 5f4d7e3c5b013afe03ae2a441c82ad79bae7c66c
    > Makefile: fail if old build directories exist
    >
    > After a checkout from before revision, old directories
    > such as bin/Linux64 only remain if untracked files exist
    > within. This may be confusing to the user. They may even
    > use an outdated executable if it is one of those untracked
    > files.
    
    James R <justsomejames2@gmail.com> on 2021-06-22
    Commit c3ad5de912fccfdd64c510f5684883afceaa7d36
    > Makefile: let variables be defined on Make line
    >
    > If a variable is defined as in 'make CC=gcc-10', then that
    > definition overrides anything other definition in the
    > Makefile.
    
    James R <justsomejames2@gmail.com> on 2021-06-22
    Commit ed85e994a46ace07cf022b38a9abac1698a8667e
    > Remove misplaced parentheses
    
    James R <justsomejames2@gmail.com> on 2021-06-29
    Commit c1ecfa306f6a0b168d4f6cbc3224ebebd4deec51
    > Makefile: 'dep' not 'deps'
    
    James R <justsomejames2@gmail.com> on 2021-06-29
    Commit 6c03f9b5b3590e01773f05bc1c31cc67a2d88fc2
    > fuck
    
    James R <justsomejames2@gmail.com> on 2021-06-29
    Commit abdf5c101cbe80657f210c0b90800e2c4c6f0c05
    > Makefile: report SHELL
    
    James R <justsomejames2@gmail.com> on 2021-06-29
    Commit 22ab611daa17bd23225f3afeeba39147c0d0fe17
    > Makefile: do not automatically set WINDOWSHELL
    >
    > According to this answer--
    > https://stackoverflow.com/a/45952425
    > --Make will always prefer a unix shell, even on Windows,
    > if one can be found in Path. So we can't check PATH to
    > determine if it's a Windows shell... this is just too much
    > bother.
    
    James R <justsomejames2@gmail.com> on 2021-06-29
    Commit f79e0ee540564fcec5da7c0dc4006906492a7f30
    > Appveyor: remove 64-bit target
    
    James R <justsomejames2@gmail.com> on 2021-06-29
    Commit faee657572f23cd6f8b68c077873e01c4278414e
    > Appveyor: update for new Makefile
    
    James R <justsomejames2@gmail.com> on 2021-06-29
    Commit 44b82dea58612e6f07830647e2b08555f54a7caa
    > Appveyor: remove redundant CFLAGS
    >
    > Also changed -Wno-error=implicit-fallthrough to
    > -Wno-implicit-fallthrough. For some reason Appveyor's
    > version of GCC is triggering these warnings despite the
    > comments, so just shut it up.
    
    James R <justsomejames2@gmail.com> on 2021-06-29
    Commit db919accd22350c087c1fd0e5122d8e490e2f171
    > Appveyor: suppress real time file names
    
    James R <justsomejames2@gmail.com> on 2021-07-12
    Commit 58fa44e8dc0444eecbe701f31872fad9fa563a6a
    > CMP0115
    
    SteelT <steeltitanium1@gmail.com> on 2021-07-16
    Commit 71f905f95bd4fe62dbca87208cf71b7309f12de1
    > Fix gme support being effectively disabled
    >
    > I found this easier than trying to adjust the makefile, as it uses the same thing to automatically generate the various NO* compile options.
    
    James R <justsomejames2@gmail.com> on 2021-08-14
    Commit 824b1ab28cdddfd1c018454a9af14dabaab49fcd
    > Makefile: use full stem in dependency generation
    >
    > Previously took only the filename, so the directory
    > component was stripped. This broke dependencies for
    > basically every file.
    
    GoldenTails <milestailsprower101n2@gmail.com> on 2021-08-28
    Commit 1a8ec7975c20e1d652cbbdb7a9e366192e41c05f
    > Makefile: Improve gcc detection
    >
    > Wasn't working for me until I fixed it.
    > Turns out gcc really doesn't like giving its name out.
    > Most of the time it reads argv[0].