diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ae17b7f..89cbd6c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,25 +1,17 @@ cmake_minimum_required(VERSION 3.0) project(GmSSL) -#set(CMAKE_MACOSX_RPATH 1) -SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) -SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) +set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) -if (CMAKE_VERSION VERSION_LESS "3.1") - if (CMAKE_C_COMPILER_ID STREQUAL "GNU") - set (CMAKE_C_FLAGS "-std=gnu99 ${CMAKE_C_FLAGS}") - endif () -else () - set (CMAKE_C_STANDARD 99) -endif () - -#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mrdrnd -mrdseed") +option(BUILD_SHARED_LIBS "Build using shared libraries" ON) include_directories(include) -add_library( - gmssl - SHARED +#enable_language(ASM) + + +set(src src/version.c src/debug.c src/sm4_common.c @@ -42,13 +34,8 @@ add_library( src/sha256.c src/sha512.c src/chacha20.c - src/des.c - src/sha1.c - src/md5.c - src/rc4.c src/rand.c src/hash_drbg.c -# src/rdrand.c src/block_cipher.c src/digest.c src/hmac.c @@ -90,18 +77,40 @@ add_library( src/tls13.c ) -target_link_libraries(gmssl dl) +set(broken_crypto_src + src/des.c + src/sha1.c + src/md5.c + src/rc4.c +) + +# FIXME: change this default to OFF +option(ENABLE_BROKEN_CRYPTO "Enable broken crypto algorithms" ON) + +if (ENABLE_BROKEN_CRYPTO) + list(APPEND src ${broken_crypto_src}) +endif() + +option(ENABLE_RDRND "Enable Intel RDRND instructions" OFF) + +if (${CMAKE_SYSTEM_PROCESSOR} MATCHES x86_64) + set(ENABLE_RDRND ON) +endif() + +if (ENABLE_RDRND) + list(APPEND src src/rdrand.c) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mrdrnd -mrdseed") +endif() + + + +add_library(gmssl ${src}) + + +#target_link_libraries(gmssl dl) SET_TARGET_PROPERTIES(gmssl PROPERTIES VERSION 3.0 SOVERSION 3) -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 +set(tools tools/gmssl.c tools/version.c tools/sm4.c @@ -144,133 +153,80 @@ add_executable( tools/tls13_server.c ) -target_link_libraries (gmssl-bin LINK_PUBLIC gmssl) -set_target_properties (gmssl-bin PROPERTIES RUNTIME_OUTPUT_NAME gmssl) +add_library(sdf_dummy SHARED src/sdf/sdf_dummy.c) +SET_TARGET_PROPERTIES(sdf_dummy PROPERTIES VERSION 3.0 SOVERSION 3) -enable_testing() - -add_test(NAME sm4 COMMAND sm4test) -add_test(NAME sm3 COMMAND sm3test) -add_test(NAME sm2 COMMAND sm2test) -add_test(NAME sm9 COMMAND sm9test) -add_test(NAME zuc COMMAND zuctest) -add_test(NAME aes COMMAND aestest) -add_test(NAME sha224 COMMAND sha224test) -add_test(NAME sha256 COMMAND sha256test) -add_test(NAME sha384 COMMAND sha384test) -add_test(NAME sha512 COMMAND sha512test) -add_test(NAME chacha20 COMMAND chacha20test) -add_test(NAME des COMMAND destest) -add_test(NAME sha1 COMMAND sha1test) -add_test(NAME md5 COMMAND md5test) -add_test(NAME rc4 COMMAND rc4test) -add_test(NAME hash_drbg COMMAND hash_drbgtest) -add_test(NAME block_cipher COMMAND block_ciphertest) -add_test(NAME digest COMMAND digesttest) -add_test(NAME hmac COMMAND hmactest) -add_test(NAME hkdf COMMAND hkdftest) -add_test(NAME pbkdf2 COMMAND pbkdf2test) -add_test(NAME gf128 COMMAND gf128test) -add_test(NAME gcm COMMAND gcmtest) -add_test(NAME pkcs8 COMMAND pkcs8test) -add_test(NAME ec COMMAND ectest) -add_test(NAME asn1 COMMAND asn1test) -add_test(NAME hex COMMAND hextest) -add_test(NAME base64 COMMAND base64test) -add_test(NAME pem COMMAND pemtest) -add_test(NAME x509 COMMAND x509test) -add_test(NAME x509_oid COMMAND x509_oidtest) -add_test(NAME x509_alg COMMAND x509_algtest) -add_test(NAME x509_str COMMAND x509_strtest) -add_test(NAME x509_ext COMMAND x509_exttest) -add_test(NAME x509_req COMMAND x509_reqtest) -add_test(NAME x509_crl COMMAND x509_crltest) -add_test(NAME cms COMMAND cmstest) -add_test(NAME tls COMMAND tlstest) -add_test(NAME tls13 COMMAND tls13test) +add_library(skf_dummy SHARED src/skf/skf_dummy.c) +SET_TARGET_PROPERTIES(skf_dummy PROPERTIES VERSION 3.0 SOVERSION 3) -add_executable(sm4test tests/sm4test.c) -target_link_libraries (sm4test LINK_PUBLIC gmssl) -add_executable(sm3test tests/sm3test.c) -target_link_libraries (sm3test LINK_PUBLIC gmssl) -add_executable(sm2test tests/sm2test.c) -target_link_libraries (sm2test LINK_PUBLIC gmssl) -add_executable(sm9test tests/sm9test.c) -target_link_libraries (sm9test LINK_PUBLIC gmssl) -add_executable(zuctest tests/zuctest.c) -target_link_libraries (zuctest LINK_PUBLIC gmssl) -add_executable(aestest tests/aestest.c) -target_link_libraries (aestest LINK_PUBLIC gmssl) -add_executable(sha224test tests/sha224test.c) -target_link_libraries (sha224test LINK_PUBLIC gmssl) -add_executable(sha256test tests/sha256test.c) -target_link_libraries (sha256test LINK_PUBLIC gmssl) -add_executable(sha384test tests/sha384test.c) -target_link_libraries (sha384test LINK_PUBLIC gmssl) -add_executable(sha512test tests/sha512test.c) -target_link_libraries (sha512test LINK_PUBLIC gmssl) -add_executable(chacha20test tests/chacha20test.c) -target_link_libraries (chacha20test LINK_PUBLIC gmssl) -add_executable(destest tests/destest.c) -target_link_libraries (destest LINK_PUBLIC gmssl) -add_executable(sha1test tests/sha1test.c) -target_link_libraries (sha1test LINK_PUBLIC gmssl) -add_executable(md5test tests/md5test.c) -target_link_libraries (md5test LINK_PUBLIC gmssl) -add_executable(rc4test tests/rc4test.c) -target_link_libraries (rc4test LINK_PUBLIC gmssl) -add_executable(hash_drbgtest tests/hash_drbgtest.c) -target_link_libraries (hash_drbgtest LINK_PUBLIC gmssl) -add_executable(block_ciphertest tests/block_ciphertest.c) -target_link_libraries (block_ciphertest LINK_PUBLIC gmssl) -add_executable(digesttest tests/digesttest.c) -target_link_libraries (digesttest LINK_PUBLIC gmssl) -add_executable(hmactest tests/hmactest.c) -target_link_libraries (hmactest LINK_PUBLIC gmssl) -add_executable(hkdftest tests/hkdftest.c) -target_link_libraries (hkdftest LINK_PUBLIC gmssl) -add_executable(pbkdf2test tests/pbkdf2test.c) -target_link_libraries (pbkdf2test LINK_PUBLIC gmssl) -add_executable(gf128test tests/gf128test.c) -target_link_libraries (gf128test LINK_PUBLIC gmssl) -add_executable(gcmtest tests/gcmtest.c) -target_link_libraries (gcmtest LINK_PUBLIC gmssl) -add_executable(pkcs8test tests/pkcs8test.c) -target_link_libraries (pkcs8test LINK_PUBLIC gmssl) -add_executable(ectest tests/ectest.c) -target_link_libraries (ectest LINK_PUBLIC gmssl) -add_executable(asn1test tests/asn1test.c) -target_link_libraries (asn1test LINK_PUBLIC gmssl) -add_executable(hextest tests/hextest.c) -target_link_libraries (hextest LINK_PUBLIC gmssl) -add_executable(base64test tests/base64test.c) -target_link_libraries (base64test LINK_PUBLIC gmssl) -add_executable(pemtest tests/pemtest.c) -target_link_libraries (pemtest LINK_PUBLIC gmssl) -add_executable(x509test tests/x509test.c) -target_link_libraries (x509test LINK_PUBLIC gmssl) -add_executable(x509_oidtest tests/x509_oidtest.c) -target_link_libraries (x509_oidtest LINK_PUBLIC gmssl) -add_executable(x509_algtest tests/x509_algtest.c) -target_link_libraries (x509_algtest LINK_PUBLIC gmssl) -add_executable(x509_strtest tests/x509_strtest.c) -target_link_libraries (x509_strtest LINK_PUBLIC gmssl) -add_executable(x509_exttest tests/x509_exttest.c) -target_link_libraries (x509_exttest LINK_PUBLIC gmssl) -add_executable(x509_reqtest tests/x509_reqtest.c) -target_link_libraries (x509_reqtest LINK_PUBLIC gmssl) -add_executable(x509_crltest tests/x509_crltest.c) -target_link_libraries (x509_crltest LINK_PUBLIC gmssl) -add_executable(cmstest tests/cmstest.c) -target_link_libraries (cmstest LINK_PUBLIC gmssl) -add_executable(tlstest tests/tlstest.c) -target_link_libraries (tlstest LINK_PUBLIC gmssl) -add_executable(tls13test tests/tls13test.c) -target_link_libraries (tls13test LINK_PUBLIC gmssl) +set(tests + sm4 + sm3 + sm2 + sm9 + zuc + aes + sha224 + sha256 + sha384 + sha512 + chacha20 + hash_drbg + block_cipher + digest + hmac + hkdf + pbkdf2 + gf128 + gcm + pkcs8 + ec + asn1 + hex + base64 + pem + x509 + x509_oid + x509_alg + x509_str + x509_ext + x509_req + x509_crl + cms + tls + tls13 +) + +set(broken_crypto_tests + des + sha1 + md5 + rc4 +) + +if (ENABLE_BROKEN_CRYPTO) + list(APPEND tests ${broken_crypto_tests}) +endif() INSTALL(TARGETS gmssl ARCHIVE DESTINATION lib LIBRARY DESTINATION lib) INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/include/gmssl DESTINATION include) -INSTALL(TARGETS gmssl-bin RUNTIME DESTINATION bin) + +if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "iOS") + + add_executable(gmssl-bin ${tools}) + target_link_libraries (gmssl-bin LINK_PUBLIC gmssl) + set_target_properties (gmssl-bin PROPERTIES RUNTIME_OUTPUT_NAME gmssl) + + 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() + + + INSTALL(TARGETS gmssl-bin RUNTIME DESTINATION bin) +endif()