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 @@ |
|||||||
|
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 @@ |
|||||||
cmake_minimum_required ( VERSION 2.8 ) |
cmake_minimum_required ( VERSION 2.8 ) |
||||||
project ( i2pd ) |
project ( "i2pd" ) |
||||||
|
|
||||||
# Default build is Debug |
# configurale options |
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall") |
option(WITH_AESNI "Use AES-NI instructions set" OFF) |
||||||
#set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall") |
option(WITH_HARDENING "Use hardening compiler flags" OFF) |
||||||
|
|
||||||
set ( SRC_DIR ".." ) |
|
||||||
set ( INC_DIR ".." ) |
|
||||||
|
|
||||||
|
# paths |
||||||
add_definitions ( "-std=c++0x -Wall" ) |
set ( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules" ) |
||||||
|
set ( CMAKE_SOURCE_DIR ".." ) |
||||||
|
|
||||||
set (SOURCES |
set (SOURCES |
||||||
CryptoConst.cpp |
"${CMAKE_SOURCE_DIR}/AddressBook.cpp" |
||||||
AddressBook.cpp |
"${CMAKE_SOURCE_DIR}/CryptoConst.cpp" |
||||||
Garlic.cpp |
"${CMAKE_SOURCE_DIR}/Daemon.cpp" |
||||||
HTTPServer.cpp |
"${CMAKE_SOURCE_DIR}/Garlic.cpp" |
||||||
i2p.cpp |
"${CMAKE_SOURCE_DIR}/HTTPProxy.cpp" |
||||||
Identity.cpp |
"${CMAKE_SOURCE_DIR}/HTTPServer.cpp" |
||||||
Log.cpp |
"${CMAKE_SOURCE_DIR}/I2NPProtocol.cpp" |
||||||
NTCPSession.cpp |
"${CMAKE_SOURCE_DIR}/I2PTunnel.cpp" |
||||||
RouterContext.cpp |
"${CMAKE_SOURCE_DIR}/Identity.cpp" |
||||||
SSU.cpp |
"${CMAKE_SOURCE_DIR}/LeaseSet.cpp" |
||||||
SSUData.cpp |
"${CMAKE_SOURCE_DIR}/Log.cpp" |
||||||
TransitTunnel.cpp |
"${CMAKE_SOURCE_DIR}/NTCPSession.cpp" |
||||||
Tunnel.cpp |
"${CMAKE_SOURCE_DIR}/NetDb.cpp" |
||||||
TunnelGateway.cpp |
"${CMAKE_SOURCE_DIR}/Reseed.cpp" |
||||||
UPnP.cpp |
"${CMAKE_SOURCE_DIR}/RouterContext.cpp" |
||||||
base64.cpp |
"${CMAKE_SOURCE_DIR}/RouterInfo.cpp" |
||||||
HTTPProxy.cpp |
"${CMAKE_SOURCE_DIR}/SOCKS.cpp" |
||||||
I2NPProtocol.cpp |
"${CMAKE_SOURCE_DIR}/SSU.cpp" |
||||||
LeaseSet.cpp |
"${CMAKE_SOURCE_DIR}/SSUData.cpp" |
||||||
NetDb.cpp |
"${CMAKE_SOURCE_DIR}/Streaming.cpp" |
||||||
Reseed.cpp |
"${CMAKE_SOURCE_DIR}/TransitTunnel.cpp" |
||||||
RouterInfo.cpp |
"${CMAKE_SOURCE_DIR}/Tunnel.cpp" |
||||||
Streaming.cpp |
"${CMAKE_SOURCE_DIR}/TunnelGateway.cpp" |
||||||
Transports.cpp |
"${CMAKE_SOURCE_DIR}/Transports.cpp" |
||||||
TunnelEndpoint.cpp |
"${CMAKE_SOURCE_DIR}/TunnelEndpoint.cpp" |
||||||
TunnelPool.cpp |
"${CMAKE_SOURCE_DIR}/TunnelPool.cpp" |
||||||
util.cpp |
"${CMAKE_SOURCE_DIR}/UPnP.cpp" |
||||||
aes.cpp |
"${CMAKE_SOURCE_DIR}/aes.cpp" |
||||||
Daemon.cpp |
"${CMAKE_SOURCE_DIR}/base64.cpp" |
||||||
SOCKS.cpp |
"${CMAKE_SOURCE_DIR}/i2p.cpp" |
||||||
I2PTunnel.cpp |
"${CMAKE_SOURCE_DIR}/util.cpp" |
||||||
) |
) |
||||||
|
|
||||||
set ( HEADERS |
file (GLOB HEADERS "${CMAKE_SOURCE_DIR}/*.h") |
||||||
CryptoConst.h |
|
||||||
AddressBook.h |
# MSVS grouping |
||||||
Garlic.h |
source_group ("Header Files" FILES ${HEADERS}) |
||||||
HTTPServer.h |
source_group ("Source Files" FILES ${SOURCES}) |
||||||
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 |
|
||||||
) |
|
||||||
|
|
||||||
if (WIN32) |
# Default build is Debug |
||||||
list (APPEND SOURCES DeamonWin32.cpp) |
if (CMAKE_BUILD_TYPE STREQUAL "Release") |
||||||
|
add_definitions( "-pedantic" ) |
||||||
else () |
else () |
||||||
list (APPEND SOURCES DaemonLinux.cpp) |
set(CMAKE_BUILD_TYPE Debug) |
||||||
endif () |
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}) |
if (WITH_AESNI) |
||||||
source_group ("Source Files" FILES ${SOURCES}) |
add_definitions ( "-maes -DAESNI" ) |
||||||
|
endif() |
||||||
set ( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules" ) |
|
||||||
|
|
||||||
|
# libraries |
||||||
find_package ( Threads REQUIRED ) |
find_package ( Threads REQUIRED ) |
||||||
|
|
||||||
find_package ( Boost COMPONENTS system filesystem regex program_options REQUIRED ) |
find_package ( Boost COMPONENTS system filesystem regex program_options REQUIRED ) |
||||||
|
|
||||||
find_package ( CryptoPP REQUIRED ) |
|
||||||
|
|
||||||
# Check for libraries |
|
||||||
if(NOT DEFINED Boost_INCLUDE_DIRS) |
if(NOT DEFINED Boost_INCLUDE_DIRS) |
||||||
message(FATAL_ERROR "Boost is not found, or your boost version was bellow 1.46. Please download Boost!") |
message(SEND_ERROR "Boost is not found, or your boost version was bellow 1.46. Please download Boost!") |
||||||
return() |
|
||||||
endif() |
endif() |
||||||
|
|
||||||
|
find_package ( CryptoPP REQUIRED ) |
||||||
if(NOT DEFINED CRYPTO++_INCLUDE_DIR) |
if(NOT DEFINED CRYPTO++_INCLUDE_DIR) |
||||||
message(FATAL_ERROR "Could not find Crypto++. Please download and install it first!") |
message(SEND_ERROR "Could not find Crypto++. Please download and install it first!") |
||||||
return() |
|
||||||
endif() |
endif() |
||||||
|
|
||||||
|
# load includes |
||||||
# End checks |
|
||||||
|
|
||||||
|
|
||||||
include_directories( ${Boost_INCLUDE_DIRS} ${CRYPTO++_INCLUDE_DIR}) |
include_directories( ${Boost_INCLUDE_DIRS} ${CRYPTO++_INCLUDE_DIR}) |
||||||
|
|
||||||
|
# show summary |
||||||
unset ( TMP ) |
message(STATUS "---------------------------------------") |
||||||
foreach ( src ${SOURCES} ) |
message(STATUS "Build type : ${CMAKE_BUILD_TYPE}") |
||||||
list ( APPEND TMP "${SRC_DIR}/${src}" ) |
message(STATUS "Compiler vendor : ${CMAKE_CXX_COMPILER_ID}") |
||||||
endforeach () |
message(STATUS "Compiler path : ${CMAKE_CXX_COMPILER}") |
||||||
set ( SOURCES ${TMP} ) |
message(STATUS "Install prefix: : ${CMAKE_INSTALL_PREFIX}") |
||||||
|
message(STATUS "Options:") |
||||||
unset ( TMP ) |
message(STATUS " AESNI : ${WITH_AESNI}") |
||||||
foreach ( hdr ${HEADERS} ) |
message(STATUS " HARDENING : ${WITH_HARDENING}") |
||||||
list ( APPEND TMP "${INC_DIR}/${hdr}" ) |
message(STATUS "---------------------------------------") |
||||||
endforeach () |
|
||||||
set ( HEADERS ${TMP} ) |
add_executable ( ${PROJECT_NAME} ${SOURCES} ) |
||||||
|
|
||||||
|
if (WITH_HARDENING AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
||||||
add_executable ( ${PROJECT_NAME} WIN32 ${HEADERS} ${SOURCES} ) |
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} ) |
target_link_libraries( ${PROJECT_NAME} ${Boost_LIBRARIES} ${CRYPTO++_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) |
||||||
|
|
||||||
|
install(TARGETS i2pd RUNTIME DESTINATION "bin") |
||||||
|
Loading…
Reference in new issue