diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..a0c6371 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,510 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) + +PROJECT(cryptopp) + +set(CRYPTOPP_VERSION_MAJOR 5) +set(CRYPTOPP_VERSION_MINOR 6) +set(CRYPTOPP_VERSION_BUILD 2) +set(CRYPTOPP_VERSION "${CRYPTOPP_VERSION_MAJOR}.${CRYPTOPP_VERSION_MINOR}.${CRYPTOPP_VERSION_BUILD}") + +################################### +# Global platform-specific settings +################################### +IF(MSVC) + ADD_DEFINITIONS(-DWIN32 -D_WINDOWS -D_CRT_SECURE_NO_WARNINGS -MP -D_SCL_SECURE_NO_WARNINGS -EHsc) + SET(CMAKE_CXX_FLAGS "-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS") +ELSE() + ADD_DEFINITIONS(-Wall -Wno-unused-function -Wno-unused-variable -fvisibility=hidden -Wnon-virtual-dtor -Wreorder -Wstrict-null-sentinel -Wsign-promo) + IF(MINGW) + ADD_DEFINITIONS(-DWIN32 -D_WINDOWS) + ELSE() + ADD_DEFINITIONS(-fPIC) + ENDIF() +ENDIF() + +SET(CRYPTOPP_LDFLAGS "") + +######################### +# User Settings +######################### +IF(CRYPTOPP_ADDED_DEFINITIONS) + ADD_DEFINITIONS(${CRYPTOPP_ADDED_DEFINITIONS}) +ENDIF() + +IF(CRYPTOPP_ADDED_LDFLAGS) + SET(CRYPTOPP_LDFLAGS ${CRYPTOPP_LDFLAGS} ${CRYPTOPP_ADDED_LDFLAGS}) +ENDIF() + +IF(NOT DEFINED CRYPTOPP_LIBRARY_TYPE) + SET(CRYPTOPP_LIBRARY_TYPE "BOTH" CACHE STRING "Type of library to build, STATIC, SHARED or BOTH.") +ELSE() + SET(CRYPTOPP_LIBRARY_TYPE ${CRYPTOPP_LIBRARY_TYPE} CACHE STRING "Type of library to build, STATIC or SHARED.") +ENDIF() + +IF(NOT DEFINED CRYPTOPP_RUNTIME_TYPE) + SET(CRYPTOPP_RUNTIME_TYPE "STATIC" CACHE STRING "Type of runtime to use, STATIC or SHARED.") +ELSE() + SET(CRYPTOPP_RUNTIME_TYPE ${CRYPTOPP_RUNTIME_TYPE} CACHE STRING "Type of runtime to use, STATIC or SHARED.") +ENDIF() + +IF(NOT DEFINED CRYPTOPP_BUILD_TESTS) + SET(CRYPTOPP_BUILD_TESTS TRUE CACHE BOOL "If enabled, builds tests.") +ELSE() + SET(CRYPTOPP_BUILD_TESTS ${CRYPTOPP_BUILD_TESTS} CACHE BOOL "If enabled, builds tests.") +ENDIF() + +######################### +# Project-wide Settings +######################### +SET(CRYPTOPP_COMPILE_DEFS_OPT COMPILE_DEFINITIONS_DEBUG CRYPTOPP_DEBUG_BUILD) +SET(EXEC_PERMS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + +STRING(TOUPPER ${CRYPTOPP_LIBRARY_TYPE} CRYPTOPP_LIBRARY_TYPE_UPPER) +STRING(COMPARE EQUAL "${CRYPTOPP_LIBRARY_TYPE_UPPER}" "STATIC" CRYPTOPP_STATIC) +IF(NOT CRYPTOPP_STATIC) + STRING(COMPARE EQUAL "${CRYPTOPP_LIBRARY_TYPE_UPPER}" "BOTH" CRYPTOPP_STATIC) +ENDIF() +STRING(COMPARE EQUAL "${CRYPTOPP_LIBRARY_TYPE_UPPER}" "SHARED" CRYPTOPP_SHARED) +IF(NOT CRYPTOPP_SHARED) + STRING(COMPARE EQUAL "${CRYPTOPP_LIBRARY_TYPE_UPPER}" "BOTH" CRYPTOPP_SHARED) +ENDIF() + +STRING(TOUPPER ${CRYPTOPP_RUNTIME_TYPE} CRYPTOPP_RUNTIME_TYPE_UPPER) +STRING(COMPARE EQUAL ${CRYPTOPP_RUNTIME_TYPE_UPPER} "STATIC" CRYPTOPP_STATIC_RUNTIME) + +IF(CRYPTOPP_STATIC_RUNTIME) + IF(WIN32) + SET(CompilerFlags + CMAKE_CXX_FLAGS + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_RELEASE + CMAKE_C_FLAGS + CMAKE_C_FLAGS_DEBUG + CMAKE_C_FLAGS_RELEASE + ) + FOREACH(CompilerFlag ${CompilerFlags}) + STRING(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") + ENDFOREACH() + ENDIF() +ENDIF() + +# -------------------------------------------------------------------------- +# Install directories + +string(TOLOWER ${PROJECT_NAME} projectname) +set(CRYPTOPP_INSTALL_SUBDIR "${projectname}-${CRYPTOPP_VERSION_MAJOR}.${CRYPTOPP_VERSION_MINOR}") + +if(NOT CRYPTOPP_INSTALL_BIN_DIR) + set(CRYPTOPP_INSTALL_BIN_DIR "bin") +endif() + +if(NOT CRYPTOPP_INSTALL_INCLUDE_DIR) + set(CRYPTOPP_INSTALL_INCLUDE_DIR "include/${projectname}") +endif() + +if(NOT CRYPTOPP_INSTALL_LIB_DIR) + set(CRYPTOPP_INSTALL_LIB_DIR "lib") +endif() + +if(NOT CRYPTOPP_INSTALL_SHARE_DIR) + set(CRYPTOPP_INSTALL_SHARE_DIR "share") +endif() + +if(NOT CRYPTOPP_INSTALL_DATA_DIR) + set(CRYPTOPP_INSTALL_DATA_DIR "${CRYPTOPP_INSTALL_SHARE_DIR}/${CRYPTOPP_INSTALL_SUBDIR}") +endif() + +######################### +# Crypto++ Library +######################### + +CONFIGURE_FILE(adhoc.cpp.proto ${CMAKE_CURRENT_SOURCE_DIR}/adhoc.cpp) + +SET(CRYPTOPP_SRCS_FIPS + algebra.cpp + algparam.cpp + asn.cpp + authenc.cpp + basecode.cpp + cbcmac.cpp + ccm.cpp + channels.cpp + cmac.cpp + cpu.cpp + cryptlib.cpp + des.cpp + dessp.cpp + dh.cpp + dll.cpp + dsa.cpp + ec2n.cpp + eccrypto.cpp + ecp.cpp + emsa2.cpp + eprecomp.cpp + files.cpp + filters.cpp + fips140.cpp + gcm.cpp + gf2n.cpp + gfpcrypt.cpp + hex.cpp + hmac.cpp + hrtimer.cpp + integer.cpp + iterhash.cpp + misc.cpp + modes.cpp + modexppc.cpp + mqueue.cpp + nbtheory.cpp + oaep.cpp + osrng.cpp + pch.cpp + pkcspad.cpp + pssr.cpp + pubkey.cpp + queue.cpp + randpool.cpp + rdtables.cpp + rijndael.cpp + rng.cpp + rsa.cpp + rw.cpp + sha.cpp + simple.cpp + skipjack.cpp + strciphr.cpp + trdlocal.cpp +) + +SET(CRYPTOPP_SRCS + 3way.cpp + adhoc.cpp.proto + adler32.cpp + arc4.cpp + base32.cpp + base64.cpp + bfinit.cpp + blowfish.cpp + blumshub.cpp + camellia.cpp + cast.cpp + casts.cpp + crc.cpp + default.cpp + dh2.cpp + eax.cpp + elgamal.cpp + esign.cpp + gf256.cpp + gf2_32.cpp + gost.cpp + gzip.cpp + ida.cpp + idea.cpp + luc.cpp + mars.cpp + marss.cpp + md2.cpp + md4.cpp + md5.cpp + mqv.cpp + network.cpp + panama.cpp + polynomi.cpp + rabin.cpp + rc2.cpp + rc5.cpp + rc6.cpp + ripemd.cpp + safer.cpp + salsa.cpp + seal.cpp + seed.cpp + serpent.cpp + sha3.cpp + shacal2.cpp + shark.cpp + sharkbox.cpp + socketft.cpp + sosemanuk.cpp + square.cpp + squaretb.cpp + tea.cpp + tftables.cpp + tiger.cpp + tigertab.cpp + ttmac.cpp + twofish.cpp + vmac.cpp + wait.cpp + wake.cpp + whrlpool.cpp + winpipes.cpp + xtr.cpp + xtrcrypt.cpp + zdeflate.cpp + zinflate.cpp + zlib.cpp +) +SET(CRYPTOPP_HDRS + 3way.h + adler32.h + aes.h + algebra.h + algparam.h + arc4.h + argnames.h + asn.h + authenc.h + base32.h + base64.h + basecode.h + blowfish.h + blumshub.h + camellia.h + cast.h + cbcmac.h + ccm.h + channels.h + cmac.h + config.h + cpu.h + crc.h + cryptlib.h + default.h + des.h + dh.h + dh2.h + dmac.h + dsa.h + eax.h + ec2n.h + eccrypto.h + ecp.h + elgamal.h + emsa2.h + eprecomp.h + esign.h + files.h + filters.h + fips140.h + fltrimpl.h + gcm.h + gf256.h + gf2_32.h + gf2n.h + gfpcrypt.h + gost.h + gzip.h + hex.h + hmac.h + hrtimer.h + ida.h + idea.h + integer.h + iterhash.h + lubyrack.h + luc.h + mars.h + md2.h + md4.h + md5.h + mdc.h + misc.h + modarith.h + modes.h + modexppc.h + mqueue.h + mqv.h + nbtheory.h + network.h + nr.h + oaep.h + oids.h + osrng.h + panama.h + pch.h + pkcspad.h + polynomi.h + pssr.h + pubkey.h + pwdbased.h + queue.h + rabin.h + randpool.h + rc2.h + rc5.h + rc6.h + rijndael.h + ripemd.h + rng.h + rsa.h + rw.h + safer.h + salsa.h + seal.h + secblock.h + seckey.h + seed.h + serpent.h + sha.h + sha3.h + shacal2.h + shark.h + simple.h + skipjack.h + smartptr.h + socketft.h + sosemanuk.h + square.h + stdcpp.h + strciphr.h + tea.h + tiger.h + trdlocal.h + trunhash.h + ttmac.h + twofish.h + vmac.h + wait.h + wake.h + whrlpool.h + winpipes.h + words.h + xtr.h + xtrcrypt.h + zdeflate.h + zinflate.h + zlib.h +) + +SET(CRYPTOPP_SRCS ${CRYPTOPP_SRCS} ${CRYPTOPP_SRCS_FIPS}) + +IF(MSVC) + SET(CRYPTOPP_SRCS ${CRYPTOPP_SRCS} ${CRYPTOPP_HDRS} cryptopp.rc) + IF(CMAKE_CL_64) + ENABLE_LANGUAGE(ASM_MASM) + ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/x64dll.obj + MAIN_DEPENDENCY x64dll.asm + COMMAND ${CMAKE_ASM_MASM_COMPILER} /Fo ${CMAKE_CURRENT_BINARY_DIR}/x64dll.obj /c ${CMAKE_CURRENT_SOURCE_DIR}/x64dll.asm + ) + ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/x64masm.obj + MAIN_DEPENDENCY x64masm.asm + COMMAND ${CMAKE_ASM_MASM_COMPILER} /Fo ${CMAKE_CURRENT_BINARY_DIR}/x64masm.obj /c ${CMAKE_CURRENT_SOURCE_DIR}/x64masm.asm + ) + ENDIF() +ENDIF() + +######################### +# Crypto++ Static library +######################### +IF(CRYPTOPP_STATIC) + #add_definitions(-DCRYPTOPP_IMPORTS) + IF(CMAKE_CL_64) + SET(CRYPTOPP_SRCS ${CRYPTOPP_SRCS} + ${CMAKE_CURRENT_BINARY_DIR}/x64dll.obj + ${CMAKE_CURRENT_BINARY_DIR}/x64masm.obj + ) + ENDIF() + ADD_LIBRARY(cryptlib STATIC + ${CRYPTOPP_SRCS} + ) + SET_TARGET_PROPERTIES(cryptlib PROPERTIES ${CRYPTOPP_COMPILE_DEFS_OPT} COMPILE_DEFINITIONS CRYPTOPP_LIBRARY_BUILD) + IF(CRYPTOPP_LDFLAGS) + SET_TARGET_PROPERTIES(cryptlib PROPERTIES LINK_FLAGS ${CRYPTOPP_LDFLAGS}) + ENDIF() + SET_TARGET_PROPERTIES(cryptlib PROPERTIES OUTPUT_NAME "cryptopp") + TARGET_LINK_LIBRARIES(cryptlib) + + INSTALL( + TARGETS cryptlib + DESTINATION ${CRYPTOPP_INSTALL_LIB_DIR} + ) +ENDIF() + +######################### +# Crypto++ Shared library +######################### +IF(CRYPTOPP_SHARED) + add_definitions(-DCRYPTOPP_EXPORTS) + ADD_LIBRARY(cryptopp SHARED + ${CRYPTOPP_SRCS_FIPS} + ) + SET_TARGET_PROPERTIES(cryptopp PROPERTIES ${CRYPTOPP_COMPILE_DEFS_OPT} COMPILE_DEFINITIONS CRYPTOPP_LIBRARY_BUILD) + IF(CRYPTOPP_LDFLAGS) + SET_TARGET_PROPERTIES(cryptopp PROPERTIES LINK_FLAGS ${CRYPTOPP_LDFLAGS}) + ENDIF() + TARGET_LINK_LIBRARIES(cryptopp) + + INSTALL( + TARGETS cryptopp + PERMISSIONS ${EXEC_PERMS} + RUNTIME DESTINATION ${CRYPTOPP_INSTALL_BIN_DIR} + LIBRARY DESTINATION ${CRYPTOPP_INSTALL_LIB_DIR} + ARCHIVE DESTINATION ${CRYPTOPP_INSTALL_LIB_DIR} + ) + INSTALL(FILES ${CRYPTOPP_HDRS} + DESTINATION ${CRYPTOPP_INSTALL_INCLUDE_DIR} + ) +ENDIF() + +######################### +# Crypto++ Test +######################### +IF(CRYPTOPP_BUILD_TESTS AND CRYPTOPP_STATIC) + SET(TEST_SRCS + adhoc.cpp + bench.cpp + bench2.cpp + datatest.cpp + dlltest.cpp + fipsalgt.cpp + regtest.cpp + test.cpp + validat1.cpp + validat2.cpp + validat3.cpp + fipstest.cpp + ) + IF(WIN32) + SET(TEST_SRCS ${TEST_SRCS} + bench.h + factory.h + validate.h + ) + ENDIF() + ADD_EXECUTABLE(cryptest ${TEST_SRCS}) + IF(WIN32) + IF(MSVC) + TARGET_LINK_LIBRARIES(cryptest ws2_32.lib cryptlib) + ELSE() + TARGET_LINK_LIBRARIES(cryptest cryptlib ws2_32) + ENDIF() + ENDIF() + FILE(COPY TestData DESTINATION . FILES_MATCHING PATTERN TestData/*) + SET_TARGET_PROPERTIES(cryptest PROPERTIES ${CRYPTOPP_COMPILE_DEFS_OPT}) + IF(CRYPTOPP_LDFLAGS) + SET_TARGET_PROPERTIES(cryptest PROPERTIES LINK_FLAGS ${CRYPTOPP_LDFLAGS}) + ENDIF() +ENDIF() + +#----------------------------------------------------------------------------- +# pkgconfig support +# enabled by default on Unix, disabled by default on other platforms +if(UNIX OR MINGW) + option(BUILD_PKGCONFIG_FILES "Build and install pkg-config files" ON) +else() + option(BUILD_PKGCONFIG_FILES "Build and install pkg-config files" OFF) +endif() +if(BUILD_PKGCONFIG_FILES) + # install in lib and not share (see multi-arch note above) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libcrypto++.pc.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/libcrypto++.pc @ONLY) + install( FILES ${CMAKE_CURRENT_BINARY_DIR}/libcrypto++.pc DESTINATION + ${CRYPTOPP_INSTALL_LIB_DIR}/pkgconfig ) +endif() + diff --git a/libcrypto++.pc.cmake.in b/libcrypto++.pc.cmake.in new file mode 100644 index 0000000..a0c6371 --- /dev/null +++ b/libcrypto++.pc.cmake.in @@ -0,0 +1,12 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +bindir=${prefix}/@CRYPTOPP_INSTALL_BIN_DIR@ +libdir=${prefix}/@CRYPTOPP_INSTALL_LIB_DIR@ +includedir=${prefix}/@CRYPTOPP_INSTALL_INCLUDE_DIR@ + +Name: libcrypto++ +Description: Class library of cryptographic schemes +URL: http://www.cryptopp.com/ +Version: @CRYPTOPP_VERSION@ +Libs: -L${libdir} -lcryptopp +Cflags: -I${includedir} +