blob: e48203871884833857332a8f7e02b27a9f099d0a [file] [log] [blame]
Tobias Grosserbc822eb2012-10-21 15:51:491
Michael Kruse519b3cf2015-09-24 11:30:222include(CMakeParseArguments)
3
Tobias Grosserbc822eb2012-10-21 15:51:494macro(add_polly_library name)
Michael Krusee5e752a2016-09-12 18:25:005 cmake_parse_arguments(ARG "" "" "" ${ARGN})
Michael Kruse519b3cf2015-09-24 11:30:226 set(srcs ${ARG_UNPARSED_ARGUMENTS})
Tobias Grosserbc822eb2012-10-21 15:51:497 if(MSVC_IDE OR XCODE)
8 file( GLOB_RECURSE headers *.h *.td *.def)
9 set(srcs ${srcs} ${headers})
10 string( REGEX MATCHALL "/[^/]+" split_path ${CMAKE_CURRENT_SOURCE_DIR})
11 list( GET split_path -1 dir)
12 file( GLOB_RECURSE headers
13 ../../include/polly${dir}/*.h)
14 set(srcs ${srcs} ${headers})
15 endif(MSVC_IDE OR XCODE)
16 if (MODULE)
17 set(libkind MODULE)
18 elseif (SHARED_LIBRARY)
19 set(libkind SHARED)
20 else()
21 set(libkind)
22 endif()
23 add_library( ${name} ${libkind} ${srcs} )
Michael Kruse6362f5a2015-07-21 12:40:0124 set_target_properties(${name} PROPERTIES FOLDER "Polly")
25
Tobias Grosserbc822eb2012-10-21 15:51:4926 if( LLVM_COMMON_DEPENDS )
27 add_dependencies( ${name} ${LLVM_COMMON_DEPENDS} )
28 endif( LLVM_COMMON_DEPENDS )
29 if( LLVM_USED_LIBS )
30 foreach(lib ${LLVM_USED_LIBS})
Michael Kruse21de8ad2018-01-12 16:09:1831 target_link_libraries( ${name} PUBLIC ${lib} )
Tobias Grosserbc822eb2012-10-21 15:51:4932 endforeach(lib)
33 endif( LLVM_USED_LIBS )
34
Sebastian Popa8fb7242014-03-13 20:24:4835 if(POLLY_LINK_LIBS)
36 foreach(lib ${POLLY_LINK_LIBS})
Michael Kruse21de8ad2018-01-12 16:09:1837 target_link_libraries(${name} PUBLIC ${lib})
Sebastian Popa8fb7242014-03-13 20:24:4838 endforeach(lib)
39 endif(POLLY_LINK_LIBS)
Tobias Grosserbc822eb2012-10-21 15:51:4940
41 if( LLVM_LINK_COMPONENTS )
42 llvm_config(${name} ${LLVM_LINK_COMPONENTS})
43 endif( LLVM_LINK_COMPONENTS )
Eugene Zelenko2487cb22016-06-21 18:14:0144 if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "LLVMPolly")
45 install(TARGETS ${name}
46 EXPORT LLVMExports
47 LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
48 ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
49 endif()
Tobias Grosser65b2b032014-11-30 12:45:4450 set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name})
Tobias Grosserbc822eb2012-10-21 15:51:4951endmacro(add_polly_library)
52
53macro(add_polly_loadable_module name)
54 set(srcs ${ARGN})
Tobias Grosser23f16b12014-03-03 19:30:1955 # klduge: pass different values for MODULE with multiple targets in same dir
56 # this allows building shared-lib and module in same dir
57 # there must be a cleaner way to achieve this....
58 if (MODULE)
59 else()
60 set(GLOBAL_NOT_MODULE TRUE)
61 endif()
62 set(MODULE TRUE)
Tobias Grosserbc822eb2012-10-21 15:51:4963 add_polly_library(${name} ${srcs})
Michael Kruse6362f5a2015-07-21 12:40:0164 set_target_properties(${name} PROPERTIES FOLDER "Polly")
Tobias Grosser23f16b12014-03-03 19:30:1965 if (GLOBAL_NOT_MODULE)
66 unset (MODULE)
67 endif()
Tobias Grosserbc822eb2012-10-21 15:51:4968 if (APPLE)
69 # Darwin-specific linker flags for loadable modules.
70 set_target_properties(${name} PROPERTIES
71 LINK_FLAGS "-Wl,-flat_namespace -Wl,-undefined -Wl,suppress")
72 endif()
73endmacro(add_polly_loadable_module)
Michael Krusef2285502015-06-22 20:31:1674
Michael Kruseacc9ad52015-06-29 19:57:5975# Use C99-compatible compile mode for all C source files of a target.
Michael Krusef2285502015-06-22 20:31:1676function(target_enable_c99 _target)
77 if(CMAKE_VERSION VERSION_GREATER "3.1")
78 set_target_properties("${_target}" PROPERTIES C_STANDARD 99)
79 elseif(CMAKE_COMPILER_IS_GNUCC)
80 get_target_property(_sources "${_target}" SOURCES)
Michael Kruseacc9ad52015-06-29 19:57:5981 foreach(_file IN LISTS _sources)
82 get_source_file_property(_lang "${_file}" LANGUAGE)
83 if(_lang STREQUAL "C")
84 set_source_files_properties(${_file} COMPILE_FLAGS "-std=gnu99")
85 endif()
86 endforeach()
Michael Krusef2285502015-06-22 20:31:1687 endif()
88endfunction()