brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.9 KiB · ab5cba9 Raw
318 lines · plain
1# Disable warnings for upstream projects.2if (MSVC)3  set(DISABLE_WARNING_FLAGS4    -wd4018 # 'expression' : signed/unsigned mismatch5    -wd4090 # 'operation' : different 'modifier' qualifiers6    -wd4200 # nonstandard extension used: zero-sized array in struct/union7    -wd4201 # nonstandard extension used: nameless struct/union8    -wd4334 # 'operator': result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?)9    -wd4221 # nonstandard extension used : 'identifier' : cannot be initialized using address of automatic variable10  )11else ()12  set(DISABLE_WARNING_FLAGS "-w")13endif ()14 15 16# External: Integer Set Library17if (POLLY_BUNDLED_ISL)18  set(ISL_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/isl")19  set(ISL_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/isl")20 21  # Determine version of isl22  if (EXISTS "${ISL_SOURCE_DIR}/GIT_HEAD_ID")23    # The source comes from a 'make dist' archive24    file(READ "${ISL_SOURCE_DIR}/GIT_HEAD_ID" ISL_GIT_HEAD_ID)25    string(STRIP "${ISL_GIT_HEAD_ID}" ISL_GIT_HEAD_ID)26  elseif (EXISTS "${ISL_SOURCE_DIR}/gitversion.h")27    # The source directory is preconfigured28    file(READ "${ISL_SOURCE_DIR}/gitversion.h" GITVERSION_H)29    string(REGEX REPLACE ".*\\\"([^\\\"]*)\\\".*" "\\1" ISL_GIT_HEAD_ID "${GITVERSION_H}")30  else ()31    # Unknown revision32    # TODO: We could look for a .git and get the revision from HEAD33    set(ISL_GIT_HEAD_ID "UNKNOWN")34  endif ()35 36  message(STATUS "ISL version: ${ISL_GIT_HEAD_ID}")37 38  # Enable small integer optimization and imath39  set(USE_GMP_FOR_MP OFF)40  set(USE_IMATH_FOR_MP ON)41  set(USE_SMALL_INT_OPT ON)42 43  # Determine compiler characteristics44  include(CheckCSourceCompiles)45 46  # Like check_c_source_compiles, but sets the result to either47  # 0 (error while compiling) or 1 (compiled successfully)48  # Required for compatibility with autotool's AC_CHECK_DECLS49  function (check_c_source_compiles_numeric _prog _var)50    check_c_source_compiles("${_prog}" "${_var}")51    if ("${${_var}}")52      set("${_var}" 1 PARENT_SCOPE)53    else ()54      set("${_var}" 0 PARENT_SCOPE)55    endif ()56  endfunction ()57 58  # Check for the existance of a type59  function (check_c_type_exists _type _files _variable)60    set(_includes "")61    foreach (file_name ${_files})62      set(_includes "${_includes}#include<${file_name}>\n")63    endforeach()64    check_c_source_compiles("65    ${_includes}66    ${_type} typeVar;67    int main(void) {68    return 0;69    }70    " ${_variable})71  endfunction ()72 73 74  check_c_source_compiles("75  int func(void) __attribute__((__warn_unused_result__));76  int main(void) { return 0; }77  " HAS_ATTRIBUTE_WARN_UNUSED_RESULT)78  set(GCC_WARN_UNUSED_RESULT)79  if (HAS_ATTRIBUTE_WARN_UNUSED_RESULT)80    set(GCC_WARN_UNUSED_RESULT "__attribute__((__warn_unused_result__))")81  endif ()82 83  check_c_source_compiles("84  __attribute__ ((unused)) static void foo(void);85  int main(void) { return 0; }86  " HAVE___ATTRIBUTE__)87 88 89  check_c_source_compiles_numeric("90  #include <strings.h>91  int main(void) { (void)ffs(0); return 0; }92  " HAVE_DECL_FFS)93 94  check_c_source_compiles_numeric("95  int main(void) { (void)__builtin_ffs(0); return 0; }96  " HAVE_DECL___BUILTIN_FFS)97 98  check_c_source_compiles_numeric("99  #include <intrin.h>100  int main(void) { (void)_BitScanForward(NULL, 0); return 0; }101  " HAVE_DECL__BITSCANFORWARD)102 103  if (NOT HAVE_DECL_FFS AND104      NOT HAVE_DECL___BUILTIN_FFS AND105      NOT HAVE_DECL__BITSCANFORWARD)106    message(FATAL_ERROR "No ffs implementation found")107  endif ()108 109 110  check_c_source_compiles_numeric("111  #include <strings.h>112  int main(void) { (void)strcasecmp(\"\", \"\"); return 0; }113  " HAVE_DECL_STRCASECMP)114 115  check_c_source_compiles_numeric("116  #include <string.h>117  int main(void) { (void)_stricmp(\"\", \"\"); return 0; }118  " HAVE_DECL__STRICMP)119 120  if (NOT HAVE_DECL_STRCASECMP AND NOT HAVE_DECL__STRICMP)121    message(FATAL_ERROR "No strcasecmp implementation found")122  endif ()123 124 125  check_c_source_compiles_numeric("126  #include <strings.h>127  int main(void) { (void)strncasecmp(\"\", \"\", 0); return 0; }128  " HAVE_DECL_STRNCASECMP)129 130  check_c_source_compiles_numeric("131  #include <string.h>132  int main(void) { (void)_strnicmp(\"\", \"\", 0); return 0; }133  " HAVE_DECL__STRNICMP)134 135  if (NOT HAVE_DECL_STRNCASECMP AND NOT HAVE_DECL__STRNICMP)136    message(FATAL_ERROR "No strncasecmp implementation found")137  endif ()138 139 140  check_c_source_compiles_numeric("141  #include <stdio.h>142  int main(void) { snprintf((void*)0, 0, \" \"); return 0; }143  " HAVE_DECL_SNPRINTF)144 145  check_c_source_compiles_numeric("146  #include <stdio.h>147  int main(void) { _snprintf((void*)0, 0, \" \"); return 0; }148  " HAVE_DECL__SNPRINTF)149 150  if (NOT HAVE_DECL_SNPRINTF AND NOT HAVE_DECL__SNPRINTF)151    message(FATAL_ERROR "No snprintf implementation found")152  endif ()153 154 155  check_c_type_exists(uint8_t "" HAVE_UINT8T)156  check_c_type_exists(uint8_t "stdint.h" HAVE_STDINT_H)157  check_c_type_exists(uint8_t "inttypes.h" HAVE_INTTYPES_H)158  check_c_type_exists(uint8_t "sys/types.h" HAVE_SYS_INTTYPES_H)159  if (HAVE_UINT8T)160    set(INCLUDE_STDINT_H "")161  elseif (HAVE_STDINT_H)162    set(INCLUDE_STDINT_H "#include <stdint.h>")163  elseif (HAVE_INTTYPES_H)164    set(INCLUDE_STDINT_H "#include <inttypes.h>")165  elseif (HAVE_SYS_INTTYPES_H)166    set(INCLUDE_STDINT_H "#include <sys/inttypes.h>")167  else ()168    message(FATAL_ERROR "No stdint.h or compatible found")169  endif ()170 171  # Write configure result172  # configure_file(... COPYONLY) avoids that the time stamp changes if the file is identical173  file(WRITE "${ISL_BINARY_DIR}/gitversion.h.tmp"174    "#define GIT_HEAD_ID \"${ISL_GIT_HEAD_ID}\"")175  configure_file("${ISL_BINARY_DIR}/gitversion.h.tmp"176    "${ISL_BINARY_DIR}/gitversion.h" COPYONLY)177 178  file(WRITE "${ISL_BINARY_DIR}/include/isl/stdint.h.tmp"179    "${INCLUDE_STDINT_H}\n")180  configure_file("${ISL_BINARY_DIR}/include/isl/stdint.h.tmp"181    "${ISL_BINARY_DIR}/include/isl/stdint.h" COPYONLY)182 183  configure_file("isl_config.h.cmake" "${ISL_BINARY_DIR}/isl_config.h")184  configure_file("isl_srcdir.c.cmake" "${ISL_BINARY_DIR}/isl_srcdir.c")185 186  include_directories(BEFORE187    ${ISL_BINARY_DIR}188    ${ISL_SOURCE_DIR}/imath189    ${ISL_SOURCE_DIR}/include190    ${ISL_SOURCE_DIR}191    )192 193  # ISL files to compile194  set (ISL_FILES195    isl/basis_reduction_tab.c196    isl/isl_aff.c197    isl/isl_aff_map.c198    isl/isl_affine_hull.c199    isl/isl_arg.c200    isl/isl_ast_build.c201    isl/isl_ast_build_expr.c202    isl/isl_ast.c203    isl/isl_ast_codegen.c204    isl/isl_ast_graft.c205    isl/isl_bernstein.c206    isl/isl_blk.c207    isl/isl_bound.c208    isl/isl_box.c209    isl/isl_coalesce.c210    isl/isl_constraint.c211    isl/isl_convex_hull.c212    isl/isl_ctx.c213    isl/isl_deprecated.c214    isl/isl_dim_map.c215    isl/isl_equalities.c216    isl/isl_factorization.c217    isl/isl_farkas.c218    isl/isl_ffs.c219    isl/isl_flow.c220    isl/isl_fold.c221    isl/isl_hash.c222    isl/isl_id.c223    isl/isl_id_to_ast_expr.c224    isl/isl_id_to_id.c225    isl/isl_id_to_pw_aff.c226    isl/isl_ilp.c227    isl/isl_imath.c228    isl/isl_input.c229    isl/isl_int_sioimath.c230    isl/isl_local.c231    isl/isl_local_space.c232    isl/isl_lp.c233    isl/isl_map.c234    isl/isl_map_list.c235    isl/isl_map_simplify.c236    isl/isl_map_subtract.c237    isl/isl_map_to_basic_set.c238    isl/isl_mat.c239    isl/isl_morph.c240    isl/isl_obj.c241    isl/isl_options.c242    isl/isl_output.c243    isl/isl_point.c244    isl/isl_polynomial.c245    isl/isl_printer.c246    isl/isl_range.c247    isl/isl_reordering.c248    isl/isl_sample.c249    isl/isl_scan.c250    isl/isl_schedule.c251    isl/isl_schedule_band.c252    isl/isl_schedule_constraints.c253    isl/isl_schedule_node.c254    isl/isl_schedule_read.c255    isl/isl_schedule_tree.c256    isl/isl_scheduler.c257    isl/isl_scheduler_clustering.c258    isl/isl_scheduler_scc.c259    isl/isl_seq.c260    isl/isl_set_list.c261    isl/isl_set_to_ast_graft_list.c262    isl/isl_sort.c263    isl/isl_space.c264    isl/isl_stride.c265    isl/isl_stream.c266    isl/isl_tab.c267    isl/isl_tab_pip.c268    isl/isl_tarjan.c269    isl/isl_transitive_closure.c270    isl/isl_union_map.c271    isl/isl_val.c272    isl/isl_val_sioimath.c273    isl/isl_vec.c274    isl/isl_version.c275    isl/isl_vertices.c276    isl/print.c277    isl/set_to_map.c278    isl/set_from_map.c279    isl/uset_to_umap.c280    isl/uset_from_umap.c281    isl/imath/gmp_compat.c282    isl/imath/imath.c283    isl/imath/imrat.c284    )285 286  add_polly_library(PollyISL287    ${ISL_FILES}288    )289 290 291  if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)292    install(DIRECTORY293      ${ISL_SOURCE_DIR}/include/294      ${ISL_BINARY_DIR}/include/295      DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/polly"296      FILES_MATCHING297      PATTERN "*.h"298      PATTERN "CMakeFiles" EXCLUDE299      )300  endif()301 302  add_executable(polly-isl-test303    isl/isl_test.c304    )305  set_target_properties(polly-isl-test PROPERTIES FOLDER "Polly/Tests")306 307  target_link_libraries(polly-isl-test PRIVATE308    PollyISL309    LLVMSupport310    )311 312  # ISL requires at least C99 to compile. gcc < 5.0 use -std=gnu89 as default.313  set_property(TARGET PollyISL polly-isl-test PROPERTY C_STANDARD 99)314 315  target_compile_options(PollyISL PRIVATE ${DISABLE_WARNING_FLAGS})316  target_compile_options(polly-isl-test PRIVATE ${DISABLE_WARNING_FLAGS})317endif (POLLY_BUNDLED_ISL)318