]> www.wagner.pp.ru Git - openssl-gost/engine.git/blob - CMakeLists.txt
Add test_context to test context copy
[openssl-gost/engine.git] / CMakeLists.txt
1 cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
2 project(gost-engine LANGUAGES C)
3
4 include(GNUInstallDirs)
5
6 enable_testing()
7
8 find_package(OpenSSL 1.1.1 REQUIRED)
9 include_directories(${OPENSSL_INCLUDE_DIR})
10
11 if (CMAKE_C_COMPILER_ID MATCHES "Clang")
12  add_compile_options(-Qunused-arguments)
13 elseif(CMAKE_C_COMPILER_ID MATCHES "GNU")
14  add_compile_options(-O2 -Werror -Wall -Wno-unused-parameter -Wno-unused-function -Wno-missing-braces -ggdb)
15 elseif(CMAKE_C_COMPILER_ID MATCHES "MSVC")
16  add_definitions(-D_CRT_SECURE_NO_WARNINGS)
17  add_definitions(-D_CRT_DEPRECATED_NO_WARNINGS)
18  add_definitions(-D_CRT_NONSTDC_NO_WARNINGS)
19  add_compile_options(/MP /WX /W4 /wd4100 /wd4267 /wd4206 /wd4706 /wd4244 /wd4115)
20 endif()
21
22 set(CMAKE_C_STANDARD 90)
23
24 include (TestBigEndian)
25 TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
26 if(IS_BIG_ENDIAN)
27  message(STATUS "BIG_ENDIAN")
28 else()
29  message(STATUS "LITTLE_ENDIAN")
30  add_definitions(-DL_ENDIAN)
31 endif()
32
33 set(BIN_DIRECTORY bin)
34
35 set(OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/${BIN_DIRECTORY})
36
37 #set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY})
38 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY})
39 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY})
40
41 set(GOST_89_SOURCE_FILES
42         gost89.c
43         gost89.h
44         )
45
46 set(GOST_HASH_SOURCE_FILES
47         gosthash.c
48         gosthash.h
49         )
50
51 set(GOST_HASH_2012_SOURCE_FILES
52         gosthash2012.c
53         gosthash2012.h
54         gosthash2012_const.h
55         gosthash2012_precalc.h
56         gosthash2012_ref.h
57         gosthash2012_sse2.h
58         )
59
60 set(GOST_GRASSHOPPER_SOURCE_FILES
61         gost_grasshopper.h
62         gost_grasshopper_core.h
63         gost_grasshopper_core.c
64         gost_grasshopper_defines.h
65         gost_grasshopper_defines.c
66         gost_grasshopper_math.h
67         gost_grasshopper_galois_precompiled.c
68         gost_grasshopper_precompiled.c
69         gost_grasshopper_cipher.h
70         gost_grasshopper_cipher.c
71         )
72
73 set(GOST_CORE_SOURCE_FILES
74         e_gost_err.c
75         e_gost_err.h
76         gost_asn1.c
77         gost_crypt.c
78         gost_ctl.c
79         gost_eng.c
80         gost_keywrap.c
81         gost_keywrap.h
82         gost_lcl.h
83         gost_params.c
84         gost_keyexpimp.c
85         )
86
87 set(GOST_EC_SOURCE_FILES
88         gost_ec_keyx.c
89         gost_ec_sign.c
90         )
91
92 set (GOST_OMAC_SOURCE_FILES
93         gost_omac.c
94         gost_omac_acpkm.c
95         )
96
97 set(GOST_LIB_SOURCE_FILES
98         ${GOST_89_SOURCE_FILES}
99         ${GOST_HASH_SOURCE_FILES}
100         ${GOST_HASH_2012_SOURCE_FILES}
101         ${GOST_GRASSHOPPER_SOURCE_FILES}
102         ${GOST_EC_SOURCE_FILES}
103         ${GOST_OMAC_SOURCE_FILES}
104         )
105
106 set(GOST_ENGINE_SOURCE_FILES
107         ${GOST_CORE_SOURCE_FILES}
108         gost_ameth.c
109         gost_md.c
110         gost_md2012.c
111         gost_pmeth.c
112         gost_omac.c
113         gost_omac_acpkm.c
114         )
115
116 add_executable(test_context test_context.c)
117 target_link_libraries(test_context gost_engine gost_core ${OPENSSL_CRYPTO_LIBRARY})
118 add_test(NAME context
119         COMMAND test_context)
120
121 add_executable(test_grasshopper test_grasshopper.c)
122 target_link_libraries(test_grasshopper gost_engine gost_core ${OPENSSL_CRYPTO_LIBRARY})
123 add_test(NAME grasshopper
124         COMMAND test_grasshopper)
125
126 add_test(NAME engine
127          COMMAND perl run_tests
128          WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/test)
129
130 add_library(gost_core STATIC ${GOST_LIB_SOURCE_FILES})
131 set_target_properties(gost_core PROPERTIES POSITION_INDEPENDENT_CODE ON)
132
133 add_library(gost_engine MODULE ${GOST_ENGINE_SOURCE_FILES})
134 set_target_properties(gost_engine PROPERTIES PREFIX "" OUTPUT_NAME "gost")
135 target_link_libraries(gost_engine gost_core ${OPENSSL_CRYPTO_LIBRARY})
136
137 set(GOST_SUM_SOURCE_FILES
138         gostsum.c
139         )
140
141 add_executable(gostsum ${GOST_SUM_SOURCE_FILES})
142 target_link_libraries(gostsum gost_core)
143
144 set(GOST_12_SUM_SOURCE_FILES
145         gost12sum.c
146         )
147
148 add_executable(gost12sum ${GOST_12_SUM_SOURCE_FILES})
149 target_link_libraries(gost12sum gost_core)
150
151 add_executable(unit_expimp gost_keyexpimp.c e_gost_err.c)
152 target_compile_definitions(unit_expimp PUBLIC -DENABLE_UNIT_TESTS)
153 target_compile_definitions(unit_expimp PUBLIC -DOPENSSL_LOAD_CONF)
154 target_link_libraries(unit_expimp PUBLIC ${OPENSSL_CRYPTO_LIBRARY})
155
156 set_source_files_properties(tags PROPERTIES GENERATED true)
157 add_custom_target(tags
158     COMMAND ctags -R . ${OPENSSL_ROOT_DIR}
159     WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
160
161 # install
162 set(OPENSSL_ENGINES_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/engines-${OPENSSL_VERSION_MAJOR}_${OPENSSL_VERSION_MINOR})
163 set(OPENSSL_MAN_INSTALL_DIR ${CMAKE_INSTALL_MANDIR}/man1)
164
165 install(TARGETS gost_engine gostsum gost12sum EXPORT GostEngineConfig
166         LIBRARY  DESTINATION ${OPENSSL_ENGINES_INSTALL_DIR}
167         RUNTIME  DESTINATION ${CMAKE_INSTALL_BINDIR})
168 install(FILES gostsum.1 gost12sum.1 DESTINATION ${OPENSSL_MAN_INSTALL_DIR})
169 if (MSVC)
170  install(FILES $<TARGET_PDB_FILE:gost_engine> DESTINATION ${OPENSSL_ENGINES_INSTALL_DIR} OPTIONAL)
171  install(FILES $<TARGET_PDB_FILE:gostsum> $<TARGET_PDB_FILE:gost12sum> DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL)
172 endif()