git-subtree-dir: software/gecode_on_replay git-subtree-split: 8051d92b9c89e49cccfbd1c201371580d7703ab4
201 lines
6.8 KiB
CMake
201 lines
6.8 KiB
CMake
#
|
|
# Main authors:
|
|
# Vincent Barichard <Vincent.Barichard@univ-angers.fr>
|
|
#
|
|
# Copyright:
|
|
# Vincent Barichard, 2013
|
|
#
|
|
# Last modified:
|
|
# $Date$ by $Author$
|
|
# $Revision$
|
|
#
|
|
# This file is part of Quacode:
|
|
# http://quacode.barichard.com
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining
|
|
# a copy of this software and associated documentation files (the
|
|
# "Software"), to deal in the Software without restriction, including
|
|
# without limitation the rights to use, copy, modify, merge, publish,
|
|
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
# permit persons to whom the Software is furnished to do so, subject to
|
|
# the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be
|
|
# included in all copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
#
|
|
|
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
|
|
|
SET(GECODE_SRC "${CMAKE_SOURCE_DIR}/../.." CACHE PATH "Path where GeCode source is installed")
|
|
SET(GECODE_BIN "${GECODE_SRC}" CACHE PATH "Path where GeCode libs and binaries are installed")
|
|
SET(BUILD_EXAMPLES ON CACHE BOOL "Build examples or not")
|
|
|
|
# If the user specifies -DCMAKE_BUILD_TYPE on the command line, take their definition
|
|
# and dump it in the cache along with proper documentation, otherwise set CMAKE_BUILD_TYPE
|
|
# to Debug prior to calling PROJECT()
|
|
#
|
|
IF(NOT DEFINED CMAKE_BUILD_TYPE)
|
|
# Check if Gecode is configured with --enable-debug
|
|
FILE(STRINGS ${GECODE_BIN}/config.status GECODE_DEBUG_BUILD REGEX "S\\[\"DEBUG_BUILD\"\\]=")
|
|
IF(GECODE_DEBUG_BUILD MATCHES "yes")
|
|
SET(QUACODE_BUILD_TYPE "Debug")
|
|
ELSE()
|
|
SET(QUACODE_BUILD_TYPE "Release")
|
|
ENDIF()
|
|
|
|
SET(CMAKE_BUILD_TYPE "${QUACODE_BUILD_TYPE}" CACHE STRING "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.")
|
|
ENDIF()
|
|
|
|
PROJECT(Quacode)
|
|
SET(CMAKE_CXX_FLAGS "-std=c++11")
|
|
|
|
SET(CMAKE_VERBOSE_MAKEFILE TRUE)
|
|
|
|
# Check if Gecode is configured with --enable-audit
|
|
FILE(STRINGS ${GECODE_BIN}/config.status GECODE_AUDIT REGEX "D\\[\"GECODE_AUDIT\"\\]=")
|
|
IF(GECODE_AUDIT)
|
|
SET(QUACODE_AUDIT TRUE)
|
|
ELSE()
|
|
SET(QUACODE_AUDIT FALSE)
|
|
ENDIF()
|
|
SET(LOG_AUDIT ${QUACODE_AUDIT} CACHE BOOL "Set to true to generate log output.")
|
|
|
|
IF(UNIX)
|
|
# determine, whether we want a static binary
|
|
SET(STATIC_LINKING FALSE CACHE BOOL "Build a static binary?")
|
|
# do we want static libraries?
|
|
IF(STATIC_LINKING)
|
|
SET(BUILD_SHARED_LIBS OFF)
|
|
# To know in source file that we compil static
|
|
ADD_DEFINITIONS(-DQUACODE_STATIC_LIBS)
|
|
# When STATIC_LINKING is TRUE, than cmake looks for libraries ending
|
|
# with .a. This is for linux only!
|
|
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
|
SET(CMAKE_EXE_LINKER_FLAGS "-static")
|
|
# Remove flags to get rid off all the -Wl,Bydnamic
|
|
SET(CMAKE_EXE_LINK_DYNAMIC_C_FLAGS)
|
|
SET(CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS)
|
|
# Use static libs for Boost
|
|
SET(Boost_USE_STATIC_LIBS ON)
|
|
SET(Boost_USE_STATIC_RUNTIME ON)
|
|
ELSE(STATIC_LINKING)
|
|
SET(BUILD_SHARED_LIBS ON)
|
|
ENDIF(STATIC_LINKING)
|
|
ELSE(UNIX)
|
|
SET(BUILD_SHARED_LIBS ON)
|
|
ENDIF(UNIX)
|
|
|
|
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_MODULE_PATH})
|
|
FIND_PACKAGE(Gecode)
|
|
|
|
IF(NOT GECODE_FOUND)
|
|
MESSAGE(FATAL_ERROR "Gecode is needed, consider to install it")
|
|
ELSE (NOT GECODE_FOUND)
|
|
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
|
|
INCLUDE_DIRECTORIES(${GECODE_BIN})
|
|
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
|
|
INCLUDE_DIRECTORIES(${GECODE_SRC})
|
|
|
|
LINK_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
|
|
LINK_DIRECTORIES(${GECODE_BIN})
|
|
|
|
IF (CMAKE_COMPILER_IS_GNUCXX)
|
|
ADD_DEFINITIONS(-Wall)
|
|
ADD_DEFINITIONS(-Wextra)
|
|
ADD_DEFINITIONS(-Wno-unused-local-typedefs)
|
|
ADD_DEFINITIONS(-fimplement-inlines)
|
|
ADD_DEFINITIONS(-fno-inline-functions)
|
|
ADD_DEFINITIONS(-pipe)
|
|
ADD_DEFINITIONS(-fPIC)
|
|
SET(CMAKE_CXX_FLAGS_DEBUG "-ggdb")
|
|
ENDIF ()
|
|
|
|
IF (LOG_AUDIT)
|
|
ADD_DEFINITIONS(-DLOG_AUDIT)
|
|
ENDIF()
|
|
|
|
INCLUDE(CheckCXXCompilerFlag)
|
|
check_cxx_compiler_flag(-fvisibility=hidden HAVE_VISIBILITY_HIDDEN_FLAG)
|
|
IF (HAVE_VISIBILITY_HIDDEN_FLAG)
|
|
ADD_DEFINITIONS(-fvisibility=hidden)
|
|
ADD_DEFINITIONS(-DQUACODE_GCC_HAS_CLASS_VISIBILITY)
|
|
ENDIF()
|
|
|
|
FIND_PACKAGE(Threads)
|
|
|
|
SET(QUACODE_HEADERS
|
|
quacode/qcsp.hh
|
|
quacode/qspaceinfo.hh
|
|
quacode/support/dynamic-list.hh
|
|
quacode/support/log.hh
|
|
quacode/search/sequential/qpath.hh
|
|
quacode/search/sequential/qdfs.hh
|
|
quacode/qint/qbool.hh
|
|
)
|
|
SET(QUACODE_HPP
|
|
quacode/qspaceinfo.hpp
|
|
quacode/search/qdfs.hpp
|
|
quacode/qint/watch.hpp
|
|
quacode/qint/qbool/clause.hpp
|
|
quacode/qint/qbool/eq.hpp
|
|
quacode/qint/qbool/eqv.hpp
|
|
quacode/qint/qbool/or.hpp
|
|
quacode/qint/qbool/xor.hpp
|
|
quacode/qint/qbool/xorv.hpp
|
|
)
|
|
SET(QUACODE_SRCS
|
|
quacode/qspaceinfo.cpp
|
|
quacode/support/log.cpp
|
|
quacode/search/qdfs.cpp
|
|
quacode/search/sequential/qpath.cpp
|
|
quacode/qint/qbool/qbool.cpp
|
|
${GECODE_SRC}/gecode/search/meta/nogoods.cpp
|
|
)
|
|
SET(QUACODE_EXAMPLES_SRCS
|
|
examples/qbf.cpp
|
|
examples/qdimacs.cpp
|
|
examples/nim-fibo.cpp
|
|
examples/matrix-game.cpp
|
|
examples/connect-four.cpp
|
|
examples/baker.cpp
|
|
examples/rndQCSP.cpp
|
|
)
|
|
|
|
SOURCE_GROUP("Hpp Files" REGULAR_EXPRESSION ".hpp")
|
|
|
|
SET_SOURCE_FILES_PROPERTIES(${ALL_HEADERS} PROPERTIES HEADER_FILE_ONLY TRUE)
|
|
SET_SOURCE_FILES_PROPERTIES(${ALL_HPP} PROPERTIES HEADER_FILE_ONLY TRUE)
|
|
|
|
ADD_LIBRARY(quacode ${QUACODE_SRCS} ${QUACODE_HEADERS} ${QUACODE_HPP})
|
|
TARGET_LINK_LIBRARIES(quacode ${GECODE_LIBRARIES})
|
|
SET_TARGET_PROPERTIES(quacode PROPERTIES COMPILE_DEFINITIONS "BUILD_QUACODE_LIB")
|
|
INSTALL(TARGETS quacode LIBRARY DESTINATION lib ARCHIVE DESTINATION lib/static)
|
|
SET(QUACODE_LIBRARIES quacode)
|
|
|
|
IF(BUILD_EXAMPLES)
|
|
# Add targets for examples
|
|
FOREACH (example ${QUACODE_EXAMPLES_SRCS})
|
|
GET_FILENAME_COMPONENT(exampleBin ${example} NAME_WE)
|
|
ADD_EXECUTABLE(${exampleBin} ${example})
|
|
TARGET_LINK_LIBRARIES(${exampleBin} ${QUACODE_LIBRARIES} ${GECODE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
|
INSTALL(TARGETS ${exampleBin} RUNTIME DESTINATION bin)
|
|
|
|
# set -static, when STATIC_LINKING is TRUE and set LINK_SEARCH_END_STATIC
|
|
# to remove the additional -bdynamic from the linker line.
|
|
IF(UNIX AND STATIC_LINKING)
|
|
SET(CMAKE_EXE_LINKER_FLAGS "-static")
|
|
SET_TARGET_PROPERTIES(${exampleBin} PROPERTIES LINK_SEARCH_END_STATIC 1)
|
|
ENDIF(UNIX AND STATIC_LINKING)
|
|
ENDFOREACH ()
|
|
ENDIF(BUILD_EXAMPLES)
|
|
|
|
ENDIF(NOT GECODE_FOUND)
|