Adds CMake support to wolfSSL:

* Build wolfSSL as a library and builds all examples / tests.
* Added instructions in the INSTALL file.
* Fix for evp.c when being included directly due to improperly placed `WOLFSSL_EVP_INCLUDED`.
This commit is contained in:
David Garske
2020-01-16 06:58:40 -08:00
parent 6b3b37604f
commit 9a281e5e3a
2 changed files with 138 additions and 0 deletions

122
CMakeLists.txt Normal file
View File

@@ -0,0 +1,122 @@
# CMakeList.txt
#
# Copyright (C) 2006-2020 wolfSSL Inc.
#
# This file is part of wolfSSL. (formerly known as CyaSSL)
#
#
cmake_minimum_required (VERSION 2.6)
####################################################
# Project
####################################################
project(wolfssl)
find_package (Threads)
####################################################
# Compiler
####################################################
set(CMAKE_C_COMPILER gcc)
set(CMAKE_CXX_COMPILER gcc)
# Example for cross-compile
#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/")
####################################################
# Build Options
####################################################
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/options.h")
# Copy generated ./options.h
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/options.h
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/)
file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/options.h
${CMAKE_CURRENT_BINARY_DIR}/user_settings.h)
else()
# Use template
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/options.h.in
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/)
file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/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()
####################################################
# Build flags
####################################################
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/.)
include_directories(${CMAKE_CURRENT_BINARY_DIR}/.)
# Example for map file and custom linker script
set(CMAKE_C_FLAGS "-std=gnu89 ${CMAKE_C_FLAGS}")
#set(CMAKE_EXE_LINKER_FLAGS " -Xlinker -Map=output.map -T\"${CMAKE_CURRENT_SOURCE_DIR}/linker.ld\"")
####################################################
# Source Files
####################################################
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 library
add_library(wolfssl ${LIB_SOURCE_FILES})
# 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)

16
INSTALL
View File

@@ -73,3 +73,19 @@
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 ..
$ make
$ sudo make install
Make sure and run the built examples and test from the wolfssl-root to properly find the ./certs directory.