diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..b35c774c4 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,150 @@ +# CMakeList.txt +# +# Copyright (C) 2006-2020 wolfSSL Inc. +# +# This file is part of wolfSSL. (formerly known as CyaSSL) +# +# Usage: +# $ mkdir build +# $ cd build +# $ cmake .. +# $ cmake --build . + +# To build library only and not build examples and test apps use: +# $ cmake .. -DBUILD_TESTS=NO + +# To build with debugging use: +# $ cmake .. -DCMAKE_BUILD_TYPE=Debug + + +cmake_minimum_required (VERSION 2.6) + +#################################################### +# Project +#################################################### +project(wolfssl) +find_package (Threads) + +#################################################### +# Compiler +#################################################### +# Let CMake choose default compiler + +# Silence ranlib warning "has no symbols" +SET(CMAKE_C_ARCHIVE_CREATE " Scr ") +SET(CMAKE_CXX_ARCHIVE_CREATE " Scr ") +SET(CMAKE_C_ARCHIVE_FINISH " -no_warning_for_no_symbols -c ") +SET(CMAKE_CXX_ARCHIVE_FINISH " -no_warning_for_no_symbols -c ") + +#################################################### +# Cross Compile Example +#################################################### + +#set(CMAKE_SYSTEM_NAME Linux) +#set(CMAKE_SYSTEM_PROCESSOR arm) +#set(CMAKE_C_COMPILER "/opt/arm-linux-musleabihf-cross/bin/arm-linux-musleabihf-gcc") +#set(CMAKE_CXX_COMPILER "/opt/arm-linux-musleabihf-cross/bin/arm-linux-musleabihf-g++") +#set(CMAKE_SYSROOT "/opt/arm-linux-musleabihf-cross/arm-linux-musleabihf/") +# Example for setting CFLAGS +#set(CMAKE_C_FLAGS "-std=gnu89 ${CMAKE_C_FLAGS}") +# Example for map file and custom linker script +#set(CMAKE_EXE_LINKER_FLAGS " -Xlinker -Map=output.map -T\"${CMAKE_CURRENT_SOURCE_DIR}/linker.ld\"") + +#################################################### +# Build Options +#################################################### +SET(BUILD_TESTS YES CACHE BOOL "Build test applications") + +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/options.h") + # Copy generated ./options.h + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/options.h + ${CMAKE_CURRENT_BINARY_DIR}/user_settings.h) +else() + # Use template + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/options.h.in + ${CMAKE_CURRENT_BINARY_DIR}/user_settings.h) +endif() + +add_definitions(-DWOLFSSL_USER_SETTINGS) +add_definitions(-DWOLFSSL_IGNORE_FILE_WARN) +if(CMAKE_HAVE_PTHREAD_H) + add_definitions(-DHAVE_PTHREAD) +endif() + +#################################################### +# Source Files +#################################################### +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/.) +include_directories(${CMAKE_CURRENT_BINARY_DIR}/.) + +file(GLOB LIB_SOURCE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/src/*.c + ${CMAKE_CURRENT_SOURCE_DIR}/wolfcrypt/src/*.c) + +file(GLOB TEST_SOURCE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/tests/*.c + ${CMAKE_CURRENT_SOURCE_DIR}/examples/server/server.c + ${CMAKE_CURRENT_SOURCE_DIR}/examples/client/client.c) + +#################################################### +# Output Files +#################################################### + +# Build wolfssl library +add_library(wolfssl ${LIB_SOURCE_FILES}) + +if(WIN32) + # For Windows link ws2_32 + target_link_libraries(wolfssl PUBLIC $<$:ws2_32>) +else() + # DH requires math (m) library + target_link_libraries(wolfssl PUBLIC m) +endif() + +# Optionally build example and test applications +if(BUILD_TESTS) + # Build wolfCrypt test + add_executable(wolfcrypttest + ${CMAKE_CURRENT_SOURCE_DIR}/wolfcrypt/test/test.c) + target_link_libraries(wolfcrypttest wolfssl) + + # Build wolfCrypt benchmark + add_executable(wolfcryptbench + ${CMAKE_CURRENT_SOURCE_DIR}/wolfcrypt/benchmark/benchmark.c) + target_link_libraries(wolfcryptbench wolfssl) + + # Build wolfSSL Client example + add_executable(client + ${CMAKE_CURRENT_SOURCE_DIR}/examples/client/client.c) + target_link_libraries(client wolfssl) + + # Build wolfSSL Server example + add_executable(server + ${CMAKE_CURRENT_SOURCE_DIR}/examples/server/server.c) + target_link_libraries(server wolfssl) + + # Build Echo Client Example + add_executable(echoclient + ${CMAKE_CURRENT_SOURCE_DIR}/examples/echoclient/echoclient.c) + target_link_libraries(echoclient wolfssl) + + # Build Echo Server Example + add_executable(echoserver + ${CMAKE_CURRENT_SOURCE_DIR}/examples/echoserver/echoserver.c) + target_link_libraries(echoserver wolfssl) + + # Build TLS benchmark example + add_executable(tls_bench + ${CMAKE_CURRENT_SOURCE_DIR}/examples/benchmark/tls_bench.c) + target_link_libraries(tls_bench wolfssl) + target_link_libraries(tls_bench Threads::Threads) + + # Build Unit Tests + add_executable(unit_test + ${TEST_SOURCE_FILES}) + set_target_properties( unit_test PROPERTIES COMPILE_FLAGS "-DNO_MAIN_DRIVER" ) + target_link_libraries(unit_test wolfssl) + target_link_libraries(unit_test Threads::Threads) +endif() + +# TODO: Add install() for library, headers and test applications diff --git a/INSTALL b/INSTALL index ad8cfdd74..33a983ed7 100644 --- a/INSTALL +++ b/INSTALL @@ -73,3 +73,30 @@ Please see section 2.4 in the manual: http://www.wolfssl.com/yaSSL/Docs-cyassl-manual-2-building-cyassl.html +13. Building with CMake + Note: Primary development uses automake (./configure). The support for CMake is minimal. + + Internally cmake is setup to do the following: + 1. Uses the ./configure generated wolfssl/options.h as the build options by coping it to the build directory as user_settings.h. + 2. Builds wolfSSL as library. + 3. Builds the examples. + + Build Steps: + $ mkdir build + $ cd build + $ cmake .. + $ cmake --build . + $ cmake --install . + + To build library only and not build examples and test apps use: + $ cmake .. -DBUILD_TESTS=NO + + To build with debugging use: + $ cmake .. -DCMAKE_BUILD_TYPE=Debug + + Make sure and run the built examples and test from the wolfssl-root to properly find the ./certs directory. + + CMake on Windows with Visual Studio + 1. Open Command Prompt + 2. Run the Visual Studio batch to setup command line variables: Example: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat + 3. Then use steps above diff --git a/Makefile.am b/Makefile.am index 94ce2f680..1ef320fc5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -146,6 +146,7 @@ EXTRA_DIST+= IPP EXTRA_DIST+= LPCExpresso.cproject EXTRA_DIST+= LPCExpresso.project EXTRA_DIST+= resource.h wolfssl.rc +EXTRA_DIST+= CMakeLists.txt include wrapper/include.am include cyassl/include.am