RimWorldCCLTeam / CommunityCoreLibrary

For full details see the official Ludeon Forums thread.
https://ludeon.com/forums/index.php?topic=16599.0
The Unlicense
60 stars 27 forks source link

Simplify/Cross-Platform-ize Build #177

Closed etinquis closed 7 years ago

etinquis commented 7 years ago

Includes #175 The additional changes here remove the need for InjectModuleInitialize.exe and manually setting up the PostBuild.bats. All that should be necessary to get the build up-and-running from a fresh repo clone is to copy the necessary dlls into the ThirdParty folder and restore the NuGet packages.

These changes remove the automatic copying of dlls into the RimWorld mods folder directly, they just get copied into _Mod. What I've done locally for development purposes as a replacement is create symbolic links(1). This keeps the 'mod' in the RimWorld Mods folder updated without unnecessary copying. It's also helpful when you have multiple RimWorld versions to test against, as you can have two symlinks point to the same place.

In addition, these changes allow building on OSX in Xamarin Studio (I assume it'll work the same in MonoDevelop, if you have that). To achieve that, I found a NuGet package that replaces InjectModuleInitializer.exe and I replaced the batch scripts with msbuild commands in the csprojs.

(1) Symbolic links can be setup with the following console commands:

Windows

In a console window run as Administrator inside the RimWorld Mods directory: mklink /D "{ModName}" "C:\Path\To\CommunityCoreLibraryRepo\_Mod\{ModType}\{ModName}" In my case: mklink /D CCL "C:\Users\etinquis\Projects\CommunityCoreLibrary\_Mod\User Release\Community Core Library"

OSX and very probably Linux

In a console window inside the RimWorld Mods directory: ln -s "/path/to/CommunityCoreLibraryRepo/_Mod/{ModType}/{ModName}" "{ModName}" In my case: ln -s "/Users/etinquis/Projects/CommunityCoreLibrary/_Mod/User Release/Community Core Library" CCL

Tonweight commented 7 years ago

symlink needed for the "mod tweaks" project, too?

etinquis commented 7 years ago

Yeah, any of the mod folders that you want to load in the game. You would just substitute {ModName} in the examples for Community Core Library - Mod Tweaks or Community Core Library - Vanilla Tweaks.

DingoDjango commented 7 years ago

Are you using Zhentar's forked tool to simplify making these pulls? https://ludeon.com/forums/index.php?topic=16599.msg265091#msg265091

etinquis commented 7 years ago

@FudgePoly No, the changes from #175 were made with very little decompilation/analysis at all (https://github.com/RimWorldCCLTeam/CommunityCoreLibrary/pull/175#issuecomment-245957535).

The additional changes in this pull request don't include anything that would benefit from a decompiler; it's just build process changes for the project itself.

ForsakenShell commented 7 years ago

The post build process is also doing local copies for individual developers. It can't be merged into the main build process. That being said, I'll look into the the module initializer nuget to see what it's doing and if it performs the functions needed.

etinquis commented 7 years ago

@ForsakenShell Can you expand on what you mean re: local copies for individual developers? Did you mean things that aren't in PostBuild.txt?

ForsakenShell commented 7 years ago

They are in your local PostBuilt.bat (which is a copy of PostBuild.txt). Putting any local copies in the .csproj file will mean that it would attempt those copies on all developers machines. Further, the PostBuild process is there for future expansion and was deliberately set up like it is. We will not be removing that particular step in the build process.