osl_relation_remove_column already updates the nb_columns
[clay.git] / CMakeLists.txt
blob80a942560f42cbef971aa0534f22540462132932
1 cmake_minimum_required(VERSION 2.8)
4 set(PACKAGE_VERSION "0.0.1")
5 set(top_srcdir "${CMAKE_CURRENT_SOURCE_DIR}")
7 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
10 # User's settings - C Flags
12 #       set(release "TRUE")
13         set(release "FALSE")
15         # Release
16         if (release)
17                 set(CMAKE_C_FLAGS "-O3")
18         # Debug # valgrind --show-reachable=yes --leak-check=full -v exe
19         else()
20                 set(CMAKE_C_FLAGS "-O0 -g3")
21         endif()
23 # User's settings - General C Flags
24         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -std=c99 -pedantic")
27 # Build doxygen
28         find_package(Doxygen)
29         if(DOXYGEN_FOUND)
30                 configure_file("doc/Doxyfile.in" "Doxyfile")
31                 add_custom_target(
32                         doxygen
33                         ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
34                         WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
35                         COMMENT "Generating API documentation with Doxygen" VERBATIM
36                 )
37         else()
38                 message (STATUS "Doxygen not found :( API documentation can not be built")
39         endif()
41 # Build documentation
43         # doc
44         find_program(texi2pdf_exe texi2pdf)
45         if(texi2pdf_exe)
46                 add_custom_target(
47                         doc
48                         ${texi2pdf_exe} ${CMAKE_CURRENT_SOURCE_DIR}/doc/clay.texi --output=${CMAKE_CURRENT_BINARY_DIR}/clay.pdf
49                         WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
50                         COMMENT "Generating documentation (pdf) (with texi2pdf)" VERBATIM
51                 )
52         else()
53                 message (STATUS "texi2pdf not found :( Documentation can not be built")
54         endif()
57 # osl
58         find_package(osl REQUIRED)
59         
60 # Clan
61         find_package(clan REQUIRED)
62         add_definitions(-DCLAN_LINKED)
64 # Candl
65         find_package(candl REQUIRED)
66         add_definitions(-DCANDL_LINKED)
67         
68 # CLooG
69         find_package(cloog-isl REQUIRED)
70         add_definitions(-DCLOOG_LINKED)
72 # Flex
73         find_package(BISON REQUIRED)
74         find_package(FLEX REQUIRED)
75         BISON_TARGET(clay_parser source/parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.c)
76         FLEX_TARGET(clay_scanner source/scanner.l ${CMAKE_CURRENT_BINARY_DIR}/scanner.c)
77         ADD_FLEX_BISON_DEPENDENCY(clay_scanner clay_parser)
78         include_directories(${CMAKE_CURRENT_BINARY_DIR})
80 # Include directories (to use #include <> instead of #include "")
82         # include/clay/macros.h
83         configure_file("include/clay/macros.h.in" "include/clay/macros.h")
84         include_directories("${CMAKE_CURRENT_BINARY_DIR}/include")
85         # clay
86         include_directories("./include")
89 # Compiler log
90         message(STATUS "---")
91         message(STATUS "C compiler = ${CMAKE_C_COMPILER}")
92         if (release)
93                 message(STATUS "Mode Release")
94         else()
95                 message(STATUS "Mode Debug")
96         endif()
97         message(STATUS "C flags    = ${CMAKE_C_FLAGS}")
100 # Library
102         message(STATUS "---")
104         # files .c
105         file(
106                 GLOB_RECURSE
107                 sources
108                 source/*
109         )
110         string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/source/clay.c;" "" sources "${sources}") # with ;
111         string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/source/clay.c" "" sources "${sources}")  # without ;
113         # Shared
114         add_library(
115                 clay
116                 SHARED
117                 ${sources}
118                 ${BISON_clay_parser_OUTPUTS}
119                 ${FLEX_clay_scanner_OUTPUTS}
120         )
121         target_link_libraries(clay ${OSL_LIBRARY})
122         target_link_libraries(clay ${CLAN_LIBRARY})
123         target_link_libraries(clay ${CANDL_LIBRARY})
124         target_link_libraries(clay ${CLOOG_ISL_LIBRARY})
125         get_property(clay_lib_location TARGET clay PROPERTY LOCATION)
126         message(STATUS "Add clay library (shared) ${clay_lib_location}")
128         # Static
129         add_library(
130                 clay_static
131                 STATIC
132                 ${sources}
133                 ${BISON_clay_parser_OUTPUTS}
134                 ${FLEX_clay_scanner_OUTPUTS}
135         )
136         set_target_properties(clay_static PROPERTIES OUTPUT_NAME clay)
137         target_link_libraries(clay_static ${OSL_LIBRARY})
138         target_link_libraries(clay_static ${CLAN_LIBRARY})
139         target_link_libraries(clay_static ${CANDL_LIBRARY})
140         target_link_libraries(clay_static ${CLOOG_ISL_LIBRARY})
141         get_property(clay_static_lib_location TARGET clay_static PROPERTY LOCATION)
142         message(STATUS "Add clay library (static) ${clay_static_lib_location}")
145 # Executables & tests
147         message(STATUS "---") # clay
149         message(STATUS "Add executable clay")
150         add_executable(clay_exe "source/clay.c")
151         set_target_properties(clay_exe PROPERTIES OUTPUT_NAME "clay")
152         target_link_libraries(clay_exe clay_static ${OSL_LIBRARY})
153         target_link_libraries(clay_exe clay_static ${CLAN_LIBRARY})
154         target_link_libraries(clay_exe clay_static ${CANDL_LIBRARY})
155         target_link_libraries(clay_exe clay_static ${CLOOG_ISL_LIBRARY})
157         # clay test
158         find_package(PythonInterp)
159         if (PYTHONINTERP_FOUND)
161                 message(STATUS "---")
163                 enable_testing()
164                 file(
165                         GLOB_RECURSE
166                         tests
167                         tests/*.c
168                 )
170                 foreach(test ${tests})
171                         message(STATUS "Add Test ${test}")
172                         add_test(
173                                 ${test}
174                                 "${CMAKE_CURRENT_SOURCE_DIR}/tests/check_source_result.py"
175                                 "${test}"
176                                 "${test}.clay.scop"
177                                 "${CMAKE_CURRENT_BINARY_DIR}/clay"
178                         )
179                         endforeach()
181                 message(STATUS "---")
183         endif()
186 # Install
188         install(TARGETS clay LIBRARY DESTINATION lib)
189         install(TARGETS clay_static ARCHIVE DESTINATION lib)
190         install(DIRECTORY include/ DESTINATION include FILES_MATCHING PATTERN "*.h")
191         install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include/" DESTINATION include FILES_MATCHING PATTERN "*.h")
192         install(FILES "${CMAKE_CURRENT_BINARY_DIR}/parser.h" DESTINATION include/clay)
193         install(FILES clay-config.cmake DESTINATION lib/clay)
194         install(TARGETS clay_exe RUNTIME DESTINATION bin)
195         install(DIRECTORY tests DESTINATION share/clay FILES_MATCHING PATTERN "*.c")
198 # Little help
200         message(STATUS "You can execute:")
201         message(STATUS "    make          # To compile clay library & clay")
202         if (PYTHONINTERP_FOUND)
203                 message(STATUS "    make test     # To execute tests")
204         endif()
205         message(STATUS "    make install  # To install library, include and CMake module")
206         message(STATUS "                  # If you need root access:")
207         message(STATUS "                  #     sudo make install")
208         message(STATUS "                  #     su -c \"make install\"")
209         if(DOXYGEN_FOUND)
210                 message(STATUS "    make doxygen  # To generate the Doxygen")
211         endif()
212         if(texi2pdf_exe)
213                 message(STATUS "    make doc      # To generate the documentation")
214         endif()
216         message(STATUS "---")