Aleksandrs Gumenuks / MaximInterface_Extended

Dependents:   mbed_DS28EC20_GPIO

Committer:
IanBenzMaxim
Date:
Fri Jan 19 10:25:02 2018 -0600
Revision:
4:caf56f265a13
Parent:
3:f818ea5172ed
Cleaned old files.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
IanBenzMaxim 3:f818ea5172ed 1 #[[*****************************************************************************
IanBenzMaxim 3:f818ea5172ed 2 * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
IanBenzMaxim 3:f818ea5172ed 3 *
IanBenzMaxim 3:f818ea5172ed 4 * Permission is hereby granted, free of charge, to any person obtaining a
IanBenzMaxim 3:f818ea5172ed 5 * copy of this software and associated documentation files (the "Software"),
IanBenzMaxim 3:f818ea5172ed 6 * to deal in the Software without restriction, including without limitation
IanBenzMaxim 3:f818ea5172ed 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
IanBenzMaxim 3:f818ea5172ed 8 * and/or sell copies of the Software, and to permit persons to whom the
IanBenzMaxim 3:f818ea5172ed 9 * Software is furnished to do so, subject to the following conditions:
IanBenzMaxim 3:f818ea5172ed 10 *
IanBenzMaxim 3:f818ea5172ed 11 * The above copyright notice and this permission notice shall be included
IanBenzMaxim 3:f818ea5172ed 12 * in all copies or substantial portions of the Software.
IanBenzMaxim 3:f818ea5172ed 13 *
IanBenzMaxim 3:f818ea5172ed 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
IanBenzMaxim 3:f818ea5172ed 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
IanBenzMaxim 3:f818ea5172ed 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IanBenzMaxim 3:f818ea5172ed 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
IanBenzMaxim 3:f818ea5172ed 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
IanBenzMaxim 3:f818ea5172ed 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
IanBenzMaxim 3:f818ea5172ed 20 * OTHER DEALINGS IN THE SOFTWARE.
IanBenzMaxim 3:f818ea5172ed 21 *
IanBenzMaxim 3:f818ea5172ed 22 * Except as contained in this notice, the name of Maxim Integrated
IanBenzMaxim 3:f818ea5172ed 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
IanBenzMaxim 3:f818ea5172ed 24 * Products, Inc. Branding Policy.
IanBenzMaxim 3:f818ea5172ed 25 *
IanBenzMaxim 3:f818ea5172ed 26 * The mere transfer of this software does not imply any licenses
IanBenzMaxim 3:f818ea5172ed 27 * of trade secrets, proprietary technology, copyrights, patents,
IanBenzMaxim 3:f818ea5172ed 28 * trademarks, maskwork rights, or any other form of intellectual
IanBenzMaxim 3:f818ea5172ed 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
IanBenzMaxim 3:f818ea5172ed 30 * ownership rights.
IanBenzMaxim 3:f818ea5172ed 31 ******************************************************************************]]
IanBenzMaxim 3:f818ea5172ed 32
IanBenzMaxim 3:f818ea5172ed 33 cmake_minimum_required(VERSION 3.10)
IanBenzMaxim 3:f818ea5172ed 34
IanBenzMaxim 3:f818ea5172ed 35 include("clr.cmake")
IanBenzMaxim 3:f818ea5172ed 36
IanBenzMaxim 3:f818ea5172ed 37 project("MaximInterface" VERSION 1.1)
IanBenzMaxim 3:f818ea5172ed 38 option(BUILD_SHARED_LIBS "Build ${CMAKE_PROJECT_NAME} as a shared library." ON)
IanBenzMaxim 3:f818ea5172ed 39 set(MaximInterface_Platforms "" CACHE STRING
IanBenzMaxim 3:f818ea5172ed 40 "List of platforms to build. Available platforms are dotnet and Qt.")
IanBenzMaxim 3:f818ea5172ed 41
IanBenzMaxim 3:f818ea5172ed 42 if("dotnet" IN_LIST MaximInterface_Platforms)
IanBenzMaxim 3:f818ea5172ed 43 # Require shared library for the dotnet platform.
IanBenzMaxim 3:f818ea5172ed 44 if(NOT BUILD_SHARED_LIBS)
IanBenzMaxim 3:f818ea5172ed 45 message(SEND_ERROR "BUILD_SHARED_LIBS must be enabled to build the dotnet platform.")
IanBenzMaxim 3:f818ea5172ed 46 endif()
IanBenzMaxim 3:f818ea5172ed 47
IanBenzMaxim 3:f818ea5172ed 48 # Initialize CLR compilation flags that all targets should use.
IanBenzMaxim 3:f818ea5172ed 49 initializeClr()
IanBenzMaxim 3:f818ea5172ed 50 endif()
IanBenzMaxim 3:f818ea5172ed 51
IanBenzMaxim 3:f818ea5172ed 52 # Search in parent directory for includes.
IanBenzMaxim 3:f818ea5172ed 53 get_filename_component(baseIncludeDir ${CMAKE_SOURCE_DIR} DIRECTORY)
IanBenzMaxim 3:f818ea5172ed 54 include_directories(${baseIncludeDir})
IanBenzMaxim 3:f818ea5172ed 55
IanBenzMaxim 3:f818ea5172ed 56 # Prepend a path to all items in a list.
IanBenzMaxim 3:f818ea5172ed 57 macro(prependPath var path)
IanBenzMaxim 3:f818ea5172ed 58 unset(${var})
IanBenzMaxim 3:f818ea5172ed 59 foreach(arg ${ARGN})
IanBenzMaxim 3:f818ea5172ed 60 list(APPEND ${var} "${path}/${arg}")
IanBenzMaxim 3:f818ea5172ed 61 endforeach()
IanBenzMaxim 3:f818ea5172ed 62 endmacro(prependPath)
IanBenzMaxim 3:f818ea5172ed 63
IanBenzMaxim 3:f818ea5172ed 64 # Add base components.
IanBenzMaxim 3:f818ea5172ed 65 set(resourceDirs "Devices" "Links" "Utilities")
IanBenzMaxim 3:f818ea5172ed 66 prependPath(DevicesSources "Devices"
IanBenzMaxim 3:f818ea5172ed 67 "DS18B20.cpp"
IanBenzMaxim 3:f818ea5172ed 68 "DS28C36_DS2476.cpp"
IanBenzMaxim 3:f818ea5172ed 69 "DS28E15_22_25.cpp"
IanBenzMaxim 3:f818ea5172ed 70 "DS28E17.cpp"
IanBenzMaxim 3:f818ea5172ed 71 "DS28E38.cpp"
IanBenzMaxim 3:f818ea5172ed 72 "DS1920.cpp"
IanBenzMaxim 3:f818ea5172ed 73 "DS2413.cpp"
IanBenzMaxim 3:f818ea5172ed 74 "DS2431.cpp"
IanBenzMaxim 3:f818ea5172ed 75 "DS2465.cpp"
IanBenzMaxim 3:f818ea5172ed 76 "DS2480B.cpp"
IanBenzMaxim 3:f818ea5172ed 77 "DS2482_DS2484.cpp"
IanBenzMaxim 3:f818ea5172ed 78 "DS9400.cpp"
IanBenzMaxim 3:f818ea5172ed 79 "DS9481P_300.cpp")
IanBenzMaxim 3:f818ea5172ed 80 prependPath(LinksSources "Links"
IanBenzMaxim 3:f818ea5172ed 81 "I2CMaster.cpp"
IanBenzMaxim 3:f818ea5172ed 82 "I2CMasterDecorator.cpp"
IanBenzMaxim 3:f818ea5172ed 83 "LoggingI2CMaster.cpp"
IanBenzMaxim 3:f818ea5172ed 84 "LoggingOneWireMaster.cpp"
IanBenzMaxim 3:f818ea5172ed 85 "LoggingSleep.cpp"
IanBenzMaxim 3:f818ea5172ed 86 "OneWireMaster.cpp"
IanBenzMaxim 3:f818ea5172ed 87 "OneWireMasterDecorator.cpp"
IanBenzMaxim 3:f818ea5172ed 88 "RomCommands.cpp"
IanBenzMaxim 3:f818ea5172ed 89 "SelectRom.cpp"
IanBenzMaxim 3:f818ea5172ed 90 "SleepDecorator.cpp"
IanBenzMaxim 3:f818ea5172ed 91 "Uart.cpp")
IanBenzMaxim 3:f818ea5172ed 92 prependPath(UtilitiesSources "Utilities"
IanBenzMaxim 3:f818ea5172ed 93 "crc.cpp"
IanBenzMaxim 3:f818ea5172ed 94 "Ecc256.cpp"
IanBenzMaxim 3:f818ea5172ed 95 "Error.cpp"
IanBenzMaxim 3:f818ea5172ed 96 "HexConversions.cpp"
IanBenzMaxim 3:f818ea5172ed 97 "system_error.cpp")
IanBenzMaxim 3:f818ea5172ed 98 add_library(${CMAKE_PROJECT_NAME} ${DevicesSources} ${LinksSources} ${UtilitiesSources})
IanBenzMaxim 3:f818ea5172ed 99
IanBenzMaxim 3:f818ea5172ed 100 # Add selected platforms.
IanBenzMaxim 3:f818ea5172ed 101 foreach(platform ${MaximInterface_Platforms})
IanBenzMaxim 3:f818ea5172ed 102 if(platform STREQUAL "dotnet")
IanBenzMaxim 3:f818ea5172ed 103 # Add CLR support to target.
IanBenzMaxim 3:f818ea5172ed 104 enableClr(${CMAKE_PROJECT_NAME} "v4.5"
IanBenzMaxim 3:f818ea5172ed 105 "System.dll"
IanBenzMaxim 3:f818ea5172ed 106 "${CMAKE_SOURCE_DIR}/Platforms/dotnet/OneWireLinkLayer/OneWireLinkLayer.dll")
IanBenzMaxim 3:f818ea5172ed 107
IanBenzMaxim 3:f818ea5172ed 108 # Add files to top-level target since CLR objects do not support static linking.
IanBenzMaxim 3:f818ea5172ed 109 list(APPEND resourceDirs "Platforms/dotnet")
IanBenzMaxim 3:f818ea5172ed 110 prependPath(dotnetSources "Platforms/dotnet"
IanBenzMaxim 3:f818ea5172ed 111 "OneWireLinkLayerMaster.cpp"
IanBenzMaxim 3:f818ea5172ed 112 "SerialPort.cpp"
IanBenzMaxim 3:f818ea5172ed 113 "Sleep.cpp")
IanBenzMaxim 3:f818ea5172ed 114 target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${dotnetSources})
IanBenzMaxim 3:f818ea5172ed 115 elseif(platform STREQUAL "Qt")
IanBenzMaxim 3:f818ea5172ed 116 find_package(Qt5 COMPONENTS Core SerialPort)
IanBenzMaxim 3:f818ea5172ed 117 list(APPEND resourceDirs "Platforms/Qt")
IanBenzMaxim 3:f818ea5172ed 118 prependPath(QtSources "Platforms/Qt"
IanBenzMaxim 3:f818ea5172ed 119 "SerialPort.cpp"
IanBenzMaxim 3:f818ea5172ed 120 "Sleep.cpp")
IanBenzMaxim 3:f818ea5172ed 121 add_library(Qt OBJECT ${QtSources})
IanBenzMaxim 3:f818ea5172ed 122 target_include_directories(Qt PRIVATE ${Qt5Core_INCLUDE_DIRS} ${Qt5SerialPort_INCLUDE_DIRS})
IanBenzMaxim 3:f818ea5172ed 123 target_sources(${CMAKE_PROJECT_NAME} PRIVATE $<TARGET_OBJECTS:Qt>)
IanBenzMaxim 3:f818ea5172ed 124 target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC Qt5::Core Qt5::SerialPort)
IanBenzMaxim 3:f818ea5172ed 125 else()
IanBenzMaxim 3:f818ea5172ed 126 message(SEND_ERROR "\"${platform}\" is not a supported platform.")
IanBenzMaxim 3:f818ea5172ed 127 endif()
IanBenzMaxim 3:f818ea5172ed 128 endforeach()
IanBenzMaxim 3:f818ea5172ed 129
IanBenzMaxim 3:f818ea5172ed 130 # Set up build and install exports.
IanBenzMaxim 3:f818ea5172ed 131 target_include_directories(${CMAKE_PROJECT_NAME} INTERFACE
IanBenzMaxim 3:f818ea5172ed 132 $<BUILD_INTERFACE:${baseIncludeDir}>
IanBenzMaxim 3:f818ea5172ed 133 $<INSTALL_INTERFACE:.>)
IanBenzMaxim 3:f818ea5172ed 134 foreach(resourceDir ${resourceDirs})
IanBenzMaxim 3:f818ea5172ed 135 get_filename_component(resourceInstallDir "${CMAKE_PROJECT_NAME}/${resourceDir}" DIRECTORY)
IanBenzMaxim 3:f818ea5172ed 136 install(DIRECTORY ${resourceDir} DESTINATION ${resourceInstallDir}
IanBenzMaxim 3:f818ea5172ed 137 FILES_MATCHING PATTERN "*.h*" PATTERN "*.dll")
IanBenzMaxim 3:f818ea5172ed 138 endforeach()
IanBenzMaxim 3:f818ea5172ed 139 install(TARGETS ${CMAKE_PROJECT_NAME} EXPORT "${CMAKE_PROJECT_NAME}Config"
IanBenzMaxim 3:f818ea5172ed 140 ARCHIVE DESTINATION $<CONFIG>
IanBenzMaxim 3:f818ea5172ed 141 LIBRARY DESTINATION $<CONFIG>
IanBenzMaxim 3:f818ea5172ed 142 RUNTIME DESTINATION $<CONFIG>)
IanBenzMaxim 3:f818ea5172ed 143 install(EXPORT "${CMAKE_PROJECT_NAME}Config" DESTINATION "cmake")
IanBenzMaxim 3:f818ea5172ed 144 export(TARGETS ${CMAKE_PROJECT_NAME} FILE "${CMAKE_PROJECT_NAME}Config.cmake")
IanBenzMaxim 3:f818ea5172ed 145
IanBenzMaxim 3:f818ea5172ed 146 # Set up source groups.
IanBenzMaxim 3:f818ea5172ed 147 get_property(${CMAKE_PROJECT_NAME}Sources TARGET ${CMAKE_PROJECT_NAME} PROPERTY SOURCES)
IanBenzMaxim 3:f818ea5172ed 148 source_group(TREE ${CMAKE_SOURCE_DIR} FILES ${${CMAKE_PROJECT_NAME}Sources})