# =============================================================================
#                 CMake module defining the Symbex project
# =============================================================================


message (STATUS "****** Defining project******")

# Definition of project name and supported languages
project (Symbex CXX C)

# Project structure : only add directories associated with the build of an
# internal library (i.e. containing a CMakeLists.txt defining a target)
# Sources within subdirectories are taken into account by the recursive
# look-up (see the specific CMakeLists.txt)
add_subdirectory (base)
add_subdirectory (builder)
add_subdirectory (collection)
add_subdirectory (common)
add_subdirectory (computer)
add_subdirectory (fam)
add_subdirectory (fml)
add_subdirectory (parser)
add_subdirectory (printer)
add_subdirectory (sew)
add_subdirectory (solver)
add_subdirectory (util)



# Main target C++ source files  (all files matching patterns)
file (GLOB_RECURSE MAIN_CXX_SRC_FILES main/*.cpp main/*.h)

# Main target definition (association to its sources)
add_executable (symbex ${MAIN_CXX_SRC_FILES})

# Adhoc dependencies to force builds from sources (if a prerequisite is not found)
add_dependencies(symbex rescan_cvc4)
add_dependencies(symbex rescan_antlr2)

# Main target link - FIXME : duplicate fml and fam needed to link sucessfully
target_link_libraries (symbex sew parser fam fml fam builder solver computer fml common base collection printer util ${ANTLR2_LIBRARIES} ${ANTLR3_LIBRARIES} ${Boost_LIBRARIES} ${CVC4_LIBRARIES} ${lib_gmp_c} ${lib_gmp_cxx})

