2014-02-12 11:45:03 +00:00
#
# Defines fc library target.
2012-09-08 02:50:37 +00:00
PROJECT ( fc )
2014-02-12 11:45:03 +00:00
CMAKE_MINIMUM_REQUIRED ( VERSION 2.8.12 )
2012-09-08 02:50:37 +00:00
2014-02-12 11:45:03 +00:00
MESSAGE ( STATUS "Configuring project fc located in: ${CMAKE_CURRENT_SOURCE_DIR}" )
SET ( CMAKE_AUTOMOC OFF )
2012-09-08 02:50:37 +00:00
2014-02-12 11:45:03 +00:00
# Setup module path to make visible used CMake extensions
list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/GitVersionGen" )
list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules" )
2012-09-08 02:50:37 +00:00
2014-04-01 11:54:54 +00:00
INCLUDE ( GetPrerequisites )
2012-09-08 02:50:37 +00:00
INCLUDE ( VersionMacros )
INCLUDE ( SetupTargetMacros )
2014-02-12 11:45:03 +00:00
INCLUDE ( GetGitRevisionDescription )
2012-09-08 02:50:37 +00:00
2014-05-20 22:02:20 +00:00
get_git_head_revision ( GIT_REFSPEC FC_GIT_REVISION_SHA )
get_git_unix_timestamp ( FC_GIT_REVISION_UNIX_TIMESTAMP )
2014-01-12 14:34:29 +00:00
2012-09-08 02:50:37 +00:00
SET ( DEFAULT_HEADER_INSTALL_DIR include/\ ${ target } )
SET ( DEFAULT_LIBRARY_INSTALL_DIR lib/ )
SET ( DEFAULT_EXECUTABLE_INSTALL_DIR bin/ )
SET ( CMAKE_DEBUG_POSTFIX _debug )
2013-06-05 19:19:00 +00:00
SET ( BUILD_SHARED_LIBS NO )
2015-06-12 13:50:56 +00:00
SET ( ECC_IMPL secp256k1 CACHE STRING "secp256k1 or openssl or mixed" )
2016-08-12 22:39:57 +00:00
SET ( FC_USE_FULL_ZLIB FALSE CACHE BOOL "TRUE to try to use full zlib for compression, FALSE to use miniz.c" )
if ( FC_USE_FULL_ZLIB )
find_package ( ZLIB REQUIRED )
SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DFC_USE_FULL_ZLIB" )
endif ( )
2012-09-08 02:50:37 +00:00
2014-04-01 11:54:54 +00:00
set ( platformBitness 32 )
if ( CMAKE_SIZEOF_VOID_P EQUAL 8 )
set ( platformBitness 64 )
endif ( )
2014-02-12 11:45:03 +00:00
SET ( ORIGINAL_LIB_SUFFIXES ${ CMAKE_FIND_LIBRARY_SUFFIXES } )
2012-09-08 02:50:37 +00:00
2014-04-01 11:54:54 +00:00
SET ( BOOST_COMPONENTS )
2019-05-21 21:42:14 +00:00
LIST ( APPEND BOOST_COMPONENTS thread date_time filesystem system program_options signals serialization chrono unit_test_framework context locale iostreams )
2015-04-27 12:57:45 +00:00
SET ( Boost_USE_STATIC_LIBS ON CACHE STRING "ON or OFF" )
2014-04-01 11:54:54 +00:00
2015-03-10 20:15:55 +00:00
IF ( ECC_IMPL STREQUAL openssl )
2015-06-15 18:38:33 +00:00
SET ( ECC_REST src/crypto/elliptic_impl_pub.cpp )
2015-03-10 20:15:55 +00:00
ELSE ( ECC_IMPL STREQUAL openssl )
2015-06-15 18:38:33 +00:00
SET ( ECC_LIB secp256k1 )
IF ( ECC_IMPL STREQUAL mixed )
SET ( ECC_REST src/crypto/elliptic_impl_priv.cpp src/crypto/elliptic_impl_pub.cpp )
ELSE ( ECC_IMPL STREQUAL mixed )
SET ( ECC_REST src/crypto/elliptic_impl_priv.cpp )
ENDIF ( ECC_IMPL STREQUAL mixed )
2015-03-10 20:15:55 +00:00
ENDIF ( ECC_IMPL STREQUAL openssl )
2015-03-07 13:48:45 +00:00
2015-06-13 17:39:43 +00:00
# Configure secp256k1-zkp
2016-05-26 19:45:51 +00:00
if ( MSVC )
2015-06-25 17:57:10 +00:00
# autoconf won't work here, hard code the defines
set ( SECP256K1_DIR "${CMAKE_CURRENT_SOURCE_DIR}/vendor/secp256k1-zkp" )
2015-06-26 15:14:02 +00:00
2015-06-25 17:57:10 +00:00
file ( GLOB SECP256K1_SOURCES "${SECP256K1_DIR}/src/secp256k1.c" )
add_library ( secp256k1 ${ SECP256K1_SOURCES } )
2015-06-26 15:14:02 +00:00
2015-06-25 17:57:10 +00:00
target_include_directories ( secp256k1 PRIVATE "${SECP256K1_DIR}" PUBLIC "${SECP256K1_DIR}/include" )
2015-06-26 15:14:02 +00:00
2015-06-25 17:57:10 +00:00
set ( SECP256K1_BUILD_DEFINES
U S E _ F I E L D _ 1 0 X 2 6
U S E _ F I E L D _ I N V _ B U I L T I N
U S E _ N U M _ N O N E
U S E _ S C A L A R _ 8 X 3 2
U S E _ S C A L A R _ I N V _ B U I L T I N )
set_target_properties ( secp256k1 PROPERTIES COMPILE_DEFINITIONS "${SECP256K1_BUILD_DEFINES}" LINKER_LANGUAGE C )
2016-05-26 19:45:51 +00:00
else ( MSVC )
2015-06-25 17:57:10 +00:00
include ( ExternalProject )
2016-05-26 19:45:51 +00:00
if ( MINGW )
ExternalProject_Add ( project_secp256k1
P R E F I X $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / v e n d o r / s e c p 2 5 6 k 1 - z k p
S O U R C E _ D I R $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / v e n d o r / s e c p 2 5 6 k 1 - z k p
C O N F I G U R E _ C O M M A N D $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / v e n d o r / s e c p 2 5 6 k 1 - z k p / c o n f i g u r e - - p r e f i x = $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / v e n d o r / s e c p 2 5 6 k 1 - z k p - - w i t h - b i g n u m = n o - - h o s t = x 8 6 _ 6 4 - w 6 4 - m i n g w 3 2
B U I L D _ C O M M A N D m a k e
I N S T A L L _ C O M M A N D t r u e
B U I L D _ B Y P R O D U C T S $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / v e n d o r / s e c p 2 5 6 k 1 - z k p / s r c / p r o j e c t _ s e c p 2 5 6 k 1 - b u i l d / . l i b s / l i b s e c p 2 5 6 k 1 . a
)
else ( MINGW )
2015-06-25 17:57:10 +00:00
ExternalProject_Add ( project_secp256k1
P R E F I X $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / v e n d o r / s e c p 2 5 6 k 1 - z k p
S O U R C E _ D I R $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / v e n d o r / s e c p 2 5 6 k 1 - z k p
2015-06-25 18:28:01 +00:00
C O N F I G U R E _ C O M M A N D $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / v e n d o r / s e c p 2 5 6 k 1 - z k p / c o n f i g u r e - - p r e f i x = $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / v e n d o r / s e c p 2 5 6 k 1 - z k p - - w i t h - b i g n u m = n o
2015-06-25 17:57:10 +00:00
B U I L D _ C O M M A N D m a k e
2015-06-25 23:34:25 +00:00
I N S T A L L _ C O M M A N D t r u e
2015-06-26 15:14:02 +00:00
B U I L D _ B Y P R O D U C T S $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / v e n d o r / s e c p 2 5 6 k 1 - z k p / s r c / p r o j e c t _ s e c p 2 5 6 k 1 - b u i l d / . l i b s / l i b s e c p 2 5 6 k 1 . a
2015-06-25 17:57:10 +00:00
)
2016-05-26 19:45:51 +00:00
endif ( MINGW )
2015-06-25 17:57:10 +00:00
ExternalProject_Add_Step ( project_secp256k1 autogen
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / v e n d o r / s e c p 2 5 6 k 1 - z k p
2015-06-25 23:34:25 +00:00
C O M M A N D $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / v e n d o r / s e c p 2 5 6 k 1 - z k p / a u t o g e n . s h
2015-06-25 17:57:10 +00:00
D E P E N D E R S c o n f i g u r e
)
2015-06-25 23:34:25 +00:00
ExternalProject_Get_Property ( project_secp256k1 binary_dir )
2015-06-25 17:57:10 +00:00
add_library ( secp256k1 STATIC IMPORTED )
2015-06-25 23:34:25 +00:00
set_property ( TARGET secp256k1 PROPERTY IMPORTED_LOCATION ${ binary_dir } /.libs/libsecp256k1 ${ CMAKE_STATIC_LIBRARY_SUFFIX } )
2015-06-25 17:57:10 +00:00
set_property ( TARGET secp256k1 PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ CMAKE_CURRENT_SOURCE_DIR } /vendor/secp256k1-zkp/include )
add_dependencies ( secp256k1 project_secp256k1 )
2016-03-22 22:19:47 +00:00
install ( FILES ${ binary_dir } /.libs/libsecp256k1 ${ CMAKE_STATIC_LIBRARY_SUFFIX } DESTINATION lib/cryptonomex )
2016-05-26 19:45:51 +00:00
endif ( MSVC )
2015-06-13 17:39:43 +00:00
# End configure secp256k1-zkp
2012-09-08 02:50:37 +00:00
IF ( WIN32 )
2014-02-12 11:45:03 +00:00
MESSAGE ( STATUS "Configuring fc to build on Win32" )
2012-09-08 02:50:37 +00:00
2016-05-22 05:33:19 +00:00
set ( RPCRT4 rpcrt4 )
2012-09-08 02:50:37 +00:00
2014-02-12 11:45:03 +00:00
#boost
SET ( BOOST_ROOT $ENV{ BOOST_ROOT } )
2014-04-09 10:41:33 +00:00
# set(Boost_USE_DEBUG_PYTHON ON)
2014-02-12 11:45:03 +00:00
set ( Boost_USE_MULTITHREADED ON )
2014-04-10 11:23:13 +00:00
set ( BOOST_ALL_DYN_LINK OFF ) # force dynamic linking for all libraries
2014-04-01 11:54:54 +00:00
FIND_PACKAGE ( Boost 1.53 REQUIRED COMPONENTS ${ BOOST_COMPONENTS } )
2014-02-12 11:45:03 +00:00
# For Boost 1.53 on windows, coroutine was not in BOOST_LIBRARYDIR and do not need it to build, but if boost versin >= 1.54, find coroutine otherwise will cause link errors
IF ( NOT "${Boost_VERSION}" MATCHES "1.53(.*)" )
2014-02-13 03:40:47 +00:00
SET ( BOOST_LIBRARIES_TEMP ${ Boost_LIBRARIES } )
2014-02-12 11:45:03 +00:00
FIND_PACKAGE ( Boost 1.54 REQUIRED COMPONENTS coroutine )
2014-04-01 11:54:54 +00:00
LIST ( APPEND BOOST_COMPONENTS coroutine )
2014-02-13 03:40:47 +00:00
SET ( Boost_LIBRARIES ${ BOOST_LIBRARIES_TEMP } ${ Boost_LIBRARIES } )
2014-02-12 11:45:03 +00:00
ENDIF ( )
2014-06-17 14:05:46 +00:00
2016-05-22 05:33:19 +00:00
set ( PLATFORM_SPECIFIC_LIBS wsock32.lib ws2_32.lib userenv.lib )
2014-06-17 14:05:46 +00:00
# iphlpapi.lib
2012-09-08 02:50:37 +00:00
ELSE ( WIN32 )
2014-02-12 11:45:03 +00:00
MESSAGE ( STATUS "Configuring fc to build on Unix/Apple" )
2012-09-08 02:50:37 +00:00
2014-04-01 11:54:54 +00:00
LIST ( APPEND BOOST_COMPONENTS coroutine )
2015-06-13 17:39:43 +00:00
FIND_PACKAGE ( Boost 1.53 REQUIRED COMPONENTS ${ BOOST_COMPONENTS } )
2012-09-08 02:50:37 +00:00
2014-02-12 11:45:03 +00:00
SET ( CMAKE_FIND_LIBRARY_SUFFIXES ".a;.so" )
2012-09-08 02:50:37 +00:00
2014-12-08 13:57:36 +00:00
IF ( NOT APPLE )
# Linux or other unix
2014-02-12 11:45:03 +00:00
SET ( rt_library rt )
SET ( pthread_library pthread )
ENDIF ( NOT APPLE )
ENDIF ( WIN32 )
2013-06-05 19:19:00 +00:00
2015-04-29 19:41:55 +00:00
2014-06-17 15:35:13 +00:00
IF ( NOT "$ENV{OPENSSL_ROOT_DIR}" STREQUAL "" )
2014-05-23 15:37:20 +00:00
set ( OPENSSL_ROOT_DIR $ENV{ OPENSSL_ROOT_DIR } )
set ( OPENSSL_INCLUDE_DIR ${ OPENSSL_ROOT_DIR } /include )
message ( STATUS "Setting up OpenSSL root and include vars to ${OPENSSL_ROOT_DIR}, ${OPENSSL_INCLUDE_DIR}" )
2014-06-17 14:58:57 +00:00
ENDIF ( )
2014-05-23 15:37:20 +00:00
2014-06-17 15:35:13 +00:00
2015-03-26 20:51:10 +00:00
find_package ( OpenSSL REQUIRED )
2013-10-11 02:19:01 +00:00
2014-03-11 15:29:29 +00:00
set ( CMAKE_FIND_LIBRARY_SUFFIXES ${ ORIGINAL_LIB_SUFFIXES } )
2013-10-11 02:19:01 +00:00
2014-02-12 11:45:03 +00:00
option ( UNITY_BUILD OFF )
2013-10-11 02:19:01 +00:00
2013-06-05 19:19:00 +00:00
set ( fc_sources
2013-07-27 03:20:06 +00:00
s r c / u i n t 1 2 8 . c p p
2014-10-15 21:00:49 +00:00
s r c / r e a l 1 2 8 . c p p
2013-06-05 19:19:00 +00:00
s r c / v a r i a n t . c p p
s r c / e x c e p t i o n . c p p
s r c / v a r i a n t _ o b j e c t . c p p
2020-10-16 15:12:57 +00:00
s r c / s t a t i c _ v a r i a n t . c p p
2013-06-05 19:19:00 +00:00
s r c / t h r e a d / t h r e a d . c p p
2014-08-27 16:20:19 +00:00
s r c / t h r e a d / t h r e a d _ s p e c i f i c . c p p
2013-06-05 19:19:00 +00:00
s r c / t h r e a d / f u t u r e . c p p
s r c / t h r e a d / t a s k . c p p
2015-06-13 17:39:43 +00:00
s r c / t h r e a d / s p i n _ l o c k . c p p
s r c / t h r e a d / s p i n _ y i e l d _ l o c k . c p p
2013-06-05 19:19:00 +00:00
s r c / t h r e a d / m u t e x . c p p
2014-08-02 23:43:28 +00:00
s r c / t h r e a d / n o n _ p r e e m p t a b l e _ s c o p e _ c h e c k . c p p
2013-06-05 19:19:00 +00:00
s r c / a s i o . c p p
s r c / s t r i n g . c p p
2014-01-09 23:01:47 +00:00
s r c / s h a r e d _ p t r . c p p
s r c / t i m e . c p p
s r c / u t f 8 . c p p
2013-06-05 19:19:00 +00:00
s r c / i o / i o s t r e a m . c p p
s r c / i o / d a t a s t r e a m . c p p
s r c / i o / b u f f e r e d _ i o s t r e a m . c p p
s r c / i o / f s t r e a m . c p p
s r c / i o / s s t r e a m . c p p
s r c / i o / j s o n . c p p
s r c / i o / v a r i n t . c p p
2014-02-16 06:17:31 +00:00
s r c / i o / c o n s o l e . c p p
2013-06-05 19:19:00 +00:00
s r c / f i l e s y s t e m . c p p
2013-11-24 18:00:21 +00:00
s r c / i n t e r p r o c e s s / s i g n a l s . c p p
2013-06-05 19:19:00 +00:00
s r c / i n t e r p r o c e s s / f i l e _ m a p p i n g . c p p
2013-07-04 01:35:30 +00:00
s r c / i n t e r p r o c e s s / m m a p _ s t r u c t . c p p
2016-10-10 21:16:57 +00:00
s r c / i n t e r p r o c e s s / f i l e _ m u t e x . c p p
2015-04-29 19:41:55 +00:00
s r c / r p c / c l i . c p p
2015-06-30 19:28:12 +00:00
s r c / r p c / h t t p _ a p i . c p p
s r c / r p c / j s o n _ c o n n e c t i o n . c p p
s r c / r p c / s t a t e . c p p
2016-07-30 23:24:15 +00:00
s r c / r p c / b s t a t e . c p p
2015-06-30 19:28:12 +00:00
s r c / r p c / w e b s o c k e t _ a p i . c p p
2015-06-13 17:39:43 +00:00
s r c / l o g / l o g _ m e s s a g e . c p p
2013-06-05 19:19:00 +00:00
s r c / l o g / l o g g e r . c p p
s r c / l o g / a p p e n d e r . c p p
s r c / l o g / c o n s o l e _ a p p e n d e r . c p p
s r c / l o g / f i l e _ a p p e n d e r . c p p
2015-01-20 21:13:26 +00:00
s r c / l o g / g e l f _ a p p e n d e r . c p p
2013-06-05 19:19:00 +00:00
s r c / l o g / l o g g e r _ c o n f i g . c p p
2015-07-29 21:22:34 +00:00
s r c / c r y p t o / _ d i g e s t _ c o m m o n . c p p
2013-08-13 16:58:55 +00:00
s r c / c r y p t o / o p e n s s l . c p p
s r c / c r y p t o / a e s . c p p
2013-07-17 15:50:45 +00:00
s r c / c r y p t o / c r c . c p p
s r c / c r y p t o / c i t y . c p p
2013-07-17 19:00:13 +00:00
s r c / c r y p t o / b a s e 3 6 . c p p
2013-06-05 19:19:00 +00:00
s r c / c r y p t o / b a s e 5 8 . c p p
2013-07-17 19:00:13 +00:00
s r c / c r y p t o / b a s e 6 4 . c p p
2013-06-27 18:19:08 +00:00
s r c / c r y p t o / b i g i n t . c p p
2013-06-05 19:19:00 +00:00
s r c / c r y p t o / h e x . c p p
s r c / c r y p t o / s h a 1 . c p p
2013-07-28 14:49:45 +00:00
s r c / c r y p t o / r i p e m d 1 6 0 . c p p
2013-06-05 19:19:00 +00:00
s r c / c r y p t o / s h a 2 5 6 . c p p
2013-06-27 18:19:08 +00:00
s r c / c r y p t o / s h a 2 2 4 . c p p
s r c / c r y p t o / s h a 5 1 2 . c p p
2015-07-10 14:07:14 +00:00
s r c / c r y p t o / m d 5 . c p p
2013-06-05 19:19:00 +00:00
s r c / c r y p t o / d h . c p p
s r c / c r y p t o / b l o w f i s h . c p p
2015-03-13 17:47:31 +00:00
s r c / c r y p t o / e l l i p t i c _ c o m m o n . c p p
$ { E C C _ R E S T }
2015-03-06 13:28:25 +00:00
s r c / c r y p t o / e l l i p t i c _ $ { E C C _ I M P L } . c p p
2014-04-06 23:16:14 +00:00
s r c / c r y p t o / r a n d . c p p
2013-06-05 19:19:00 +00:00
s r c / n e t w o r k / t c p _ s o c k e t . c p p
s r c / n e t w o r k / u d p _ s o c k e t . c p p
s r c / n e t w o r k / h t t p / h t t p _ c o n n e c t i o n . c p p
s r c / n e t w o r k / h t t p / h t t p _ s e r v e r . c p p
2015-03-26 20:51:10 +00:00
s r c / n e t w o r k / h t t p / w e b s o c k e t . c p p
2013-06-05 19:19:00 +00:00
s r c / n e t w o r k / i p . c p p
2017-07-13 14:18:29 +00:00
s r c / n e t w o r k / n t p . c p p
2014-04-17 16:00:52 +00:00
s r c / n e t w o r k / r a t e _ l i m i t i n g . c p p
2013-06-05 19:19:00 +00:00
s r c / n e t w o r k / r e s o l v e . c p p
s r c / n e t w o r k / u r l . c p p
2013-08-13 16:58:55 +00:00
s r c / c o m p r e s s / s m a z . c p p
2015-02-16 20:07:24 +00:00
s r c / c o m p r e s s / z l i b . c p p
2013-06-05 19:19:00 +00:00
)
2014-01-12 14:34:29 +00:00
2015-06-13 17:39:43 +00:00
file ( GLOB_RECURSE fc_headers ${ CMAKE_CURRENT_SOURCE_DIR } *.hpp *.h )
2014-02-12 11:45:03 +00:00
2013-06-05 19:19:00 +00:00
set ( sources
$ { f c _ s o u r c e s }
)
2014-01-12 14:34:29 +00:00
2014-05-20 22:02:20 +00:00
configure_file ( "${CMAKE_CURRENT_SOURCE_DIR}/src/git_revision.cpp.in" "${CMAKE_CURRENT_BINARY_DIR}/git_revision.cpp" @ONLY )
list ( APPEND sources "${CMAKE_CURRENT_BINARY_DIR}/git_revision.cpp" )
2014-02-12 11:45:03 +00:00
list ( APPEND sources ${ fc_headers } )
2014-01-12 14:34:29 +00:00
2016-03-17 22:27:21 +00:00
add_subdirectory ( vendor/websocketpp EXCLUDE_FROM_ALL )
2012-10-26 05:03:47 +00:00
2016-03-17 22:41:22 +00:00
setup_library ( fc SOURCES ${ sources } LIBRARY_TYPE STATIC )
install ( DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/" DESTINATION include )
2013-02-05 04:08:48 +00:00
2015-04-29 19:41:55 +00:00
# begin readline stuff
find_package ( Curses )
find_package ( Readline )
file ( GLOB HEADERS "include/bts/cli/*.hpp" )
if ( READLINE_FOUND )
target_compile_definitions ( fc PRIVATE HAVE_READLINE )
set ( readline_libraries ${ Readline_LIBRARY } )
if ( CURSES_FOUND )
list ( APPEND readline_libraries ${ CURSES_LIBRARY } )
endif ( )
set ( readline_includes ${ Readline_INCLUDE_DIR } )
endif ( )
if ( WIN32 )
target_compile_definitions ( fc PRIVATE _CRT_NONSTDC_NO_DEPRECATE )
endif ( WIN32 )
# end readline stuff
2016-09-29 18:11:30 +00:00
if ( NOT CPP_STANDARD )
set ( CPP_STANDARD, "-std=c++11" )
endif ( )
2014-02-12 11:45:03 +00:00
IF ( WIN32 )
target_compile_definitions ( fc PUBLIC WIN32 NOMINMAX _WIN32_WINNT=0x0501 _CRT_SECURE_NO_WARNINGS
2015-06-13 17:39:43 +00:00
_ S C L _ S E R C U R E _ N O _ W A R N I N G S
2014-02-12 11:45:03 +00:00
# Needed to disable MSVC autolinking feature (#pragma comment)
B O O S T _ A L L _ N O _ L I B
2015-06-23 19:32:33 +00:00
# The current version of websockets doesn't correctly guess what 'chrono' implementation boost::asio uses
2015-06-17 15:03:45 +00:00
# on the recommended build platform of VC++12/boost_1.58. Force it here until websocket gets their
# autodetecting code to do the right thing.
_ W E B S O C K E T P P _ C P P 1 1 _ C H R O N O _
2014-02-12 11:45:03 +00:00
)
2016-05-22 05:33:19 +00:00
if ( MSVC )
# Activate C++ exception handling, assume extern C calls don't throw
# Add /U options to be sure settings specific to dynamic boost link are ineffective
target_compile_options ( fc PUBLIC /EHsc /UBOOST_ALL_DYN_LINK /UBOOST_LINKING_PYTHON /UBOOST_DEBUG_PYTHON )
elseif ( MINGW )
# Put MinGW specific compiler settings here
endif ( )
2014-02-12 11:45:03 +00:00
ELSE ( )
2014-05-22 08:52:30 +00:00
SET ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall" )
2014-02-13 11:55:26 +00:00
2014-02-12 11:45:03 +00:00
IF ( APPLE )
2016-09-29 18:11:30 +00:00
SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPP_STANDARD} -stdlib=libc++ -Wall" )
2014-02-12 11:45:03 +00:00
ELSE ( )
2014-07-24 19:33:56 +00:00
if ( NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
2016-09-29 18:11:30 +00:00
target_compile_options ( fc PUBLIC ${ CPP_STANDARD } -Wall -fnon-call-exceptions )
2014-07-24 19:33:56 +00:00
endif ( )
2016-09-29 18:11:30 +00:00
SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPP_STANDARD} -Wall -fnon-call-exceptions" )
2017-04-26 16:58:32 +00:00
if ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
2017-04-26 17:20:58 +00:00
if ( CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 4.0.0 OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.0.0 )
2017-04-26 16:58:32 +00:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-partial-specialization" )
endif ( )
endif ( )
2014-02-12 11:45:03 +00:00
ENDIF ( )
ENDIF ( )
2015-06-13 17:39:43 +00:00
2016-09-28 18:34:57 +00:00
IF ( APPLE )
# As of 10.10 yosemite, the OpenSSL static libraries shipped with os x have a dependency
# on zlib, so any time you link in openssl you also need to link zlib. . We really want to detect whether openssl was configured with the --no-zlib
# option or not when it was built, but that's difficult to do in practice, so we
# just always try to link it in on mac.
find_package ( ZLIB REQUIRED )
ELSE ( APPLE )
find_package ( ZLIB )
ENDIF ( APPLE )
if ( ZLIB_FOUND )
MESSAGE ( STATUS "zlib found" )
add_definitions ( -DHAS_ZLIB )
else ( )
MESSAGE ( STATUS "zlib not found" )
2016-09-29 18:55:09 +00:00
set ( ZLIB_LIBRARIES "" )
2016-09-28 18:34:57 +00:00
endif ( ZLIB_FOUND )
2015-12-04 16:40:08 +00:00
# This will become unnecessary once we update to websocketpp which fixes upstream issue #395
SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWEBSOCKETPP_STRICT_MASKING" )
2016-01-12 20:34:36 +00:00
SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBOOST_ASIO_HAS_STD_CHRONO" )
2017-01-25 16:16:52 +00:00
OPTION ( LOG_LONG_API "Log long API calls over websocket (ON OR OFF)" ON )
MESSAGE ( STATUS "LOG_LONG_API: ${LOG_LONG_API}" )
if ( LOG_LONG_API )
SET ( LOG_LONG_API_MAX_MS 1000 CACHE STRING "Max API execution time in ms" )
SET ( LOG_LONG_API_WARN_MS 750 CACHE STRING "API execution time in ms at which to warn" )
MESSAGE ( STATUS " " )
MESSAGE ( STATUS " LOGGING LONG API CALLS" )
MESSAGE ( STATUS " MAX MS: ${LOG_LONG_API_MAX_MS}" )
MESSAGE ( STATUS " WARN MS: ${LOG_LONG_API_WARN_MS}" )
MESSAGE ( STATUS " " )
SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLOG_LONG_API -DLOG_LONG_API_MAX_MS=${LOG_LONG_API_MAX_MS} -DLOG_LONG_API_WARN_MS=${LOG_LONG_API_WARN_MS}" )
SET ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DLOG_LONG_API -DLOG_LONG_API_MAX_MS=${LOG_LONG_API_MAX_MS} -DLOG_LONG_API_WARN_MS=${LOG_LONG_API_WARN_MS}" )
endif ( )
2014-02-12 11:45:03 +00:00
target_include_directories ( fc
P U B L I C $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / i n c l u d e
$ { B o o s t _ I N C L U D E _ D I R }
$ { O P E N S S L _ I N C L U D E _ D I R }
2016-05-22 05:33:19 +00:00
" v e n d o r / d i f f - m a t c h - p a t c h - c p p - s t l "
2017-01-03 20:13:22 +00:00
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / v e n d o r / w e b s o c k e t p p
2015-04-29 19:41:55 +00:00
" $ { r e a d l i n e _ i n c l u d e s } "
2014-02-12 11:45:03 +00:00
P R I V A T E $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R }
2015-06-13 17:39:43 +00:00
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / v e n d o r / s e c p 2 5 6 k 1 - z k p
2014-02-12 11:45:03 +00:00
)
2017-01-03 20:13:22 +00:00
#target_link_libraries( fc PUBLIC ${Boost_LIBRARIES} ${OPENSSL_LIBRARIES} ${ZLIB_LIBRARIES} ${BZIP2_LIBRARIES} ${PLATFORM_SPECIFIC_LIBS} ${RPCRT4} ${CMAKE_DL_LIBS} ${rt_library} ${ECC_LIB} )
2015-10-05 16:09:35 +00:00
IF ( NOT WIN32 )
set ( LINK_USR_LOCAL_LIB -L/usr/local/lib )
ENDIF ( )
2019-05-21 21:42:14 +00:00
target_link_libraries ( fc PUBLIC ${ LINK_USR_LOCAL_LIB } ${ Boost_LIBRARIES } ${ OPENSSL_LIBRARIES } ${ ZLIB_LIBRARIES } ${ PLATFORM_SPECIFIC_LIBS } ${ RPCRT4 } ${ CMAKE_DL_LIBS } ${ rt_library } ${ readline_libraries } ${ ECC_LIB } )
2013-08-13 16:58:55 +00:00
2015-05-19 14:02:37 +00:00
if ( MSVC )
set_source_files_properties ( src/network/http/websocket.cpp PROPERTIES COMPILE_FLAGS "/bigobj" )
endif ( MSVC )
2015-04-19 08:14:53 +00:00
IF ( NOT Boost_UNIT_TEST_FRAMEWORK_LIBRARY MATCHES "\\.(a|lib)$" )
2016-05-22 05:33:19 +00:00
IF ( MSVC )
2015-04-14 08:37:50 +00:00
add_definitions ( /DBOOST_TEST_DYN_LINK )
2016-05-22 05:33:19 +00:00
ELSE ( MSVC )
2015-04-14 08:37:50 +00:00
add_definitions ( -DBOOST_TEST_DYN_LINK )
2016-05-22 05:33:19 +00:00
ENDIF ( MSVC )
2015-04-14 08:37:50 +00:00
ENDIF ( )
2015-03-26 20:51:10 +00:00
include_directories ( vendor/websocketpp )
2016-10-24 21:44:53 +00:00
add_subdirectory ( tests )
2015-07-22 20:18:12 +00:00
2014-03-14 15:04:37 +00:00
if ( WIN32 )
2014-04-11 11:32:34 +00:00
# add addtional import library on windows platform
target_link_libraries ( fc PUBLIC crypt32.lib )
2014-03-14 15:04:37 +00:00
# now generate a list of the DLLs we're using to use during the install process
include ( ParseLibraryList )
PARSE_LIBRARY_LIST ( ${ Boost_LIBRARIES }
F O U N D p a r s e O k
D E B U G B o o s t _ L I B R A R I E S _ D E B U G
O P T B o o s t _ L I B R A R I E S _ R E L E A S E
G E N E R A L B o o s t _ L I B R A R I E S _ G E N E R A L )
2014-04-01 11:54:54 +00:00
#Variable will hold list of .pdb files generated for libraries the 'fc' module is linked to
set ( INTERFACE_LINK_PDB_RELEASE )
2014-03-14 15:04:37 +00:00
set ( SHARED_LIBRARIES_RELEASE )
foreach ( boost_import_lib ${ Boost_LIBRARIES_RELEASE } )
get_filename_component ( import_lib_name_root ${ boost_import_lib } NAME_WE )
get_filename_component ( import_lib_path ${ boost_import_lib } PATH )
set ( boost_dll "${import_lib_path}/${import_lib_name_root}${CMAKE_SHARED_LIBRARY_SUFFIX}" )
2014-04-01 11:54:54 +00:00
set ( boost_lib_pdb "${import_lib_name_root}.pdb" )
FILE ( GLOB_RECURSE boost_pdb_paths "${import_lib_path}/../../bin.v2/*/${boost_lib_pdb}" )
foreach ( p ${ boost_pdb_paths } )
if ( p MATCHES ".*/address-model-${platformBitness}/" )
GP_APPEND_UNIQUE ( INTERFACE_LINK_PDB_RELEASE ${ p } )
endif ( )
endforeach ( )
2014-04-10 11:23:13 +00:00
if ( EXISTS "${boost_dll}" )
set ( SHARED_LIBRARIES_RELEASE ${ SHARED_LIBRARIES_RELEASE } "${boost_dll}" )
endif ( )
2014-03-14 15:04:37 +00:00
endforeach ( )
2015-06-13 17:39:43 +00:00
2014-04-01 11:54:54 +00:00
set ( INTERFACE_LINK_PDB_DEBUG )
2014-03-14 15:04:37 +00:00
set ( SHARED_LIBRARIES_DEBUG )
foreach ( boost_import_lib ${ Boost_LIBRARIES_DEBUG } )
get_filename_component ( import_lib_name_root ${ boost_import_lib } NAME_WE )
get_filename_component ( import_lib_path ${ boost_import_lib } PATH )
set ( boost_dll "${import_lib_path}/${import_lib_name_root}${CMAKE_SHARED_LIBRARY_SUFFIX}" )
2014-04-01 11:54:54 +00:00
set ( boost_lib_pdb "${import_lib_name_root}.pdb" )
FILE ( GLOB_RECURSE boost_pdb_paths "${import_lib_path}/../../bin.v2/*/${boost_lib_pdb}" )
foreach ( p ${ boost_pdb_paths } )
if ( p MATCHES ".*/address-model-${platformBitness}/" )
GP_APPEND_UNIQUE ( INTERFACE_LINK_PDB_DEBUG ${ p } )
endif ( )
endforeach ( )
2014-04-10 11:23:13 +00:00
if ( EXISTS "${boost_dll}" )
set ( SHARED_LIBRARIES_DEBUG ${ SHARED_LIBRARIES_DEBUG } "${boost_dll}" )
endif ( )
2014-03-14 15:04:37 +00:00
endforeach ( )
2014-09-11 20:30:03 +00:00
# message(STATUS "openssl_libraries=${OPENSSL_LIBRARIES}")
2014-03-14 15:04:37 +00:00
foreach ( lib ${ OPENSSL_LIBRARIES } )
get_filename_component ( lib_name ${ lib } NAME_WE )
if ( ${ lib_name } STREQUAL "libeay32" )
get_filename_component ( lib_dir ${ lib } DIRECTORY )
2014-03-14 21:14:02 +00:00
get_filename_component ( openssl_dir "${lib_dir}/.." REALPATH )
set ( eaydll "${openssl_dir}/bin/${lib_name}${CMAKE_SHARED_LIBRARY_SUFFIX}" )
2014-04-01 11:54:54 +00:00
set ( eay_pdb "${openssl_dir}/bin/${lib_name}.pdb" )
message ( STATUS "eay=${eaydll}" )
if ( EXISTS ${ eay_pdb } )
GP_APPEND_UNIQUE ( INTERFACE_LINK_PDB_RELEASE ${ eay_pdb } )
GP_APPEND_UNIQUE ( INTERFACE_LINK_PDB_DEBUG ${ eay_pdb } )
endif ( )
2014-03-14 21:14:02 +00:00
set ( SHARED_LIBRARIES_DEBUG ${ SHARED_LIBRARIES_DEBUG } "${eaydll}" )
set ( SHARED_LIBRARIES_RELEASE ${ SHARED_LIBRARIES_RELEASE } "${eaydll}" )
2014-03-14 15:04:37 +00:00
endif ( )
endforeach ( )
2014-04-01 11:54:54 +00:00
set_property ( TARGET fc PROPERTY INTERFACE_LINK_PDB_RELEASE ${ INTERFACE_LINK_PDB_RELEASE } )
set_property ( TARGET fc PROPERTY INTERFACE_LINK_PDB_DEBUG ${ INTERFACE_LINK_PDB_DEBUG } )
2014-03-14 15:04:37 +00:00
set_property ( TARGET fc PROPERTY SHARED_LIBRARIES_DEBUG ${ SHARED_LIBRARIES_DEBUG } )
set_property ( TARGET fc PROPERTY SHARED_LIBRARIES_RELEASE ${ SHARED_LIBRARIES_RELEASE } )
2014-04-01 11:54:54 +00:00
2014-03-14 15:04:37 +00:00
endif ( WIN32 )
2014-06-03 13:55:33 +00:00
SET ( OPENSSL_CONF_TARGET )
IF ( DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY )
SET ( OPENSSL_CONF_TARGET ${ CMAKE_RUNTIME_OUTPUT_DIRECTORY } )
ELSE ( )
SET ( OPENSSL_CONF_TARGET ${ CMAKE_CURRENT_BINARY_DIR } )
ENDIF ( )
2014-06-03 15:16:29 +00:00
IF ( WIN32 )
2016-05-22 05:33:19 +00:00
IF ( "${OPENSSL_ROOT_DIR}" STREQUAL "" )
get_filename_component ( OPENSSL_ROOT_DIR "${OPENSSL_INCLUDE_DIR}/.." REALPATH )
ENDIF ( )
SET ( OPENSSL_CONF_SOURCE "${OPENSSL_ROOT_DIR}/ssl/openssl.cnf" )
IF ( MINGW )
SET ( OPENSSL_CONF_SOURCE "${OPENSSL_ROOT_DIR}/openssl.cnf" )
ENDIF ( MINGW )
SET ( POST_BUILD_STEP_COMMANDS ${ POST_BUILD_STEP_COMMANDS }
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t " $ { O P E N S S L _ C O N F _ S O U R C E } " " $ { O P E N S S L _ C O N F _ T A R G E T } / o p e n s s l . c n f " )
2014-06-03 15:16:29 +00:00
ENDIF ( WIN32 )
2014-06-02 15:31:28 +00:00
2015-06-13 17:39:43 +00:00
ADD_CUSTOM_COMMAND ( TARGET fc POST_BUILD ${ POST_BUILD_STEP_COMMANDS }
2014-06-02 15:31:28 +00:00
C O M M E N T " C o p y i n g O p e n S S L / s s l / o p e n s s l . c n f i n t o t a r g e t d i r e c t o r y . "
)
2014-02-12 11:45:03 +00:00
MESSAGE ( STATUS "Finished fc module configuration..." )