From d76ff542ad40087fb9fa65474668631668a5c857 Mon Sep 17 00:00:00 2001 From: ZhaoMing Date: Fri, 18 Jun 2021 22:05:43 +0800 Subject: [PATCH] Refine third-party/CMakeLists.txt --- third-party/CMakeLists.txt | 126 +++++++++++++++++++++---------------- 1 file changed, 73 insertions(+), 53 deletions(-) diff --git a/third-party/CMakeLists.txt b/third-party/CMakeLists.txt index 7016fe4fe..35cc2ba68 100644 --- a/third-party/CMakeLists.txt +++ b/third-party/CMakeLists.txt @@ -27,36 +27,42 @@ IF(WITH_SNAPPY) MESSAGE("[terarkdb/third-party] snappy target not exist, let's build it!") ExternalProject_Add(snappy-project SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/snappy - CONFIGURE_COMMAND rm -rf build && mkdir -p build - BUILD_IN_SOURCE 1 - BUILD_COMMAND cd build && cmake ../ -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DCMAKE_INSTALL_LIBDIR=${CMAKE_BINARY_DIR}/lib -DCMAKE_BUILD_TYPE=Release -DSNAPPY_BUILD_TESTS=OFF -DHAVE_LIBLZO2=OFF && make -j $(nproc) - INSTALL_COMMAND cd build && ls -l && make install && cd ../ && rm -rf build) + CONFIGURE_COMMAND cmake ${CMAKE_CURRENT_SOURCE_DIR}/snappy -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DCMAKE_INSTALL_LIBDIR=${CMAKE_BINARY_DIR}/lib -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS=-fPIC -DCMAKE_CXX_FLAGS=-fPIC -DSNAPPY_BUILD_TESTS=OFF -DHAVE_LIBLZO2=OFF -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE_MAKEFILE} + BUILD_IN_SOURCE 0 + BUILD_COMMAND $(MAKE) + INSTALL_COMMAND $(MAKE) install + ) ADD_LIBRARY(snappy STATIC IMPORTED GLOBAL) ADD_DEPENDENCIES(snappy snappy-project) SET_TARGET_PROPERTIES(snappy PROPERTIES IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libsnappy.a - INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/include) + INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/include + POSITION_INDEPENDENT_CODE ON + ) ENDIF() ENDIF() # Bytedance Internal Metrics Library IF(WITH_BYTEDANCE_METRICS) IF(TARGET metrics2) - MESSAGE("[terarkdb/third-party] bytedance_metrics2 target exist, re-use it!") - ELSE() - MESSAGE("[terarkdb/third-party] bytedance_metrics2 target not exist, let's build it!") - ExternalProject_Add(metrics2-project - SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/metrics2-cmake - CONFIGURE_COMMAND rm -rf cmake-build && mkdir -p cmake-build && mkdir -p ${CMAKE_BINARY_DIR}/lib - BUILD_IN_SOURCE 1 - BUILD_COMMAND cd cmake-build && cmake ../ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} && make -j $(nproc) - # metrics2 doesn't have a install instruction, so we have to manully install it - INSTALL_COMMAND cp cmake-build/libmetrics2.a ${CMAKE_BINARY_DIR}/lib/) - ADD_LIBRARY(metrics2 STATIC IMPORTED GLOBAL) - ADD_DEPENDENCIES(metrics2 metrics2-project) - SET_TARGET_PROPERTIES(metrics2 PROPERTIES - IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libmetrics2.a - INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/metrics2-cmake/) + MESSAGE("[terarkdb/third-party] bytedance_metrics2 target exist, re-use it!") + ELSE() + MESSAGE("[terarkdb/third-party] bytedance_metrics2 target not exist, let's build it!") + ExternalProject_Add(metrics2-project + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/metrics2-cmake + CONFIGURE_COMMAND cmake ${CMAKE_CURRENT_SOURCE_DIR}/metrics2-cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS=-fPIC -DCMAKE_CXX_FLAGS=-fPIC -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE_MAKEFILE} + BUILD_IN_SOURCE 0 + BUILD_COMMAND $(MAKE) + # metrics2 doesn't have a install instruction, so we have to manully install it + INSTALL_COMMAND cp libmetrics2.a ${CMAKE_BINARY_DIR}/lib + ) + ADD_LIBRARY(metrics2 STATIC IMPORTED GLOBAL) + ADD_DEPENDENCIES(metrics2 metrics2-project) + SET_TARGET_PROPERTIES(metrics2 PROPERTIES + IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libmetrics2.a + INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/metrics2-cmake + POSITION_INDEPENDENT_CODE ON + ) ENDIF() ENDIF() @@ -68,16 +74,18 @@ IF(WITH_ZLIB) MESSAGE("[terarkdb/third-party] zlib target not exist, let's build it!") ExternalProject_Add(zlib-project SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/zlib - CONFIGURE_COMMAND rm -rf build && mkdir -p build - BUILD_IN_SOURCE 1 - BUILD_COMMAND cd build && ../configure --prefix=${CMAKE_BINARY_DIR} --static && make "CFLAGS=-fPIC -O2" -j $(nproc) - # zlib compile will produce some dirty files, we need to clean them. - INSTALL_COMMAND cd build && make install && cd ../ && rm -rf build zconf.h.included && git checkout . ) + CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/zlib/configure --prefix=${CMAKE_BINARY_DIR} --static + BUILD_IN_SOURCE 0 + BUILD_COMMAND $(MAKE) "CFLAGS=-fPIC -O2" + INSTALL_COMMAND $(MAKE) install + ) ADD_LIBRARY(zlib STATIC IMPORTED GLOBAL) ADD_DEPENDENCIES(zlib zlib-project) SET_TARGET_PROPERTIES(zlib PROPERTIES - IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libz.a - INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/include) + IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libz.a + INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/include + POSITION_INDEPENDENT_CODE ON + ) ENDIF() ENDIF() @@ -89,15 +97,18 @@ IF(WITH_GFLAGS) MESSAGE("[terarkdb/third-party] gflags target not exist, let's build it!") ExternalProject_Add(gflags-project SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/gflags - CONFIGURE_COMMAND rm -rf build-cmake && mkdir -p build-cmake - BUILD_IN_SOURCE 1 - BUILD_COMMAND cd build-cmake && cmake ../ -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DCMAKE_BUILD_TYPE=Release && make -j $(nproc) - INSTALL_COMMAND cd build-cmake && make install) + CONFIGURE_COMMAND cmake ${CMAKE_CURRENT_SOURCE_DIR}/gflags -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS=-fPIC -DCMAKE_CXX_FLAGS=-fPIC -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE_MAKEFILE} + BUILD_IN_SOURCE 0 + BUILD_COMMAND $(MAKE) + INSTALL_COMMAND $(MAKE) install + ) ADD_LIBRARY(gflags STATIC IMPORTED GLOBAL) ADD_DEPENDENCIES(gflags gflags-project) SET_TARGET_PROPERTIES(gflags PROPERTIES IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libgflags.a - INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/include) + INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/include + POSITION_INDEPENDENT_CODE ON + ) ENDIF() # end target ENDIF() # end with gflags @@ -109,16 +120,18 @@ IF(WITH_ZSTD) MESSAGE("[terarkdb/third-party] zstd target not exist, let's build it!") ExternalProject_Add(zstd-project SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/zstd - CONFIGURE_COMMAND "" - BUILD_IN_SOURCE 1 - BUILD_COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR}/zstd && make "CXXFLAGS=-fPIC -O2" "CFLAGS=-fPIC -O2" -j $(nproc) - INSTALL_COMMAND PREFIX=${CMAKE_BINARY_DIR} make install) + CONFIGURE_COMMAND cp -rT ${CMAKE_CURRENT_SOURCE_DIR}/zstd . + BUILD_IN_SOURCE 0 + BUILD_COMMAND $(MAKE) "CXXFLAGS=-fPIC -O2" "CFLAGS=-fPIC -O2" + INSTALL_COMMAND PREFIX=${CMAKE_BINARY_DIR} $(MAKE) install + ) ADD_LIBRARY(zstd STATIC IMPORTED GLOBAL) ADD_DEPENDENCIES(zstd zstd-project) SET_TARGET_PROPERTIES(zstd PROPERTIES IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libzstd.a INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/include - POSITION_INDEPENDENT_CODE ON) + POSITION_INDEPENDENT_CODE ON + ) ENDIF() ENDIF() @@ -130,15 +143,17 @@ IF(WITH_LZ4) MESSAGE("[terarkdb/third-party] lz4 target not exist, let's build it!") ExternalProject_Add(lz4-project SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lz4 - CONFIGURE_COMMAND "" - BUILD_IN_SOURCE 1 - BUILD_COMMAND make "CXXFLAGS=-fPIC -O2" "CFLAGS=-fPIC -O2" -j $(nproc) - INSTALL_COMMAND prefix=${CMAKE_BINARY_DIR} make install) + CONFIGURE_COMMAND cp -rT ${CMAKE_CURRENT_SOURCE_DIR}/lz4 . + BUILD_IN_SOURCE 0 + BUILD_COMMAND $(MAKE) "CXXFLAGS=-fPIC -O2" "CFLAGS=-fPIC -O2" + INSTALL_COMMAND prefix=${CMAKE_BINARY_DIR} $(MAKE) install) ADD_LIBRARY(lz4 STATIC IMPORTED GLOBAL) ADD_DEPENDENCIES(lz4 lz4-project) SET_TARGET_PROPERTIES(lz4 PROPERTIES IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/liblz4.a - INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/include) + INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/include + POSITION_INDEPENDENT_CODE ON + ) ENDIF() ENDIF() @@ -150,15 +165,17 @@ IF(WITH_BZ2) MESSAGE("[terarkdb/third-party] bzip2 target not exist, let's build it!") ExternalProject_Add(bzip2-project SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/bzip2 - CONFIGURE_COMMAND "" - BUILD_IN_SOURCE 1 - BUILD_COMMAND make "CXXFLAGS=-fPIC -O2" "CFLAGS=-fPIC -O2" -j $(nproc) - INSTALL_COMMAND make install PREFIX=${CMAKE_BINARY_DIR} && make clean) + CONFIGURE_COMMAND cp -rT ${CMAKE_CURRENT_SOURCE_DIR}/bzip2 . + BUILD_IN_SOURCE 0 + BUILD_COMMAND $(MAKE) "CXXFLAGS=-fPIC -O2" "CFLAGS=-fPIC -O2" + INSTALL_COMMAND $(MAKE) install PREFIX=${CMAKE_BINARY_DIR}) ADD_LIBRARY(bzip2 STATIC IMPORTED GLOBAL) ADD_DEPENDENCIES(bzip2 bzip2-project) SET_TARGET_PROPERTIES(bzip2 PROPERTIES IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libbz2.a - INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/include) + INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/include + POSITION_INDEPENDENT_CODE ON + ) ENDIF() ENDIF() @@ -170,15 +187,18 @@ IF(WITH_JEMALLOC) MESSAGE("[terarkdb/third-party] jemalloc target not exist, let's build it!") ExternalProject_Add(jemalloc-project SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/jemalloc - CONFIGURE_COMMAND "" - BUILD_IN_SOURCE 1 - BUILD_COMMAND bash autogen.sh && "CFLAGS=-fPIC" "CXXFLAGS=-fPIC" "LDFLAGS=-fPIC" ./configure --prefix=${CMAKE_BINARY_DIR} --enable-prof && make -j $(nproc) - INSTALL_COMMAND make install PREFIX=${CMAKE_BINARY_DIR} && make clean) + CONFIGURE_COMMAND cp -rT ${CMAKE_CURRENT_SOURCE_DIR}/jemalloc . && bash autogen.sh && "CFLAGS=-fPIC" "CXXFLAGS=-fPIC" "LDFLAGS=-fPIC" ./configure --prefix=${CMAKE_BINARY_DIR} --enable-prof + BUILD_IN_SOURCE 0 + BUILD_COMMAND $(MAKE) + INSTALL_COMMAND $(MAKE) install PREFIX=${CMAKE_BINARY_DIR} + ) ADD_LIBRARY(jemalloc STATIC IMPORTED GLOBAL) ADD_DEPENDENCIES(jemalloc jemalloc-project) SET_TARGET_PROPERTIES(jemalloc PROPERTIES - IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libjemalloc.a - INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/include) + IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libjemalloc.a + INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/include + POSITION_INDEPENDENT_CODE ON + ) endif() ENDIF() -- GitLab