Solve the missed local dimension bug with strides and modulo guards
[clan.git] / CMakeLists.txt
blob7c0fb17cc934e1924962d750b279a2fb9fb14fbb
1 cmake_minimum_required(VERSION 2.8)
4 set(PACKAGE_VERSION "0.7.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/clan.texi --output=${CMAKE_CURRENT_BINARY_DIR}/clan.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()
56         # Reference card
57         find_program(pdflatex_exe pdflatex)
58         if(pdflatex_exe)
59                 file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/doc/reference_card DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
60                 add_custom_target(
61                         ref_card
62                         ${pdflatex_exe} ${CMAKE_CURRENT_BINARY_DIR}/reference_card/reference_card.tex
63                         WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/reference_card"
64                         COMMENT "Generating Clan reference card (pdf) (with pdflatex)" VERBATIM
65                 )
66         else()
67                 message (STATUS "pdflatex not found =( Clan reference card can not be built")
68         endif()
71 # osl
72         find_package(osl REQUIRED)
74 # Flex
75         find_package(BISON REQUIRED)
76         find_package(FLEX REQUIRED)
77         BISON_TARGET(clan_parser source/parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.c)
78         FLEX_TARGET(clan_scanner source/scanner.l ${CMAKE_CURRENT_BINARY_DIR}/scanner.c)
79         ADD_FLEX_BISON_DEPENDENCY(clan_scanner clan_parser)
80         include_directories(${CMAKE_CURRENT_BINARY_DIR})
82 # Include directories (to use #include <> instead of #include "")
84         # include/clan/macros.h
85         configure_file("include/clan/macros.h.in" "include/clan/macros.h")
86         include_directories("${CMAKE_CURRENT_BINARY_DIR}/include")
87         # clan
88         include_directories("./include")
91 # Compiler log
92         message(STATUS "---")
93         message(STATUS "C compiler = ${CMAKE_C_COMPILER}")
94         if (release)
95                 message(STATUS "Mode Release")
96         else()
97                 message(STATUS "Mode Debug")
98         endif()
99         message(STATUS "C flags    = ${CMAKE_C_FLAGS}")
102 # Library
104         message(STATUS "---")
106         # files .c
107         file(
108                 GLOB_RECURSE
109                 sources
110                 source/*
111         )
112         string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/source/clan.c;" "" sources "${sources}") # with ;
113         string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/source/clan.c" "" sources "${sources}")  # without ;
115         # Shared
116         add_library(
117                 clan
118                 SHARED
119                 ${sources}
120                 ${BISON_clan_parser_OUTPUTS}
121                 ${FLEX_clan_scanner_OUTPUTS}
122         )
123         target_link_libraries(clan ${OSL_LIBRARY})
124         get_property(clan_lib_location TARGET clan PROPERTY LOCATION)
125         message(STATUS "Add clan library (shared) ${clan_lib_location}")
127         # Static
128         add_library(
129                 clan_static
130                 STATIC
131                 ${sources}
132                 ${BISON_clan_parser_OUTPUTS}
133                 ${FLEX_clan_scanner_OUTPUTS}
134         )
135         set_target_properties(clan_static PROPERTIES OUTPUT_NAME clan)
136         target_link_libraries(clan_static ${OSL_LIBRARY})
137         get_property(clan_static_lib_location TARGET clan_static PROPERTY LOCATION)
138         message(STATUS "Add clan library (static) ${clan_static_lib_location}")
141 # Executables & tests
143         message(STATUS "---") # clan
145         message(STATUS "Add executable clan")
146         add_executable(clan_exe "source/clan.c")
147         set_target_properties(clan_exe PROPERTIES OUTPUT_NAME "clan")
148         target_link_libraries(clan_exe clan_static ${OSL_LIBRARY})
150         # clan test
151         find_package(PythonInterp)
152         if (PYTHONINTERP_FOUND)
153         
154                 message(STATUS "---")
156                 enable_testing()
157                 file(
158                         GLOB_RECURSE
159                         tests
160                         tests/*.c
161                 )
163                 foreach(test ${tests})
164                         message(STATUS "Add Test ${test}")
165                         if("${test}" MATCHES "autoscop")
166                                 add_test(
167                                         ${test}
168                                         "${CMAKE_CURRENT_SOURCE_DIR}/tests/check_source_result.py"
169                                         "${test}"
170                                         "${test}.scop"
171                                         "${CMAKE_CURRENT_BINARY_DIR}/clan"
172                                         "-autoscop"
173                                 )
174                         else()
175                                 add_test(
176                                         ${test}
177                                         "${CMAKE_CURRENT_SOURCE_DIR}/tests/check_source_result.py"
178                                         "${test}"
179                                         "${test}.scop"
180                                         "${CMAKE_CURRENT_BINARY_DIR}/clan"
181                                 )
182                         endif()
183                         endforeach()
185                 message(STATUS "---")
187         endif()
190 # Install
192         install(TARGETS clan LIBRARY DESTINATION lib)
193         install(TARGETS clan_static ARCHIVE DESTINATION lib)
194         install(DIRECTORY include/ DESTINATION include FILES_MATCHING PATTERN "*.h")
195         install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include/" DESTINATION include FILES_MATCHING PATTERN "*.h")
196         install(FILES "${CMAKE_CURRENT_BINARY_DIR}/parser.h" DESTINATION include/clan)
197         install(FILES clan-config.cmake DESTINATION lib/clan)
198         install(TARGETS clan_exe RUNTIME DESTINATION bin)
201 # Little help
203         message(STATUS "You can execute:")
204         message(STATUS "    make          # To compile clan library & clan")
205         if (PYTHONINTERP_FOUND)
206                 message(STATUS "    make test     # To execute tests")
207         endif()
208         message(STATUS "    make install  # To install library, include and CMake module")
209         message(STATUS "                  # If you need root access:")
210         message(STATUS "                  #     sudo make install")
211         message(STATUS "                  #     su -c \"make install\"")
212         if(DOXYGEN_FOUND)
213                 message(STATUS "    make doxygen  # To generate the Doxygen")
214         endif()
215         if(texi2pdf_exe)
216                 message(STATUS "    make doc      # To generate the documentation")
217         endif()
218         if(pdflatex_exe)
219                 message(STATUS "    make ref_card # To generate Clan reference card")
220         endif()
222         message(STATUS "---")