Building bro 2.6 with static broker/caf libraries

I've read up on cmake variable scope but I can't figure out how to build bro with static libraries. The bro-bundled caf already has CAF_BUILD_STATIC_ONLY which I'm pretty sure works but I'm unable to turn it on when building caf as part of a bro build.

For example I'd like is to optionally (i.e. from a -D argument to cmake itself) be able to turn on CAF_BUILD_STATIC_ONLY for aux/broker/3rdparty/caf/CMakeLists.txt but nothing I've tried in the top level CMakeLists.txt is seen when the caf CMakeLists.txt is being evaluated.

(I'm working on updating the FreeBSD port to 2.6 and can't install things like libcaf_io.so in /usr/local/lib because they conflict with libraries potentially installed by the devel/caf port.)

    Craig

Johanna has been working on this recently. We may end up needing to do a minor release update just to fix this because it appears that it's going to be a bit of a packaging problem on a number of OSs and distros otherwise.

   .Seth

What's the version of the CAF port? If it's recent, Bro should be able
to link against that.

Robin

Hi Craig,

I actually recently started working on this, however I am did not quite
look at what you want.

There already is a branch called topic/johanna/static, which now makes
--build-static(-only) work for broker whan CAF is built statically - it
does not yet pass the static flags through to broker; I actually wanted to
take a look at that today.

I will let you know when I make progress there :slight_smile:

Johanna

Hi Craig,

I pushed another commit to the branch that passes --build-static-only through
to CAF; if you just want the patch for that it is available at
https://github.com/zeek/broker/commit/bf03a4246113c72d10530cc0c2729a3fa6f0b046.

(Note that repositories are currently being migrated; if you pull it from
somewhere make sure that you actually have that commit in the branch)

Johanna

In case it is helpful, here is the script I used to build all static bro (without any shared libraries)

cd bro

mkdir buildcaf
cd buildcaf
cmake -DCAF_NO_UNIT_TESTS=1 -DCAF_NO_EXAMPLES=1 -DCAF_BUILD_STATIC_ONLY=1 ../aux/broker/3rdparty/caf/
make
make install || true
cd ..

mkdir build
cd build
cmake -DDISABLE_PYTHON_BINDINGS=1 -DENABLE_STATIC_ONLY=1 -DCAF_ROOT_DIR=../buildcaf ..
make
make install

It needed also a small patch to bro, which comes afterwards


**diff --git a/CMakeLists.txt b/CMakeLists.txt**
**index 452f2834c..c8039f8da 100644**
**--- a/CMakeLists.txt**
**+++ b/CMakeLists.txt**
@@ -268,7 +268,11 @@ install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake DESTINATION share/bro
## Recurse on sub-directories

add_subdirectory(aux/broker)
-set(brodeps ${brodeps} broker)
+if (ENABLE_STATIC_ONLY)
+ set(brodeps ${brodeps} broker_static)
+else ()
+ set(brodeps ${brodeps} broker)
+endif ()
include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/aux/broker
${CMAKE_CURRENT_BINARY_DIR}/aux/broker)
include_directories(BEFORE ${CAF_INCLUDE_DIR_CORE})

FYI - there now also is a topic/johanna/static branch in the base
repository, which adds a --enable-static-broker flag that automatically
builds/links static broker/caf against Bro.

Pull request in https://github.com/zeek/zeek/pull/224.

Johanna