From a0c6fb9d40ccba24bca5a93465a901c6dff1cc31 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Thu, 21 Mar 2019 13:16:13 +0800 Subject: [PATCH] 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 --- cmake/modules/BuildDPDK.cmake | 14 +++++++++++--- cmake/modules/BuildRocksDB.cmake | 3 ++- cmake/modules/BuildSPDK.cmake | 12 +++++++++++- src/compressor/zstd/CMakeLists.txt | 3 ++- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/cmake/modules/BuildDPDK.cmake b/cmake/modules/BuildDPDK.cmake index 12a831a8b10..80d54122728 100644 --- a/cmake/modules/BuildDPDK.cmake +++ b/cmake/modules/BuildDPDK.cmake @@ -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= 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 diff --git a/cmake/modules/BuildRocksDB.cmake b/cmake/modules/BuildRocksDB.cmake index 69741f46015..e59f9b5c17e 100644 --- a/cmake/modules/BuildRocksDB.cmake +++ b/cmake/modules/BuildRocksDB.cmake @@ -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 --target rocksdb INSTALL_COMMAND "true") # force rocksdb make to be called on each time ExternalProject_Add_Step(rocksdb_ext forcebuild diff --git a/cmake/modules/BuildSPDK.cmake b/cmake/modules/BuildSPDK.cmake index 46242dc930a..3637d7c66aa 100644 --- a/cmake/modules/BuildSPDK.cmake +++ b/cmake/modules/BuildSPDK.cmake @@ -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) diff --git a/src/compressor/zstd/CMakeLists.txt b/src/compressor/zstd/CMakeLists.txt index 76709bbb664..9586c3baafa 100644 --- a/src/compressor/zstd/CMakeLists.txt +++ b/src/compressor/zstd/CMakeLists.txt @@ -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 --target libzstd_static INSTALL_COMMAND "true") # force zstd make to be called on each time -- 2.39.5