blob: e2c50a278578a705961a9a9d7650270cbad86c86 [file] [log] [blame]
set(LLVM_NO_RTTI 1)
set(POLLY_JSON_FILES
JSON/json_reader.cpp
JSON/json_value.cpp
JSON/json_writer.cpp
)
set(ISL_CODEGEN_FILES
CodeGen/IslAst.cpp
CodeGen/IslExprBuilder.cpp
CodeGen/IslNodeBuilder.cpp
CodeGen/CodeGeneration.cpp)
if (GPU_CODEGEN)
set (GPGPU_CODEGEN_FILES)
endif (GPU_CODEGEN)
# External: Integer Set Library
set(ISL_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/External/isl")
set(ISL_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/External/isl")
# Determine version of isl
if (EXISTS "${ISL_SOURCE_DIR}/GIT_HEAD_ID")
# The source comes from a 'make dist' archive
file(READ "${ISL_SOURCE_DIR}/GIT_HEAD_ID" GIT_HEAD_ID)
string(STRIP "${GIT_HEAD_ID}" GIT_HEAD_ID)
elseif (EXISTS "${ISL_SOURCE_DIR}/gitversion.h")
# The source directory is preconfigured
file(READ "${ISL_SOURCE_DIR}/gitversion.h" GITVERSION_H)
string(REGEX REPLACE ".*\\\"([^\\\"]*)\\\".*" "\\1" GIT_HEAD_ID "${GITVERSION_H}")
elseif ()
# Unknown revision
set(GIT_HEAD_ID "UNKNOWN")
endif ()
message(STATUS "ISL version: ${GIT_HEAD_ID}")
# Enable small integer optimization and imath
set(USE_GMP_FOR_MP OFF)
set(USE_IMATH_FOR_MP ON)
set(USE_SMALL_INT_OPT ON)
# Determine compiler characteristics
include(CheckCSourceCompiles)
check_c_source_compiles("
int func(void) __attribute__((__warn_unused_result__));
int main() { return 0; }
" HAS_ATTRIBUTE_WARN_UNUSED_RESULT)
set(GCC_WARN_UNUSED_RESULT)
if (HAS_ATTRIBUTE_WARN_UNUSED_RESULT)
set(GCC_WARN_UNUSED_RESULT "__attribute__((__warn_unused_result__))")
endif ()
check_c_source_compiles("
#include <strings.h>
int main() { ffs(0); return 0; }
" HAVE_DECL_FFS)
if (NOT HAVE_DECL_FFS)
set(HAVE_DECL_FFS 0)
endif ()
check_c_source_compiles("
int main() { __builtin_ffs(0); return 0; }
" HAVE_DECL___BUILTIN_FFS)
if (NOT HAVE_DECL___BUILTIN_FFS)
set(HAVE_DECL___BUILTIN_FFS 0)
endif ()
check_c_source_compiles("
static void foo(void) __attribute__ ((unused));
int main() { return 0; }
" HAVE___ATTRIBUTE__)
# Write configure result
configure_file("External/gitversion.h.cmake" "${ISL_BINARY_DIR}/gitversion.h")
configure_file("External/isl_config.h.cmake" "${ISL_BINARY_DIR}/isl_config.h")
file(WRITE "${ISL_BINARY_DIR}/include/isl/stdint.h" "#include <stdint.h>")
# ISL files to compile
set (ISL_FILES
External/isl/basis_reduction_tab.c
External/isl/isl_aff.c
External/isl/isl_affine_hull.c
External/isl/isl_arg.c
External/isl/isl_ast_build.c
External/isl/isl_ast_build_expr.c
External/isl/isl_ast.c
External/isl/isl_ast_codegen.c
External/isl/isl_ast_graft.c
External/isl/isl_band.c
External/isl/isl_bernstein.c
External/isl/isl_blk.c
External/isl/isl_bound.c
External/isl/isl_coalesce.c
External/isl/isl_constraint.c
External/isl/isl_convex_hull.c
External/isl/isl_ctx.c
External/isl/isl_deprecated.c
External/isl/isl_dim_map.c
External/isl/isl_equalities.c
External/isl/isl_factorization.c
External/isl/isl_farkas.c
External/isl/isl_flow.c
External/isl/isl_fold.c
External/isl/isl_hash.c
External/isl/isl_id.c
External/isl/isl_id_to_ast_expr.c
External/isl/isl_id_to_pw_aff.c
External/isl/isl_ilp.c
External/isl/isl_imath.c
External/isl/isl_input.c
External/isl/isl_int_sioimath.c
External/isl/isl_local_space.c
External/isl/isl_lp.c
External/isl/isl_map.c
External/isl/isl_map_list.c
External/isl/isl_map_simplify.c
External/isl/isl_map_subtract.c
External/isl/isl_map_to_basic_set.c
External/isl/isl_mat.c
External/isl/isl_morph.c
External/isl/isl_obj.c
External/isl/isl_options.c
External/isl/isl_output.c
External/isl/isl_point.c
External/isl/isl_polynomial.c
External/isl/isl_printer.c
External/isl/isl_range.c
External/isl/isl_reordering.c
External/isl/isl_sample.c
External/isl/isl_scan.c
External/isl/isl_schedule.c
External/isl/isl_schedule_band.c
External/isl/isl_schedule_node.c
External/isl/isl_schedule_read.c
External/isl/isl_schedule_tree.c
External/isl/isl_scheduler.c
External/isl/isl_seq.c
External/isl/isl_set_list.c
External/isl/isl_sort.c
External/isl/isl_space.c
External/isl/isl_stream.c
External/isl/isl_tab.c
External/isl/isl_tab_pip.c
External/isl/isl_tarjan.c
External/isl/isl_transitive_closure.c
External/isl/isl_union_map.c
External/isl/isl_val.c
External/isl/isl_val_sioimath.c
External/isl/isl_vec.c
External/isl/isl_version.c
External/isl/isl_vertices.c
External/isl/print.c
External/isl/imath/gmp_compat.c
External/isl/imath/imath.c
External/isl/imath/imrat.c
)
add_polly_library(Polly
Analysis/DependenceInfo.cpp
Analysis/ScopDetection.cpp
Analysis/ScopDetectionDiagnostic.cpp
Analysis/ScopInfo.cpp
Analysis/ScopGraphPrinter.cpp
Analysis/ScopPass.cpp
Analysis/TempScopInfo.cpp
CodeGen/BlockGenerators.cpp
${ISL_CODEGEN_FILES}
CodeGen/LoopGenerators.cpp
CodeGen/IRBuilder.cpp
CodeGen/Utils.cpp
CodeGen/RuntimeDebugBuilder.cpp
${GPGPU_CODEGEN_FILES}
Exchange/JSONExporter.cpp
Support/GICHelper.cpp
Support/SCEVValidator.cpp
Support/RegisterPasses.cpp
Support/ScopHelper.cpp
Support/ScopLocation.cpp
${POLLY_JSON_FILES}
Transform/Canonicalization.cpp
Transform/CodePreparation.cpp
Transform/DeadCodeElimination.cpp
Transform/IndependentBlocks.cpp
Transform/ScheduleOptimizer.cpp
${ISL_FILES}
)
# ISL requires at least C99 to compile. gcc < 5.0 use -std=gnu89 as default.
target_enable_c99(Polly)
if (BUILD_SHARED_LIBS)
target_link_libraries(Polly
LLVMSupport
LLVMCore
LLVMScalarOpts
LLVMInstCombine
LLVMTransformUtils
LLVMAnalysis
LLVMipo
LLVMMC
)
link_directories(
${LLVM_LIBRARY_DIR}
)
endif()
# Build a monolithic Polly.a and a thin module LLVMPolly.moduleext that links to
# that static library.
add_polly_loadable_module(LLVMPolly
Polly.cpp
)
if (TARGET intrinsics_gen)
# Check if we are building as part of an LLVM build
add_dependencies(Polly intrinsics_gen)
endif()
target_link_libraries(LLVMPolly Polly)
set_target_properties(LLVMPolly
PROPERTIES
LINKER_LANGUAGE CXX
PREFIX "")