mirror of
https://github.com/OpenVPN/openvpn.git
synced 2025-05-07 20:55:53 +08:00
Add building/testing with msbuild and the clang compiler
The LLVM/clang compiler warning and error message are easier too read than their MSVC cl counterparts. Also compiling/running tests on Windows with a different compiler has the benefit of a better coverage. This includes a few minor changes to allow clang-cl to compile the project. Change-Id: I43d84034f3e920a45731c4aab4f851a60921290d Signed-off-by: Arne Schwabe <arne@rfc2549.org> Acked-by: Lev Stipakov <lstipakov@gmail.com> Message-Id: <20241227112209.11572-1-gert@greenie.muc.de> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg30231.html Signed-off-by: Gert Doering <gert@greenie.muc.de>
This commit is contained in:
parent
bd629d7c8b
commit
c815217ab6
2
.github/workflows/build.yaml
vendored
2
.github/workflows/build.yaml
vendored
@ -259,7 +259,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch: [amd64, x86, arm64]
|
||||
arch: [amd64, x86, arm64, amd64-clang, x86-clang]
|
||||
|
||||
name: "msbuild - ${{ matrix.arch }} - openssl"
|
||||
env:
|
||||
|
@ -627,7 +627,8 @@ if (BUILD_TESTING)
|
||||
check_linker_flag(C -Wl,--wrap=parse_line LD_SUPPORTS_WRAP)
|
||||
endif()
|
||||
|
||||
if (${LD_SUPPORTS_WRAP})
|
||||
# Clang-cl (which is also MSVC) is wrongly detected to support wrap
|
||||
if (NOT MSVC AND "${LD_SUPPORTS_WRAP}")
|
||||
list(APPEND unit_tests
|
||||
"test_argv"
|
||||
"test_tls_crypt"
|
||||
|
@ -121,6 +121,10 @@
|
||||
"CMAKE_BUILD_TYPE": "Release"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "clangtoolset",
|
||||
"toolset": "ClangCL"
|
||||
},
|
||||
{
|
||||
"name": "mingw-x64",
|
||||
"inherits": [ "base", "base-mingw", "x64-mingw" ]
|
||||
@ -133,6 +137,10 @@
|
||||
"name": "win-amd64-release",
|
||||
"inherits": [ "base", "base-windows", "x64", "release" ]
|
||||
},
|
||||
{
|
||||
"name": "win-amd64-clang-release",
|
||||
"inherits": [ "base", "base-windows", "clangtoolset", "x64", "release" ]
|
||||
},
|
||||
{
|
||||
"name": "win-arm64-release",
|
||||
"inherits": [ "base", "base-windows", "arm64", "release" ]
|
||||
@ -141,10 +149,18 @@
|
||||
"name": "win-x86-release",
|
||||
"inherits": [ "base", "base-windows", "x86", "release" ]
|
||||
},
|
||||
{
|
||||
"name": "win-x86-clang-release",
|
||||
"inherits": [ "base", "base-windows", "clangtoolset", "x86", "release" ]
|
||||
},
|
||||
{
|
||||
"name": "win-amd64-debug",
|
||||
"inherits": [ "base", "base-windows", "x64", "debug" ]
|
||||
},
|
||||
{
|
||||
"name": "win-amd64-clang-debug",
|
||||
"inherits": [ "base", "base-windows", "clangtoolset", "x64", "debug" ]
|
||||
},
|
||||
{
|
||||
"name": "win-arm64-debug",
|
||||
"inherits": [ "base", "base-windows", "arm64", "debug" ]
|
||||
@ -153,6 +169,10 @@
|
||||
"name": "win-x86-debug",
|
||||
"inherits": [ "base", "base-windows", "x86", "debug" ]
|
||||
},
|
||||
{
|
||||
"name": "win-x86-clang-debug",
|
||||
"inherits": [ "base", "base-windows", "clangtoolset", "x86", "debug" ]
|
||||
},
|
||||
{
|
||||
"name": "unix-native",
|
||||
"generator": "Ninja Multi-Config",
|
||||
@ -173,6 +193,11 @@
|
||||
"configurePreset": "win-amd64-release",
|
||||
"configuration": "Release"
|
||||
},
|
||||
{
|
||||
"name": "win-amd64-clang-release",
|
||||
"configurePreset": "win-amd64-clang-release",
|
||||
"configuration": "Release"
|
||||
},
|
||||
{
|
||||
"name": "win-arm64-release",
|
||||
"configurePreset": "win-arm64-release",
|
||||
@ -183,11 +208,21 @@
|
||||
"configurePreset": "win-x86-release",
|
||||
"configuration": "Release"
|
||||
},
|
||||
{
|
||||
"name": "win-x86-clang-release",
|
||||
"configurePreset": "win-x86-clang-release",
|
||||
"configuration": "Release"
|
||||
},
|
||||
{
|
||||
"name": "win-amd64-debug",
|
||||
"configurePreset": "win-amd64-debug",
|
||||
"configuration": "Debug"
|
||||
},
|
||||
{
|
||||
"name": "win-amd64-clang-debug",
|
||||
"configurePreset": "win-amd64-clang-debug",
|
||||
"configuration": "Debug"
|
||||
},
|
||||
{
|
||||
"name": "win-arm64-debug",
|
||||
"configurePreset": "win-arm64-debug",
|
||||
@ -198,6 +233,11 @@
|
||||
"configurePreset": "win-x86-debug",
|
||||
"configuration": "Debug"
|
||||
},
|
||||
{
|
||||
"name": "win-x86-clang-debug",
|
||||
"configurePreset": "win-x86-clang-debug",
|
||||
"configuration": "Debug"
|
||||
},
|
||||
{
|
||||
"name": "unix-native",
|
||||
"configurePreset": "unix-native"
|
||||
@ -208,18 +248,34 @@
|
||||
"name": "win-amd64-release",
|
||||
"configurePreset": "win-amd64-release"
|
||||
},
|
||||
{
|
||||
"name": "win-amd64-clang-release",
|
||||
"configurePreset": "win-amd64-clang-release"
|
||||
},
|
||||
{
|
||||
"name": "win-x86-release",
|
||||
"configurePreset": "win-x86-release"
|
||||
},
|
||||
{
|
||||
"name": "win-x86-clang-release",
|
||||
"configurePreset": "win-x86-clang-release"
|
||||
},
|
||||
{
|
||||
"name": "win-amd64-debug",
|
||||
"configurePreset": "win-amd64-debug"
|
||||
},
|
||||
{
|
||||
"name": "win-amd64-clang-debug",
|
||||
"configurePreset": "win-amd64-clang-debug"
|
||||
},
|
||||
{
|
||||
"name": "win-x86-debug",
|
||||
"configurePreset": "win-x86-debug"
|
||||
},
|
||||
{
|
||||
"name": "win-x86-clang-debug",
|
||||
"configurePreset": "win-x86-clang-debug"
|
||||
},
|
||||
{
|
||||
"name": "unix-native",
|
||||
"configurePreset": "unix-native"
|
||||
|
@ -439,8 +439,10 @@ don't. */
|
||||
# define _GNU_SOURCE 1
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(_WIN32)
|
||||
/* if inttypes.h is included this breaks rc.exe when using the ClangCL
|
||||
* Toolchain as it pulls in a inttypes.h variant for clang that rc.exe does
|
||||
* not understand (#include_next preprocessor directive) */
|
||||
#if defined(_WIN32) && !defined(RC_INVOKED)
|
||||
#include <inttypes.h>
|
||||
typedef uint32_t in_addr_t;
|
||||
typedef uint16_t in_port_t;
|
||||
@ -452,7 +454,7 @@ typedef uint16_t in_port_t;
|
||||
#define SIGTERM 15
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#if defined(_MSC_VER) && !defined(RC_INVOKED)
|
||||
#include <BaseTsd.h>
|
||||
typedef SSIZE_T ssize_t;
|
||||
#define strncasecmp strnicmp
|
||||
|
@ -303,7 +303,7 @@ cleanup_pAdapterList:
|
||||
UINT __stdcall
|
||||
FindSystemInfo(_In_ MSIHANDLE hInstall)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#ifdef DLLEXP_EXPORT
|
||||
#pragma comment(linker, DLLEXP_EXPORT)
|
||||
#endif
|
||||
|
||||
@ -340,7 +340,7 @@ FindSystemInfo(_In_ MSIHANDLE hInstall)
|
||||
UINT __stdcall
|
||||
CloseOpenVPNGUI(_In_ MSIHANDLE hInstall)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#ifdef DLLEXP_EXPORT
|
||||
#pragma comment(linker, DLLEXP_EXPORT)
|
||||
#endif
|
||||
UNREFERENCED_PARAMETER(hInstall); /* This CA is does not interact with MSI session (report errors, access properties, tables, etc.). */
|
||||
@ -363,7 +363,7 @@ CloseOpenVPNGUI(_In_ MSIHANDLE hInstall)
|
||||
UINT __stdcall
|
||||
StartOpenVPNGUI(_In_ MSIHANDLE hInstall)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#ifdef DLLEXP_EXPORT
|
||||
#pragma comment(linker, DLLEXP_EXPORT)
|
||||
#endif
|
||||
|
||||
@ -636,7 +636,7 @@ schedule_adapter_delete(
|
||||
UINT __stdcall
|
||||
EvaluateTUNTAPAdapters(_In_ MSIHANDLE hInstall)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#ifdef DLLEXP_EXPORT
|
||||
#pragma comment(linker, DLLEXP_EXPORT)
|
||||
#endif
|
||||
|
||||
@ -789,7 +789,7 @@ EvaluateTUNTAPAdapters(_In_ MSIHANDLE hInstall)
|
||||
{
|
||||
goto cleanup_szDisplayName;
|
||||
}
|
||||
#ifdef __GNUC__
|
||||
#if defined(__GNUC__) || defined(__clang__)
|
||||
/*
|
||||
* warning: enumeration value ‘MSICONDITION_TRUE’ not handled in switch
|
||||
* warning: enumeration value ‘MSICONDITION_NONE’ not handled in switch
|
||||
@ -809,7 +809,7 @@ EvaluateTUNTAPAdapters(_In_ MSIHANDLE hInstall)
|
||||
free(szValue);
|
||||
goto cleanup_szDisplayName;
|
||||
}
|
||||
#ifdef __GNUC__
|
||||
#if defined(__GNUC__) || defined(__clang__)
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
free(szValue);
|
||||
@ -965,7 +965,7 @@ CreateRebootFile(_In_z_ LPCWSTR szTmpDir)
|
||||
UINT __stdcall
|
||||
ProcessDeferredAction(_In_ MSIHANDLE hInstall)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#ifdef DLLEXP_EXPORT
|
||||
#pragma comment(linker, DLLEXP_EXPORT)
|
||||
#endif
|
||||
|
||||
@ -1165,7 +1165,7 @@ cleanup_CoInitialize:
|
||||
UINT __stdcall
|
||||
CheckAndScheduleReboot(_In_ MSIHANDLE hInstall)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#ifdef DLLEXP_EXPORT
|
||||
#pragma comment(linker, DLLEXP_EXPORT)
|
||||
#endif
|
||||
|
||||
|
@ -66,7 +66,11 @@ extern DWORD openvpnmsica_thread_data_idx;
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef __GNUC__
|
||||
/* Ensure that clang-cl, which does not understand the cl specific
|
||||
* preprocessor defines like #pragma comment(linker, DLLEXP_EXPORT)
|
||||
* is handled the same way as mingw and uses the alternative instead
|
||||
* and does not define DLLEXP_EXPORT */
|
||||
#if defined(__GNUC__) || defined(__clang__)
|
||||
#define DLLEXP_DECL __declspec(dllexport)
|
||||
#else
|
||||
#define DLLEXP_DECL
|
||||
|
@ -389,8 +389,9 @@ test_snprintf(void **state)
|
||||
|
||||
/* Instead of trying to trick the compiler here, disable the warnings
|
||||
* for this unit test. We know that the results will be truncated
|
||||
* and we want to test that */
|
||||
#if defined(__GNUC__)
|
||||
* and we want to test that. Not we need the clang as clang-cl (msvc) does
|
||||
* not define __GNUC__ like it does under UNIX(-like) platforms */
|
||||
#if defined(__GNUC__) || defined(__clang__)
|
||||
/* some clang version do not understand -Wformat-truncation, so ignore the
|
||||
* warning to avoid warnings/errors (-Werror) about unknown pragma/option */
|
||||
#if defined(__clang__)
|
||||
@ -418,7 +419,7 @@ test_snprintf(void **state)
|
||||
assert_int_equal(ret, 10);
|
||||
assert_int_equal(buf[9], '\0');
|
||||
|
||||
#if defined(__GNUC__)
|
||||
#if defined(__GNUC__) || defined(__clang__)
|
||||
#pragma GCC diagnostic pop
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
|
Loading…
x
Reference in New Issue
Block a user