this is a wip pr for review. the primary goal of this patch is to support cmake builds with git submodules to enable smf to work well in c++/cmake project workflows. it also includes some clean-up of existing cmake files.
this patch set can test builds and unit tests on {sid,stretch,buster,artful,zesty,fc25,fc26,fc27}
x {makefiles, ninja}
x {gcc, clang}
. it's been tested with everything except clang since Seastar is having some issues there. you can run all of these configurations with:
git submodule update --init --recursive
ci/local.sh
it'd be great to get some early feedback, and testing with existing workflows.
dependencies
the deps that were handled by ansible roles are now included as sub-modules and built with cmake, provided that support isn't already available in the a target distribution. this includes zstd, xxhash, flat buffers, google test, HDR histogram, and fast range.
several of the deps handled by ansible did not seem to be used (e.g. roaring bitmaps, afl, pmem, etc...), so those can be added back later, or in case I missed something or they are used in separate workflows.
I didn't run into any issues with versions of boost, so there is no special handling there.
questions/remaining
-
some ansible deps like cpplint aren't setup yet. it isn't strictly needed for the build, so that can added that back in, or maybe just use ansible to do the release builds when cpplint can be applied?
-
the biggest thing left to do is get the cmake branch merged upstream in Seastar. Currently this PR points to some patches on top of a cmake branch maintained by a scylla developer. I suspect it won't be too long before that get merged.
-
packaging. I didn't do anything with cpack. is that something that is currently in use? I'm not very familiar with cpack, but it seemed to still produce src packages. adding explicit rpm/deb packaging isn't too hard, but maybe out of scope at the moment.
that's all I can think of right now.
update 1 (done)
- all of the build configurations can be run in parallel on semaphore ci, I presume. I do this with another project and its been incredibly helpful at catching early issues (https://github.com/noahdesu/zlog/blob/master/.travis.yml#L23). I don't have any experience setting up semaphore ci.
update 2 (done)
- the sanitizer stuff is missing
update 3 (done)
make sure that release/package/etc.. script are working on the new build
update 4 (done)
.common_build.sh can be deleted i think. just gets the nprocs