Browse Source

cmake-format

Frank Denis 6 years ago
parent
commit
d054fa206b
3 changed files with 190 additions and 149 deletions
  1. 116 88
      CMakeLists.txt
  2. 73 60
      cmake/arduino-avr-toolchain.cmake
  3. 1 1
      cmake/hydrogen-config.cmake.in

+ 116 - 88
CMakeLists.txt

@@ -6,75 +6,96 @@ include(CMakePackageConfigHelpers)
 include(GNUInstallDirs)
 include(GNUInstallDirs)
 
 
 string(TOUPPER "${PROJECT_NAME}" setting_prefix)
 string(TOUPPER "${PROJECT_NAME}" setting_prefix)
-function(get_setting setting_name setting_type setting_description)
-    string(TOUPPER "${setting_prefix}_${setting_name}" setting_external_name)
-    set("${setting_external_name}" "" CACHE "${setting_type}" "${setting_description}")
-    set("${setting_name}" "${${setting_external_name}}" PARENT_SCOPE)
+function(get_setting
+         setting_name
+         setting_type
+         setting_description)
+  string(TOUPPER "${setting_prefix}_${setting_name}" setting_external_name)
+  set("${setting_external_name}"
+      ""
+      CACHE "${setting_type}" "${setting_description}")
+  set("${setting_name}" "${${setting_external_name}}" PARENT_SCOPE)
 endfunction()
 endfunction()
 
 
 # Project files
 # Project files
 
 
 set(source_files
 set(source_files
-        "${PROJECT_NAME}.c"
-        "impl/common.h"
-        "impl/core.h"
-        "impl/gimli-core.h"
-        "impl/gimli-core/portable.h"
-        "impl/gimli-core/sse2.h"
-        "impl/hash.h"
-        "impl/${PROJECT_NAME}_p.h"
-        "impl/kdf.h"
-        "impl/kx.h"
-        "impl/pwhash.h"
-        "impl/random.h"
-        "impl/secretbox.h"
-        "impl/sign.h"
-        "impl/x25519.h")
-
-set(header_files
-        "${PROJECT_NAME}.h")
-
-set(test_files
-        "tests/tests.c")
-
-set(arduino_files
-        "library.properties")
+    "${PROJECT_NAME}.c"
+    "impl/common.h"
+    "impl/core.h"
+    "impl/gimli-core.h"
+    "impl/gimli-core/portable.h"
+    "impl/gimli-core/sse2.h"
+    "impl/hash.h"
+    "impl/${PROJECT_NAME}_p.h"
+    "impl/kdf.h"
+    "impl/kx.h"
+    "impl/pwhash.h"
+    "impl/random.h"
+    "impl/secretbox.h"
+    "impl/sign.h"
+    "impl/x25519.h")
+
+set(header_files "${PROJECT_NAME}.h")
+
+set(test_files "tests/tests.c")
+
+set(arduino_files "library.properties")
 
 
 # Compile options
 # Compile options
 
 
-get_setting(target_arch STRING "Target system architecture (fed to the compiler's -march=...).")
+get_setting(target_arch STRING
+            "Target system architecture (fed to the compiler's -march=...).")
 if(NOT target_arch AND NOT CMAKE_CROSSCOMPILING)
 if(NOT target_arch AND NOT CMAKE_CROSSCOMPILING)
-    set(target_arch native)
+  set(target_arch native)
 endif()
 endif()
 
 
-set(compile_options
-        # GNU, Clang
-        $<$<OR:$<C_COMPILER_ID:AppleClang>,$<C_COMPILER_ID:Clang>,$<C_COMPILER_ID:GNU>>:
-            # Optimizations
-            -Os $<$<BOOL:${target_arch}>:-march=${target_arch}> -fno-exceptions
-            # Warnings
-            -Wall -Wextra -Wmissing-prototypes -Wdiv-by-zero -Wbad-function-cast -Wcast-align
-            -Wcast-qual -Wfloat-equal -Wmissing-declarations -Wnested-externs -Wno-unknown-pragmas
-            -Wpointer-arith -Wredundant-decls -Wstrict-prototypes -Wswitch-enum -Wno-type-limits>
-
-        # MSVC
-        $<$<C_COMPILER_ID:MSVC>:
-            # Optimizations
-            /Os /EHsc
-            # Warnings
-            /WX /W4
-            /wd4197 # suppress warning "top-level volatile in cast is ignored"
-            /wd4146 # suppress warning "unary minus operator applied to unsigned type, result still unsigned"
-            /wd4310 # suppress warning "cast truncates constant value"
-        >)
+set(
+  compile_options
+  # GNU, Clang
+  $<$<OR:$<C_COMPILER_ID:AppleClang>,$<C_COMPILER_ID:Clang>,$<C_COMPILER_ID:GNU>>:
+  # Optimizations
+  -Os $<$<BOOL:${target_arch}>:-march=${target_arch}> -fno-exceptions
+  # Warnings
+  -Wall
+  -Wextra
+  -Wmissing-prototypes
+  -Wdiv-by-zero
+  -Wbad-function-cast
+  -Wcast-align
+  -Wcast-qual
+  -Wfloat-equal
+  -Wmissing-declarations
+  -Wnested-externs
+  -Wno-unknown-pragmas
+  -Wpointer-arith
+  -Wredundant-decls
+  -Wstrict-prototypes
+  -Wswitch-enum
+  -Wno-type-limits>
+  # MSVC
+  $<$<C_COMPILER_ID:MSVC>:
+  # Optimizations
+  /Os /EHsc
+  # Warnings
+  /WX
+  /W4
+  /wd4197 # suppress warning "top-level volatile in cast is ignored"
+  /wd4146 # suppress warning "unary minus operator applied to unsigned type,
+          # result still unsigned"
+  /wd4310 # suppress warning "cast truncates constant value"
+  >)
 
 
 # Prefix project files with the project root
 # Prefix project files with the project root
 
 
 function(prefix_project_paths list_name)
 function(prefix_project_paths list_name)
-    list(TRANSFORM "${list_name}"
-            PREPEND "${PROJECT_SOURCE_DIR}/"
-            OUTPUT_VARIABLE prefixed_list)
-    set("project_${list_name}" ${prefixed_list} PARENT_SCOPE)
+  list(TRANSFORM
+       "${list_name}"
+       PREPEND
+       "${PROJECT_SOURCE_DIR}/"
+       OUTPUT_VARIABLE
+       prefixed_list)
+  set("project_${list_name}" ${prefixed_list} PARENT_SCOPE)
 endfunction()
 endfunction()
 
 
 prefix_project_paths(source_files)
 prefix_project_paths(source_files)
@@ -85,13 +106,14 @@ prefix_project_paths(arduino_files)
 # Main library
 # Main library
 
 
 add_library("${PROJECT_NAME}")
 add_library("${PROJECT_NAME}")
-add_library("${PROJECT_NAME}::${PROJECT_NAME}" ALIAS "${PROJECT_NAME}")
+add_library("${PROJECT_NAME}::${PROJECT_NAME}" "${PROJECT_NAME}" ALIAS)
 
 
 target_sources("${PROJECT_NAME}" PRIVATE ${project_source_files})
 target_sources("${PROJECT_NAME}" PRIVATE ${project_source_files})
 
 
-target_include_directories("${PROJECT_NAME}" PUBLIC
-        $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
-        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+target_include_directories(
+  "${PROJECT_NAME}"
+  PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
+         $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
 
 
 target_compile_options("${PROJECT_NAME}" PRIVATE ${compile_options})
 target_compile_options("${PROJECT_NAME}" PRIVATE ${compile_options})
 
 
@@ -104,8 +126,7 @@ install(TARGETS "${PROJECT_NAME}"
         LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
         LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
         ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
         ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
 
 
-install(FILES ${project_header_files}
-        DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
+install(FILES ${project_header_files} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
 
 
 # CMake find_package() support
 # CMake find_package() support
 
 
@@ -123,15 +144,16 @@ set(config_file_name "${PROJECT_NAME}-config.cmake")
 set(config_template_file "${PROJECT_SOURCE_DIR}/cmake/${config_file_name}.in")
 set(config_template_file "${PROJECT_SOURCE_DIR}/cmake/${config_file_name}.in")
 set(config_file "${PROJECT_BINARY_DIR}/${config_file_name}")
 set(config_file "${PROJECT_BINARY_DIR}/${config_file_name}")
 
 
-CONFIGURE_PACKAGE_CONFIG_FILE("${config_template_file}" "${config_file}"
-        INSTALL_DESTINATION "${install_config_dir}")
+configure_package_config_file("${config_template_file}"
+                              "${config_file}"
+                              INSTALL_DESTINATION
+                              "${install_config_dir}")
 
 
-install(FILES "${config_file}"
-        DESTINATION "${install_config_dir}")
+install(FILES "${config_file}" DESTINATION "${install_config_dir}")
 
 
 export(EXPORT "${targets_export_name}"
 export(EXPORT "${targets_export_name}"
-        FILE "${targets_export_file}"
-        NAMESPACE "${PROJECT_NAME}::")
+       FILE "${targets_export_file}"
+       NAMESPACE "${PROJECT_NAME}::")
 
 
 export(PACKAGE "${PROJECT_NAME}")
 export(PACKAGE "${PROJECT_NAME}")
 
 
@@ -148,24 +170,25 @@ target_link_libraries("${tests_executable}" "${PROJECT_NAME}")
 add_test(NAME "${tests_executable}" COMMAND "${tests_executable}")
 add_test(NAME "${tests_executable}" COMMAND "${tests_executable}")
 
 
 if(CMAKE_CROSSCOMPILING)
 if(CMAKE_CROSSCOMPILING)
-    # Disable tests executable by default when cross-compiling (as it will fail
-    # to build when, e.g., cross-compiling for Arduino/AVR).
-    set_target_properties("${tests_executable}"
-            PROPERTIES
-                EXCLUDE_FROM_ALL 1
-                EXCLUDE_FROM_DEFAULT_BUILD 1)
+  # Disable tests executable by default when cross-compiling (as it will fail to
+  # build when, e.g., cross-compiling for Arduino/AVR).
+  set_target_properties("${tests_executable}"
+                        PROPERTIES EXCLUDE_FROM_ALL
+                                   1
+                                   EXCLUDE_FROM_DEFAULT_BUILD
+                                   1)
 else()
 else()
-    # Otherwise, auto-run the tests on build.
-    add_custom_command(OUTPUT "${tests_run_file}"
-            DEPENDS "${tests_executable}"
-            COMMAND cmake
-                ARGS -E remove "${tests_run_file}"
-            COMMAND ctest
-                ARGS -C $<CONFIGURATION> --output-on-failure
-            COMMAND cmake
-                ARGS -E touch "${tests_run_file}"
-            WORKING_DIRECTORY "${PROJECT_BINARY_DIR}")
-    add_custom_target("${tests_run_target}" ALL DEPENDS "${tests_run_file}")
+  # Otherwise, auto-run the tests on build.
+  add_custom_command(OUTPUT "${tests_run_file}"
+                     DEPENDS "${tests_executable}"
+                     COMMAND cmake ARGS -E remove "${tests_run_file}"
+                     COMMAND ctest ARGS
+                             -C
+                             $<CONFIGURATION>
+                             --output-on-failure
+                     COMMAND cmake ARGS -E touch "${tests_run_file}"
+                     WORKING_DIRECTORY "${PROJECT_BINARY_DIR}")
+  add_custom_target("${tests_run_target}" ALL DEPENDS "${tests_run_file}")
 endif()
 endif()
 
 
 # Generate Arduino package
 # Generate Arduino package
@@ -175,10 +198,15 @@ set(arduino_package_file "${PROJECT_BINARY_DIR}/hydrogen-crypto.zip")
 # Use the relative versions of the file path lists or else the full paths will
 # Use the relative versions of the file path lists or else the full paths will
 # end up in the generated archive.
 # end up in the generated archive.
 add_custom_command(OUTPUT "${arduino_package_file}"
 add_custom_command(OUTPUT "${arduino_package_file}"
-        COMMAND cmake
-            ARGS -E tar cf "${arduino_package_file}" --format=zip
-                -- ${source_files} ${header_files} ${arduino_files}
-        WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
+                   COMMAND cmake ARGS
+                           -E
+                           tar cf "${arduino_package_file}"
+                           --format=zip
+                           --
+                           ${source_files}
+                           ${header_files}
+                           ${arduino_files}
+                   WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
 
 
 add_custom_target("${PROJECT_NAME}-arduino-package"
 add_custom_target("${PROJECT_NAME}-arduino-package"
-        DEPENDS "${arduino_package_file}")
+                  DEPENDS "${arduino_package_file}")

+ 73 - 60
cmake/arduino-avr-toolchain.cmake

@@ -6,23 +6,30 @@
 cmake_minimum_required(VERSION 3.12)
 cmake_minimum_required(VERSION 3.12)
 
 
 set(setting_prefix ARDUINO_AVR)
 set(setting_prefix ARDUINO_AVR)
-function(get_setting setting_name setting_type setting_description)
-    string(TOUPPER "${setting_prefix}_${setting_name}" setting_external_name)
-    set("${setting_external_name}" "" CACHE "${setting_type}" "${setting_description}")
-    set("${setting_name}" "${${setting_external_name}}" PARENT_SCOPE)
+function(get_setting
+         setting_name
+         setting_type
+         setting_description)
+  string(TOUPPER "${setting_prefix}_${setting_name}" setting_external_name)
+  set("${setting_external_name}"
+      ""
+      CACHE "${setting_type}" "${setting_description}")
+  set("${setting_name}" "${${setting_external_name}}" PARENT_SCOPE)
 endfunction()
 endfunction()
 
 
 # Target device setting
 # Target device setting
 
 
 get_setting(target_device STRING "Target Arduino device MCU identifier.")
 get_setting(target_device STRING "Target Arduino device MCU identifier.")
 if(NOT target_device)
 if(NOT target_device)
-    set(target_device atmega328p)
+  set(target_device atmega328p)
 endif()
 endif()
 
 
 if("${target_device}" STREQUAL atmega328p)
 if("${target_device}" STREQUAL atmega328p)
-    set(hw_type ATMEGA328)
+  set(hw_type ATMEGA328)
 else()
 else()
-    message(FATAL_ERROR "Unrecognized ${setting_prefix}_TARGET_DEVICE value ${target_device}")
+  message(
+    FATAL_ERROR
+      "Unrecognized ${setting_prefix}_TARGET_DEVICE value ${target_device}")
 endif()
 endif()
 
 
 # Find Arduino SDK home
 # Find Arduino SDK home
@@ -31,48 +38,50 @@ get_setting(sdk_dir PATH "Arduino SDK home directory.")
 
 
 # Try ARDUINO_SDK_PATH environment variable.
 # Try ARDUINO_SDK_PATH environment variable.
 if(NOT sdk_dir)
 if(NOT sdk_dir)
-    if(DEFINED ENV{ARDUINO_SDK_PATH})
-        set(sdk_dir "$ENV{ARDUINO_SDK_PATH}")
-    endif()
+  if(DEFINED ENV{ARDUINO_SDK_PATH})
+    set(sdk_dir "$ENV{ARDUINO_SDK_PATH}")
+  endif()
 endif()
 endif()
 
 
 # Try some platform-specific guesses.
 # Try some platform-specific guesses.
 if(NOT sdk_dir)
 if(NOT sdk_dir)
-    # Windows
-    if(WIN32)
-        list(APPEND arduino_home_dir_guesses
-                "C:/Program Files (x86)/Arduino"
+  # Windows
+  if(WIN32)
+    list(APPEND arduino_home_dir_guesses "C:/Program Files (x86)/Arduino"
                 "C:/Program Files/Arduino")
                 "C:/Program Files/Arduino")
-    endif()
+  endif()
 
 
-    # macOS
-    if(APPLE)
-        list(APPEND arduino_home_dir_guesses
+  # macOS
+  if(APPLE)
+    list(APPEND arduino_home_dir_guesses
                 "/Applications/Arduino.app/Contents/Java")
                 "/Applications/Arduino.app/Contents/Java")
-    endif()
+  endif()
 
 
-    # Linux/Unix
-    if(UNIX AND NOT APPLE)
-        list(APPEND arduino_home_dir_guesses
-                "/usr/share/arduino"
+  # Linux/Unix
+  if(UNIX AND NOT APPLE)
+    list(APPEND arduino_home_dir_guesses "/usr/share/arduino"
                 "/usr/local/share/arduino")
                 "/usr/local/share/arduino")
-    endif()
-
-    if(DEFINED arduino_home_dir_guesses)
-        foreach(arduino_home_dir_guess IN LISTS arduino_home_dir_guesses)
-            if(IS_DIRECTORY "${arduino_home_dir_guess}")
-                set(sdk_dir "${arduino_home_dir_guess}")
-                break()
-            endif()
-        endforeach()
-    endif()
+  endif()
+
+  if(DEFINED arduino_home_dir_guesses)
+    foreach(arduino_home_dir_guess
+            IN
+            LISTS
+            arduino_home_dir_guesses)
+      if(IS_DIRECTORY "${arduino_home_dir_guess}")
+        set(sdk_dir "${arduino_home_dir_guess}")
+        break()
+      endif()
+    endforeach()
+  endif()
 endif()
 endif()
 
 
 if(NOT sdk_dir)
 if(NOT sdk_dir)
-    message(FATAL_ERROR
-            "Couldn't determine Arduino SDK home directory. "
-            "Try passing -D${setting_prefix}_SDK_DIR=... to the CMake command line, or "
-            "set the ARDUINO_SDK_PATH environment variable.")
+  message(
+    FATAL_ERROR
+      "Couldn't determine Arduino SDK home directory. "
+      "Try passing -D${setting_prefix}_SDK_DIR=... to the CMake command line, or "
+      "set the ARDUINO_SDK_PATH environment variable.")
 endif()
 endif()
 
 
 # Locate toolchain programs
 # Locate toolchain programs
@@ -80,19 +89,22 @@ endif()
 set(arduino_tools_dir "${sdk_dir}/hardware/tools/avr/bin")
 set(arduino_tools_dir "${sdk_dir}/hardware/tools/avr/bin")
 set(program_prefix "${setting_prefix}_PROGRAM")
 set(program_prefix "${setting_prefix}_PROGRAM")
 function(find_in_toolchain program_name)
 function(find_in_toolchain program_name)
-    string(TOUPPER "${program_prefix}_${program_name}" program_external_name)
-    string(REPLACE "_" "-" program_file_name "${program_name}")
-
-    find_program("${program_external_name}" "${program_file_name}"
-            PATHS "${arduino_tools_dir}" NO_DEFAULT_PATH)
-
-    if("${${program_external_name}}" STREQUAL "${program_external_name}-NOTFOUND")
-        message(FATAL_ERROR
-                "Couldn't find program ${program_file_name} "
-                "in Arduino/AVR toolchain at ${arduino_tools_dir}")
-    else()
-        set("${program_name}" "${${program_external_name}}" PARENT_SCOPE)
-    endif()
+  string(TOUPPER "${program_prefix}_${program_name}" program_external_name)
+  string(REPLACE "_"
+                 "-"
+                 program_file_name
+                 "${program_name}")
+
+  find_program("${program_external_name}" "${program_file_name}"
+               PATHS "${arduino_tools_dir}"
+               NO_DEFAULT_PATH)
+
+  if("${${program_external_name}}" STREQUAL "${program_external_name}-NOTFOUND")
+    message(FATAL_ERROR "Couldn't find program ${program_file_name} "
+                        "in Arduino/AVR toolchain at ${arduino_tools_dir}")
+  else()
+    set("${program_name}" "${${program_external_name}}" PARENT_SCOPE)
+  endif()
 endfunction()
 endfunction()
 
 
 find_in_toolchain(avr_gcc)
 find_in_toolchain(avr_gcc)
@@ -107,20 +119,21 @@ set(CMAKE_ASM_COMPILER "${avr_gcc}")
 set(CMAKE_RANLIB "${avr_gcc_ranlib}")
 set(CMAKE_RANLIB "${avr_gcc_ranlib}")
 set(CMAKE_AR "${avr_gcc_ar}")
 set(CMAKE_AR "${avr_gcc_ar}")
 
 
-SET(CMAKE_C_OUTPUT_EXTENSION .o)
-SET(CMAKE_ASM_OUTPUT_EXTENSION .o)
+set(CMAKE_C_OUTPUT_EXTENSION .o)
+set(CMAKE_ASM_OUTPUT_EXTENSION .o)
 
 
 # Add compile flags
 # Add compile flags
 
 
-string(APPEND CMAKE_C_FLAGS
-        " -mmcu=${target_device} -Os -mcall-prologues -fno-exceptions"
-        " -ffunction-sections -fdata-sections -flto"
-        " -DHYDRO_TARGET_DEVICE_${hw_type}")
+string(APPEND
+       CMAKE_C_FLAGS
+       " -mmcu=${target_device} -Os -mcall-prologues -fno-exceptions"
+       " -ffunction-sections -fdata-sections -flto"
+       " -DHYDRO_TARGET_DEVICE_${hw_type}")
 
 
 # Add include directories
 # Add include directories
 
 
 include_directories(SYSTEM
 include_directories(SYSTEM
-        "${sdk_dir}/hardware/arduino/avr/cores/arduino"
-        "${sdk_dir}/hardware/arduino/avr/variants/standard"
-        "${sdk_dir}/hardware/arduino/cores/arduino"
-        "${sdk_dir}/hardware/arduino/variants/standard")
+                    "${sdk_dir}/hardware/arduino/avr/cores/arduino"
+                    "${sdk_dir}/hardware/arduino/avr/variants/standard"
+                    "${sdk_dir}/hardware/arduino/cores/arduino"
+                    "${sdk_dir}/hardware/arduino/variants/standard")

+ 1 - 1
cmake/hydrogen-config.cmake.in

@@ -1,7 +1,7 @@
 get_filename_component(hydrogen_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
 get_filename_component(hydrogen_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
 
 
 if(NOT TARGET hydrogen::hydrogen)
 if(NOT TARGET hydrogen::hydrogen)
-    include("${hydrogen_CMAKE_DIR}/hydrogen-targets.cmake")
+  include("${hydrogen_CMAKE_DIR}/hydrogen-targets.cmake")
 endif()
 endif()
 
 
 set(hydrogen_LIBRARIES hydrogen::hydrogen)
 set(hydrogen_LIBRARIES hydrogen::hydrogen)