105 lines
3.8 KiB
CMake
105 lines
3.8 KiB
CMake
cmake_minimum_required(VERSION 3.21)
|
||
project(Miracl LANGUAGES C)
|
||
|
||
include(GNUInstallDirs)
|
||
|
||
set(SOURCE_FILES source/mrcore.c source/mrarth0.c source/mrarth1.c
|
||
source/mrarth2.c source/mralloc.c source/mrsmall.c source/mrio1.c
|
||
source/mrio2.c source/mrgcd.c source/mrjack.c source/mrxgcd.c
|
||
source/mrarth3.c source/mrbits.c source/mrrand.c source/mrprime.c
|
||
source/mrcrt.c source/mrscrt.c source/mrmonty.c source/mrpower.c
|
||
source/mrsroot.c source/mrcurve.c source/mrfast.c source/mrshs.c
|
||
source/mrshs256.c source/mrshs512.c source/mrsha3.c source/mrfpe.c
|
||
source/mraes.c source/mrgcm.c source/mrlucas.c source/mrzzn2.c
|
||
source/mrzzn2b.c source/mrzzn3.c source/mrzzn4.c source/mrecn2.c
|
||
source/mrstrong.c source/mrbrick.c source/mrebrick.c source/mrec2m.c
|
||
source/mrgf2m.c source/mrflash.c source/mrfrnd.c source/mrdouble.c
|
||
source/mrround.c source/mrbuild.c source/mrflsh1.c source/mrpi.c
|
||
source/mrflsh2.c source/mrflsh3.c source/mrflsh4.c)
|
||
|
||
if(CMAKE_SIZEOF_VOID_P EQUAL 8) # X64 or aarch64
|
||
message(STATUS "MIRACL: 64-bit build")
|
||
set(MIRDEF_SUFFIX "h64")
|
||
if(MSVC)
|
||
set(MRMULDV_SUFFIX "w64")
|
||
set(DIR_FLAG "win64")
|
||
elseif(MINGW)
|
||
set(MIRDEF_SUFFIX "mgwn")
|
||
set(DIR_FLAG "win64")
|
||
set(MRMULDV_SUFFIX "g64")
|
||
else()
|
||
if(APPLE)
|
||
set(DIR_FLAG "macOS")
|
||
set(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "" FORCE)
|
||
elseif(WIN32)
|
||
set(DIR_FLAG "win64")
|
||
else()
|
||
set(DIR_FLAG "linux64")
|
||
endif()
|
||
set(MRMULDV_SUFFIX "g64")
|
||
endif()
|
||
else()
|
||
message(STATUS "MIRACL: 32-bit build")
|
||
set(MIRDEF_SUFFIX "h32")
|
||
if(MSVC)
|
||
set(MRMULDV_SUFFIX "c")
|
||
set(DIR_FLAG "win32")
|
||
else()
|
||
if(APPLE)
|
||
set(DIR_FLAG "OSX")
|
||
set(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "" FORCE)
|
||
elseif(WIN32)
|
||
set(DIR_FLAG "win32")
|
||
else()
|
||
set(DIR_FLAG "linux32")
|
||
endif()
|
||
set(MRMULDV_SUFFIX "gcc")
|
||
endif()
|
||
endif()
|
||
|
||
|
||
file(GLOB HEADER_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/include include/*.h)
|
||
foreach(HEADER_FILE ${HEADER_FILES})
|
||
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/include/${HEADER_FILE} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/${DIR_FLAG}/include)
|
||
list(APPEND SOURCE_FILES ${CMAKE_CURRENT_BINARY_DIR}/${DIR_FLAG}/include/${HEADER_FILE})
|
||
endforeach()
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/include/mirdef.${MIRDEF_SUFFIX}"
|
||
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/${DIR_FLAG}/include)
|
||
file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/${DIR_FLAG}/include/mirdef.${MIRDEF_SUFFIX}
|
||
${CMAKE_CURRENT_BINARY_DIR}/${DIR_FLAG}/include/mirdef.h)
|
||
list(APPEND SOURCE_FILES "${CMAKE_CURRENT_BINARY_DIR}/${DIR_FLAG}/include/mirdef.h")
|
||
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/source/mrmuldv.${MRMULDV_SUFFIX}"
|
||
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/${DIR_FLAG}/source)
|
||
file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/${DIR_FLAG}/source/mrmuldv.${MRMULDV_SUFFIX}
|
||
${CMAKE_CURRENT_BINARY_DIR}/${DIR_FLAG}/source/mrmuldv.c)
|
||
list(APPEND SOURCE_FILES "${CMAKE_CURRENT_BINARY_DIR}/${DIR_FLAG}/source/mrmuldv.c")
|
||
|
||
# 生成静态库
|
||
add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES})
|
||
|
||
target_include_directories(${PROJECT_NAME} PUBLIC
|
||
${CMAKE_CURRENT_BINARY_DIR}/${DIR_FLAG}/include
|
||
)
|
||
|
||
if(MIRACL_INSTALL_BINDIR)
|
||
set(CMAKE_INSTALL_BINDIR ${MIRACL_INSTALL_BINDIR})
|
||
endif()
|
||
|
||
if(MIRACL_INSTALL_LIBDIR)
|
||
set(CMAKE_INSTALL_LIBDIR ${MIRACL_INSTALL_LIBDIR})
|
||
endif()
|
||
|
||
if(MIRACL_INSTALL_INCLUDEDIR)
|
||
set(CMAKE_INSTALL_INCLUDEDIR ${MIRACL_INSTALL_INCLUDEDIR})
|
||
endif()
|
||
|
||
install(TARGETS ${PROJECT_NAME}
|
||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||
)
|
||
|
||
file(GLOB HEADER_FILES ${CMAKE_CURRENT_BINARY_DIR}/${DIR_FLAG}/include/*.h)
|
||
install(FILES ${HEADER_FILES} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|