Skip to content

Commit

Permalink
build.sh init 依赖sudo命令 (#445)
Browse files Browse the repository at this point in the history
### What problem were solved in this pull request?

close #330 

Problem:
普通用户,没有sudo权限,在执行build.sh init时需要使用sudo,才能把依赖安装到系统目录。

### What is changed and how it works?
默认将第三方依赖安装到deps/3rd/usr/local下,编译miniob时,
在CMakeLists.txt文件中增加变量 CMAKE_PREFIX_PATH=deps/3rd/usr/local。

在构建docker镜像时,第三方依赖库还是安装在系统目录中,以防用户使用docker镜像时误删除自己的代码目录,在Dockerfile中使用下面的方式安装第三方依赖:
```bash
THIRD_PARTY_INSTALL_PREFIX=/usr/local bash build.sh init
```
使用 `THIRD_PARTY_INSTALL_PREFIX` 指定依赖安装的目录。
  • Loading branch information
hnwyllmm authored Nov 14, 2024
1 parent 4d90aee commit d0bae1b
Show file tree
Hide file tree
Showing 10 changed files with 30 additions and 30 deletions.
18 changes: 7 additions & 11 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
./deps/3rd
./deps/libevent
./deps/googletest
./deps/jsoncpp
./deps/benchmark
deps/3rd/*
.vscode
!.vscode/tasks.json
!.vscode/launch.json
.VSCodeCounter/*
./docs/doxy/
docs/doxy/
build/*
build_*
cmake-build-*/*
Expand All @@ -17,11 +13,11 @@ build
.idea
.ccls-cache
compile_commands.json
./.name
./miniob.iml
./vcs.xml
./workspace.xml
./modules.xml
.name
miniob.iml
vcs.xml
workspace.xml
modules.xml
GRTAGS
GPATH
GTAGS
Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ MESSAGE(STATUS "This is Project source dir " ${PROJECT_SOURCE_DIR})
MESSAGE(STATUS "This is PROJECT_BINARY_DIR dir " ${PROJECT_BINARY_DIR})

SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

SET(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};${PROJECT_SOURCE_DIR}/deps/3rd/usr/local")
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)

# 设置默认构建类型为 Debug
Expand Down
2 changes: 1 addition & 1 deletion benchmark/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ FOREACH (F ${ALL_SRC})
get_filename_component(prjName ${F} NAME_WE)
MESSAGE("Build ${prjName} according to ${F}")
ADD_EXECUTABLE(${prjName} ${F})
TARGET_LINK_LIBRARIES(${prjName} common pthread dl benchmark)
TARGET_LINK_LIBRARIES(${prjName} common pthread dl benchmark::benchmark)
if(NOT ${prjName} STREQUAL "memtracer_performance_test")
TARGET_LINK_LIBRARIES(${prjName} observer_static)
endif()
Expand Down
15 changes: 9 additions & 6 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@
TOPDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)

BUILD_SH=$TOPDIR/build.sh
echo "THIRD_PARTY_INSTALL_PREFIX is ${THIRD_PARTY_INSTALL_PREFIX:=$TOPDIR/deps/3rd/usr/local}"

CMAKE_COMMAND="cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 --log-level=STATUS"
CMAKE_COMMAND_THIRD_PARTY="$CMAKE_COMMAND -DCMAKE_INSTALL_PREFIX=$THIRD_PARTY_INSTALL_PREFIX"
CMAKE_COMMAND_MINIOB="$CMAKE_COMMAND"

ALL_ARGS=("$@")
BUILD_ARGS=()
Expand Down Expand Up @@ -80,31 +83,31 @@ function do_init
cd ${TOPDIR}/deps/3rd/libevent && \
mkdir -p build && \
cd build && \
${CMAKE_COMMAND} .. -DEVENT__DISABLE_OPENSSL=ON -DEVENT__LIBRARY_TYPE=BOTH && \
${CMAKE_COMMAND_THIRD_PARTY} .. -DEVENT__DISABLE_OPENSSL=ON -DEVENT__LIBRARY_TYPE=BOTH && \
${MAKE_COMMAND} -j4 && \
make install

# build googletest
cd ${TOPDIR}/deps/3rd/googletest && \
mkdir -p build && \
cd build && \
${CMAKE_COMMAND} .. && \
${CMAKE_COMMAND_THIRD_PARTY} .. && \
${MAKE_COMMAND} -j4 && \
${MAKE_COMMAND} install

# build google benchmark
cd ${TOPDIR}/deps/3rd/benchmark && \
mkdir -p build && \
cd build && \
${CMAKE_COMMAND} .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBENCHMARK_ENABLE_TESTING=OFF -DBENCHMARK_INSTALL_DOCS=OFF -DBENCHMARK_ENABLE_GTEST_TESTS=OFF -DBENCHMARK_USE_BUNDLED_GTEST=OFF -DBENCHMARK_ENABLE_ASSEMBLY_TESTS=OFF && \
${CMAKE_COMMAND_THIRD_PARTY} .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBENCHMARK_ENABLE_TESTING=OFF -DBENCHMARK_INSTALL_DOCS=OFF -DBENCHMARK_ENABLE_GTEST_TESTS=OFF -DBENCHMARK_USE_BUNDLED_GTEST=OFF -DBENCHMARK_ENABLE_ASSEMBLY_TESTS=OFF && \
${MAKE_COMMAND} -j4 && \
${MAKE_COMMAND} install

# build jsoncpp
cd ${TOPDIR}/deps/3rd/jsoncpp && \
mkdir -p build && \
cd build && \
${CMAKE_COMMAND} -DJSONCPP_WITH_TESTS=OFF -DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF .. && \
${CMAKE_COMMAND_THIRD_PARTY} -DJSONCPP_WITH_TESTS=OFF -DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF .. && \
${MAKE_COMMAND} && \
${MAKE_COMMAND} install

Expand Down Expand Up @@ -137,8 +140,8 @@ function do_build
{
TYPE=$1; shift
prepare_build_dir $TYPE || return
echo "${CMAKE_COMMAND} ${TOPDIR} $@"
${CMAKE_COMMAND} -S ${TOPDIR} $@
echo "${CMAKE_COMMAND_MINIOB} ${TOPDIR} $@"
${CMAKE_COMMAND_MINIOB} -S ${TOPDIR} $@
}

function do_clean
Expand Down
2 changes: 1 addition & 1 deletion docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ RUN apt-get install -y openssh-server
# init miniob dependencies
RUN git clone https://github.com/oceanbase/miniob /tmp/miniob \
&& cd /tmp/miniob \
&& bash build.sh init \
&& THIRD_PARTY_INSTALL_PREFIX=/usr/local bash build.sh init \
&& rm -rf /tmp/miniob

RUN mkdir /var/run/sshd
Expand Down
10 changes: 6 additions & 4 deletions docs/docs/how_to_build.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,17 @@ MiniOB 需要使用:
bash build.sh init
```

脚本将自动拉取依赖库(可以参考 .gitmodules) 然后编译安装到系统目录
脚本将自动拉取依赖库(可以参考 .gitmodules) 然后编译安装到miniob源码目录的 `deps/3rd/usr/local`

如果执行用户不是root,需要在命令前加上 `sudo`
如果你想将第三方依赖安装到其它目录,比如 `/usr/local` 下,可以这样做

```bash
sudo bash build.sh init
THIRD_PARTY_INSTALL_PREFIX=/usr/local bash build.sh init
```

> 如果使用 GitPod 开发,可以跳过这步,会自动执行。
> 注意:安装到系统目录可能需要一些特殊权限,可能需要使用 `sudo` 来执行命令。
> 如果使用 GitPod、GitHub Devcontainer 或 miniob docker 容器开发,可以跳过这步,会自动执行。
## 2. 编译

Expand Down
5 changes: 2 additions & 3 deletions src/observer/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,9 @@ ENDFOREACH (F)

SET(LIBEVENT_STATIC_LINK TRUE)
FIND_PACKAGE(Libevent CONFIG REQUIRED)
FIND_PACKAGE(jsoncpp CONFIG REQUIRED)

# JsonCpp cannot work correctly with FIND_PACKAGE

SET(LIBRARIES common pthread dl libevent::core libevent::pthreads libjsoncpp.a)
SET(LIBRARIES common pthread dl libevent::core libevent::pthreads JsonCpp::JsonCpp)

# 指定目标文件位置
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
Expand Down
2 changes: 1 addition & 1 deletion unittest/common/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ FOREACH (F ${ALL_SRC})
get_filename_component(prjName ${F} NAME_WE)
MESSAGE("Build ${prjName} according to ${F}")
ADD_EXECUTABLE(${prjName} ${F})
TARGET_LINK_LIBRARIES(${prjName} common pthread dl gtest gtest_main)
TARGET_LINK_LIBRARIES(${prjName} common pthread dl GTest::gtest_main)
add_test(NAME ${prjName} COMMAND ${prjName})
ENDFOREACH (F)
2 changes: 1 addition & 1 deletion unittest/memtracer/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ FOREACH (F ${ALL_SRC})
get_filename_component(prjName ${F} NAME_WE)
MESSAGE("Build ${prjName} according to ${F}")
ADD_EXECUTABLE(${prjName} ${F})
TARGET_LINK_LIBRARIES(${prjName} pthread dl gtest gtest_main memtracer)
TARGET_LINK_LIBRARIES(${prjName} pthread dl GTest::gtest_main memtracer)
add_test(NAME ${prjName} COMMAND ${prjName})
ENDFOREACH (F)
2 changes: 1 addition & 1 deletion unittest/observer/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ FOREACH (F ${ALL_SRC})
get_filename_component(prjName ${F} NAME_WE)
MESSAGE("Build ${prjName} according to ${F}")
ADD_EXECUTABLE(${prjName} ${F})
TARGET_LINK_LIBRARIES(${prjName} common pthread dl gtest gtest_main observer_static)
TARGET_LINK_LIBRARIES(${prjName} common pthread dl GTest::gtest_main observer_static)
add_test(NAME ${prjName} COMMAND ${prjName})
ENDFOREACH (F)

0 comments on commit d0bae1b

Please sign in to comment.