1
0
mirror of https://github.com/preble/libpinproc synced 2026-02-22 18:15:25 +01:00

Continued improvements for MSVC builds. Reworked CmakeLists.txt and simplified ifdefs in PRHardware.cpp

This commit is contained in:
Gerry Stellenberg
2011-01-10 17:01:51 -06:00
parent 1a82212cb4
commit 9af691d70a
3 changed files with 259 additions and 154 deletions

View File

@@ -1,53 +1,86 @@
###
### CMake policy settings
###
# see http://www.cmake.org/Wiki/CMake_Policies
cmake_minimum_required(VERSION 2.6)
# see http://www.cmake.org/cmake/help/cmake-2-8-docs.html#policy:CMP0015
if(POLICY CMP0015)
cmake_policy(SET CMP0015 NEW)
endif()
project (LIBPINPROC)
# User can redefine to "SHARED" on command line with:
# cmake -DLIB_TYPE=SHARED ...
IF(NOT DEFINED LIB_TYPE)
set(LIB_TYPE STATIC)
ENDIF(NOT DEFINED LIB_TYPE)
###
### Project settings
###
project(PINPROC)
set(PINPROC_VERSION_MAJOR "0")
set(PINPROC_VERSION_MINOR "9")
set(PINPROC_VERSION "${YAML_CPP_VERSION_MAJOR}.${YAML_CPP_VERSION_MINOR}")
set(PINPROC_VERSION "${PINPROC_VERSION_MAJOR}.${PINPROC_VERSION_MINOR}")
IF(APPLE)
# set( CMAKE_OSX_ARCHITECTURES ppc;i386 ) # Uncomment for universal binary
ENDIF(APPLE)
include_directories(${LIBPINPROC_SOURCE_DIR}/include /usr/local/include $ENV{EXTRA_INC})
link_directories(/usr/local/lib $ENV{EXTRA_LINK})
###
### Project options
###
# General stuff
option(PINPROC_BUILD_TOOLS "Enable testing and firmware tools" ON)
set(FILES src/pinproc.cpp src/PRDevice.cpp src/PRHardware.cpp)
add_library(pinproc
${LIB_TYPE}
${FILES}
${public_headers}
${private_headers}
${sources}
)
set_target_properties(pinproc PROPERTIES
VERSION "${PINPROC_VERSION}"
SOVERSION "${PINPROC_VERSION_MAJOR}.${PINPROC_VERSION_MINOR}"
)
# Compilation options
# see http://www.cmake.org/cmake/help/cmake2.6docs.html#variable:BUILD_SHARED_LIBS
# http://www.cmake.org/cmake/help/cmake2.6docs.html#command:add_library
option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
# see http://msdn.microsoft.com/en-us/library/aa278396(v=vs.60).aspx
# http://msdn.microsoft.com/en-us/library/2kzt1wy3%28v=VS.71%29.aspx
option(MSVC_SHARED_RT "MSVC: Build with shared runtime libs (/MD)" ON)
option(MSVC_STHREADED_RT "MSVC: Build with single-threaded static runtime libs (/ML until VS .NET 2003)" OFF)
###
### Source
###
# !!! file(GLOB) didn't work on Ubuntu 10.04 with cmake 2.8 !!!
#file(GLOB sources src/[a-z]*.cpp)
#file(GLOB public_headers include/[a-z]*.h)
#file(GLOB private_headers src/[a-z]*.h)
set(sources "src/pinproc.cpp;src/PRDevice.cpp;src/PRHardware.cpp")
set(public_headers "include/pinproc.h")
set(private_headers "src/PRCommon.h;src/PRDevice.h;src/PRHardware.h")
message(STATUS "sources is ${sources}")
message(STATUS "public_headers is ${public_headers}")
message(STATUS "private_headers is ${private_headers}")
include_directories(${PINPROC_SOURCE_DIR}/include $ENV{EXTRA_INC} /usr/local/include)
link_directories($ENV{EXTRA_LINK} /usr/local/lib)
###
### General compilation settings
###
if(APPLE)
# set(CMAKE_OSX_ARCHITECTURES ppc;i386) # Uncomment for universal binary
endif()
if(WIN32)
set(libraries ftd2xx)
set(_library_dir bin) # .dll are in PATH, like executables
else(WIN32)
set(libraries usb ftdi)
set(_library_dir lib)
endif(WIN32)
set(libraries ftd2xx)
if(BUILD_SHARED_LIBS)
add_definitions(-DPINPROC_DLL) # use or build Windows DLL
endif()
else()
set(libraries usb ftdi)
endif()
add_executable(pinproctest examples/pinproctest/pinproctest.cpp examples/pinproctest/drivers.cpp examples/pinproctest/dmd.cpp examples/pinproctest/switches.cpp examples/pinproctest/alphanumeric.cpp)
add_executable(pinprocfw utils/pinprocfw/pinprocfw.cpp utils/pinprocfw/lenval.cpp)
target_link_libraries(pinproctest pinproc ${libraries} yaml-cpp)
target_link_libraries(pinprocfw pinproc ${libraries})
set(YAML_CPP_LIB "yaml-cpp")
set(YAML_CPP_LIB_DBG "${YAML_CPP_LIB}")
###############################################################
# The remainder of the file is used for "make install" stuff
###############################################################
###
### General install settings
###
if(WIN32)
set(_library_dir bin) # .dll are in PATH, like executables
else()
set(_library_dir lib)
endif()
set(INCLUDE_INSTALL_DIR include/p-roc)
set(LIB_INSTALL_DIR ${_library_dir}${LIB_SUFFIX})
@@ -58,9 +91,59 @@ set(_INSTALL_DESTINATIONS
ARCHIVE DESTINATION lib${LIB_SUFFIX}
)
file(GLOB public_headers include/[a-z]*.h)
file(GLOB private src/[a-z]*.h)
file(GLOB sources src/[a-z]*.cpp)
###
### Library
###
add_library(pinproc
${sources}
${public_headers}
${private_headers}
)
set_target_properties(pinproc PROPERTIES
VERSION "${PINPROC_VERSION}"
SOVERSION "${PINPROC_VERSION_MAJOR}.${PINPROC_VERSION_MINOR}"
)
# Correct MSVC for static libraries (/MD[d], /MT[d], /ML[d] (single-threaded until VS 2003))
# see http://msdn.microsoft.com/en-us/library/aa278396(v=vs.60).aspx
# http://msdn.microsoft.com/en-us/library/2kzt1wy3%28v=VS.71%29.aspx
if((MSVC) AND (NOT BUILD_SHARED_LIBS))
set(TMP_SUFFIX "md") # CMake defaults to /MD for MSVC
if (NOT MSVC_SHARED_RT) # User wants to have static runtime libraries (/MT, /ML)
if (MSVC_STHREADED_RT) # User wants to have old single-threade runtime libraries
set(TMP_SUFFIX "ml")
set(TMP_OPTION "/ML")
if(NOT MSVC_VERSION LESS 1400)
message(FATAL_ERROR "Single-threaded runtime libraries (/ML) only availbe until VS .NET 2003 (7.1).")
endif()
else()
set(TMP_SUFFIX "mt")
set(TMP_OPTION "/MT")
endif()
# correct linker options
string(REPLACE "/MD" "${TMP_OPTION}" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
string(REPLACE "/MD" "${TMP_OPTION}" CMAKE_CXX_FLAGS_MINSIZEREL ${CMAKE_CXX_FLAGS_MINSIZEREL})
string(REPLACE "/MD" "${TMP_OPTION}" CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
string(REPLACE "/MD" "${TMP_OPTION}" CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
string(REPLACE "/MD" "${TMP_OPTION}" CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG})
string(REPLACE "/MD" "${TMP_OPTION}" CMAKE_C_FLAGS_MINSIZEREL ${CMAKE_C_FLAGS_MINSIZEREL})
string(REPLACE "/MD" "${TMP_OPTION}" CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})
string(REPLACE "/MD" "${TMP_OPTION}" CMAKE_C_FLAGS_RELWITHDEBINFO ${CMAKE_C_FLAGS_RELWITHDEBINFO})
endif()
# correct library names
set_target_properties(pinproc PROPERTIES PREFIX "lib")
set_target_properties(pinproc PROPERTIES DEBUG_POSTFIX "${TMP_SUFFIX}d")
set_target_properties(pinproc PROPERTIES RELEASE_POSTFIX "${TMP_SUFFIX}")
set_target_properties(pinproc PROPERTIES MINSIZEREL_POSTFIX "${TMP_SUFFIX}")
set_target_properties(pinproc PROPERTIES RELWITHDEBINFO_POSTFIX "${TMP_SUFFIX}")
# correct external library names
set(YAML_CPP_LIB "lib${YAML_CPP_LIB}${TMP_SUFFIX}")
set(YAML_CPP_LIB_DBG "${YAML_CPP_LIB}d")
endif()
install(TARGETS pinproc ${_INSTALL_DESTINATIONS})
install(
@@ -72,5 +155,37 @@ if(UNIX)
set(PC_FILE ${CMAKE_BINARY_DIR}/pinproc.pc)
configure_file("pinproc.pc.cmake" ${PC_FILE} @ONLY)
install(FILES ${PC_FILE} DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
endif(UNIX)
endif()
###
### Extras
###
#TODO: use add_subdirectory() and separate CMakeLists.txt
if(PINPROC_BUILD_TOOLS)
# Create a target for the test tool (see yaml-cpp)
add_executable(pinproctest
examples/pinproctest/pinproctest.cpp
examples/pinproctest/drivers.cpp
examples/pinproctest/dmd.cpp
examples/pinproctest/switches.cpp
examples/pinproctest/alphanumeric.cpp
)
target_link_libraries(pinproctest
pinproc
${libraries}
optimized ${YAML_CPP_LIB}
debug ${YAML_CPP_LIB_DBG}
)
# Create a target for the firmware tool (see yaml-cpp)
#TODO: use add_subdirectory() and separate CMakeLists.txt
add_executable(pinprocfw
utils/pinprocfw/pinprocfw.cpp
utils/pinprocfw/lenval.cpp
)
target_link_libraries(pinprocfw
pinproc
${libraries}
)
endif()