summaryrefslogtreecommitdiffstats
path: root/Modules/Compiler/XL.cmake
Commit message (Collapse)AuthorAgeFilesLines
* XL: Use -qpic for position independent code (#14010)Brad King2013-03-131-0/+1
| | | | | | | According to XL C/C++ V9.0 documentation the default for -qpic/-qnopic is platform-dependent. It won't hurt to add the option on platforms where it is the default, so always add it when we want position independent code.
* Support building shared libraries or modules without soname (#13155)Modestas Vainius2012-04-301-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a boolean target property NO_SONAME which may be used to disable soname for the specified shared library or module even if the platform supports it. This property should be useful for private shared libraries or various plugins which live in private directories and have not been designed to be found or loaded globally. Replace references to <CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG> and hard-coded -install_name flags with a conditional <SONAME_FLAG> which is expanded to the value of the CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG definition as long as soname supports is enabled for the target in question. Keep expanding CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG in rules in case third party projects still use it. Such projects would not yet use NO_SONAME so the adjacent <TARGET_SONAME> will always be expanded. Make <TARGET_INSTALLNAME_DIR> NO_SONAME aware as well. Since -install_name is soname on OS X, this should not be a problem if this variable is expanded only if soname is enabled. The Ninja generator performs rule variable substitution only once globally per rule to put its own placeholders. Final substitution is performed by ninja at build time. Therefore we cannot conditionally replace the soname placeholders on a per-target basis. Rather than omitting $SONAME from rules.ninja, simply do not write its contents for targets which have NO_SONAME. Since 3 variables are affected by NO_SONAME ($SONAME, $SONAME_FLAG, $INSTALLNAME_DIR), set them only if soname is enabled.
* Fix XL compilers on non-AIX machines.Todd Gamblin2011-08-291-10/+15
| | | | | | Linking broken on non-AIX machines when using XL compilers due to those machines not using the CreateExportList tool. Made use of this tool conditional on finding it.
* XL: Avoid copying archives into shared libraries that link themBrad King2011-04-081-0/+17
| | | | | | | | | | | | | | | | | | | | | | The XL toolchain supports shared object files stored in archives. Since CMake lists libraries on link lines by full path it is common for a shared library link line to contain the path to an archive file. When linking a shared library the compiler front-end by default runs CreateExportList to construct the list of symbols to be exported. Unfortunately it passes all files found on the command line to the tool so archive and library files get processed along with the object files. The tool returns a list of all symbols in all objects, archives, and libraries on the command line. This causes the linker to copy every object file out of every archive into the shared library whether they are dependencies of the original object files or not. Work around this problem by running CreateExportList ourselves with just the original object files intended for inclusion in the shared library. Then pass the list it produces on the link line to prevent the compiler front-end from constructing its own. This tells the linker to export only the symbols provided by the original source files of the shared library.
* XL: Consolidate compiler flag informationBrad King2011-04-071-0/+31
Factor duplicate information out of Compiler/XL-<lang>.cmake modules into a macro in a new Compiler/XL.cmake module. Invoke it from the per-language files to produce the original settings.