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