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})