cmake_minimum_required(VERSION 2.8) project(ccgost C) find_package(OpenSSL 1.1 REQUIRED) include_directories(${OPENSSL_INCLUDE_DIR}) enable_testing() if (CMAKE_C_COMPILER_ID MATCHES "Clang") message(STATUS "Using Clang and adding -Qunused-arguments flag") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Qunused-arguments") endif() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c98 -O3 -Werror -Qunused-arguments -Wno-unused-function -Wno-missing-braces -Wall") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -Werror -Wall -Wno-unused-parameter -Wno-unused-function -Wno-missing-braces -ggdb") include (TestBigEndian) TEST_BIG_ENDIAN(IS_BIG_ENDIAN) if(IS_BIG_ENDIAN) message(STATUS "BIG_ENDIAN") else() message(STATUS "LITTLE_ENDIAN") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c98 -O3 -Werror -Wall") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DL_ENDIAN") endif() set(BIN_DIRECTORY bin) # Same soversion as OpenSSL set(GOST_SOVERSION "${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_MINOR}") set(OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/${BIN_DIRECTORY}) #set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}) set(GOST_89_SOURCE_FILES gost89.c gost89.h ) set(GOST_HASH_SOURCE_FILES gosthash.c gosthash.h ) set(GOST_HASH_2012_SOURCE_FILES gosthash2012.c gosthash2012.h gosthash2012_const.h gosthash2012_precalc.h gosthash2012_ref.h gosthash2012_sse2.h ) set(GOST_GRASSHOPPER_SOURCE_FILES gost_grasshopper.h gost_grasshopper_core.h gost_grasshopper_core.c gost_grasshopper_defines.h gost_grasshopper_defines.c gost_grasshopper_math.h gost_grasshopper_galois_precompiled.c gost_grasshopper_precompiled.c gost_grasshopper_cipher.h gost_grasshopper_cipher.c gost_grasshopper_mac.h gost_grasshopper_mac.c ) set(GOST_CORE_SOURCE_FILES e_gost_err.c e_gost_err.h gost_asn1.c gost_crypt.c gost_ctl.c gost_eng.c gost_keywrap.c gost_keywrap.h gost_lcl.h gost_params.c ) set(GOST_EC_SOURCE_FILES gost_ec_keyx.c gost_ec_sign.c ) set(GOST_LIB_SOURCE_FILES ${GOST_EC_SOURCE_FILES} ${GOST_89_SOURCE_FILES} ${GOST_HASH_SOURCE_FILES} ${GOST_GRASSHOPPER_SOURCE_FILES} ${GOST_HASH_2012_SOURCE_FILES}) set(GOST_ENGINE_SOURCE_FILES ${GOST_CORE_SOURCE_FILES} gost_ameth.c gost_md.c gost_md2012.c gost_pmeth.c) add_test(NAME engine COMMAND perl run_tests WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/test) add_executable(test_grasshopper test_grasshopper.c) target_link_libraries(test_grasshopper gost_engine gost ${OPENSSL_CRYPTO_LIBRARY}) add_test(NAME grasshopper COMMAND test_grasshopper) add_library(gost STATIC ${GOST_LIB_SOURCE_FILES}) set_target_properties(gost PROPERTIES POSITION_INDEPENDENT_CODE ON) add_library(gost_engine SHARED ${GOST_ENGINE_SOURCE_FILES}) set_target_properties(gost_engine PROPERTIES PREFIX "" OUTPUT_NAME "gost") set_target_properties(gost_engine PROPERTIES VERSION ${GOST_SOVERSION} SOVERSION ${GOST_SOVERSION}) target_link_libraries(gost_engine ${OPENSSL_CRYPTO_LIBRARY} gost) set(GOST_12_SUM_SOURCE_FILES gost12sum.c ) add_executable(gost12sum ${GOST_12_SUM_SOURCE_FILES}) target_link_libraries(gost12sum gost) set(GOST_SUM_SOURCE_FILES gostsum.c ) add_executable(gostsum ${GOST_SUM_SOURCE_FILES}) target_link_libraries(gostsum gost) set(GOST_SUM_12_SOURCE_FILES gostsum12.c ) #add_executable(gostsum12 ${GOST_SUM_12_SOURCE_FILES}) # #target_link_libraries(gostsum12 gost)