Fix build on systems with glibc >= 2.30 (#28012)
authorOmair Majid <omajid@redhat.com>
Tue, 18 Feb 2020 18:27:24 +0000 (13:27 -0500)
committerHyungju Lee <leee.lee@samsung.com>
Fri, 30 Oct 2020 09:20:37 +0000 (18:20 +0900)
On newer systems with glibc 2.30, the compiler emits a warning:

    In file included from coreclr/src/pal/src/misc/sysinfo.cpp:32:
    /usr/include/sys/sysctl.h:21:2: error: "The <sys/sysctl.h> header is deprecated and will be removed." [-Werror,-W#warnings]
    #warning "The <sys/sysctl.h> header is deprecated and will be removed."
     ^

The glibc 2.30 release notes cover this at
https://sourceware.org/ml/libc-alpha/2019-08/msg00029.html:

* The Linux-specific <sys/sysctl.h> header and the sysctl function have been
  deprecated and will be removed from a future version of glibc.
  Application should directly access /proc instead.  For obtaining random
  bits, the getentropy function can be used.

To keep coreclr release/3.1 building, disable treating the #warning as an
error. Clang and GCC have separate flags to turn this error off.

configurecompiler.cmake

index cc77ed0..5d5925c 100644 (file)
@@ -521,11 +521,15 @@ if (CLR_CMAKE_PLATFORM_UNIX)
     # to a struct or a class that has virtual members or a base class. In that case, clang
     # may not generate the same object layout as MSVC.
     add_compile_options(-Wno-incompatible-ms-struct)
+    # Do not convert a #warning into an #error
+    add_compile_options("-Wno-error=#warnings")
   else()
     add_compile_options(-Wno-unused-variable)
     add_compile_options(-Wno-unused-but-set-variable)
     add_compile_options(-fms-extensions)
     add_compile_options(-Wno-unknown-pragmas)
+    # Do not convert a #warning into an #error
+    add_compile_options(-Wno-error=cpp)
     if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0)
       add_compile_options(-Wno-nonnull-compare)
     endif()