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)
#
#
# 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)
@@ -17,30 +28,40 @@ find_package (Threads)
####################################################
# Compiler
####################################################
set(CMAKE_C_COMPILER gcc)
set(CMAKE_CXX_COMPILER gcc)
# 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
####################################################
# 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/")
# 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
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/options.h
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/)
file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/options.h
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/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
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/options.h.in
${CMAKE_CURRENT_BINARY_DIR}/user_settings.h)
endif()
@@ -51,18 +72,11 @@ if(CMAKE_HAVE_PTHREAD_H)
endif()
####################################################
# Build flags
# Source Files
####################################################
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)
@@ -75,9 +89,14 @@ file(GLOB TEST_SOURCE_FILES
####################################################
# Output Files
####################################################
# Build library
# DH requires math (m) library
link_libraries(m)
# Build wolfssl library
add_library(wolfssl ${LIB_SOURCE_FILES})
# Optionally build example and test applications
if(BUILD_TESTS)
# Build wolfCrypt test
add_executable(wolfcrypttest
${CMAKE_CURRENT_SOURCE_DIR}/wolfcrypt/test/test.c)
@@ -120,3 +139,4 @@ add_executable(unit_test
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()

View File

@@ -88,4 +88,10 @@
$ make
$ 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.