mirror of https://github.com/PurpleI2P/i2pd.git
orignal
10 years ago
2 changed files with 149 additions and 110 deletions
@ -0,0 +1,51 @@
@@ -0,0 +1,51 @@
|
||||
Build notes |
||||
=========== |
||||
|
||||
Common build/install process: |
||||
|
||||
git clone https://github.com/PrivacySolutions/i2pd.git |
||||
cd i2pd/build |
||||
cmake -DCMAKE_BUILD_TYPE=Release <more options> . |
||||
make |
||||
make install |
||||
|
||||
Available cmake options: |
||||
|
||||
* CMAKE_BUILD_TYPE -- build profile (Debug/Release) |
||||
* WITH_AESNI -- AES-NI support (ON/OFF) |
||||
* WITH_HARDENING -- enable hardening features (ON/OFF) (gcc only) |
||||
|
||||
Debian |
||||
------ |
||||
|
||||
Required "-dev" packages: |
||||
|
||||
* cmake |
||||
* libboost-filesystem-dev |
||||
* libboost-program-options-dev |
||||
* libboost-regex-dev |
||||
* libboost-system-dev |
||||
* libcrypto++-dev |
||||
|
||||
FreeBSD |
||||
------- |
||||
|
||||
Branch 9.X has gcc v4.2, that knows nothing about required c++11 standart. |
||||
|
||||
Required ports: |
||||
|
||||
* devel/cmake |
||||
* devel/boost-libs |
||||
* lang/gcc47 # or later version |
||||
* security/cryptopp |
||||
|
||||
To use newer compiler you should set these variables: |
||||
|
||||
export CC=/usr/local/bin/gcc47 |
||||
export CXX=/usr/local/bin/g++47 |
||||
|
||||
Replace "47" with your actual gcc version |
||||
|
||||
Branch 10.X has more reliable clang version, that can finally build i2pd, |
||||
but i still recommend to use gcc, otherwise you will fight it's bugs by |
||||
your own. |
@ -1,135 +1,123 @@
@@ -1,135 +1,123 @@
|
||||
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++11" ) |
||||
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") |
||||
# "'sleep_for' is not a member of 'std::this_thread'" in gcc 4.7/4.8 |
||||
add_definitions( "-D_GLIBCXX_USE_NANOSLEEP=1" ) |
||||
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 vendor : ${CMAKE_CXX_COMPILER_ID}") |
||||
message(STATUS "Compiler path : ${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 AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
||||
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