diff options
author | NAKAMURA Takumi <geek4civic@gmail.com> | 2014-02-21 14:17:17 +0000 |
---|---|---|
committer | NAKAMURA Takumi <geek4civic@gmail.com> | 2014-02-21 14:17:17 +0000 |
commit | 1901ee61d56cba612c687fa3b33929e0b1f57fa5 (patch) | |
tree | 8dc26c2959edaf57623b2c1f8695c2583398d861 /cmake | |
parent | 6eeedf33d596dee084b12cbcfc109d3c2be854f4 (diff) | |
download | llvm-1901ee61d56cba612c687fa3b33929e0b1f57fa5.tar.gz llvm-1901ee61d56cba612c687fa3b33929e0b1f57fa5.tar.bz2 llvm-1901ee61d56cba612c687fa3b33929e0b1f57fa5.tar.xz |
[CMake] Introduce "llvm_add_library(SHARED STATIC)" to build both shared lib and static lib simulataneously.
llvm_add_library(foo SHARED STATIC
DEPENDS <dependent targets...>
LINK_LIBS <required libraries...>
)
It generates both foo (foo.so) and foo_static(foo.a) and both of them depend on DEPENDS and LINK_LIBS.
Then, also obj.foo is generated. obj.foo depends on DEPENDS, but doesn't depend on LINK_LIBS.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201854 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/modules/AddLLVM.cmake | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake index 39badf41d7..a10262b14e 100644 --- a/cmake/modules/AddLLVM.cmake +++ b/cmake/modules/AddLLVM.cmake @@ -184,14 +184,18 @@ function(llvm_add_library name) cmake_parse_arguments(ARG "MODULE;SHARED;STATIC" "OUTPUT_NAME" - "ADDITIONAL_HEADERS;DEPENDS;LINK_COMPONENTS;LINK_LIBS" + "ADDITIONAL_HEADERS;DEPENDS;LINK_COMPONENTS;LINK_LIBS;OBJLIBS" ${ARGN}) list(APPEND LLVM_COMMON_DEPENDS ${ARG_DEPENDS}) if(ARG_ADDITIONAL_HEADERS) # Pass through ADDITIONAL_HEADERS. set(ARG_ADDITIONAL_HEADERS ADDITIONAL_HEADERS ${ARG_ADDITIONAL_HEADERS}) endif() - llvm_process_sources(ALL_FILES ${ARG_UNPARSED_ARGUMENTS} ${ARG_ADDITIONAL_HEADERS}) + if(ARG_OBJLIBS) + set(ALL_FILES ${ARG_OBJLIBS}) + else() + llvm_process_sources(ALL_FILES ${ARG_UNPARSED_ARGUMENTS} ${ARG_ADDITIONAL_HEADERS}) + endif() if(ARG_MODULE) if(ARG_SHARED OR ARG_STATIC) @@ -210,6 +214,36 @@ function(llvm_add_library name) endif() endif() + # Generate objlib + if(ARG_SHARED AND ARG_STATIC) + # Generate an obj library for both targets. + set(obj_name "obj.${name}") + add_library(${obj_name} OBJECT EXCLUDE_FROM_ALL + ${ALL_FILES} + ) + llvm_update_compile_flags(${obj_name}) + set(ALL_FILES "$<TARGET_OBJECTS:${obj_name}>") + + set_target_properties(${obj_name} PROPERTIES FOLDER "Object Libraries") + endif() + + if(ARG_SHARED AND ARG_STATIC) + # static + set(name_static "${name}_static") + if(ARG_OUTPUT_NAME) + set(output_name OUTPUT_NAME "${ARG_OUTPUT_NAME}_static") + endif() + # DEPENDS has been appended to LLVM_COMMON_LIBS. + llvm_add_library(${name_static} STATIC + ${output_name} + OBJLIBS ${ALL_FILES} # objlib + LINK_LIBS ${ARG_LINK_LIBS} + LINK_COMPONENTS ${ARG_LINK_COMPONENTS} + ) + # FIXME: Add name_static to anywhere in TARGET ${name}'s PROPERTY. + set(ARG_STATIC) + endif() + if(ARG_MODULE) add_library(${name} MODULE ${ALL_FILES}) elseif(ARG_SHARED) |