blob: a6fd195e147dbdab5c6d036c6786896477d6b5a2 [file] [log] [blame]
cmake_minimum_required (VERSION 2.8)
project (AMCL)
enable_testing()
set(AMCL_VERSION_MAJOR "1")
set(AMCL_VERSION_MINOR "1")
set(AMCL_VERSION_PATCH "0")
set(PROJECT_VERSION "${AMCL_VERSION_MAJOR}.${AMCL_VERSION_MINOR}.${AMCL_VERSION_PATCH}")
message(STATUS "PROJECT_VERSION='${PROJECT_VERSION}'")
message(STATUS "Generator - ${CMAKE_GENERATOR}")
# Add options for build
option (BUILD_SHARED_LIBS "Build Shared Libraries" ON)
option (BUILD_PYTHON "Build Python" ON)
option (BUILD_MPIN "Build MPIN" ON)
option (BUILD_WCC "Build WCC" OFF)
option (BUILD_DOXYGEN "Build Doxygen" ON)
option (USE_PATENTS "Use alleged patents" ON)
option (USE_ANONYMOUS "Anonymous authenticaion for M-Pin Full" OFF)
# Allow the developer to select if Dynamic or Static libraries are built
# Set the default LIB_TYPE variable to STATIC
SET (LIB_TYPE STATIC)
IF (BUILD_SHARED_LIBS)
# User wants to build Dynamic Libraries, so change the LIB_TYPE variable to CMake keyword 'SHARED'
SET (LIB_TYPE SHARED)
ENDIF (BUILD_SHARED_LIBS)
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
# Mac OS X specific code
set(OS "Mac OS X")
# MACOSX_RPATH
cmake_policy(SET CMP0042 NEW)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
# Linux specific code
set(OS "Linux")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
# Windows specific code
set(OS "Windows")
endif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
# Select word length
set(WORD_LENGTH "32" CACHE STRING "Word length. See amcl.h.in for explanation")
set(Word_Length_Values "16;32;64")
set_property(CACHE WORD_LENGTH PROPERTY STRINGS ${Word_Length_Values})
message(STATUS "WORD_LENGTH='${WORD_LENGTH}'")
# Select Field
set(FIELD_CHOICE "BNCX" CACHE STRING "Choice of Field. See amcl.h.in for explanation")
set(Field_Values "BN;BNCX;BNT;BNT2;NIST;C25519;BRAINPOOL;ANSSI;MF254;MS255;MF256;MS256")
set_property(CACHE FIELD_CHOICE PROPERTY STRINGS ${Field_Values})
message(STATUS "FIELD_CHOICE='${FIELD_CHOICE}'")
# Select Curve type
set(CURVE_TYPE "WEIERSTRASS" CACHE STRING "Choice of Curve. See amcl.h.in for explanation")
set(Curve_Values "WEIERSTRASS;EDWARDS;MONTGOMERY")
set_property(CACHE CURVE_TYPE PROPERTY STRINGS ${Curve_Values})
message(STATUS "CURVE_TYPE='${CURVE_TYPE}'")
# configure amcl header file to pass CMake settings
# to the source code
configure_file (
"${PROJECT_SOURCE_DIR}/c/amcl.h.in"
"${PROJECT_BINARY_DIR}/c/amcl.h"
)
if(NOT(FIELD_CHOICE MATCHES "BN"))
message(STATUS "Field choice prevents MPIN being built")
set(BUILD_MPIN OFF)
set(BUILD_WSS OFF)
endif(NOT(FIELD_CHOICE MATCHES "BN"))
# test configuration
if(BUILD_MPIN OR BUILD_WCC)
set(MPIN_TIME_PERMIT_TESTS 10 CACHE STRING "Number of days in the future to test M-PIN time permits")
set(MPIN_RANDOM_TESTS 10 CACHE STRING "Number of random M-PIN tests")
message(STATUS "MPIN_TIME_PERMIT_TESTS=${MPIN_TIME_PERMIT_TESTS}")
message(STATUS "MPIN_RANDOM_TESTS=${MPIN_RANDOM_TESTS}")
# Configure test variables
configure_file (
"${PROJECT_SOURCE_DIR}/c/tests/config.h.in"
"${PROJECT_BINARY_DIR}/c/tests/config.h"
)
endif(BUILD_MPIN OR BUILD_WCC)
# Set a default build type if none was specified
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to 'Release' as none was specified.")
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif()
# Add subdirectories
add_subdirectory (c)
# Only build Python for shared libs
if (NOT BUILD_SHARED_LIBS)
set(BUILD_PYTHON OFF)
endif (NOT BUILD_SHARED_LIBS)
if (BUILD_PYTHON)
message(STATUS "Build Python CFFI")
execute_process (COMMAND python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()" OUTPUT_VARIABLE PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process (COMMAND python -c "from distutils.sysconfig import get_python_lib; from os.path import dirname; print dirname(get_python_lib())" OUTPUT_VARIABLE PYTHON_SITE_LIB OUTPUT_STRIP_TRAILING_WHITESPACE)
if((FIELD_CHOICE STREQUAL "BNCX") AND BUILD_MPIN)
file(COPY "${PROJECT_SOURCE_DIR}/testVectors/mpin/BNCX.json" DESTINATION "${PROJECT_BINARY_DIR}/pythonCFFI")
file(RENAME "${PROJECT_BINARY_DIR}/pythonCFFI/BNCX.json" "${PROJECT_BINARY_DIR}/pythonCFFI/MPINTestVectors.json")
endif((FIELD_CHOICE STREQUAL "BNCX") AND BUILD_MPIN)
add_subdirectory (pythonCFFI)
endif (BUILD_PYTHON)
# Build Documentation
if (BUILD_DOXYGEN)
find_package(Doxygen QUIET)
if(DOXYGEN_FOUND)
add_subdirectory (docs)
else(DOXYGEN_FOUND)
message(STATUS "Doxygen not found. Documentation will not be built.")
endif(DOXYGEN_FOUND)
endif (BUILD_DOXYGEN)
message(STATUS "Install ${CMAKE_INSTALL_PREFIX}")
# uninstall target
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
IMMEDIATE @ONLY)
add_custom_target(uninstall
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
# Build a CPack driven installer package
include (InstallRequiredSystemLibraries)
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
set(CPACK_PACKAGE_VERSION "${AMCL_VERSION_MAJOR}.${AMCL_VERSION_MINOR}.${AMCL_VERSION_PATCH}")
set(CPACK_PACKAGE_NAME "AMCL")
set(CPACK_PACKAGE_RELEASE 1)
set(CPACK_PACKAGE_CONTACT "support@miracl.com")
set(CPACK_PACKAGE_VENDOR "MIRACL")
if (BUILD_PYTHON)
set(CPACK_RPM_PACKAGE_REQUIRES "python >= 2.7.0")
endif (BUILD_PYTHON)
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_RELEASE}.${CMAKE_SYSTEM_PROCESSOR}")
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
# Linux specific code
set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
# Prevents CPack from generating file conflicts
set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "${CPACK_PACKAGING_INSTALL_PREFIX}")
list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "${CPACK_PACKAGING_INSTALL_PREFIX}/bin")
list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "${CPACK_PACKAGING_INSTALL_PREFIX}/include")
list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "${CPACK_PACKAGING_INSTALL_PREFIX}/lib")
list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "${PYTHON_SITE_LIB}")
list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "${PYTHON_SITE_PACKAGES}")
set(CPACK_GENERATOR "RPM")
endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
# Windows specific code
set(CPACK_PACKAGE_INSTALL_DIRECTORY "AMCL")
set(CPACK_NSIS_MODIFY_PATH ON)
set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/data\\\\icon.bmp")
set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/data\\\\icon.ico")
set(CPACK_NSIS_MUI_UNIICON "${CMAKE_SOURCE_DIR}/data\\\\icon.ico")
set(CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.miracl.com")
set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.miracl.com")
set(CPACK_NSIS_CONTACT "support@miracl.com")
endif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
# Mac OS X specific code
endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
include (CPack)