Improvements to CMake support based on feedback from users.

This commit is contained in:
David Garske
2020-07-27 12:13:08 -07:00
parent b273ba771e
commit 8b25b48621
2 changed files with 82 additions and 56 deletions

View File

@@ -4,7 +4,18 @@
# #
# This file is part of wolfSSL. (formerly known as CyaSSL) # This file is part of wolfSSL. (formerly known as CyaSSL)
# #
# # Usage:
# $ mkdir build
# $ cd build
# $ cmake ..
# $ make
# 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) cmake_minimum_required (VERSION 2.6)
@@ -17,31 +28,41 @@ find_package (Threads)
#################################################### ####################################################
# Compiler # Compiler
#################################################### ####################################################
set(CMAKE_C_COMPILER gcc) # Let CMake choose default compiler
set(CMAKE_CXX_COMPILER gcc)
# 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
####################################################
# Example for cross-compile
#set(CMAKE_SYSTEM_NAME Linux) #set(CMAKE_SYSTEM_NAME Linux)
#set(CMAKE_SYSTEM_PROCESSOR arm) #set(CMAKE_SYSTEM_PROCESSOR arm)
#set(CMAKE_C_COMPILER "/opt/arm-linux-musleabihf-cross/bin/arm-linux-musleabihf-gcc") #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_CXX_COMPILER "/opt/arm-linux-musleabihf-cross/bin/arm-linux-musleabihf-g++")
#set(CMAKE_SYSROOT "/opt/arm-linux-musleabihf-cross/arm-linux-musleabihf/") #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 # Build Options
#################################################### ####################################################
SET(BUILD_TESTS YES CACHE BOOL "Build test applications")
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/options.h") if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/options.h")
# Copy generated ./options.h # Copy generated ./options.h
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/options.h configure_file(${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/options.h
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) ${CMAKE_CURRENT_BINARY_DIR}/user_settings.h)
file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/options.h
${CMAKE_CURRENT_BINARY_DIR}/user_settings.h)
else() else()
# Use template # Use template
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/options.h.in configure_file(${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/options.h.in
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) ${CMAKE_CURRENT_BINARY_DIR}/user_settings.h)
file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/options.h.in
${CMAKE_CURRENT_BINARY_DIR}/user_settings.h)
endif() endif()
add_definitions(-DWOLFSSL_USER_SETTINGS) add_definitions(-DWOLFSSL_USER_SETTINGS)
@@ -51,18 +72,11 @@ if(CMAKE_HAVE_PTHREAD_H)
endif() endif()
#################################################### ####################################################
# Build flags # Source Files
#################################################### ####################################################
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/.) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/.)
include_directories(${CMAKE_CURRENT_BINARY_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 file(GLOB LIB_SOURCE_FILES
${CMAKE_CURRENT_SOURCE_DIR}/src/*.c ${CMAKE_CURRENT_SOURCE_DIR}/src/*.c
${CMAKE_CURRENT_SOURCE_DIR}/wolfcrypt/src/*.c) ${CMAKE_CURRENT_SOURCE_DIR}/wolfcrypt/src/*.c)
@@ -75,48 +89,54 @@ file(GLOB TEST_SOURCE_FILES
#################################################### ####################################################
# Output Files # Output Files
#################################################### ####################################################
# Build library # DH requires math (m) library
link_libraries(m)
# Build wolfssl library
add_library(wolfssl ${LIB_SOURCE_FILES}) add_library(wolfssl ${LIB_SOURCE_FILES})
# Build wolfCrypt test # Optionally build example and test applications
add_executable(wolfcrypttest if(BUILD_TESTS)
${CMAKE_CURRENT_SOURCE_DIR}/wolfcrypt/test/test.c) # Build wolfCrypt test
target_link_libraries(wolfcrypttest wolfssl) add_executable(wolfcrypttest
${CMAKE_CURRENT_SOURCE_DIR}/wolfcrypt/test/test.c)
target_link_libraries(wolfcrypttest wolfssl)
# Build wolfCrypt benchmark # Build wolfCrypt benchmark
add_executable(wolfcryptbench add_executable(wolfcryptbench
${CMAKE_CURRENT_SOURCE_DIR}/wolfcrypt/benchmark/benchmark.c) ${CMAKE_CURRENT_SOURCE_DIR}/wolfcrypt/benchmark/benchmark.c)
target_link_libraries(wolfcryptbench wolfssl) target_link_libraries(wolfcryptbench wolfssl)
# Build wolfSSL Client example # Build wolfSSL Client example
add_executable(client add_executable(client
${CMAKE_CURRENT_SOURCE_DIR}/examples/client/client.c) ${CMAKE_CURRENT_SOURCE_DIR}/examples/client/client.c)
target_link_libraries(client wolfssl) target_link_libraries(client wolfssl)
# Build wolfSSL Server example # Build wolfSSL Server example
add_executable(server add_executable(server
${CMAKE_CURRENT_SOURCE_DIR}/examples/server/server.c) ${CMAKE_CURRENT_SOURCE_DIR}/examples/server/server.c)
target_link_libraries(server wolfssl) target_link_libraries(server wolfssl)
# Build Echo Client Example # Build Echo Client Example
add_executable(echoclient add_executable(echoclient
${CMAKE_CURRENT_SOURCE_DIR}/examples/echoclient/echoclient.c) ${CMAKE_CURRENT_SOURCE_DIR}/examples/echoclient/echoclient.c)
target_link_libraries(echoclient wolfssl) target_link_libraries(echoclient wolfssl)
# Build Echo Server Example # Build Echo Server Example
add_executable(echoserver add_executable(echoserver
${CMAKE_CURRENT_SOURCE_DIR}/examples/echoserver/echoserver.c) ${CMAKE_CURRENT_SOURCE_DIR}/examples/echoserver/echoserver.c)
target_link_libraries(echoserver wolfssl) target_link_libraries(echoserver wolfssl)
# Build TLS benchmark example # Build TLS benchmark example
add_executable(tls_bench add_executable(tls_bench
${CMAKE_CURRENT_SOURCE_DIR}/examples/benchmark/tls_bench.c) ${CMAKE_CURRENT_SOURCE_DIR}/examples/benchmark/tls_bench.c)
target_link_libraries(tls_bench wolfssl) target_link_libraries(tls_bench wolfssl)
target_link_libraries(tls_bench Threads::Threads) target_link_libraries(tls_bench Threads::Threads)
# Build Unit Tests # Build Unit Tests
add_executable(unit_test add_executable(unit_test
${TEST_SOURCE_FILES}) ${TEST_SOURCE_FILES})
set_target_properties( unit_test PROPERTIES COMPILE_FLAGS "-DNO_MAIN_DRIVER" ) set_target_properties( unit_test PROPERTIES COMPILE_FLAGS "-DNO_MAIN_DRIVER" )
target_link_libraries(unit_test wolfssl) target_link_libraries(unit_test wolfssl)
target_link_libraries(unit_test Threads::Threads) target_link_libraries(unit_test Threads::Threads)
endif()

View File

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