cpp/CMake/BuildMemkind.cmake (121 lines of code) (raw):

# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. include(ExternalProject) if("${MAKE}" STREQUAL "") if(NOT MSVC) find_program(MAKE make) endif() endif() macro(build_hwloc) message(STATUS "Building hwloc from source") set(HWLOC_BUILD_VERSION "2.8.0") set(HWLOC_BUILD_SHA256_CHECKSUM "311d44e99bbf6d269c2cbc569d073978d88352bc31d51e31457d4df94783172d") set(HWLOC_SOURCE_URL "https://github.com/open-mpi/hwloc/archive/refs/tags/hwloc-${HWLOC_BUILD_VERSION}.tar.gz" ) set(HWLOC_LIB_NAME "hwloc") set(HWLOC_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/hwloc_ep-install") set(HWLOC_SOURCE_DIR "${HWLOC_PREFIX}/src/hwloc_ep") set(HWLOC_INCLUDE_DIR "${HWLOC_SOURCE_DIR}/include") set(HWLOC_LIB_DIR "${HWLOC_SOURCE_DIR}/hwloc/.libs") set(HWLOC_STATIC_LIB_NAME "${CMAKE_STATIC_LIBRARY_PREFIX}${HWLOC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}" ) set(HWLOC_STATIC_LIB_TARGETS "${HWLOC_SOURCE_DIR}/src/.libs/${HWLOC_STATIC_LIB_NAME}") set(HWLOC_CONFIGURE_ARGS "--prefix=${HWLOC_PREFIX}" "--with-pic" "--enable-static" "--disable-shared" "--enable-plugins") ExternalProject_Add( hwloc_ep PREFIX ${HWLOC_PREFIX} URL ${HWLOC_SOURCE_URL} URL_HASH "SHA256=${HWLOC_BUILD_SHA256_CHECKSUM}" SOURCE_DIR ${HWLOC_SOURCE_DIR} CONFIGURE_COMMAND ./configure ${HWLOC_CONFIGURE_ARGS} BUILD_COMMAND ${MAKE} BUILD_BYPRODUCTS ${HWLOC_STATIC_LIB_TARGETS} BUILD_IN_SOURCE 1) ExternalProject_Add_Step( hwloc_ep pre-configure COMMAND ./autogen.sh DEPENDEES download DEPENDERS configure WORKING_DIRECTORY ${HWLOC_SOURCE_DIR}) # The include directory must exist before it is referenced by a target. file(MAKE_DIRECTORY "${HWLOC_INCLUDE_DIR}") add_library(hwloc::hwloc STATIC IMPORTED) set_target_properties( hwloc::hwloc PROPERTIES IMPORTED_LOCATION "${HWLOC_LIB_DIR}/${HWLOC_STATIC_LIB_NAME}" INTERFACE_INCLUDE_DIRECTORIES "${HWLOC_INCLUDE_DIR}") add_dependencies(hwloc::hwloc hwloc_ep) endmacro() macro(build_memkind) message(STATUS "Building Memkind from source") set(MEMKIND_BUILD_VERSION "v1.14.0") set(MEMKIND_BUILD_SHA256_CHECKSUM "ab366b20b5a87ea655483631fc762ba6eb59eb6c3a08652e643f1ee3f06a6a12") set(MEMKIND_SOURCE_URL "https://github.com/memkind/memkind/archive/refs/tags/${MEMKIND_BUILD_VERSION}.tar.gz" ) set(MEMKIND_LIB_NAME "memkind") set(MEMKIND_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/memkind_ep-install") set(MEMKIND_SOURCE_DIR "${MEMKIND_PREFIX}/src/memkind_ep") set(MEMKIND_INCLUDE_DIR "${MEMKIND_SOURCE_DIR}/include") set(MEMKIND_LIB_DIR "${MEMKIND_SOURCE_DIR}/.libs") set(MEMKIND_STATIC_LIB_NAME "${CMAKE_STATIC_LIBRARY_PREFIX}${MEMKIND_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}" ) set(MEMKIND_STATIC_LIB_TARGETS "${MEMKIND_SOURCE_DIR}/src/.libs/${MEMKIND_STATIC_LIB_NAME}") set(MEMKIND_CONFIGURE_ARGS "--prefix=${MEMKIND_PREFIX}" "--with-pic" "--enable-static") ExternalProject_Add( memkind_ep PREFIX ${MEMKIND_PREFIX} URL ${MEMKIND_SOURCE_URL} URL_HASH "SHA256=${MEMKIND_BUILD_SHA256_CHECKSUM}" SOURCE_DIR ${MEMKIND_SOURCE_DIR} CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env LDFLAGS=-L${HWLOC_LIB_DIR} env CFLAGS=-I${HWLOC_INCLUDE_DIR} env CXXFLAGS=-I${HWLOC_INCLUDE_DIR} ./configure ${MEMKIND_CONFIGURE_ARGS} BUILD_COMMAND ${MAKE} BUILD_BYPRODUCTS ${MEMKIND_STATIC_LIB_TARGETS} BUILD_IN_SOURCE 1) ExternalProject_Add_Step( memkind_ep pre-configure COMMAND ./autogen.sh DEPENDEES download DEPENDERS configure WORKING_DIRECTORY ${MEMKIND_SOURCE_DIR}) add_dependencies(memkind_ep hwloc::hwloc) # The include directory must exist before it is referenced by a target. file(MAKE_DIRECTORY "${MEMKIND_INCLUDE_DIR}") add_library(memkind::memkind STATIC IMPORTED) set_target_properties( memkind::memkind PROPERTIES IMPORTED_LOCATION "${MEMKIND_LIB_DIR}/${MEMKIND_STATIC_LIB_NAME}" INTERFACE_INCLUDE_DIRECTORIES "${MEMKIND_INCLUDE_DIR}") target_link_libraries(memkind::memkind INTERFACE hwloc::hwloc dl numa pthread daxctl) add_dependencies(memkind::memkind memkind_ep) endmacro() build_hwloc() build_memkind()