summaryrefslogtreecommitdiffstats
path: root/Source/cmMakefileLibraryTargetGenerator.cxx
Commit message (Collapse)AuthorAgeFilesLines
* Remove INTERFACE build targets.Stephen Kelly2013-12-101-3/+0
| | | | | | | | | | | | | | | Commit b04f3b9a (Create make rules for INTERFACE_LIBRARY targets., 2013-08-21) extended the makefile generator to create build targets for INTERFACE_LIBRARY targets. No other generators were extended with this feature. This conflicts with the feature of whitelisting of target properties read from INTERFACE_LIBRARY targets. The INTERFACE_* properties of the INTERFACE_LIBRARY may legitimately contain TARGET_PROPERTY generator expressions for reading properties from the 'head target'. The 'head target' would be the INTERFACE_LIBRARY itself when creating the build rules for it, which means that non-whitelisted properties would be read.
* INTERFACE_LIBRARY: Avoid codepaths which set unneeded properties.Stephen Kelly2013-11-251-3/+6
| | | | | | | | | | | | | As an INTERFACE_LIBRARY has no direct link dependencies, we can short-circuit in cmGeneratorExpressionEvaluator and in cmGlobalGenerator::CheckLocalGenerators. As they do not generate any output directly, any generate- or install- related code acn also be short-circuited. Many of the local generators already do this. Because only INTERFACE related properties make sense on INTERFACE_LIBRARY targets, avoid setting other properties, for example via defaults.
* Port some of the generator API to cmGeneratorTarget.Stephen Kelly2013-11-221-3/+3
| | | | | | | Just enough to reach the BuildMacContentDirectory method and the NeedRelinkBeforeInstall methods. In the future, those methods can be moved to cmGeneratorTarget.
* Create make rules for INTERFACE_LIBRARY targets.Stephen Kelly2013-10-211-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The result is that the depends of the target are created. So, add_library(somelib foo.cpp) add_library(anotherlib EXCLUDE_FROM_ALL foo.cpp) add_library(extra EXCLUDE_FROM_ALL foo.cpp) target_link_libraries(anotherlib extra) add_library(iface INTERFACE) target_link_libraries(iface INTERFACE anotherlib) Executing 'make iface' will result in the anotherlib and extra targets being made. Adding a regular executable to the INTERFACE of an INTERFACE_LIBRARY will not result in the executable being built with 'make iface' because of the logic in cmComputeTargetDepends::AddTargetDepend. So far, this is implemented only for the Makefile generator. Other generators will follow if this feature is possible for them. Make INTERFACE_LIBRARY targets part of the all target by default. Test this by building the all target and making the expected library EXCLUDE_FROM_ALL.
* Unify the way the flags of a static library are readPatrick Gansterer2013-07-311-6/+2
| | | | | Introduce cmLocalGenerator::GetStaticLibraryFlags() to have a central function for getting the linker flags for a given target.
* Revert "Use --sysroot when cross compiling."Stephen Kelly2013-07-121-20/+0
| | | | | | | This reverts commit de4da665d3205afa239749c41513a315c3831f51. This feature is not yet ready for release. It needs to be merged with the CMAKE_OSX_SYSROOT feature.
* Use --sysroot when cross compiling.Stephen Kelly2013-06-071-0/+20
| | | | | | | | | | As CMAKE_ROOT_FIND_PATH can be a list, a new CMAKE_SYSROOT is introduced, which is never a list. The contents of this variable is passed to supporting compilers as --sysroot. It is also accounted for when processing implicit link directories reported by the compiler, and when generating RPATH information.
* OS X: Fix getting of CFBundle LOCATION property.Clinton Stimpson2013-06-031-2/+0
| | | | | | | This fixes bug #13797. The kinds of changes applied in 373faae5 for frameworks are now applied to CFBundle. The prefix and suffix for CFBundles are now handled in cmTarget::GetFullNameInternal.
* Refactor how bundles and frameworks are supported.Clinton Stimpson2013-05-231-7/+6
| | | | | | | | | | | | | | | | Make handling of directory separators consistent between non-bundle and bundle code. Remove xcode specific flag from cmTarget when getting install_name. Add (more) consistent convenience functions in cmTarget to get directories inside of bundles and frameworks to add files to. This refactor also fixes bug #12263 where frameworks had the wrong install name when SKIP_BUILD_RPATH. Also make install_name for frameworks consistent between Makefile and Xcode generator.
* Always use the auto_ptr from cmsys.Stephen Kelly2012-11-201-2/+0
| | | | | | This is for consistency throughout cmake. The cmsys version exists becaues uses of auto_ptr types as return types does not work with some implementations in ancient compilers.
* Merge topic 'ninja-LIBPATH'Brad King2012-10-021-4/+7
|\ | | | | | | | | | | | | 1e47ccb Ninja: add option to enforce usage of response files e31df03 Ninja: move <OBJECTS> in front of the first linker option 8d674e7 Ninja: move -LIBPATH behind -link option
| * Ninja: move -LIBPATH behind -link optionPeter Kümmel2012-10-011-4/+7
| | | | | | | | Don' pass linker option to the compile
* | Merge topic 'vs-pdb-output'Brad King2012-10-011-1/+5
|\ \ | |/ |/| | | | | | | | | | | 2ccca05 Run PDBDirectoryAndName test on MSVC and Intel efc83b3 Document that PDB_(NAME|OUTPUT_DIRECTORY) are ignored for VS 6 b294457 Verify that PDB_(NAME|OUTPUT_DIRECTORY) are honored in test 3f60dbf Add PDB_OUTPUT_DIRECTORY and PDB_NAME target properties (#10830)
| * Add PDB_OUTPUT_DIRECTORY and PDB_NAME target properties (#10830)Yuchen Deng2012-09-251-1/+5
| | | | | | | | | | | | | | This enables changing the name and output folder of the debug symbol files produced by MS compilers. Inspired-by: Thomas Bernard <thomas.bernard@ipetronik.com>
* | Port cmLocalGenerator::GetTargetFlags to cmGeneratorTarget.Stephen Kelly2012-09-191-1/+1
| |
* | Make cmLocalGenerator::AddArchitectureFlags take a cmGeneratorTarget.Stephen Kelly2012-09-191-1/+1
|/
* Re-factor bundle content copying rules generation.Nicolas Despres2012-07-171-3/+1
|
* Re-factor CFBundle generation.Nicolas Despres2012-07-171-27/+2
|
* Re-factor OS X bundle and framework generation.Nicolas Despres2012-07-171-114/+17
|
* Remove trailing white-spaces.Nicolas Despres2012-07-171-8/+8
|
* Support building shared libraries or modules without soname (#13155)Modestas Vainius2012-04-301-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Build object library targets in MakefilesBrad King2012-03-131-0/+26
| | | | | | Treat OBJECT libraries as STATIC libraries but leave out the archive step. The object files will be left behind for reference by other targets later.
* Add CMAKE_GNUtoMS option to convert GNU .dll.a to MS .libBrad King2011-12-051-0/+7
| | | | | | | | | | | | | | | | Teach the Windows-GNU.cmake platform file to look for Visual Studio tools matching the target ABI. Add an extra step to the link command for shared libraries and executables that export symbols and on which a new GNUtoMS property is set (initialized by the CMAKE_GNUtoMS option). Tell the GNU linker to output a module definition (.def) file listing exported symbols in addition to the GNU-format import library (.dll.a). Pass the .def file to the MS "lib" tool to construct a MS-format DLL import library (.lib). Teach the install(TARGETS) command to install the MS import library next to the GNU one. Teach the install(EXPORT) and export() command to set the IMPORTED_IMPLIB property pointing at the import library to use the import library matching the tools in the importing project.
* Factor makefile generator link rule lookup into helper functionBrad King2011-12-051-1/+1
| | | | | This provides a place in the makefile generators to adjust the link rules for both libraries and executables.
* Merge topic 'include-flags-response-file'Brad King2011-03-221-3/+3
|\ | | | | | | | | | | | | | | 86cb17b Pass include directories with response files to GNU on Windows 9a0b9bc Optionally pass include directories with response files 6e8a67f Generate target-wide flags before individual build rules d099546 Factor old-style -D flags out from -I flag generation
| * Generate target-wide flags before individual build rulesBrad King2011-03-171-3/+3
| | | | | | | | | | | | | | This switches the internal generation order but does not affect the results. The new order ensures that any internal state changed by generating target-wide flags is known when the individual rules that use those flags are generated.
* | Add support for CFBundle targets on the Mac (#11295)Richard Bateman2011-01-111-0/+49
|/ | | | | This commit enables building, for example, plugin bundles to be loaded by web browsers.
* Consolidate duplicate link rule make dependency codeBrad King2010-11-051-24/+1
| | | | | Factor code previously duplicated for library and executable rules into a common method.
* Add STATIC_LIBRARY_FLAGS_<CONFIG> property (#10768)Brad King2010-05-281-0/+4
| | | | This is a per-configuration version of STATIC_LIBRARY_FLAGS.
* -improve crosscompiling from Linux to iphone (#10526)Alex Neundorf2010-05-011-2/+0
| | | | | | Patch by Karol Krizka Alex
* Fix line-too-long style violationsBrad King2009-10-231-1/+2
| | | | | The commit "Define per-target OSX_ARCHITECTURES property" introduced some long lines. This wraps them into multiple shorter lines.
* Define per-target OSX_ARCHITECTURES propertyBrad King2009-10-211-0/+4
| | | | | | | | | | | The CMAKE_OSX_ARCHITECTURES variable works only as a global setting. This commit defines target properties OSX_ARCHITECTURES OSX_ARCHITECTURES_<CONFIG> to specify OS X architectures on a per-target and per-configuration basis. See issue #8725.
* Create INTERPROCEDURAL_OPTIMIZATION build featureBrad King2009-10-021-0/+6
| | | | | | | | This commit creates target and directory properties to enable the Intel interprocedural optimization support on Linux. Enabling it adds the compiler option '-ipo' and uses 'xiar' to create archives. See issue #9615.
* Centralize language flag addition for MakefilesBrad King2009-10-021-2/+4
| | | | | | We create cmMakefileTargetGenerator::AddFeatureFlags to consolidate addition of language flags. Currently it just adds the flags from generic per-language flag variables (AddLanguageFlags).
* Fix use of module .def files for MS toolsBrad King2009-09-291-23/+3
| | | | | | | We recognize .def source files and map them to the /DEF:<file> option in the MSVC tools. Previously this worked only for shared libraries. This commit cleans up the implementation and makes it work for executables too. See issue #9613.
* Convert CMake to OSI-approved BSD LicenseBrad King2009-09-281-14/+9
| | | | | | | This converts the CMake license to a pure 3-clause OSI-approved BSD License. We drop the previous license clause requiring modified versions to be plainly marked. We also update the CMake copyright to cover the full development time range.
* Do not call CollapseFullPath for PDB file namesBrad King2009-09-171-1/+1
| | | | | | | | | | | | | | | | Some vendor tools convert PDB file names given on the command line to lower-case before creating the file. When CMake places a mixed-case PDB file name into the build system, the file does not exist the first time and it is written with mixed case. After the first build though the native tool has created a lower-case version of the file. If CMake does CollapseFullPath again, the file exists so the actual-case lookup gets the lower-case name. This causes the build files to change so the project rebuilds. The solution is to avoid calling CollapseFullPath for files generated by the build. In the case of PDB files we already construct them from paths that have been collapsed, so we can just skip the call altogether. See issue #9350.
* ENH: Pass config to cmTarget::GetLinkerLanguageBrad King2009-07-081-5/+10
| | | | | | This passes the build configuration to most GetLinkerLanguage calls. In the future the linker language will account for targets linked in each configuration.
* ENH: Pass config to cmTarget RPATH install methodsBrad King2009-07-081-2/+2
| | | | | This passes the build configuration to cmTarget methods IsChrpathUsed and NeedRelinkBeforeInstall. Later these methods will use the value.
* ENH: Simpler cmTarget::GetLinkerLanguage signatureBrad King2009-07-071-10/+5
| | | | | | | This method previously required the global generator to be passed, but that was left from before cmTarget had its Makefile member. Now the global generator can be retrieved automatically, so we can drop the method argument.
* ENH: Pass config to cmTarget::GetDirectory()Brad King2009-07-031-4/+4
| | | | | | | This teaches the makefile generators to always pass the configuration name to the cmTarget::GetDirectory method. Later this will allow per-configuration target output directories, and it cleans up use of the current API.
* ENH: Create cmMakefileTargetGenerator::ConfigNameBrad King2009-07-031-19/+11
| | | | | | This member stores the build configuration for which Makefiles are being generated. It saves repeated lookup of the equivalent member from cmLocalUnixMakefileGenerator3, making code shorter and more readable.
* ENH: Always imply CLEAN_DIRECT_OUTPUT target propBrad King2009-05-011-91/+28
| | | | | | | | | | | | | | This property was left from before CMake always linked using full path library names for targets it builds. In order to safely link with "-lfoo" we needed to avoid having both shared and static libraries in the build tree for targets that switch on BUILD_SHARED_LIBS. This meant cleaning both shared and static names before creating the library, which led to the creation of CLEAN_DIRECT_OUTPUT to disable the behavior. Now that we always link with a full path we do not need to clean old library names left from an alternate setting of BUILD_SHARED_LIBS. This change removes the CLEAN_DIRECT_OUTPUT property and instead uses its behavior always. It removes some complexity from cmTarget internally.
* ENH: Allow projects to disable per-rule echo linesBrad King2009-03-161-19/+22
| | | | | | | | | This creates global property RULE_MESSAGES which can be set to disbale per-rule progress and action reporting. On Windows, these reports may cause a noticable delay due to the cost of starting extra processes. This feature will allow scripted builds to avoid the cost since they do not need detailed information anyway. This replaces the RULE_PROGRESS property created earlier as it is more complete. See issue #8726.
* STYLE: Separate unrelated logicBrad King2009-03-161-3/+12
| | | | | | This separates unrelated uses of a library-type switch into separate switches. An upcoming commit will conditionally enter one of the switches.
* ENH: Define RULE_LAUNCH_* propertiesBrad King2009-02-101-0/+2
| | | | | | | This defines global, directory, and target properties RULE_LAUNCH_COMPILE, RULE_LAUNCH_LINK, and RULE_LAUNCH_CUSTOM. Their values specify 'launcher' command lines which are prefixed to compile, link, and custom build rules by Makefile generators.
* ENH: Give target in which custom commands buildBrad King2009-02-101-3/+6
| | | | | | This gives the cmTarget instance for which custom command rules are being generated to cmLocalUnixMakefileGenerator3::AppendCustomCommands. It will be useful in the future.
* ENH: Factor out listing of objects on command lineBrad King2008-10-151-29/+3
| | | | | | Previously generation of object file lists for linker and cleaning command lines was duplicated for library and executable target generators. This combines the implementations.
* STYLE: Remove computed but unused variable.Brad King2008-10-151-3/+0
| | | | | An old list of object files for cleaning seems to have been left behind. This removes it.
* ENH: Fix optional use of relative paths.Brad King2008-10-091-3/+3
| | | | | | | These changes refactor cmLocalGenerator methods Convert and ConvertToOutputForExisting to support references inside the build tree using relative paths. After this commit, all tests pass with Makefile generators when relative paths are enabled by default. See issue #7779.