使用源码构建 OceanBase 数据库 
=========================================

通过源代码，您可以自行构建 OceanBase 数据库，并测试其最新特性。本文介绍如何通过源代码构建OceanBase 数据库。

前提条件 
-------------------------

在构建 OceanBase 数据库之前，确保您的构建机器满足以下要求：

* 操作系统：CentOS 7/8 (x86 架构)

  

* 机器数量：1 台

  

* 最低硬件规格：

  

* 推荐硬件规格：

  




获取源代码 
--------------------------

运行以下命令，克隆 OceanBase 数据库源代码到您的构建机器：

```shell
git clone git@${GIT_MIRROR_ADDRESS}/oceanbase/oceanbase
```


**注意**



克隆代码需要先安装配置 Git。详细信息，参考 [Git 文档](https://git-scm.com/doc)。

获取构建依赖 
---------------------------

您可以通过以下方式获取构建依赖：

* **方案一：** **使用 yum 源** **获取依赖包（推荐）**

  




构建过程中，您所依赖的大多数工具和库都可以通过公共yum源及 OceanBase 的官方 yum 源获取。如您的操作系统在我们的支持范围内，您可以通过我们预制的脚本，直接下载对应的软件包以节约您的构建时间

第一步、安装必要的工具

您需要提前准备好以下软件：

```bash
yum install wget rpm* cpio make glibc-devel glibc-headers
```



第二步、执行以下命令确认您的编译机可以访问OceanBase官方yum源

```shell
curl http://mirrors.aliyun.com/oceanbase/OceanBase.repo
```



第三步、执行初始化脚本，下载构建依赖

```shell
# 进入代码根目录
cd oceanbase

# 执行build.sh脚本并传入init参数
sh build.sh init
```





* **方案二：自行编译依赖** 

  您也可以在 `deps/3rd` 目录下自行编译依赖。构建软件要求见下表：
  

  |    **所** **需软** **件**     |  **推荐版本（最低版本）**  | **软件用途** | **提供依赖** | **必选** |
  |---------------------------|------------------|----------|----------|--------|
  | cmake                     | 3.20.0           | 构建工具     | 是        | 是      |
  | make                      | 3.8.2            | 构建工具     | 否        | 是      |
  | gcc                       | 5.2.0            | 构建工具/依赖库 | 是        | 是      |
  | llvm/clang/lld            | 11.0.1 (7.1.0)   | 构建工具     | 是        | 是      |
  | binutils                  | 2.30             | 构建工具     | 是        | 否      |
  | flex                      | 2.5.35           | 代码生成     | 是        | 仅开发    |
  | python2                   | 2.7(2.6)         | 代码生成     | 否        | 仅开发    |
  | bison                     | 2.4.1            | 代码生成     | 是        | 仅开发    |
  | ccache                    | 3.7.12           | 构建工具     | 是        | 否      |
  | isa-l                     | 2.22.0           | 依赖库      | 是        | 是      |
  | libaio                    | 0.3.112(0.3.109) | 依赖库      | 是        | 是      |
  | libcurl                   | 7.29.0           | 依赖库      | 是        | 是      |
  | libunwind                 | 1.5.0            | 依赖库      | 是        | 是      |
  | mariadb-connector-c       | 3.1.12           | 依赖库      | 是        | 是      |
  | openssl-static            | 1.0.1e           | 依赖库      | 是        | 是      |
  | glibc-devel/glibc-headers | 2.17             | 依赖库      | 否        | 是      |
  | oss-c-sdk                 | 3.9.2            | 依赖库      | 否        | 否      |
  | rpm\*                     | 4.14.1(4.11)     | 打包工具     | 否        | 仅打包    |

  




构建/打包 OceanBase 数据库 
----------------------------------------

OceanBase 数据库使用 CMake 作为构建工具，您可以直接使用 CMake 命令自行创建目录进行构建，也可以使用 `build.sh` 脚本使用预制的构建选项进行构建：

* DEBUG 构建

  ```shell
  # 在源码目录下执行debug版的预制构建命令
  sh build.sh debug
  
  # 进入生成的 debug 构建目录
  cd build_debug
  
  # 进行构建
  make -j{N} observer
  
  # 查看构建产物
  stat src/observer/observer
  ```

  

* RELEASE 构建

  ```shell
  # 在源码目录下执行 release 版的预制构建命令
  sh build.sh release
  
  # 进入生成的 release 构建目录
  cd build_release
  
  # 进行构建
  make -j{N} observer
  
  # 查看构建产物
  stat src/observer/observer
  ```

  

* 创建 RPM 包

  ```shell
  # 在源码目录下执行 rpm包 的预制构建命令
  sh build.sh rpm
  
  # 进入生成的 rpm 打包目录
  cd build_rpm
  
  # 构建 rpm 包依赖的文件
  make -j{N} rpm
  
  # 查看构建产物
  stat *rpm
  ```

  



**说明**



为加快构建速度，您可以使用 `-j` 参数并行构建。并行数量 `N` 建议为 min(CPU（Core）\* 2，内存（GB) / 2)。

构建选项说明 
---------------------------

构建参数说明见下表：


|          **构建选项**          |  **默认值**   |                 **软件用途**                 |
|----------------------------|------------|------------------------------------------|
| OB_USE_LLVM_LIBTOOLS       | ON         | 使用 llvm-ar/ld.lld 等作为库工具，关闭则使用 binutils。 |
| OB_USE_CLANG               | ON         | 使用 clang 作为编译器，关闭则使用gcc。                 |
| OB_COMPRESS_DEBUG_SECTIONS | OFF        | 压缩二进制中的 DEBUG SECTIONS。                  |
| OB_STATIC_LINK_LGPL_DEPS   | ON（打包时OFF） | 静态链接LGPL协议的依赖                            |
| OB_ENABLE_PCH              | ON         | 启用预编译头                                   |
| OB_ENALBE_UNITY            | ON         | 启用联合构建                                   |
| OB_USE_CCACHE              | OFF        | 启用编译缓存                                   |
| ENABLE_DEBUG_LOG           | OFF        | 开启调试日志。                                  |



后续操作 
-------------------------

您在成功构建 OceanBase 数据库之后，可以使用 OBD 部署 OceanBase 数据库。详细信息参考 [使用 OBD 部署 OceanBase 数据库](../2.quickstart/4.deploy-the-oceanbase-database-by-using-obd.md)。
























