Files
paddlepaddle--paddle/cmake/cinn/external/ginac.cmake
T
2026-07-13 12:40:42 +08:00

89 lines
3.0 KiB
CMake

include(ExternalProject)
include(${PROJECT_SOURCE_DIR}/cmake/architecture.cmake)
paddle_normalize_target_arch(PADDLE_TARGET_ARCH)
# gmp-6.2.1 https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz
# cln-1.3.6 https://www.ginac.de/CLN/cln-1.3.6.tar.bz2 (default/non-aarch64)
# cln-1.3.7 https://www.ginac.de/CLN/cln-1.3.7.tar.bz2 (aarch64)
# ginac-1.8.1 https://www.ginac.de/ginac-1.8.1.tar.bz2
# all build with CFLAGS="-fPIC -DPIC" CXXFLAGS="-fPIC -DPIC" --enable-static=yes
if(PADDLE_TARGET_ARCH STREQUAL "aarch64")
set(GINAC_FILE
"ginac-1.8.1_cln-1.3.7_gmp-6.2.1-aarch64.tar.gz"
CACHE STRING "" FORCE)
set(GINAC_DOWNLOAD_URL
"https://paddle-inference-dist.cdn.bcebos.com/CINN/${GINAC_FILE}"
CACHE STRING "ARM GiNaC package URL")
set(GINAC_URL_MD5
"e892414c8eb98153bb04b0877bd07334"
CACHE STRING "ARM GiNaC package MD5")
else()
set(GINAC_FILE
"ginac-1.8.1_cln-1.3.6_gmp-6.2.1.tar.gz"
CACHE STRING "" FORCE)
set(GINAC_DOWNLOAD_URL
"https://paddle-inference-dist.bj.bcebos.com/CINN/${GINAC_FILE}")
set(GINAC_URL_MD5 ebc3e4b7770dd604777ac3f01bfc8b06)
endif()
set(GINAC_DOWNLOAD_DIR ${PADDLE_SOURCE_DIR}/third_party/ginac)
set(GINAC_PREFIX_DIR ${THIRD_PARTY_PATH}/ginac)
set(GINAC_INSTALL_DIR ${THIRD_PARTY_PATH}/install/ginac)
function(download_ginac)
file(MAKE_DIRECTORY "${GINAC_DOWNLOAD_DIR}")
message(
STATUS
"Downloading ${GINAC_DOWNLOAD_URL} to ${GINAC_DOWNLOAD_DIR}/${GINAC_FILE}"
)
file(
DOWNLOAD ${GINAC_DOWNLOAD_URL} ${GINAC_DOWNLOAD_DIR}/${GINAC_FILE}
EXPECTED_MD5 ${GINAC_URL_MD5}
STATUS ERR)
if(ERR EQUAL 0)
message(STATUS "Download ${GINAC_FILE} success")
else()
message(
FATAL_ERROR
"Download failed, error: ${ERR}\n You can try downloading ${GINAC_FILE} again"
)
endif()
endfunction()
# Download and check ginac.
if(EXISTS ${GINAC_DOWNLOAD_DIR}/${GINAC_FILE})
file(MD5 ${GINAC_DOWNLOAD_DIR}/${GINAC_FILE} GINAC_HASH)
if(NOT GINAC_HASH STREQUAL GINAC_URL_MD5)
file(REMOVE_RECURSE ${GINAC_PREFIX_DIR})
file(REMOVE_RECURSE ${GINAC_INSTALL_DIR})
download_ginac()
endif()
else()
download_ginac()
endif()
ExternalProject_Add(
external_ginac
${EXTERNAL_PROJECT_LOG_ARGS}
URL ${GINAC_DOWNLOAD_DIR}/${GINAC_FILE}
URL_MD5 ${GINAC_URL_MD5}
DOWNLOAD_DIR ${GINAC_DOWNLOAD_DIR}
PREFIX ${GINAC_PREFIX_DIR}
SOURCE_DIR ${GINAC_INSTALL_DIR}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
UPDATE_COMMAND ""
INSTALL_COMMAND ""
BUILD_BYPRODUCTS ${GINAC_INSTALL_DIR}/lib/libginac.a
BUILD_BYPRODUCTS ${GINAC_INSTALL_DIR}/lib/libcln.a
BUILD_BYPRODUCTS ${GINAC_INSTALL_DIR}/lib/libgmp.a)
add_library(ginac STATIC IMPORTED GLOBAL)
add_dependencies(ginac external_ginac)
set_property(TARGET ginac PROPERTY IMPORTED_LOCATION
${GINAC_INSTALL_DIR}/lib/libginac.a)
target_link_libraries(ginac INTERFACE ${GINAC_INSTALL_DIR}/lib/libcln.a
${GINAC_INSTALL_DIR}/lib/libgmp.a)
include_directories(${GINAC_INSTALL_DIR}/include)