quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

CurlSymbolHiding.cmake (2991B)


      1 #***************************************************************************
      2 #                                  _   _ ____  _
      3 #  Project                     ___| | | |  _ \| |
      4 #                             / __| | | | |_) | |
      5 #                            | (__| |_| |  _ <| |___
      6 #                             \___|\___/|_| \_\_____|
      7 #
      8 # Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
      9 #
     10 # This software is licensed as described in the file COPYING, which
     11 # you should have received as part of this distribution. The terms
     12 # are also available at https://curl.se/docs/copyright.html.
     13 #
     14 # You may opt to use, copy, modify, merge, publish, distribute and/or sell
     15 # copies of the Software, and permit persons to whom the Software is
     16 # furnished to do so, under the terms of the COPYING file.
     17 #
     18 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
     19 # KIND, either express or implied.
     20 #
     21 # SPDX-License-Identifier: curl
     22 #
     23 ###########################################################################
     24 option(CURL_HIDDEN_SYMBOLS "Hide libcurl internal symbols (=hide all symbols that are not officially external)" ON)
     25 mark_as_advanced(CURL_HIDDEN_SYMBOLS)
     26 
     27 if(WIN32 AND (ENABLE_DEBUG OR ENABLE_CURLDEBUG))
     28   # We need to export internal debug functions,
     29   # e.g. curl_easy_perform_ev() or curl_dbg_*(),
     30   # so disable symbol hiding for debug builds and for memory tracking.
     31   set(CURL_HIDDEN_SYMBOLS OFF)
     32 elseif(DOS OR AMIGA OR MINGW32CE)
     33   set(CURL_HIDDEN_SYMBOLS OFF)
     34 endif()
     35 
     36 set(CURL_HIDES_PRIVATE_SYMBOLS FALSE)
     37 set(CURL_EXTERN_SYMBOL "")
     38 set(CURL_CFLAG_SYMBOLS_HIDE "")
     39 
     40 if(CURL_HIDDEN_SYMBOLS)
     41   if(CMAKE_C_COMPILER_ID MATCHES "Clang" AND NOT MSVC)
     42     set(CURL_HIDES_PRIVATE_SYMBOLS TRUE)
     43     set(CURL_EXTERN_SYMBOL "__attribute__((__visibility__(\"default\")))")
     44     set(CURL_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden")
     45   elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU")
     46     if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 3.4)
     47       # Note: This is considered buggy prior to 4.0 but the autotools do not care, so let us ignore that fact
     48       set(CURL_HIDES_PRIVATE_SYMBOLS TRUE)
     49       set(CURL_EXTERN_SYMBOL "__attribute__((__visibility__(\"default\")))")
     50       set(CURL_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden")
     51     endif()
     52   elseif(CMAKE_C_COMPILER_ID MATCHES "SunPro" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0)
     53     set(CURL_HIDES_PRIVATE_SYMBOLS TRUE)
     54     set(CURL_EXTERN_SYMBOL "__global")
     55     set(CURL_CFLAG_SYMBOLS_HIDE "-xldscope=hidden")
     56   elseif(CMAKE_C_COMPILER_ID MATCHES "Intel" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0)  # Requires 9.1.045
     57     set(CURL_HIDES_PRIVATE_SYMBOLS TRUE)
     58     set(CURL_EXTERN_SYMBOL "__attribute__((__visibility__(\"default\")))")
     59     set(CURL_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden")
     60   elseif(MSVC)
     61     set(CURL_HIDES_PRIVATE_SYMBOLS TRUE)
     62   endif()
     63 else()
     64   if(MSVC)
     65     # Note: This option is prone to export non-curl extra symbols.
     66     set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
     67   endif()
     68 endif()