1if HAVE_CLANG
2if HAVE_CXX11
3MAYBE_INTERFACE = interface
4FORCE:
5interface/extract_interface$(BUILD_EXEEXT): FORCE
6	$(MAKE) $(AM_MAKEFLAGS) -C interface extract_interface$(BUILD_EXEEXT)
7endif
8endif
9SUBDIRS = . $(MAYBE_INTERFACE) doc
10DIST_SUBDIRS = $(MAYBE_INTERFACE) doc
11
12ACLOCAL_AMFLAGS = -I m4
13AUTOMAKE_OPTIONS = nostdinc subdir-objects
14
15lib_LTLIBRARIES = libisl.la
16noinst_PROGRAMS = isl_test isl_polyhedron_sample isl_pip \
17	isl_polyhedron_minimize isl_polytope_scan \
18	isl_polyhedron_detect_equalities isl_cat \
19	isl_closure isl_bound isl_schedule isl_codegen isl_test_int \
20	isl_flow isl_flow_cmp isl_schedule_cmp
21TESTS = isl_test codegen_test.sh pip_test.sh bound_test.sh isl_test_int \
22	flow_test.sh schedule_test.sh
23if HAVE_CPP_ISL_H
24  CPP_H = include/isl/cpp.h
25if HAVE_CXX11
26  noinst_PROGRAMS += isl_test_cpp
27  TESTS += isl_test_cpp
28endif
29endif
30if HAVE_CLANG
31if HAVE_CXX11
32  noinst_PROGRAMS += isl_test_cpp-checked isl_test_cpp-checked-conversion
33  TESTS += isl_test_cpp-checked isl_test_cpp-checked-conversion
34if HAVE_PYTHON
35  TESTS += isl_test_python.py
36  noinst_PYTHON = interface/isl.py
37  isl_test_python.py: interface/isl.py libisl.la
38endif
39endif
40endif
41TEST_EXTENSIONS = .py
42AM_TESTS_ENVIRONMENT = \
43	export PYTHONPATH=interface; \
44	export ISL_DYLD_LIBRARY_PATH=.libs; \
45	export LD_LIBRARY_PATH=".libs:$(LD_LIBRARY_PATH)";
46PY_LOG_COMPILER = $(PYTHON)
47
48if IMATH_FOR_MP
49
50MP_SRC = \
51	isl_imath.c \
52	isl_imath.h \
53	isl_int_imath.h \
54	imath_wrap/gmp_compat.h \
55	imath_wrap/imath.h \
56	imath_wrap/imrat.h \
57	imath_wrap/wrap.h \
58	imath_wrap/gmp_compat.c \
59	imath_wrap/imath.c \
60	imath_wrap/imrat.c
61
62noinst_PROGRAMS += isl_test_imath
63TESTS += isl_test_imath
64
65if SMALL_INT_OPT
66MP_SRC += isl_int_sioimath.h \
67	isl_int_sioimath.c \
68	isl_val_sioimath.c
69else
70MP_SRC += isl_val_imath.c
71endif
72
73MP_INCLUDE_H =
74endif
75
76if GMP_FOR_MP
77if NEED_GET_MEMORY_FUNCTIONS
78GET_MEMORY_FUNCTIONS=mp_get_memory_functions.c
79endif
80
81MP_SRC = \
82	$(GET_MEMORY_FUNCTIONS) \
83	isl_int_gmp.h \
84	isl_gmp.c \
85	isl_val_gmp.c
86
87MP_INCLUDE_H = include/isl/val_gmp.h
88endif
89
90includes = -I. -I$(srcdir) -I$(srcdir)/include -Iinclude/
91AM_CPPFLAGS = $(includes) @MP_CPPFLAGS@
92AM_CFLAGS = @WARNING_FLAGS@ @MP_CFLAGS@
93
94libisl_la_SOURCES = \
95	$(MP_SRC) \
96	isl_aff.c \
97	isl_aff_map.c \
98	isl_aff_private.h \
99	isl_affine_hull.c \
100	isl_arg.c \
101	isl_ast.c \
102	isl_ast_private.h \
103	isl_ast_build.c \
104	isl_ast_build_private.h \
105	isl_ast_build_expr.c \
106	isl_ast_build_expr.h \
107	isl_ast_codegen.c \
108	isl_ast_graft.c \
109	isl_ast_graft_private.h \
110	isl_basis_reduction.h \
111	basis_reduction_tab.c \
112	isl_bernstein.c \
113	isl_bernstein.h \
114	isl_blk.c \
115	isl_blk.h \
116	isl_bound.c \
117	isl_bound.h \
118	isl_box.c \
119	isl_coalesce.c \
120	isl_constraint.c \
121	isl_constraint_private.h \
122	isl_convex_hull.c \
123	isl_ctx.c \
124	isl_ctx_private.h \
125	isl_deprecated.c \
126	isl_dim_map.h \
127	isl_dim_map.c \
128	isl_equalities.c \
129	isl_equalities.h \
130	isl_factorization.c \
131	isl_factorization.h \
132	isl_farkas.c \
133	isl_ffs.c \
134	isl_flow.c \
135	isl_fold.c \
136	isl_hash.c \
137	isl_id_to_ast_expr.c \
138	isl_id_to_id.c \
139	isl_id_to_pw_aff.c \
140	isl_ilp.c \
141	isl_ilp_private.h \
142	isl_input.c \
143	isl_int.h \
144	isl_list_private.h \
145	isl_local_private.h \
146	isl_local.h \
147	isl_local.c \
148	isl_local_space_private.h \
149	isl_local_space.c \
150	isl_lp.c \
151	isl_lp_private.h \
152	isl_map.c \
153	isl_map_list.c \
154	isl_map_simplify.c \
155	isl_map_subtract.c \
156	isl_map_private.h \
157	isl_map_to_basic_set.c \
158	isl_mat.c \
159	isl_mat_private.h \
160	isl_morph.c \
161	isl_morph.h \
162	isl_id.c \
163	isl_id_private.h \
164	isl_obj.c \
165	isl_options.c \
166	isl_options_private.h \
167	isl_output.c \
168	isl_output_private.h \
169	isl_point_private.h \
170	isl_point.c \
171	isl_polynomial_private.h \
172	isl_polynomial.c \
173	isl_printer_private.h \
174	isl_printer.c \
175	print.c \
176	isl_range.c \
177	isl_range.h \
178	isl_reordering.c \
179	isl_reordering.h \
180	isl_sample.h \
181	isl_sample.c \
182	isl_scan.c \
183	isl_scan.h \
184	isl_schedule.c \
185	isl_schedule_band.c \
186	isl_schedule_band.h \
187	isl_schedule_node.c \
188	isl_schedule_node_private.h \
189	isl_schedule_read.c \
190	isl_schedule_tree.c \
191	isl_schedule_tree.h \
192	isl_schedule_private.h \
193	isl_schedule_constraints.c \
194	isl_schedule_constraints.h \
195	isl_scheduler.c \
196	isl_set_list.c \
197	isl_sort.c \
198	isl_sort.h \
199	isl_space.c \
200	isl_space_private.h \
201	isl_stream.c \
202	isl_stream_private.h \
203	isl_seq.c \
204	isl_seq.h \
205	isl_set_to_ast_graft_list.c \
206	isl_set_to_ast_graft_list.h \
207	isl_stride.c \
208	isl_tab.c \
209	isl_tab.h \
210	isl_tab_pip.c \
211	isl_tarjan.c \
212	isl_tarjan.h \
213	isl_transitive_closure.c \
214	isl_union_map.c \
215	isl_union_map_private.h \
216	isl_union_set_private.h \
217	isl_val.c \
218	isl_val_private.h \
219	isl_vec_private.h \
220	isl_vec.c \
221	isl_version.c \
222	isl_vertices_private.h \
223	isl_vertices.c \
224	isl_yaml.h
225libisl_la_LIBADD = @MP_LIBS@
226libisl_la_LDFLAGS = -version-info @versioninfo@ \
227	@MP_LDFLAGS@
228
229isl_test_LDFLAGS = @MP_LDFLAGS@
230isl_test_LDADD = libisl.la @MP_LIBS@
231
232isl_test_int_LDFLAGS = @MP_LDFLAGS@
233isl_test_int_LDADD = libisl.la @MP_LIBS@
234
235if IMATH_FOR_MP
236isl_test_imath_LDFLAGS = @MP_LDFLAGS@
237isl_test_imath_LDADD = libisl.la @MP_LIBS@
238endif
239
240isl_polyhedron_sample_LDADD = libisl.la
241isl_polyhedron_sample_SOURCES = \
242	polyhedron_sample.c
243
244isl_pip_LDFLAGS = @MP_LDFLAGS@
245isl_pip_LDADD = libisl.la @MP_LIBS@
246isl_pip_SOURCES = \
247	pip.c
248
249isl_schedule_LDFLAGS = @MP_LDFLAGS@
250isl_schedule_LDADD = libisl.la @MP_LIBS@
251isl_schedule_SOURCES = \
252	schedule.c
253
254isl_schedule_cmp_LDFLAGS = @MP_LDFLAGS@
255isl_schedule_cmp_LDADD = libisl.la @MP_LIBS@
256isl_schedule_cmp_SOURCES = \
257	schedule_cmp.c
258
259isl_flow_LDFLAGS = @MP_LDFLAGS@
260isl_flow_LDADD = libisl.la @MP_LIBS@
261isl_flow_SOURCES = \
262	flow.c
263
264isl_flow_cmp_LDFLAGS = @MP_LDFLAGS@
265isl_flow_cmp_LDADD = libisl.la @MP_LIBS@
266isl_flow_cmp_SOURCES = \
267	flow_cmp.c
268
269isl_codegen_LDFLAGS = @MP_LDFLAGS@
270isl_codegen_LDADD = libisl.la @MP_LIBS@
271isl_codegen_SOURCES = \
272	codegen.c
273
274isl_bound_LDFLAGS = @MP_LDFLAGS@
275isl_bound_LDADD = libisl.la @MP_LIBS@
276isl_bound_SOURCES = \
277	bound.c
278
279isl_polyhedron_minimize_LDFLAGS = @MP_LDFLAGS@
280isl_polyhedron_minimize_LDADD = libisl.la @MP_LIBS@
281isl_polyhedron_minimize_SOURCES = \
282	polyhedron_minimize.c
283
284isl_polytope_scan_LDADD = libisl.la
285isl_polytope_scan_SOURCES = \
286	polytope_scan.c
287
288isl_polyhedron_detect_equalities_LDADD = libisl.la
289isl_polyhedron_detect_equalities_SOURCES = \
290	polyhedron_detect_equalities.c
291
292isl_cat_LDADD = libisl.la
293isl_cat_SOURCES = \
294	cat.c
295
296isl_closure_LDADD = libisl.la
297isl_closure_SOURCES = \
298	closure.c
299
300isl_test_cpp_SOURCES = \
301	isl_test_cpp.cc \
302	include/isl/cpp.h
303isl_test_cpp_LDFLAGS = @MP_LDFLAGS@
304isl_test_cpp_LDADD = libisl.la @MP_LIBS@
305
306isl_test_cpp_checked_SOURCES = \
307	isl_test_cpp-checked.cc \
308	include/isl/cpp-checked.h
309isl_test_cpp_checked_LDFLAGS = @MP_LDFLAGS@
310isl_test_cpp_checked_LDADD = libisl.la @MP_LIBS@
311
312isl_test_cpp_checked_conversion_SOURCES = \
313	isl_test_cpp-checked-conversion.cc \
314	include/isl/cpp-checked-conversion.h
315isl_test_cpp_checked_conversion_LDFLAGS = @MP_LDFLAGS@
316isl_test_cpp_checked_conversion_LDADD = libisl.la @MP_LIBS@
317
318# dummy library that captures the dependencies on all headers
319# that are relevant for the bindings
320noinst_LIBRARIES = libdep.a
321libdep_a_SOURCES = dep.c
322
323if HAVE_CLANG
324if HAVE_CXX11
325interface/isldlname.py: libisl.la
326	$(AM_V_GEN) $(GREP) dlname $< | $(SED) -e 's/dlname/isl_dlname/' > $@
327interface/isl.py: interface/extract_interface$(BUILD_EXEEXT) libdep.a \
328		python/isl.py.top interface/isldlname.py
329	(cat interface/isldlname.py $(srcdir)/python/isl.py.top && \
330		interface/extract_interface$(BUILD_EXEEXT) --language=python \
331			$(includes) $(srcdir)/all.h) \
332			> $@ || (rm $@ && false)
333
334include/isl/cpp.h: interface/extract_interface$(BUILD_EXEEXT) libdep.a \
335		cpp/cpp.h.top cpp/cpp.h.pre cpp/cpp.h.bot
336	$(MKDIR_P) "include/isl/cpp" && \
337	(cat $(srcdir)/cpp/cpp.h.top $(srcdir)/all.h \
338	    $(srcdir)/cpp/cpp.h.pre && \
339		interface/extract_interface$(BUILD_EXEEXT) --language=cpp \
340			$(includes) $(srcdir)/all.h && \
341		cat $(srcdir)/cpp/cpp.h.bot) \
342			> $@ || (rm $@ && false)
343
344include/isl/cpp-checked.h: interface/extract_interface$(BUILD_EXEEXT) libdep.a \
345		cpp/cpp-checked.h.top \
346		cpp/cpp-checked.h.pre cpp/cpp-checked.h.bot
347	(cat $(srcdir)/cpp/cpp-checked.h.top $(srcdir)/all.h \
348	    $(srcdir)/cpp/cpp-checked.h.pre && \
349		interface/extract_interface$(BUILD_EXEEXT) \
350			--language=cpp-checked \
351			$(includes) $(srcdir)/all.h && \
352		cat $(srcdir)/cpp/cpp-checked.h.bot) \
353			> $@ || (rm $@ && false)
354
355include/isl/cpp-checked-conversion.h: \
356		interface/extract_interface$(BUILD_EXEEXT) \
357		libdep.a \
358		cpp/cpp-checked-conversion.h.top \
359		cpp/cpp-checked-conversion.h.bot
360	(cat $(srcdir)/cpp/cpp-checked-conversion.h.top && \
361		interface/extract_interface$(BUILD_EXEEXT) \
362			--language=cpp-checked-conversion \
363			$(includes) $(srcdir)/all.h && \
364		cat $(srcdir)/cpp/cpp-checked-conversion.h.bot) \
365			> $@ || (rm $@ && false)
366endif
367endif
368
369nodist_pkginclude_HEADERS = \
370	include/isl/stdint.h
371pkginclude_HEADERS = \
372	$(CPP_H) \
373	$(MP_INCLUDE_H) \
374	include/isl/aff.h \
375	include/isl/aff_type.h \
376	include/isl/arg.h \
377	include/isl/ast.h \
378	include/isl/ast_type.h \
379	include/isl/ast_build.h \
380	include/isl/constraint.h \
381	include/isl/ctx.h \
382	include/isl/fixed_box.h \
383	include/isl/flow.h \
384	include/isl/id.h \
385	include/isl/id_type.h \
386	include/isl/id_to_ast_expr.h \
387	include/isl/id_to_id.h \
388	include/isl/id_to_pw_aff.h \
389	include/isl/ilp.h \
390	include/isl/hash.h \
391	include/isl/hmap.h \
392	include/isl/hmap_templ.c \
393	include/isl/list.h \
394	include/isl/local_space.h \
395	include/isl/lp.h \
396	include/isl/mat.h \
397	include/isl/map.h \
398	include/isl/map_to_basic_set.h \
399	include/isl/map_type.h \
400	include/isl/maybe.h \
401	include/isl/maybe_ast_expr.h \
402	include/isl/maybe_basic_set.h \
403	include/isl/maybe_id.h \
404	include/isl/maybe_pw_aff.h \
405	include/isl/maybe_templ.h \
406	include/isl/multi.h \
407	include/isl/obj.h \
408	include/isl/options.h \
409	include/isl/point.h \
410	include/isl/polynomial.h \
411	include/isl/polynomial_type.h \
412	include/isl/printer.h \
413	include/isl/printer_type.h \
414	include/isl/schedule.h \
415	include/isl/schedule_node.h \
416	include/isl/schedule_type.h \
417	include/isl/set.h \
418	include/isl/set_type.h \
419	include/isl/space.h \
420	include/isl/space_type.h \
421	include/isl/stream.h \
422	include/isl/stride_info.h \
423	include/isl/union_map.h \
424	include/isl/union_map_type.h \
425	include/isl/union_set.h \
426	include/isl/union_set_type.h \
427	include/isl/val.h \
428	include/isl/val_type.h \
429	include/isl/vec.h \
430	include/isl/version.h \
431	include/isl/vertices.h
432
433if HAVE_CLANG
434if HAVE_CXX11
435    CPP_INTERFACES = \
436	include/isl/cpp.h \
437	include/isl/cpp-checked.h \
438	include/isl/cpp-checked-conversion.h
439endif
440endif
441BUILT_SOURCES = gitversion.h $(CPP_INTERFACES)
442CLEANFILES = \
443	gitversion.h \
444	interface/isldlname.py \
445	interface/isl.py \
446	interface/isl.pyc \
447	$(CPP_INTERFACES)
448
449DISTCLEANFILES = \
450	isl-uninstalled.sh \
451	isl-uninstalled.pc \
452	isl.pc \
453	isl.pc.in \
454	include/isl/stdint.h
455
456EXTRA_DIST = \
457	LICENSE \
458	isl_config_post.h \
459	isl_aff_lex_templ.c \
460	isl_align_params_templ.c \
461	isl_align_params_bin_templ.c \
462	basis_reduction_templ.c \
463	isl_bind_domain_templ.c \
464	bset_to_bmap.c \
465	bset_from_bmap.c \
466	isl_check_named_params_templ.c \
467	check_reparse_templ.c \
468	check_reparse_test_templ.c \
469	check_single_reference_templ.c \
470	check_type_range_templ.c \
471	isl_copy_tuple_id_templ.c \
472	isl_domain_factor_templ.c \
473	extract_key.c \
474	isl_ilp_opt_multi_val_templ.c \
475	isl_ilp_opt_val_templ.c \
476	has_single_reference_templ.c \
477	isl_insert_domain_templ.c \
478	isl_list_macro.h \
479	isl_list_templ.c \
480	isl_list_templ.h \
481	isl_map_bound_templ.c \
482	isl_map_lexopt_templ.c \
483	isl_maybe_ast_graft_list.h \
484	isl_maybe_map.h \
485	isl_multi_macro.h \
486	isl_multi_bind_templ.c \
487	isl_multi_explicit_domain.c \
488	isl_multi_pw_aff_explicit_domain.c \
489	isl_multi_union_pw_aff_explicit_domain.c \
490	isl_multi_no_explicit_domain.c \
491	isl_multi_no_domain_templ.c \
492	isl_multi_templ.c \
493	isl_multi_templ.h \
494	isl_multi_add_constant_templ.c \
495	isl_multi_align_templ.c \
496	isl_multi_align_set.c \
497	isl_multi_align_union_set.c \
498	isl_multi_apply_templ.c \
499	isl_multi_apply_set.c \
500	isl_multi_apply_union_set.c \
501	isl_multi_arith_templ.c \
502	isl_multi_bind_domain_templ.c \
503	isl_multi_cmp.c \
504	isl_multi_coalesce.c \
505	isl_multi_dim_id_templ.c \
506	isl_multi_dims.c \
507	isl_multi_domain_templ.c \
508	isl_multi_floor.c \
509	isl_multi_from_base_templ.c \
510	isl_multi_gist.c \
511	isl_multi_hash.c \
512	isl_multi_insert_domain_templ.c \
513	isl_multi_intersect.c \
514	isl_multi_identity_templ.c \
515	isl_multi_locals_templ.c \
516	isl_multi_min_max_templ.c \
517	isl_multi_move_dims_templ.c \
518	isl_multi_nan_templ.c \
519	isl_multi_param_templ.c \
520	isl_multi_product_templ.c \
521	isl_multi_read_no_explicit_domain_templ.c \
522	isl_multi_splice_templ.c \
523	isl_multi_tuple_id_templ.c \
524	isl_multi_unbind_params_templ.c \
525	isl_multi_union_add_templ.c \
526	isl_multi_zero_templ.c \
527	isl_opt_mpa_templ.c \
528	opt_type.h \
529	print_templ.c \
530	print_templ_yaml.c \
531	print_yaml_field_templ.c \
532	isl_power_templ.c \
533	isl_project_out_all_params_templ.c \
534	isl_pw_macro.h \
535	isl_pw_templ.c \
536	isl_pw_templ.h \
537	isl_pw_add_constant_templ.c \
538	isl_pw_add_constant_multi_val_templ.c \
539	isl_pw_add_constant_val_templ.c \
540	isl_pw_bind_domain_templ.c \
541	isl_pw_eval.c \
542	isl_pw_hash.c \
543	isl_pw_insert_dims_templ.c \
544	isl_pw_insert_domain_templ.c \
545	isl_pw_lift_templ.c \
546	isl_pw_locals_templ.c \
547	isl_pw_morph_templ.c \
548	isl_pw_move_dims_templ.c \
549	isl_pw_neg_templ.c \
550	isl_pw_opt_templ.c \
551	isl_pw_pullback_templ.c \
552	isl_pw_sub_templ.c \
553	isl_pw_union_opt.c \
554	read_in_string_templ.c \
555	set_to_map.c \
556	set_from_map.c \
557	set_list_from_map_list_inl.c \
558	isl_tab_lexopt_templ.c \
559	isl_test_list_templ.c \
560	isl_test_plain_equal_templ.c \
561	isl_type_check_equal_space_templ.c \
562	isl_type_has_equal_space_bin_templ.c \
563	isl_type_has_equal_space_templ.c \
564	isl_type_has_space_templ.c \
565	isl_unbind_params_templ.c \
566	uset_to_umap.c \
567	uset_from_umap.c \
568	isl_union_macro.h \
569	isl_union_templ.c \
570	isl_union_single.c \
571	isl_union_multi.c \
572	isl_union_eval.c \
573	isl_union_locals_templ.c \
574	isl_union_map_lex_templ.c \
575	isl_union_neg.c \
576	isl_union_pw_templ.c \
577	libisl-gdb.py \
578	doc/CodingStyle \
579	doc/SubmittingPatches \
580	doc/implementation.tex \
581	doc/isl.bib \
582	doc/mypod2latex \
583	doc/manual.tex \
584	doc/reading.tex \
585	doc/user.pod \
586	imath/gmp_compat.c \
587	imath/gmp_compat.h \
588	imath/imath.c \
589	imath/imath.h \
590	imath/imrat.c \
591	imath/imrat.h \
592	all.h \
593	cpp \
594	python \
595	isl_test_cpp-generic.cc \
596	isl_test_python.py \
597	test_inputs
598
599dist-hook:
600	echo @GIT_HEAD_VERSION@ > $(distdir)/GIT_HEAD_ID
601	(cd doc; make manual.pdf)
602	cp doc/manual.pdf $(distdir)/doc/
603
604pkgconfigdir=$(pkgconfig_libdir)
605pkgconfig_DATA = $(pkgconfig_libfile)
606
607gitversion.h: @GIT_HEAD@
608	$(AM_V_GEN)echo '#define GIT_HEAD_ID "'@GIT_HEAD_VERSION@'"' > $@
609
610install-data-local: $(srcdir)/libisl-gdb.py
611	@libisl=`sed -ne "/^library_names=/{s/.*='//;s/'$$//;s/ .*//;p;}" \
612		 $(builddir)/libisl.la`; \
613	case $$libisl in \
614	'') echo Cannot find isl library name. GDB bindings not installed.;; \
615	*) echo $(INSTALL_DATA) $(srcdir)/libisl-gdb.py \
616		$(DESTDIR)$(libdir)/$$libisl-gdb.py; \
617	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"; \
618	$(INSTALL_DATA) $(srcdir)/libisl-gdb.py \
619	    $(DESTDIR)$(libdir)/$$libisl-gdb.py; \
620	esac
621
622uninstall-local:
623	@libisl=`sed -ne "/^library_names=/{s/.*='//;s/'$$//;s/ .*//;p;}" \
624		 $(builddir)/libisl.la`; \
625	if test -n "$${libisl}"; then \
626		rm -f $(DESTDIR)$(libdir)/$$libisl-gdb.py; \
627	fi
628