Browse Source

Merge pull request #2746 from dgarske/cmake

Adds CMake support to wolfSSL
toddouska 3 years ago
parent
commit
e7fe460fac
3 changed files with 178 additions and 0 deletions
  1. 150 0
      CMakeLists.txt
  2. 27 0
      INSTALL
  3. 1 0
      Makefile.am

+ 150 - 0
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   "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
+SET(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
+SET(CMAKE_C_ARCHIVE_FINISH   "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
+SET(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
+
+####################################################
+# 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 $<$<PLATFORM_ID:Windows>: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

+ 27 - 0
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

+ 1 - 0
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