Files
2026-07-13 12:40:42 +08:00

107 lines
4.2 KiB
CMake

# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed 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)
set(XXHASH_PREFIX_DIR ${THIRD_PARTY_PATH}/xxhash)
set(XXHASH_SOURCE_DIR ${THIRD_PARTY_PATH}/xxhash/src/extern_xxhash)
set(XXHASH_INSTALL_DIR ${THIRD_PARTY_PATH}/install/xxhash)
set(XXHASH_INCLUDE_DIR "${XXHASH_INSTALL_DIR}/include")
set(XXHASH_TAG v0.6.5)
set(SOURCE_DIR ${PADDLE_SOURCE_DIR}/third_party/xxhash)
# For CMake >= 4.0.0, set policy compatibility for xxhash's CMake.
# Only for Windows builds that use CMAKE_ARGS
if(WIN32 AND CMAKE_VERSION VERSION_GREATER_EQUAL "4.0.0")
message(
WARNING
"xxhash: forcing CMake policy compatibility for CMake >= 4.0 (CMAKE_POLICY_VERSION_MINIMUM=3.5)"
)
set(XXHASH_POLICY_ARGS -DCMAKE_POLICY_VERSION_MINIMUM=3.5)
endif()
include_directories(${XXHASH_INCLUDE_DIR})
if(WIN32)
set(XXHASH_LIBRARIES "${XXHASH_INSTALL_DIR}/lib/xxhash.lib")
set(XXHASH_CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4710 /wd4711")
set(XXHASH_CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4710 /wd4711")
else()
set(XXHASH_LIBRARIES "${XXHASH_INSTALL_DIR}/lib/libxxhash.a")
set(XXHASH_CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
set(XXHASH_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
endif()
if(WIN32)
ExternalProject_Add(
extern_xxhash
${EXTERNAL_PROJECT_LOG_ARGS}
SOURCE_DIR ${SOURCE_DIR}
PREFIX ${XXHASH_PREFIX_DIR}
UPDATE_COMMAND ""
PATCH_COMMAND ""
CONFIGURE_COMMAND
${CMAKE_COMMAND} ${SOURCE_DIR}/cmake_unofficial
-DCMAKE_INSTALL_PREFIX:PATH=${XXHASH_INSTALL_DIR}
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
-DCMAKE_VERBOSE_MAKEFILE:BOOL=OFF
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON -DBUILD_XXHSUM=OFF
-DCMAKE_GENERATOR=${CMAKE_GENERATOR}
-DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM}
-DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_FLAGS=${XXHASH_CMAKE_CXX_FLAGS}
-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}
-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}
-DCMAKE_C_FLAGS=${XXHASH_CMAKE_C_FLAGS}
-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}
-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE} ${XXHASH_POLICY_ARGS}
${OPTIONAL_CACHE_ARGS}
TEST_COMMAND ""
BUILD_BYPRODUCTS ${XXHASH_LIBRARIES})
else()
set(XXHASH_INSTALLED_HEADER ${XXHASH_INCLUDE_DIR}/xxhash.h)
set(XXHASH_BUILD_DIR ${XXHASH_PREFIX_DIR}/build)
set(XXHASH_MAKEFILE ${XXHASH_PREFIX_DIR}/Makefile)
find_program(XXHASH_MAKE_EXECUTABLE make REQUIRED)
set(XXHASH_MAKE_C_FLAGS "${XXHASH_CMAKE_C_FLAGS} -fPIC")
string(STRIP "${XXHASH_MAKE_C_FLAGS}" XXHASH_MAKE_C_FLAGS)
file(MAKE_DIRECTORY ${XXHASH_PREFIX_DIR})
file(WRITE ${XXHASH_MAKEFILE}
"vpath %.c ${SOURCE_DIR}\ninclude ${SOURCE_DIR}/Makefile\n")
ExternalProject_Add(
extern_xxhash
${EXTERNAL_PROJECT_LOG_ARGS}
SOURCE_DIR ${SOURCE_DIR}
PREFIX ${XXHASH_PREFIX_DIR}
UPDATE_COMMAND ""
CONFIGURE_COMMAND ""
BUILD_COMMAND ${CMAKE_COMMAND} -E make_directory ${XXHASH_BUILD_DIR}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${XXHASH_MAKEFILE}
${XXHASH_BUILD_DIR}/Makefile
COMMAND ${CMAKE_COMMAND} -E create_symlink ${SOURCE_DIR}/xxhash.h
${XXHASH_BUILD_DIR}/xxhash.h
COMMAND ${CMAKE_COMMAND} -E create_symlink ${SOURCE_DIR}/xxhsum.1
${XXHASH_BUILD_DIR}/xxhsum.1
COMMAND ${XXHASH_MAKE_EXECUTABLE} -C ${XXHASH_BUILD_DIR}
"CFLAGS=${XXHASH_MAKE_C_FLAGS}" PREFIX=${XXHASH_INSTALL_DIR} install
INSTALL_COMMAND ""
TEST_COMMAND ""
BUILD_BYPRODUCTS ${XXHASH_LIBRARIES} ${XXHASH_INSTALLED_HEADER})
endif()
add_library(xxhash STATIC IMPORTED GLOBAL)
set_property(TARGET xxhash PROPERTY IMPORTED_LOCATION ${XXHASH_LIBRARIES})
add_dependencies(xxhash extern_xxhash)