mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-01 03:34:39 +02:00
Merge pull request #2746 from dgarske/cmake
Adds CMake support to wolfSSL
This commit is contained in:
150
CMakeLists.txt
Normal file
150
CMakeLists.txt
Normal file
@@ -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
INSTALL
27
INSTALL
@@ -73,3 +73,30 @@
|
|||||||
Please see section 2.4 in the manual:
|
Please see section 2.4 in the manual:
|
||||||
http://www.wolfssl.com/yaSSL/Docs-cyassl-manual-2-building-cyassl.html
|
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
|
||||||
|
@@ -146,6 +146,7 @@ EXTRA_DIST+= IPP
|
|||||||
EXTRA_DIST+= LPCExpresso.cproject
|
EXTRA_DIST+= LPCExpresso.cproject
|
||||||
EXTRA_DIST+= LPCExpresso.project
|
EXTRA_DIST+= LPCExpresso.project
|
||||||
EXTRA_DIST+= resource.h wolfssl.rc
|
EXTRA_DIST+= resource.h wolfssl.rc
|
||||||
|
EXTRA_DIST+= CMakeLists.txt
|
||||||
|
|
||||||
include wrapper/include.am
|
include wrapper/include.am
|
||||||
include cyassl/include.am
|
include cyassl/include.am
|
||||||
|
Reference in New Issue
Block a user