cmake: do not assume ${CMAKE_GENERATOR} == make

* modules/BuildDPDK.cmake: always use "make"
* modules/BuildSPDK.cmake: always use "make"
  DPDK only support "make". if user wants to use other generator than
  "make", we will fail to build DPDK support. so we should always use
  "make" here. and before using "make", we need to detect it.
* cmake/modules/BuildRocksDB.cmake: use cmake for build
* src/compressor/zstd/CMakeLists.txt: use cmake for build
  just use whatever generator use specifies, and use ${CMAKE_COMMAND}
  for building the specified target, no need to repeat
  ${CMAKE_GENERATOR} for building the target.

Signed-off-by: Kefu Chai <kchai@redhat.com>
This commit is contained in:
Kefu Chai 2019-03-21 13:16:13 +08:00
parent 33d929373e
commit a0c6fb9d40
4 changed files with 26 additions and 6 deletions

View File

@ -1,4 +1,5 @@
function(do_build_dpdk dpdk_dir)
find_program (MAKE_EXECUTABLE NAMES make gmake)
# mk/machine/native/rte.vars.mk
# rte_cflags are extracted from mk/machine/${machine}/rte.vars.mk
# only 3 of them have -march=<arch> defined, so copying them here.
@ -59,7 +60,7 @@ function(do_build_dpdk dpdk_dir)
set(target "${arch}-${machine_tmpl}-${execenv}-${toolchain}")
execute_process(
COMMAND ${CMAKE_MAKE_PROGRAM} showconfigs
COMMAND ${MAKE_EXECUTABLE} showconfigs
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/spdk/dpdk
OUTPUT_VARIABLE supported_targets
OUTPUT_STRIP_TRAILING_WHITESPACE)
@ -71,11 +72,18 @@ function(do_build_dpdk dpdk_dir)
"\"${target}\" not listed in ${supported_targets}")
endif()
if(CMAKE_MAKE_PROGRAM MATCHES "make")
# try to inherit command line arguments passed by parent "make" job
set(make_cmd "$(MAKE)")
else()
set(make_cmd "${MAKE_EXECUTABLE}")
endif()
include(ExternalProject)
ExternalProject_Add(dpdk-ext
SOURCE_DIR ${CMAKE_SOURCE_DIR}/src/spdk/dpdk
CONFIGURE_COMMAND $(MAKE) config O=${dpdk_dir} T=${target}
BUILD_COMMAND env CC=${CMAKE_C_COMPILER} $(MAKE) O=${dpdk_dir} EXTRA_CFLAGS=-fPIC
CONFIGURE_COMMAND ${make_cmd} config O=${dpdk_dir} T=${target}
BUILD_COMMAND env CC=${CMAKE_C_COMPILER} ${make_cmd} O=${dpdk_dir} EXTRA_CFLAGS=-fPIC
BUILD_IN_SOURCE 1
INSTALL_COMMAND "true")
ExternalProject_Add_Step(dpdk-ext patch-config

View File

@ -39,6 +39,7 @@ function(build_rocksdb)
list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE})
list(APPEND rocksdb_CMAKE_ARGS -DFAIL_ON_WARNINGS=OFF)
list(APPEND rocksdb_CMAKE_ARGS -DUSE_RTTI=1)
list(APPEND rocksdb_CMAKE_ARGS -G${CMAKE_GENERATOR})
CHECK_C_COMPILER_FLAG("-Wno-stringop-truncation" HAS_WARNING_STRINGOP_TRUNCATION)
if(HAS_WARNING_STRINGOP_TRUNCATION)
list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_C_FLAGS="-Wno-stringop-truncation")
@ -52,7 +53,7 @@ function(build_rocksdb)
SOURCE_DIR "${rocksdb_SOURCE_DIR}"
CMAKE_ARGS ${rocksdb_CMAKE_ARGS}
BINARY_DIR "${rocksdb_BINARY_DIR}"
BUILD_COMMAND $(MAKE) rocksdb
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target rocksdb
INSTALL_COMMAND "true")
# force rocksdb make to be called on each time
ExternalProject_Add_Step(rocksdb_ext forcebuild

View File

@ -9,6 +9,15 @@ macro(build_spdk)
find_package(aio REQUIRED)
find_package(uuid REQUIRED)
endif()
find_program (MAKE_EXECUTABLE NAMES make gmake)
if(CMAKE_MAKE_PROGRAM MATCHES "make")
# try to inherit command line arguments passed by parent "make" job
set(make_cmd "$(MAKE)")
else()
set(make_cmd "${MAKE_EXECUTABLE}")
endif()
include(ExternalProject)
ExternalProject_Add(spdk-ext
DEPENDS dpdk-ext
@ -17,9 +26,10 @@ macro(build_spdk)
# unset $CFLAGS, otherwise it will interfere with how SPDK sets
# its include directory.
# unset $LDFLAGS, otherwise SPDK will fail to mock some functions.
BUILD_COMMAND env -i PATH=$ENV{PATH} CC=${CMAKE_C_COMPILER} $(MAKE) EXTRA_CFLAGS="-fPIC"
BUILD_COMMAND env -i PATH=$ENV{PATH} CC=${CMAKE_C_COMPILER} ${make_cmd} EXTRA_CFLAGS="-fPIC"
BUILD_IN_SOURCE 1
INSTALL_COMMAND "true")
unset(make_cmd)
ExternalProject_Get_Property(spdk-ext source_dir)
foreach(c nvme log lvol env_dpdk util)
add_library(spdk::${c} STATIC IMPORTED)

View File

@ -11,8 +11,9 @@ ExternalProject_Add(zstd_ext
-DCMAKE_C_FLAGS=${ZSTD_C_FLAGS}
-DCMAKE_AR=${CMAKE_AR}
-DCMAKE_POSITION_INDEPENDENT_CODE=${ENABLE_SHARED}
-G${CMAKE_GENERATOR}
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/libzstd
BUILD_COMMAND $(MAKE) libzstd_static
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target libzstd_static
INSTALL_COMMAND "true")
# force zstd make to be called on each time