I ended up solving my issue by using the GitSCM checkout with submodules disabled for the super project and then calling for a submodule update manually (required a credential helper on my build machine). Something like...
checkout([
$class: 'GitSCM',
branches: [[name: "<Branch Name>"]],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'LocalBranch']] + [[$class: 'SubmoduleOption',
disableSubmodules: true,
parentCredentials: true,
recursiveSubmodules: false,
reference: '', trackingSubmodules: false]],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: '<ID>',
url: '<url>']]
])
// Manual submodule update
git submodule update --init --recursive
Just out of curiosity I've taken a look at what happens under the hood, and I've used [dtruss/strace][1] on each test.
C++
./a.out < in
Saw 6512403 lines in 8 seconds. Crunch speed: 814050
syscalls `sudo dtruss -c ./a.out < in`
CALL COUNT
__mac_syscall 1
<snip>
open 6
pread 8
mprotect 17
mmap 22
stat64 30
read_nocancel 25958
Python
./a.py < in
Read 6512402 lines in 1 seconds. LPS: 6512402
syscalls `sudo dtruss -c ./a.py < in`
CALL COUNT
__mac_syscall 1
<snip>
open 5
pread 8
mprotect 17
mmap 21
stat64 29
[1]: http://en.wikipedia.org/wiki/Strace