123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366 |
- cmake_minimum_required(VERSION 3.6)
- project(GmSSL)
- SET(CMAKE_PROJECT_HOMEPAGE_URL "http://gmssl.org")
- set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
- set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
- SET(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake")
- include_directories(include)
- set(src
- src/version.c
- src/debug.c
- src/sm4_common.c
- src/sm4_enc.c
- src/sm4_modes.c
- src/sm4_setkey.c
- src/sm3.c
- src/sm3_hmac.c
- src/sm3_kdf.c
- src/sm2_alg.c
- src/sm2_key.c
- src/sm2_lib.c
- src/sm9_alg.c
- src/sm9_key.c
- src/sm9_lib.c
- src/zuc.c
- src/zuc_modes.c
- src/aes.c
- src/aes_modes.c
- src/sha256.c
- src/sha512.c
- src/chacha20.c
- src/hash_drbg.c
- src/block_cipher.c
- src/digest.c
- src/hmac.c
- src/hkdf.c
- src/pbkdf2.c
- src/gf128.c
- src/gcm.c
- src/aead.c
- src/pkcs8.c
- src/ec.c
- src/rsa.c
- src/asn1.c
- src/hex.c
- src/base64.c
- src/pem.c
- src/x509_alg.c
- src/x509_cer.c
- src/x509_ext.c
- src/x509_req.c
- src/x509_crl.c
- src/x509_new.c
- src/cms.c
- src/sdf/sdf.c
- src/sdf/sdf_lib.c
- src/sdf/sdf_meth.c
- src/sdf/sdf_ext.c
- src/sdf/sdf_sansec.c
- src/skf/skf.c
- src/skf/skf_lib.c
- src/skf/skf_meth.c
- src/skf/skf_ext.c
- src/skf/skf_prn.c
- src/skf/skf_wisec.c
- src/socket.c
- src/tls.c
- src/tls_ext.c
- src/tls_trace.c
- src/tlcp.c
- src/tls12.c
- src/tls13.c
- src/file.c
- )
- set(tools
- tools/gmssl.c
- tools/version.c
- tools/sm4.c
- tools/sm3.c
- tools/sm3hmac.c
- tools/sm2keygen.c
- tools/sm2sign.c
- tools/sm2verify.c
- tools/sm2encrypt.c
- tools/sm2decrypt.c
- tools/sm9setup.c
- tools/sm9keygen.c
- tools/sm9sign.c
- tools/sm9verify.c
- tools/sm9encrypt.c
- tools/sm9decrypt.c
- tools/zuc.c
- tools/rand.c
- tools/pbkdf2.c
- tools/certgen.c
- tools/certparse.c
- tools/certverify.c
- tools/certrevoke.c
- tools/reqgen.c
- tools/reqparse.c
- tools/reqsign.c
- tools/crlgen.c
- tools/crlget.c
- tools/crlparse.c
- tools/crlverify.c
- tools/cmssign.c
- tools/cmsverify.c
- tools/cmsencrypt.c
- tools/cmsdecrypt.c
- tools/cmsparse.c
- tools/sdfutil.c
- tools/skfutil.c
- tools/tlcp_client.c
- tools/tlcp_server.c
- tools/tls12_client.c
- tools/tls12_server.c
- tools/tls13_client.c
- tools/tls13_server.c
- )
- set(tests
- sm4
- sm3
- sm2
- sm9
- zuc
- aes
- sha224
- sha256
- sha384
- sha512
- chacha20
- hash_drbg
- block_cipher
- digest
- hmac
- hkdf
- pbkdf2
- gf128
- gcm
- aead
- pkcs8
- ec
- asn1
- hex
- base64
- pem
- x509
- x509_oid
- x509_alg
- x509_str
- x509_ext
- x509_req
- x509_crl
- cms
- tls
- tls13
- )
- set(demos
- demo_sm2_encrypt
- demo_sm2_keygen
- demo_sm2_keyparse
- demo_sm2_private_key
- demo_sm2_private_key_parse
- demo_sm2_public_key
- demo_sm2_sign
- demo_sm2_sign_ctx
- demo_sm3
- demo_sm3_hmac
- demo_sm3_kdf
- demo_sm4
- demo_sm4_cbc
- demo_sm4_cbc_decrypt_update
- demo_sm4_cbc_encrypt_update
- demo_sm4_cbc_padding
- demo_sm4_ctr
- demo_sm4_ctr_encrypt_update
- demo_sm4_gcm
- demo_sm9_encrypt
- demo_sm9_keygen
- demo_sm9_sign
- # demo_tlcp_get
- # demo_tlcp_post
- # demo_wget
- demo_zuc
- )
- # when an option has been enabled, `cmake ..` will not refresh the value
- # use `cmake .. -DENABLE_XXX=OFF` to disable the option
- option(ENABLE_SM2_ALGOR_ID_ENCODE_NULL "Enable AlgorithmIdenifier with algorithm sm2sign_with_sm3 encode a NULL object as parameters" OFF)
- if (ENABLE_SM2_ALGOR_ID_ENCODE_NULL)
- message(STATUS "ENABLE_SM2_ALGOR_ID_ENCODE_NULL")
- add_definitions(-DSM2_ALGOR_ID_ENCODE_NULL)
- endif()
- option(ENABLE_SM2_PRIVATE_KEY_EXPORT "Enable export un-encrypted SM2 private key" OFF)
- if (ENABLE_SM2_PRIVATE_KEY_EXPORT)
- message(STATUS "ENABLE_SM2_PRIVATE_KEY_EXPORT")
- add_definitions(-DSM2_PRIVATE_KEY_EXPORT)
- list(APPEND demos demo_sm2_key_export)
- endif()
- option(ENABLE_TLS_DEBUG "Enable TLS and TLCP print debug message" OFF)
- if (ENABLE_TLS_DEBUG)
- message(STATUS "ENABLE_TLS_DEBUG")
- add_definitions(-DTLS_DEBUG)
- endif()
- option(ENABLE_SM3_AVX_BMI2 "Enable SM3 AVX+BMI2 assembly implementation" OFF)
- if (ENABLE_SM3_AVX_BMI2)
- message(STATUS "ENABLE_SM3_AVX_BMI2")
- add_definitions(-DSM3_AVX_BMI2)
- enable_language(ASM)
- list(APPEND src src/sm3_avx_bmi2.s)
- endif()
- option(ENABLE_SM4_AESNI_AVX "Enable SM4 AESNI+AVX assembly implementation" OFF)
- if (ENABLE_SM4_AESNI_AVX)
- message(STATUS "ENABLE_SM4_AESNI_AVX")
- add_definitions(-DSM4_AESNI_AVX)
- list(APPEND src src/sm4_aesni_avx.c)
- list(APPEND tests sm4_aesni_avx)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
- endif()
- option(ENABLE_SM2_EXTS "Enable SM2 Extensions" OFF)
- if (ENABLE_SM2_EXTS)
- message(STATUS "ENABLE_SM4_AESNI_AVX")
- list(APPEND src
- src/sm2_key_share.c
- src/sm2_recover.c
- src/sm2_blind.c
- src/sm2_ring.c
- src/sm2_elgamal.c
- src/sm2_commit.c)
- list(APPEND tests sm2_key_share sm2_blind sm2_ring sm2_elgamal sm2_commit)
- endif()
- option(ENABLE_BROKEN_CRYPTO "Enable broken crypto algorithms" OFF)
- if (ENABLE_BROKEN_CRYPTO)
- message(STATUS "ENABLE_BROKEN_CRYPTO")
- list(APPEND src src/des.c src/sha1.c src/md5.c src/rc4.c)
- list(APPEND tests des sha1 md5 rc4)
- endif()
- option(ENABLE_RDRND "Enable Intel RDRND instructions" OFF)
- if (${CMAKE_SYSTEM_PROCESSOR} MATCHES x86_64)
- set(ENABLE_RDRND ON)
- endif()
- if (ENABLE_RDRND)
- message(STATUS "ENABLE_RDRND")
- list(APPEND src src/rdrand.c)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mrdrnd -mrdseed")
- endif()
- option(ENABLE_GMT_0105_RNG "Enable GM/T 0105 Software RNG" OFF)
- if (ENABLE_GMT_0105_RNG)
- message(STATUS "ENABLE_GMT_0105_RNG")
- list(APPEND src src/sm3_rng.c src/sm4_cbc_mac.c src/sm4_rng.c)
- list(APPEND tests sm3_rng sm4_cbc_mac sm4_rng)
- endif()
- if (WIN32)
- list(APPEND src src/rand_win.c src/http_win.c)
- elseif (APPLE)
- list(APPEND src src/rand_apple.c src/http.c)
- elseif (ANDROID)
- list(APPEND src src/rand.c src/http.c)
- else()
- list(APPEND src src/rand_unix.c src/http.c)
- endif()
- option(ENABLE_HTTP_TESTS "Enable HTTP GET/POST related tests" OFF)
- if (ENABLE_HTTP_TESTS)
- message(STATUS "ENABLE_HTTP_TESTS")
- list(APPEND tests http http_crl)
- endif()
- option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
- if (CMAKE_C_COMPILER_ID MATCHES "MSVC")
- message(STATUS "CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS")
- set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) # set before add_library
- endif()
- add_library(gmssl ${src})
- if (WIN32)
- target_link_libraries(gmssl -lws2_32)
- elseif (APPLE)
- target_link_libraries(gmssl dl)
- target_link_libraries(gmssl "-framework Security")
- #target_link_libraries(gmssl "-framework CoreFoundation") # rand_apple.c CFRelease()
- elseif (MINGW)
- target_link_libraries(gmssl PRIVATE wsock32)
- else()
- target_link_libraries(gmssl dl)
- endif()
- SET_TARGET_PROPERTIES(gmssl PROPERTIES VERSION 3.0 SOVERSION 3)
- install(TARGETS gmssl ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin)
- install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/gmssl DESTINATION include)
- if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "iOS")
- add_library(sdf_dummy SHARED src/sdf/sdf_dummy.c)
- set_target_properties(sdf_dummy PROPERTIES VERSION 3.0 SOVERSION 3)
- add_library(skf_dummy SHARED src/skf/skf_dummy.c)
- set_target_properties(skf_dummy PROPERTIES VERSION 3.0 SOVERSION 3)
- add_executable(gmssl-bin ${tools})
- target_link_libraries(gmssl-bin LINK_PUBLIC gmssl)
- set_target_properties(gmssl-bin PROPERTIES RUNTIME_OUTPUT_NAME gmssl)
- if (MINGW)
- target_link_libraries(gmssl-bin PRIVATE Ws2_32)
- endif()
- enable_testing()
- foreach(name ${tests})
- add_test(NAME ${name} COMMAND ${name}test)
- add_executable(${name}test tests/${name}test.c)
- target_link_libraries (${name}test LINK_PUBLIC gmssl)
- endforeach()
- foreach(name ${demos})
- add_executable(${name} demos/src/${name}.c)
- target_link_libraries(${name} LINK_PUBLIC gmssl)
- endforeach()
- install(TARGETS gmssl-bin RUNTIME DESTINATION bin)
- endif()
- if (CMAKE_C_COMPILER_ID MATCHES "MSVC")
- set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT gmssl-bin)
- set(CMAKE_INSTALL_PREFIX "C:/Program Files/GmSSL") # change by `cmake -DCMAKE_INSTALL_PREFIX=C:\path\to\install`
- # run `set path=%path%;C:\Program Files\GmSSL\bin`
- add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
- # target_compile_options(gmssl PRIVATE /wd4996)
- # target_compile_options(gmssl-bin PRIVATE /wd4996)
- endif()
- if (UNIX)
- # packaging
- include(LinuxPacking)
- include(DebPacking)
- include(RpmPacking)
- include(CPack)
- endif (UNIX)
|