[llvm] r201072 - [CMake] Introduce llvm_add_library().
NAKAMURA Takumi
geek4civic at gmail.com
Mon Feb 10 01:05:12 PST 2014
Author: chapuni
Date: Mon Feb 10 03:05:11 2014
New Revision: 201072
URL: http://llvm.org/viewvc/llvm-project?rev=201072&view=rev
Log:
[CMake] Introduce llvm_add_library().
- MODULE;SHARED;STATIC
STATIC by default w/o BUILD_SHARED_LIBS.
SHARED by default w/ BUILD_SHARED_LIBS.
- OUTPUT_NAME name
Corresponds to OUTPUT_NAME in target properties.
- DEPENDS targets...
Same semantics as add_dependencies().
- LINK_COMPONENTS components...
Same as the variable LLVM_LINK_COMPONENTS.
- LINK_LIBS lib_targets...
Same semantics as target_link_libraries().
- ADDITIONAL_HEADERS (implemented in LLVMProcessSources)
May specify header files for IDE generators.
I suggest llvm_add_library() may be used for inter-project add_library stuff
and also suggest add_***_library() may be used project-specific.
Please be patient that llvm_add_library might be ambiguous against add_llvm_library.
Modified:
llvm/trunk/cmake/modules/AddLLVM.cmake
Modified: llvm/trunk/cmake/modules/AddLLVM.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/AddLLVM.cmake?rev=201072&r1=201071&r2=201072&view=diff
==============================================================================
--- llvm/trunk/cmake/modules/AddLLVM.cmake (original)
+++ llvm/trunk/cmake/modules/AddLLVM.cmake Mon Feb 10 03:05:11 2014
@@ -162,34 +162,99 @@ function(set_output_directory target bin
endif()
endfunction()
-macro(add_llvm_library name)
- llvm_process_sources( ALL_FILES ${ARGN} )
- add_library( ${name} ${ALL_FILES} )
+# llvm_add_library(name sources...
+# MODULE;SHARED;STATIC
+# STATIC by default w/o BUILD_SHARED_LIBS.
+# SHARED by default w/ BUILD_SHARED_LIBS.
+# OUTPUT_NAME name
+# Corresponds to OUTPUT_NAME in target properties.
+# DEPENDS targets...
+# Same semantics as add_dependencies().
+# LINK_COMPONENTS components...
+# Same as the variable LLVM_LINK_COMPONENTS.
+# LINK_LIBS lib_targets...
+# Same semantics as target_link_libraries().
+# ADDITIONAL_HEADERS (implemented in LLVMProcessSources)
+# May specify header files for IDE generators.
+# )
+function(llvm_add_library name)
+ cmake_parse_arguments(ARG
+ "MODULE;SHARED;STATIC"
+ "OUTPUT_NAME"
+ "DEPENDS;LINK_COMPONENTS;LINK_LIBS"
+ ${ARGN})
+ list(APPEND LLVM_COMMON_DEPENDS ${ARG_DEPENDS})
+ llvm_process_sources(ALL_FILES ${ARG_UNPARSED_ARGUMENTS})
+
+ if(ARG_MODULE)
+ if(ARG_SHARED OR ARG_STATIC)
+ message(WARNING "MODULE with SHARED|STATIC doesn't make sense.")
+ endif()
+ else()
+ if(BUILD_SHARED_LIBS AND NOT ARG_STATIC)
+ set(ARG_SHARED TRUE)
+ endif()
+ if(NOT ARG_SHARED)
+ set(ARG_STATIC TRUE)
+ endif()
+ endif()
+
+ if(ARG_MODULE)
+ add_library(${name} MODULE ${ALL_FILES})
+ elseif(ARG_SHARED)
+ add_library(${name} SHARED ${ALL_FILES})
+ else()
+ add_library(${name} STATIC ${ALL_FILES})
+ endif()
set_output_directory(${name} ${LLVM_RUNTIME_OUTPUT_INTDIR} ${LLVM_LIBRARY_OUTPUT_INTDIR})
- set_property( GLOBAL APPEND PROPERTY LLVM_LIBS ${name} )
llvm_update_compile_flags(${name})
add_dead_strip( ${name} )
- if( LLVM_COMMON_DEPENDS )
- add_dependencies( ${name} ${LLVM_COMMON_DEPENDS} )
- endif( LLVM_COMMON_DEPENDS )
+ if(ARG_OUTPUT_NAME)
+ set_target_properties(${name}
+ PROPERTIES
+ OUTPUT_NAME ${ARG_OUTPUT_NAME}
+ )
+ endif()
- if( BUILD_SHARED_LIBS )
- llvm_config( ${name} ${LLVM_LINK_COMPONENTS} )
+ if(ARG_MODULE)
+ set_property(TARGET ${name} PROPERTY SUFFIX ${LLVM_PLUGIN_EXT})
+ endif()
+
+ if(ARG_SHARED)
if (MSVC)
set_target_properties(${name}
PROPERTIES
IMPORT_SUFFIX ".imp")
endif ()
+ endif()
+ if(ARG_MODULE OR ARG_SHARED)
if (LLVM_EXPORTED_SYMBOL_FILE)
add_llvm_symbol_exports( ${name} ${LLVM_EXPORTED_SYMBOL_FILE} )
endif()
endif()
+ target_link_libraries(${name} ${ARG_LINK_LIBS})
+
+ llvm_config(${name} ${ARG_LINK_COMPONENTS} ${LLVM_LINK_COMPONENTS})
+
# Ensure that the system libraries always comes last on the
# list. Without this, linking the unit tests on MinGW fails.
link_system_libs( ${name} )
+ if(LLVM_COMMON_DEPENDS)
+ add_dependencies(${name} ${LLVM_COMMON_DEPENDS})
+ endif()
+endfunction()
+
+macro(add_llvm_library name)
+ if( BUILD_SHARED_LIBS )
+ llvm_add_library(${name} SHARED ${ARGN})
+ else()
+ llvm_add_library(${name} ${ARGN})
+ endif()
+ set_property( GLOBAL APPEND PROPERTY LLVM_LIBS ${name} )
+
if( EXCLUDE_FROM_ALL )
set_target_properties( ${name} PROPERTIES EXCLUDE_FROM_ALL ON)
else()
@@ -219,19 +284,8 @@ ${name} ignored.")
# Add empty "phony" target
add_custom_target(${name})
else()
- llvm_process_sources( ALL_FILES ${ARGN} )
- add_library(${name} MODULE ${ALL_FILES})
- set_output_directory(${name} ${LLVM_RUNTIME_OUTPUT_INTDIR} ${LLVM_LIBRARY_OUTPUT_INTDIR})
+ llvm_add_library(${name} MODULE ${ARGN})
set_target_properties( ${name} PROPERTIES PREFIX "" )
- llvm_update_compile_flags(${name})
- add_dead_strip( ${name} )
-
- if (LLVM_EXPORTED_SYMBOL_FILE)
- add_llvm_symbol_exports( ${name} ${LLVM_EXPORTED_SYMBOL_FILE} )
- endif(LLVM_EXPORTED_SYMBOL_FILE)
-
- llvm_config( ${name} ${LLVM_LINK_COMPONENTS} )
- link_system_libs( ${name} )
if (APPLE)
# Darwin-specific linker flags for loadable modules.
@@ -239,10 +293,6 @@ ${name} ignored.")
LINK_FLAGS " -Wl,-flat_namespace -Wl,-undefined -Wl,suppress")
endif()
- if (MODULE)
- set_property(TARGET ${name} PROPERTY SUFFIX ${LLVM_PLUGIN_EXT})
- endif ()
-
if( EXCLUDE_FROM_ALL )
set_target_properties( ${name} PROPERTIES EXCLUDE_FROM_ALL ON)
else()
More information about the llvm-commits
mailing list