Build Instructions¶
The BDE repositories are built using a collection of CMake modules and python helpers. More detailed build examples can be found here:
Linux & MacOS¶
Prerequisites¶
BDE CMake build system requires following software to be preinstalled and configured on the system:
CMake (version 3.15 or later)
Python ( only for BDE wrappers )
pkg-config( For external dependencies resolution )Note
pkg-configis required to resolve external build dependencies for the high level BDE libraries. This tool is not required to buildbdeitself as it does not have external dependencies.
Download BDE tools¶
Clone the bde-tools repository:
$ git clone https://github.com/bloomberg/bde-tools.gitAdd the
<bde-tools>/binto thePATHenvironment variable:$ export PATH=<bde-tools>/bin:$PATHNote
Instead of adding
bde-tools/binto yourPATH, you can also execute the scripts frombde-tools/bindirectly.Verify that the build helpers can correctly detect C++ compilers installed in the system:
$ bbs_build_env list Avaliable compilers: 0: gcc-10.2.1 (default) Compiler type: gcc C compiler: /opt/bb/bin/gcc CXX compiler: /opt/bb/bin/g++ Toolchain: /bb/bde/bbshr/bde-tools/BdeBuildSystem/toolchains/linux/gcc-default.cmake Description: gcc-10.2.1
bbs_build_envwill detectgccandclangcompilers in the PATH environment on Unix.
Download BDE library¶
Clone the bde repository:
$ git clone https://github.com/bloomberg/bde.git $ cd bde
Set build environment¶
This command sets environment variables that define effective ufid/uplid, compiler and build directory for subsequent commands:
$ eval `bbs_build_env -u opt_64_cpp17`
Configure, build and install BDE¶
Configure the Cmake build system:
$ bbs_build configureBuild BDE libraries:
$ bbs_build buildBuild and run all BDE unit tests:
$ bbs_build build --test=runInstall BDE libraries and headers:
$ bbs_build --install_dir=/bde_install --prefix=/ install
Create an application¶
Usually, Bloomberg developers do not need to compile BDE libraries. Precompiled BDE libraries are available as dpkgs.
Create a sample application that initializes BALL logging system and logs “Hello, World!” message (
ball_init.cpp):#include <ball_log.h> #include <ball_loggermanager.h> #include <ball_loggermanagerconfiguration.h> #include <ball_streamobserver.h> #include <bsl_iostream.h> #include <bsl_memory.h> #include <unistd.h> using namespace BloombergLP; BALL_LOG_SET_NAMESPACE_CATEGORY("MAIN"); int main(int argc, char ** argv) { ball::LoggerManagerConfiguration configuration; configuration.setDefaultThresholdLevelsIfValid(ball::Severity::e_INFO); ball::LoggerManagerScopedGuard lmGuard(configuration); bsl::shared_ptr<ball::StreamObserver> observer = bsl::make_shared<ball::StreamObserver>(&bsl::cout); // Register file observer with the Logger Manager. ball::LoggerManager::singleton().registerObserver(observer, "default"); // Start logging. BALL_LOG_INFO << "Hello, World!"; return 0; }Create a sample
CMakeLists.txtfile:cmake_minimum_required (VERSION 3.15) project (ball_init) find_package(Threads REQUIRED) find_package(bal REQUIRED) find_package(bdl REQUIRED) find_package(bsl REQUIRED) add_executable(ball_init ball_init.cpp) target_link_libraries(ball_init bal bdl bsl Threads::Threads rt)Configure and build the application:
$ mkdir build $ cd build $ cmake -DCMAKE_PREFIX_PATH=/bde_install/lib64/ ../ $ cmake --build ./
Plain CMake build¶
BDE can be compiled without provided python tools with plain CMake. Commands provided here for illustration purposes only:
$ git clone https://github.com/bloomberg/bde-tools.git $ git clone https://github.com/bloomberg/bde.git $ mkdir build; cd build $ cmake -DBdeBuildSystem_DIR=../bde-tools/BdeBuildSystem/ \ -DCMAKE_TOOLCHAIN_FILE=../bde-tools/BdeBuildSystem/toolchains/linux/gcc-default.cmake \ -DCMAKE_BUILD_TYPE=Release -DBBS_ENV_MARKER=ON ../bde $ cmake --build ./Note
Compiling BDE with provided python wrappers is a preferred way of building BDE libraries.
Note
BBS_ENV_MARKER is a temporary variable to select bbs build system over the old one.
Windows¶
Prerequisites¶
BDE CMake build system requires following software to be preinstalled and configured on the system:
CMake (version 3.15 or later)
Git for Windows (recommended, provides the preferred “git bash” shell)
Python (version 3.x is recommended)
All commands shown below are executed from the Git Bash console.
Note
You might experience errors when using console different from Git bash.
Install Microsoft Visual Studio¶
When installing MSVC, make sure to check “MSVC v142 build tools” and “C++/CLI support for v142 build tools” under “Desktop development with C++”.
Download BDE tools¶
Clone the bde-tools repository:
$ git clone https://github.com/bloomberg/bde-tools.gitAdd the
<bde-tools>/binto thePATHenvironment variable:$ export PATH=<bde-tools>/bin:$PATHNote
Instead of adding
bde-tools/binto yourPATH, you can also execute the scripts frombde-tools/bindirectly.List installed compilers:
$ bbs_build_env list Available compilers: 0: msvc-2019 -- Visual Studio 2019 (Version 16) (default) CXX: None CC : None Toolchain: cl-default 1: msvc-2017 -- Visual Studio 2017 (Version 15) CXX: None CC : None Toolchain: cl-default
Download BDE library¶
Clone the bde repository:
$ git clone https://github.com/bloomberg/bde.git $ cd bde
Set build environment¶
This command sets environment variables that define effective ufid/uplid, compiler and build directory for subsequent commands:
$ eval `bbs_build_env -u opt_64_cpp17`
Configure, build and install BDE¶
Configure the CMake build system:
$ bbs_build configureNote
During this step CMake generates files for low-level build system. By default the low-level build system is Ninja. If you want to generate MSVC solution, add
-G msvcflag to configure command. This will generate bde.sln file that can be opened in the Visual Studio.Note
MSVC solution for BDE libraries tends to be very large due to inclusion of all the test binaries as individual projects. It is possible to limit the number of test drivers included in the solution by providing
--regexflag. For example--regex ballwill include only test drivers for ball package. This will significantly minimize the solution generation, load and build time.Build BDE libraries:
$ bbs_build buildBuild and run all BDE unit tests:
$ bbs_build build --test=runInstall BDE libraries and headers:
$ bbs_build --install_dir=/bde_install --prefix=/ install
Plain CMake build¶
BDE can be compiled without provided python tools with plain CMake. Commands provided here for illustration purposes only:
$ git clone https://github.com/bloomberg/bde-tools.git $ git clone https://github.com/bloomberg/bde.git $ mkdir build; cd build $ cmake -DBdeBuildSystem_DIR=../bde-tools/BdeBuildSystem/ -DCMAKE_TOOLCHAIN_FILE=../bde-tools/BdeBuildSystem/toolchains/win32/cl-default.cmake \ -DCMAKE_BUILD_TYPE=Release -DBBS_ENV_MARKER=ON ../bde $ cmake --build ./Note
Compiling BDE with provided python wrappers is a preferred way of building BDE libraries.