blob: d42ee4baa300ce83c39b3df204cc802d044437ef [file] [log] [blame]
cmake_minimum_required (VERSION 2.6)
# setup the Thread include and lib
find_package(Threads)
if(CMAKE_HAVE_PTHREAD_H)
set(HAVE_PTHREAD_H TRUE)
endif()
set(LIBS ${LIBS} ${CMAKE_THREAD_LIBS_INIT})
#to make sure includes are first taken - it contains config.h
include_directories(BEFORE ${CMAKE_BINARY_DIR})
include_directories (${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/srtp
${CMAKE_SOURCE_DIR}/common ${CMAKE_SOURCE_DIR}/bnlib)
set(cryptcommon_srcs
${CMAKE_SOURCE_DIR}/cryptcommon/twofish.c
${CMAKE_SOURCE_DIR}/cryptcommon/twofish_cfb.c
${CMAKE_SOURCE_DIR}/cryptcommon/aescrypt.c
${CMAKE_SOURCE_DIR}/cryptcommon/aeskey.c
${CMAKE_SOURCE_DIR}/cryptcommon/aestab.c
${CMAKE_SOURCE_DIR}/cryptcommon/aes_modes.c
${CMAKE_SOURCE_DIR}/cryptcommon/macSkein.cpp
${CMAKE_SOURCE_DIR}/cryptcommon/skein.c
${CMAKE_SOURCE_DIR}/cryptcommon/skein_block.c
${CMAKE_SOURCE_DIR}/cryptcommon/skeinApi.c
${CMAKE_SOURCE_DIR}/cryptcommon/ZrtpRandom.cpp)
set(zrtp_tivi_src
${CMAKE_CURRENT_SOURCE_DIR}/CtZrtpSession.cpp
${CMAKE_CURRENT_SOURCE_DIR}/CtZrtpStream.cpp
${CMAKE_SOURCE_DIR}/common/Thread.cpp
${CMAKE_SOURCE_DIR}/common/MutexClass.cpp
${CMAKE_SOURCE_DIR}/common/EventClass.cpp)
set(srtp_src
${CMAKE_SOURCE_DIR}/srtp/CryptoContext.cpp
${CMAKE_SOURCE_DIR}/srtp/CryptoContextCtrl.cpp
${CMAKE_SOURCE_DIR}/srtp/SrtpHandler.cpp)
set(crypto_src_srtp
${CMAKE_SOURCE_DIR}/srtp/crypto/hmac.cpp
${CMAKE_SOURCE_DIR}/srtp/crypto/SrtpSymCrypto.cpp
${CMAKE_SOURCE_DIR}/srtp/crypto/sha1.c)
set(zrtpcpp_src ${zrtp_src} ${zrtp_tivi_src} ${zrtp_crypto_src} ${zrtp_skein_src} ${bnlib_src} ${srtp_src} ${crypto_src_srtp} ${cryptcommon_srcs})
# for the Thread classes etc. - remove D_WITHOUT_TIVI_ENV if you compile for/with Tivi modules, maybe build static
# and iclude this into Tivi shared lib in the second step. Need to cross-check with Java build in case of static build.
# Beware of undefined symbols - set correct library build parameters in case of shared lib
add_definitions(-DLINUX -DNANO_SECOND_SLEEP -D_WITHOUT_TIVI_ENV)
if(BUILD_STATIC AND NOT BUILD_SHARED)
set(LIBRARY_BUILD_TYPE STATIC)
else()
set(LIBRARY_BUILD_TYPE SHARED)
endif()
if(JAVA)
# check if JAVA development environment is available. If javac is available
# we assume the full JDK is available also.
find_program(JAVAC NAMES javac -version DOC "Java compiler")
if(NOT JAVAC)
MESSAGE(FATAL_ERROR "Java support -- Java compiler not found")
endif()
if (NOT IS_DIRECTORY $ENV{JAVA_HOME})
MESSAGE(FATAL_ERROR "Java support -- JAVA_HOME environment variable not set or wrong")
endif()
# set the required include paths to compile JNI files
set(jniInclude $ENV{JAVA_HOME}/include)
string(TOLOWER ${CMAKE_SYSTEM_NAME} osName)
set(jniIncludeOs ${jniInclude}/${osName})
if(NOT IS_DIRECTORY ${jniInclude} AND NOT IS_DIRECTORY ${jniIncludeOs})
MESSAGE(FATAL_ERROR "Java support -- expected include paths '${jniInclude}' and '${jniIncludeOs}' not found")
endif()
# Now we need the swig process to generate the C wrapper and Java files
find_program(SWIG NAMES swig -version DOC "SWIG process")
if(NOT SWIG)
MESSAGE(FATAL_ERROR "Java support -- swig executable not found")
endif()
# Generate the files and store them in correct dir, Java package name is: 'cp.bnlib'
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/swigJava/wd/tivi)
execute_process(COMMAND swig -java -c++ -outdir wd/tivi -package wd.tivi -o sessionTest_wrap.cpp -outcurrentdir ${CMAKE_CURRENT_SOURCE_DIR}/swigJava/sessionTest.i
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/swigJava")
# The wrapper file requires some special include paths, set as source file properties
set(sessionTest_wrap ${CMAKE_CURRENT_BINARY_DIR}/swigJava/sessionTest_wrap.cpp)
set_source_files_properties(${sessionTest_wrap} PROPERTIES COMPILE_FLAGS "-I${jniInclude} -I${jniIncludeOs}")
# Add both source files to the bnlib_src
set(zrtpcpp_src ${zrtpcpp_src} ${sessionTest_wrap})
endif()
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/buildinfo.c
COMMAND ${CMAKE_COMMAND} -E echo \"char zrtpBuildInfo[] = \\\"${VERSION}:${GIT_COMMIT}:${CMAKE_SYSTEM_PROCESSOR}\\\"\;\" > ${CMAKE_BINARY_DIR}/buildinfo.c)
add_library(${zrtplibName} ${LIBRARY_BUILD_TYPE} ${zrtpcpp_src} ${CMAKE_BINARY_DIR}/buildinfo.c)
set_target_properties(${zrtplibName} PROPERTIES VERSION ${VERSION} SOVERSION ${SOVERSION})
target_link_libraries(${zrtplibName} ${LIBS})
add_custom_command(TARGET ${zrtplibName} POST_BUILD COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/buildinfo.c)
# **** Test programs ****
#
add_executable(testdriver testdriver.cpp)
target_link_libraries(testdriver ${zrtplibName})
add_dependencies(testdriver ${zrtplibName})
add_executable(sdesTestdriver sdesTestdriver.cpp)
target_link_libraries(sdesTestdriver ${zrtplibName})
add_dependencies(sdesTestdriver ${zrtplibName})
# If Java support is enabled then compile the generate Java classes, build jar
# and compile java test program after the shared lib is ready
if(JAVA)
add_custom_command(TARGET ${zrtplibName} POST_BUILD
COMMAND javac -d . wd/tivi/*.java
COMMAND jar -cf sessionTest.jar wd
COMMAND javac -cp sessionTest.jar -d . "${CMAKE_CURRENT_SOURCE_DIR}/swigJava/SessionTest.java"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/swigJava"
COMMENT "Compile the generated Java source, build JAR file, and test class")
# To run test class in build directory: java -cp swigJava/sessionTest.jar:swigJava -Djava.library.path=`pwd` SessionTest
endif()
# **** Setup packing environment ****
#
if(${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME})
include(${CMAKE_SOURCE_DIR}/cmake/Modules/GeneratePackage.cmake)
GENERATE_PACKAGING(${PACKAGE} ${VERSION})
endif()
#
# Create the Android make files but do not execute them
if(ANDROID)
set(TIVI_ENV "-D_WITHOUT_TIVI_ENV")
foreach(loop ${zrtpcpp_src})
string(REPLACE "${CMAKE_SOURCE_DIR}/" "" o ${loop})
set(zrtpcpp_src_spc ${zrtpcpp_src_spc} ${o})
endforeach()
set(local_cpp_features "exceptions")
# The java wrappers may require RTTI in case the SWIG director feature is active.
if(JAVA)
set(local_cpp_features ${local_cpp_features} rtti)
endif()
string(REPLACE ";" " " zrtpcpp_src_spc "${zrtpcpp_src_spc}")
# configure_file(${CMAKE_SOURCE_DIR}/clients/tivi/jni/zrtplib/Android.mk.cmake
# ${CMAKE_BINARY_DIR}/clients/tivi/jni/zrtplib/Android.mk @ONLY)
# configure_file(${CMAKE_SOURCE_DIR}/clients/tivi/jni/sqlite3/Android.mk.cmake
# ${CMAKE_BINARY_DIR}/clients/tivi/jni/sqlite3/Android.mk @ONLY)
configure_file(${CMAKE_SOURCE_DIR}/clients/tivi/android/jni/Android.mk
${CMAKE_BINARY_DIR}/clients/tivi/android/jni/Android.mk @ONLY)
configure_file(${CMAKE_SOURCE_DIR}/clients/tivi/android/jni/Application.mk
${CMAKE_BINARY_DIR}/clients/tivi/android/jni/Application.mk COPYONLY)
endif()