mirror of https://github.com/PurpleI2P/i2pd.git
hagen
10 years ago
1 changed files with 95 additions and 110 deletions
@ -1,135 +1,120 @@
@@ -1,135 +1,120 @@
|
||||
cmake_minimum_required ( VERSION 2.8 ) |
||||
project ( i2pd ) |
||||
project ( "i2pd" ) |
||||
|
||||
# Default build is Debug |
||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall") |
||||
#set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall") |
||||
|
||||
set ( SRC_DIR ".." ) |
||||
set ( INC_DIR ".." ) |
||||
|
||||
|
||||
add_definitions ( "-std=c++0x -Wall" ) |
||||
|
||||
set ( SOURCES |
||||
CryptoConst.cpp |
||||
AddressBook.cpp |
||||
Garlic.cpp |
||||
HTTPServer.cpp |
||||
i2p.cpp |
||||
Identity.cpp |
||||
Log.cpp |
||||
NTCPSession.cpp |
||||
RouterContext.cpp |
||||
SSU.cpp |
||||
SSUData.cpp |
||||
TransitTunnel.cpp |
||||
Tunnel.cpp |
||||
TunnelGateway.cpp |
||||
UPnP.cpp |
||||
base64.cpp |
||||
HTTPProxy.cpp |
||||
I2NPProtocol.cpp |
||||
LeaseSet.cpp |
||||
NetDb.cpp |
||||
Reseed.cpp |
||||
RouterInfo.cpp |
||||
Streaming.cpp |
||||
Transports.cpp |
||||
TunnelEndpoint.cpp |
||||
TunnelPool.cpp |
||||
util.cpp |
||||
aes.cpp |
||||
Daemon.cpp |
||||
SOCKS.cpp |
||||
I2PTunnel.cpp |
||||
) |
||||
# configurale options |
||||
option(WITH_AESNI "Use AES-NI instructions set" OFF) |
||||
option(WITH_HARDENING "Use hardening compiler flags" OFF) |
||||
|
||||
set ( HEADERS |
||||
CryptoConst.h |
||||
AddressBook.h |
||||
Garlic.h |
||||
HTTPServer.h |
||||
Identity.h |
||||
Log.h |
||||
NTCPSession.h |
||||
RouterContext.h |
||||
SSU.h |
||||
SSUData.h |
||||
TransitTunnel.h |
||||
Tunnel.h |
||||
TunnelGateway.h |
||||
UPnP.h |
||||
base64.h |
||||
HTTPProxy.h |
||||
I2NPProtocol.h |
||||
LeaseSet.h |
||||
NetDb.h |
||||
Reseed.h |
||||
RouterInfo.h |
||||
Streaming.h |
||||
Transports.h |
||||
TunnelEndpoint.h |
||||
TunnelPool.h |
||||
util.h |
||||
aes.h |
||||
Daemon.h |
||||
SOCKS.h |
||||
I2PTunnel.h |
||||
version.h |
||||
Signature.h |
||||
# paths |
||||
set ( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules" ) |
||||
set ( CMAKE_SOURCE_DIR ".." ) |
||||
|
||||
set (SOURCES |
||||
"${CMAKE_SOURCE_DIR}/AddressBook.cpp" |
||||
"${CMAKE_SOURCE_DIR}/CryptoConst.cpp" |
||||
"${CMAKE_SOURCE_DIR}/Daemon.cpp" |
||||
"${CMAKE_SOURCE_DIR}/Garlic.cpp" |
||||
"${CMAKE_SOURCE_DIR}/HTTPProxy.cpp" |
||||
"${CMAKE_SOURCE_DIR}/HTTPServer.cpp" |
||||
"${CMAKE_SOURCE_DIR}/I2NPProtocol.cpp" |
||||
"${CMAKE_SOURCE_DIR}/I2PTunnel.cpp" |
||||
"${CMAKE_SOURCE_DIR}/Identity.cpp" |
||||
"${CMAKE_SOURCE_DIR}/LeaseSet.cpp" |
||||
"${CMAKE_SOURCE_DIR}/Log.cpp" |
||||
"${CMAKE_SOURCE_DIR}/NTCPSession.cpp" |
||||
"${CMAKE_SOURCE_DIR}/NetDb.cpp" |
||||
"${CMAKE_SOURCE_DIR}/Reseed.cpp" |
||||
"${CMAKE_SOURCE_DIR}/RouterContext.cpp" |
||||
"${CMAKE_SOURCE_DIR}/RouterInfo.cpp" |
||||
"${CMAKE_SOURCE_DIR}/SOCKS.cpp" |
||||
"${CMAKE_SOURCE_DIR}/SSU.cpp" |
||||
"${CMAKE_SOURCE_DIR}/SSUData.cpp" |
||||
"${CMAKE_SOURCE_DIR}/Streaming.cpp" |
||||
"${CMAKE_SOURCE_DIR}/TransitTunnel.cpp" |
||||
"${CMAKE_SOURCE_DIR}/Tunnel.cpp" |
||||
"${CMAKE_SOURCE_DIR}/TunnelGateway.cpp" |
||||
"${CMAKE_SOURCE_DIR}/Transports.cpp" |
||||
"${CMAKE_SOURCE_DIR}/TunnelEndpoint.cpp" |
||||
"${CMAKE_SOURCE_DIR}/TunnelPool.cpp" |
||||
"${CMAKE_SOURCE_DIR}/UPnP.cpp" |
||||
"${CMAKE_SOURCE_DIR}/aes.cpp" |
||||
"${CMAKE_SOURCE_DIR}/base64.cpp" |
||||
"${CMAKE_SOURCE_DIR}/i2p.cpp" |
||||
"${CMAKE_SOURCE_DIR}/util.cpp" |
||||
) |
||||
|
||||
if (WIN32) |
||||
list (APPEND SOURCES DeamonWin32.cpp) |
||||
file (GLOB HEADERS "${CMAKE_SOURCE_DIR}/*.h") |
||||
|
||||
# MSVS grouping |
||||
source_group ("Header Files" FILES ${HEADERS}) |
||||
source_group ("Source Files" FILES ${SOURCES}) |
||||
|
||||
# Default build is Debug |
||||
if (CMAKE_BUILD_TYPE STREQUAL "Release") |
||||
add_definitions( "-pedantic" ) |
||||
else () |
||||
list (APPEND SOURCES DaemonLinux.cpp) |
||||
set(CMAKE_BUILD_TYPE Debug) |
||||
endif () |
||||
|
||||
# compiler flags customization (by vendor) |
||||
add_definitions ( "-Wall -Wextra" ) |
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
||||
add_definitions( "-std=c++0x" ) |
||||
if (WITH_HARDENING) |
||||
add_definitions( "-D_FORTIFY_SOURCE=2" ) |
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat -Wformat-security -Werror=format-security" ) |
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector --param ssp-buffer-size=4" ) |
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE -pie" ) |
||||
endif () |
||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") |
||||
add_definitions( "-std=c++11" ) |
||||
endif () |
||||
|
||||
# compiler flags customization (by system) |
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux") |
||||
list (APPEND SOURCES "../DaemonLinux.cpp") |
||||
elseif (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") |
||||
list (APPEND SOURCES "../DaemonLinux.cpp") |
||||
elseif (CMAKE_SYSTEM_NAME STREQUAL "Windows") |
||||
list (APPEND SOURCES "../DaemonWin32.cpp") |
||||
endif () |
||||
|
||||
source_group ("Header Files" FILES ${HEADERS}) |
||||
source_group ("Source Files" FILES ${SOURCES}) |
||||
|
||||
set ( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules" ) |
||||
if (WITH_AESNI) |
||||
add_definitions ( "-maes -DAESNI" ) |
||||
endif() |
||||
|
||||
# libraries |
||||
find_package ( Threads REQUIRED ) |
||||
|
||||
find_package ( Boost COMPONENTS system filesystem regex program_options REQUIRED ) |
||||
|
||||
find_package ( CryptoPP REQUIRED ) |
||||
|
||||
# Check for libraries |
||||
if(NOT DEFINED Boost_INCLUDE_DIRS) |
||||
message(FATAL_ERROR "Boost is not found, or your boost version was bellow 1.46. Please download Boost!") |
||||
return() |
||||
message(SEND_ERROR "Boost is not found, or your boost version was bellow 1.46. Please download Boost!") |
||||
endif() |
||||
|
||||
find_package ( CryptoPP REQUIRED ) |
||||
if(NOT DEFINED CRYPTO++_INCLUDE_DIR) |
||||
message(FATAL_ERROR "Could not find Crypto++. Please download and install it first!") |
||||
return() |
||||
message(SEND_ERROR "Could not find Crypto++. Please download and install it first!") |
||||
endif() |
||||
|
||||
# load includes |
||||
include_directories( ${Boost_INCLUDE_DIRS} ${CRYPTO++_INCLUDE_DIR}) |
||||
|
||||
# End checks |
||||
|
||||
# show summary |
||||
message(STATUS "---------------------------------------") |
||||
message(STATUS "Build type : ${CMAKE_BUILD_TYPE}") |
||||
message(STATUS "Compiler : ${CMAKE_CXX_COMPILER}") |
||||
message(STATUS "Install prefix: : ${CMAKE_INSTALL_PREFIX}") |
||||
message(STATUS "Options:") |
||||
message(STATUS " AESNI : ${WITH_AESNI}") |
||||
message(STATUS " HARDENING : ${WITH_HARDENING}") |
||||
message(STATUS "---------------------------------------") |
||||
|
||||
include_directories ( ${Boost_INCLUDE_DIRS} ${CRYPTO++_INCLUDE_DIR}) |
||||
add_executable ( ${PROJECT_NAME} ${SOURCES} ) |
||||
|
||||
|
||||
unset ( TMP ) |
||||
foreach ( src ${SOURCES} ) |
||||
list ( APPEND TMP "${SRC_DIR}/${src}" ) |
||||
endforeach () |
||||
set ( SOURCES ${TMP} ) |
||||
|
||||
unset ( TMP ) |
||||
foreach ( hdr ${HEADERS} ) |
||||
list ( APPEND TMP "${INC_DIR}/${hdr}" ) |
||||
endforeach () |
||||
set ( HEADERS ${TMP} ) |
||||
|
||||
|
||||
add_executable ( ${PROJECT_NAME} WIN32 ${HEADERS} ${SOURCES} ) |
||||
if (WITH_HARDENING) |
||||
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "-z relro -z now" ) |
||||
endif () |
||||
|
||||
target_link_libraries( ${PROJECT_NAME} ${Boost_LIBRARIES} ${CRYPTO++_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) |
||||
|
||||
install(TARGETS i2pd RUNTIME DESTINATION "bin") |
||||
|
Loading…
Reference in new issue