mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-02-04 17:14:14 +00:00
Merge pull request #98 from hagen-i2p/better-cmakelists
Better cmakelists
This commit is contained in:
commit
cda52beb08
51
build/BUILD_NOTES.md
Normal file
51
build/BUILD_NOTES.md
Normal file
@ -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 )
|
||||
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")
|
||||
# configurale options
|
||||
option(WITH_AESNI "Use AES-NI instructions set" OFF)
|
||||
option(WITH_HARDENING "Use hardening compiler flags" OFF)
|
||||
|
||||
set ( SRC_DIR ".." )
|
||||
set ( INC_DIR ".." )
|
||||
# paths
|
||||
set ( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules" )
|
||||
set ( CMAKE_SOURCE_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
|
||||
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"
|
||||
)
|
||||
|
||||
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
|
||||
)
|
||||
|
||||
if (WIN32)
|
||||
list (APPEND SOURCES DeamonWin32.cpp)
|
||||
else ()
|
||||
list (APPEND SOURCES DaemonLinux.cpp)
|
||||
endif ()
|
||||
|
||||
|
||||
file (GLOB HEADERS "${CMAKE_SOURCE_DIR}/*.h")
|
||||
|
||||
# MSVS grouping
|
||||
source_group ("Header Files" FILES ${HEADERS})
|
||||
source_group ("Source Files" FILES ${SOURCES})
|
||||
|
||||
set ( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules" )
|
||||
# Default build is Debug
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||
add_definitions( "-pedantic" )
|
||||
else ()
|
||||
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 ()
|
||||
|
||||
if (WITH_AESNI)
|
||||
add_definitions ( "-maes -DAESNI" )
|
||||
endif()
|
||||
|
||||
# libraries
|
||||
find_package ( Threads REQUIRED )
|
||||
|
||||
find_package ( Boost COMPONENTS system filesystem regex program_options REQUIRED )
|
||||
if(NOT DEFINED Boost_INCLUDE_DIRS)
|
||||
message(SEND_ERROR "Boost is not found, or your boost version was bellow 1.46. Please download Boost!")
|
||||
endif()
|
||||
|
||||
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()
|
||||
endif()
|
||||
|
||||
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 "---------------------------------------")
|
||||
|
||||
add_executable ( ${PROJECT_NAME} ${SOURCES} )
|
||||
|
||||
include_directories ( ${Boost_INCLUDE_DIRS} ${CRYPTO++_INCLUDE_DIR})
|
||||
|
||||
|
||||
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…
x
Reference in New Issue
Block a user