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.
21 lines
502 B
C
21 lines
502 B
C
|
|
#if defined(__ELF__)
|
|
# if !defined(__PIC__)
|
|
# error "The POSITION_INDEPENDENT_CODE property should cause __PIC__ to be defined on ELF platforms."
|
|
# endif
|
|
#endif
|
|
|
|
#if defined(PIC_TEST_STATIC_BUILD)
|
|
# define PIC_TEST_EXPORT
|
|
#else
|
|
# if defined(_WIN32) || defined(WIN32) /* Win32 version */
|
|
# ifdef PIC_TEST_BUILD_DLL
|
|
# define PIC_TEST_EXPORT __declspec(dllexport)
|
|
# else
|
|
# define PIC_TEST_EXPORT __declspec(dllimport)
|
|
# endif
|
|
# else
|
|
# define PIC_TEST_EXPORT
|
|
# endif
|
|
#endif
|