From: Dmitry Belyavskiy Date: Fri, 16 Sep 2022 13:32:13 +0000 (+0200) Subject: Make mingw-friendly build X-Git-Url: http://www.wagner.pp.ru/gitweb/?a=commitdiff_plain;h=bdd018198b30328b39a82108efc0d13065888dda;p=openssl-gost%2Fengine.git Make mingw-friendly build --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 3888d44..a83d19d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,9 +12,9 @@ find_package(OpenSSL 1.1.1 REQUIRED) include_directories(${OPENSSL_INCLUDE_DIR}) if (CMAKE_C_COMPILER_ID MATCHES "Clang") - add_compile_options(-O2 -Werror -Wall -Wno-unused-parameter -Wno-unused-function -Wno-missing-braces -ggdb -Qunused-arguments -Wno-deprecated-declarations) + add_compile_options(-O2 -Werror -Wall -Wno-unused-parameter -Wno-unused-function -Wno-missing-braces -Qunused-arguments -Wno-deprecated-declarations) elseif(CMAKE_C_COMPILER_ID MATCHES "GNU") - add_compile_options(-O2 -Werror -Wall -Wno-unused-parameter -Wno-unused-function -Wno-missing-braces -ggdb -Wno-error=unknown-pragmas -Wno-deprecated-declarations) + add_compile_options(-O2 -Werror -Wall -Wno-unused-parameter -Wno-unused-function -Wno-missing-braces -Wno-error=unknown-pragmas -Wno-deprecated-declarations) elseif(CMAKE_C_COMPILER_ID MATCHES "MSVC") add_definitions(-D_CRT_SECURE_NO_WARNINGS) add_definitions(-D_CRT_DEPRECATED_NO_WARNINGS) @@ -22,6 +22,12 @@ elseif(CMAKE_C_COMPILER_ID MATCHES "MSVC") add_compile_options(/MP /WX /W4 /wd4100 /wd4267 /wd4206 /wd4706 /wd4244 /wd4115) endif() +string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type) +if (build_type STREQUAL debug) + message(STATUS "Debug build") + add_compile_options(-ggdb) +endif() + if (ASAN) message(STATUS "address sanitizer enabled") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -g3 -fno-omit-frame-pointer") diff --git a/gost_keyexpimp.c b/gost_keyexpimp.c index 53029a8..12e0eaa 100644 --- a/gost_keyexpimp.c +++ b/gost_keyexpimp.c @@ -5,11 +5,6 @@ * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ -#ifdef _WIN32 -#include -#else -#include -#endif #include #include #include @@ -19,6 +14,19 @@ #include "e_gost_err.h" int omac_imit_ctrl(EVP_MD_CTX *ctx, int type, int arg, void *ptr); + +static uint32_t _htonl(uint32_t n) +{ +#ifdef L_ENDIAN + return ((((n & 0xFF)) << 24) | + (((n & 0xFF00)) << 8) | + (((n & 0xFF0000)) >> 8) | + (((n & 0xFF000000)) >> 24)); +#else + return n; +#endif +} + /* * Function expects that out is a preallocated buffer of length * defined as sum of shared_len and mac length defined by mac_nid @@ -201,7 +209,7 @@ int gost_kdftree2012_256(unsigned char *keyout, size_t keyout_len, unsigned char *ptr = keyout; HMAC_CTX *ctx; unsigned char *len_ptr = NULL; - uint32_t len_repr = htonl(keyout_len * 8); + uint32_t len_repr = _htonl(keyout_len * 8); size_t len_repr_len = 4; ctx = HMAC_CTX_new(); @@ -223,7 +231,7 @@ int gost_kdftree2012_256(unsigned char *keyout, size_t keyout_len, } for (i = 1; i <= iters; i++) { - uint32_t iter_net = htonl(i); + uint32_t iter_net = _htonl(i); unsigned char *rep_ptr = ((unsigned char *)&iter_net) + (4 - representation); diff --git a/mingw-w64.cmake b/mingw-w64.cmake new file mode 100644 index 0000000..b85d88d --- /dev/null +++ b/mingw-w64.cmake @@ -0,0 +1,24 @@ +# Sample toolchain file for building for Windows from an Ubuntu Linux system. +# +# Typical usage: +# *) install cross compiler: `sudo apt-get install mingw-w64` +# *) cd build +# *) cmake -DCMAKE_TOOLCHAIN_FILE=~/mingw-w64-x86_64.cmake .. + +set(CMAKE_SYSTEM_NAME Windows) +if (DEFINED WIN32_TARGET_CPU) + set(TOOLCHAIN_PREFIX ${WIN32_TARGET_CPU}-w64-mingw32) +else() + set(TOOLCHAIN_PREFIX i686-w64-mingw32) +endif() + +# cross compilers to use for C, C++ and Fortran +set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) +set(CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran) +set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) + +set(RELAXED_ALIGNMENT_EXITCODE FALSE) +set(RELAXED_ALIGNMENT_EXITCODE__TRYRUN_OUTPUT = "gost-engine") + +