avr: Memory had wrong documentation about exceptions thrown
[avr-sim.git] / CMake / Dependencies.cmake
blobabeb2ac693ef55775809457626a36cdc560262e3
1 #######################################################################
2 # Find all necessary and optional AVRSIM dependencies
3 #######################################################################
5 # AVRSIM_DEPENDENCIES_DIR can be used to specify a single base
6 # folder where the required dependencies may be found.
7 set(AVRSIM_DEPENDENCIES_DIR "" CACHE PATH "Path to prebuilt AVRSIM dependencies")
8 include(FindPkgMacros)
9 include(ParseArguments)
10 getenv_path(AVRSIM_DEPENDENCIES_DIR)
11 set(AVRSIM_DEP_SEARCH_PATH
12     ${AVRSIM_DEPENDENCIES_DIR}
13     ${ENV_AVRSIM_DEPENDENCIES_DIR}
14     "${AVRSIM_BINARY_DIR}/Dependencies"
15     "${AVRSIM_SOURCE_DIR}/Dependencies"
16     "${AVRSIM_BINARY_DIR}/../Dependencies"
17     "${AVRSIM_SOURCE_DIR}/../Dependencies"
20 # Set hardcoded path guesses for various platforms
21 if (UNIX)
22   set(AVRSIM_DEP_SEARCH_PATH ${AVRSIM_DEP_SEARCH_PATH} /usr/local)
23 endif ()
25 # give guesses as hints to the find_package calls
26 set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${AVRSIM_DEP_SEARCH_PATH})
27 set(CMAKE_FRAMEWORK_PATH ${CMAKE_FRAMEWORK_PATH} ${AVRSIM_DEP_SEARCH_PATH})
29 MACRO (generate_extract_options PACKAGENAME)
30         parse_arguments(${PACKAGENAME} "LIBNAMES;INCNAMES;INCSUFFIXES;LIBSUFFIXES" "" ${ARGN})
31         SET( ${PACKAGENAME}_LIBRARY_NAMES ${${PACKAGENAME}_LIBNAMES})
32         SET( ${PACKAGENAME}_INCLUDE_NAMES ${${PACKAGENAME}_INCNAMES})
33         SET( ${PACKAGENAME}_INC_SUFFIXES ${${PACKAGENAME}_INCSUFFIXES})
34         SET( ${PACKAGENAME}_LIB_SUFFIXES ${${PACKAGENAME}_LIBSUFFIXES})
35 ENDMACRO (generate_extract_options)
37 macro(generate_findbundle BUNDLENAME BNDLNAME PACKAGES)
38         if (NOT ${BUNDLENAME}_FOUND)
39                 set( ${BUNDLENAME}_LIBRARIES )
40                 set( ${BUNDLENAME}_FOUND TRUE )
41                 foreach(pkg ${PACKAGES})
42                         set(PREFIX "${BUNDLENAME}_${pkg}")
43                         set( ${PREFIX}_FIND_QUIETLY FALSE )
44                         generate_findpkg(${pkg} "${BNDLNAME};${pkg}"
45                                    LIBNAMES "${${PREFIX}_LIBRARY_NAMES}"
46                                    INCNAMES "${${PREFIX}_INCLUDE_NAMES}"
47                                    INCSUFFIXES "${${PREFIX}_INCLUDE_SUFFIXES};${BNDLNAME}"
48                                    LIBSUFFIXES "${${PREFIX}_LIBRARY_SUFFIXES};${BNDLNAME}")
50                         if( ${pkg}_FOUND )
51                                 set( ${BUNDLENAME}_INCLUDE_DIRS ${${BUNDLENAME}_INCLUDE_DIRS} ${${pkg}_INCLUDE_DIRS} )
52                                 set( ${BUNDLENAME}_LIBRARIES ${${BUNDLENAME}_LIBRARIES} ${${pkg}_LIBRARIES} )
53                         else( ${pkg}_FOUND )
54                                 set( ${BUNDLENAME}_FOUND FALSE )
55                         endif( ${pkg}_FOUND )
56                 endforeach(pkg)
58                 if( NOT ${BUNDLENAME}_FOUND )
59                         set( ${BUNDLENAME}_INCLUDE_DIRS )
60                         set( ${BUNDLENAME}_LIBRARIES )
61                 endif( NOT ${BUNDLENAME}_FOUND )
63         endif (NOT ${BUNDLENAME}_FOUND)
64 endmacro(generate_findbundle)
66 # Macro to easily generate a Findxxx.cmake script for an external library that conforms to our directory structures and such.
67 # PACKAGENAME is the name of the external package you are writing the find script for.
68 # LIBNAME is the name of the library that has to be searched for and linked with.
69 # INCNAME is the include file that is used to find the include directory for the package.
70 macro (generate_findpkg PACKAGENAME PKGNAME)
71         generate_extract_options(${PACKAGENAME} ${ARGN})
72         findpkg_begin (${PACKAGENAME})
74         getenv_path (${PACKAGENAME}_HOME)
76         # Construct the search path
77         set (${PACKAGENAME}_PREFIX_PATH ${${PACKAGENAME}_HOME} ${ENV_${PACKAGENAME}_HOME})
78         create_search_paths (${PACKAGENAME})
79         foreach(n ${PKGNAME})
80                 create_suffixes (${PACKAGENAME} ${n})
81         endforeach(n)
83         # Redo search if prefix path changed
84         clear_if_changed (${PACKAGENAME}_PREFIX_PATH
85           ${PACKAGENAME}_LIBRARY_FWK
86           ${PACKAGENAME}_LIBRARY_REL
87           ${PACKAGENAME}_LIBRARY_DBG
88           ${PACKAGENAME}_INCLUDE_DIR
89         )
91         get_debug_names (${PACKAGENAME}_LIBRARY_NAMES)
93 #       use_pkgconfig (${PACKAGENAME}_PKGC ${LIBNAME})
95         findpkg_framework (${PACKAGENAME})
97         find_path(${PACKAGENAME}_INCLUDE_DIR NAMES ${${PACKAGENAME}_INCLUDE_NAMES} HINTS ${${PACKAGENAME}_INC_SEARCH_PATH} ${${PACKAGENAME}_PKGC_INCLUDE_DIRS} PATH_SUFFIXES ${${PACKAGENAME}_INC_SUFFIXES})
98         find_library(${PACKAGENAME}_LIBRARY_REL NAMES ${${PACKAGENAME}_LIBRARY_NAMES} HINTS ${${PACKAGENAME}_LIB_SEARCH_PATH} ${${PACKAGENAME}_PKGC_LIBRARY_DIRS} PATH_SUFFIXES ${${PACKAGENAME}_LIB_SUFFIXES} release relwithdebinfo minsizerel)
99         find_library(${PACKAGENAME}_LIBRARY_DBG NAMES ${${PACKAGENAME}_LIBRARY_NAMES_DBG} HINTS ${${PACKAGENAME}_LIB_SEARCH_PATH} ${${PACKAGENAME}_PKGC_LIBRARY_DIRS} PATH_SUFFIXES ${${PACKAGENAME}_LIB_SUFFIXES} debug)
100         make_library_set(${PACKAGENAME}_LIBRARY)
102         findpkg_finish(${PACKAGENAME})
103 endmacro (generate_findpkg)
105 #######################################################################
106 # Core dependencies
107 #######################################################################
109 # Find devil
110 find_package(Xml2)
111 macro_log_feature(XML2_FOUND "Xml2" "xml parsing library" "http://" TRUE "" "")
113 #######################################################################
114 # Tools
115 #######################################################################
117 find_package(Doxygen)
118 macro_log_feature(DOXYGEN_FOUND "Doxygen" "Tool for building API documentation" "http://doxygen.org" FALSE "" "")
120 # Display results, terminate if anything required is missing
121 MACRO_DISPLAY_FEATURE_LOG()
123 include_directories( ${XML2_INCLUDE_DIRS} )