Skip to content
  • Stephen Kelly's avatar
    Refactor generation of shared library flags · bd349630
    Stephen Kelly authored and Brad King's avatar Brad King committed
    CMAKE_SHARED_LIBRARY_<lang>_FLAGS has flags on various platforms for a
    variety of purposes that are correlated with shared libraries but not
    exclusive to them.  Refactor generation of these flags to use new
    purpose-specific platform variables
    
      CMAKE_<lang>_COMPILE_OPTIONS_DLL
      CMAKE_<lang>_COMPILE_OPTIONS_PIC
      CMAKE_<lang>_COMPILE_OPTIONS_PIE
    
    Activate the DLL flags specifically for shared libraries.  Add a new
    POSITION_INDEPENDENT_CODE target property to activate PIC/PIE flags, and
    default to true for shared libraries to preserve default behavior.
    Initialize the new property from CMAKE_POSITION_INDEPENDENT_CODE to
    allow easy global configuration in projects.
    
    Although the default behavior is unchanged by this refactoring, the new
    approach ignores CMAKE_SHARED_LIBRARY_<lang>_FLAGS completely.  We must
    leave it set in case projects reference the value.  Furthermore, if a
    project modifies CMAKE_SHARED_LIBRARY_<lang>_FLAGS it expects the new
    value to be used.  Add policy CMP0018 to handle compatibility with
    projects that modify this platform variable.
    
    Add a PositionIndependentCode test on platforms where we can get
    meaningful results.
    bd349630