I have a large code base under source control (was subversion, now git). To compile the code and run the tests I use a set of 3rd party libraries. These libraries can be div
We have gone for a variant of your option 3. Option 1 seems to me to be equivalent to Option 3, but with more implementation/testing effort on your part and hence more potential to go wrong.
Ultimately, if you want to be able to exactly re-create a build, you'll need your externals (including binaries) to be versioned along with the code itself and hosted locally. And git submodules will do a good job of doing this for you.