Files
E502_ADC_BF_PC_companion/x502api-1.1.34/CMakeLists.txt

220 lines
7.6 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

cmake_minimum_required(VERSION 2.8.12)
project(x502api C)
set(PROJECT_VARNAME_PREFIX X502API)
set(X502API_VER_MAJOR 1)
set(X502API_VER_MINOR 1)
set(X502API_VER_PATCH 34)
set(X502API_VERSION ${X502API_VER_MAJOR}.${X502API_VER_MINOR}.${X502API_VER_PATCH})
add_definitions(-DX502API_VER_MAJOR=${X502API_VER_MAJOR} -DX502API_VER_MINOR=${X502API_VER_MINOR} -DX502API_VER_PATCH=${X502API_VER_PATCH})
option(X502API_ENABLE_DEV_L502 "Enable L-502 device support" ON)
option(X502API_ENABLE_DEV_E502 "Enable E-502 device support" ON)
set(X502API_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/include)
set(X502API_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib)
set(LTIMER_DIR ${X502API_LIB_DIR}/ltimer)
set(LCSPEC_DIR ${X502API_LIB_DIR}/lcspec)
set(OSSPEC_DIR ${X502API_LIB_DIR}/osspec)
set(X502_LIBS_CMAKE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/x502libs.cmake)
if(NOT X502_INSTALL_LIB)
set(X502_INSTALL_LIB lib)
endif(NOT X502_INSTALL_LIB)
if (NOT X502_INSTALL_INCLUDE)
set(X502_INSTALL_INCLUDE include)
endif(NOT X502_INSTALL_INCLUDE)
set(X502_INSTALL_PASCAL pas)
file(MAKE_DIRECTORY ${X502API_INCLUDE_DIR})
set(X502API_PREPARE_HEADERS ON)
#для GCC устанавливаем повышенный уроень предупреждения компилятора
if(CMAKE_COMPILER_IS_GNUCC)
include(CheckCCompilerFlag)
set(CHECK_FLAGS
-Wall -Wformat-security -Wundef -Wshadow -Wpointer-arith -Wcast-align
-Wwrite-strings -Wsign-compare -Waggregate-return -Winline -Wno-aggregate-return
-Werror=implicit-int -Werror=implicit-function-declaration -Werror=strict-prototypes -Werror=return-type
-Wextra -Winit-self -Wstrict-aliasing -Wfloat-equal
-Wunsafe-loop-optimizations -Wlogical-op
-Wno-unused-parameter -Wno-unused-variable)
foreach(CUR_FLAG ${CHECK_FLAGS})
# для корректного названия переменной флага заменяем недопустимые
# символы - и = в названии флага на _
string(REGEX REPLACE "-|=" "_" FLAG_VARNAME FLAG_${CUR_FLAG}_ENABLE)
CHECK_C_COMPILER_FLAG(${CUR_FLAG} ${FLAG_VARNAME})
if(${FLAG_VARNAME})
set(COMPILE_FLAGS "${COMPILE_FLAGS} ${CUR_FLAG}")
endif()
endforeach(CUR_FLAG)
CHECK_C_COMPILER_FLAG(-Wl,--no-undefined FLAG_NO_UNDEFINED)
if(FLAG_NO_UNDEFINED)
set(LINK_FLAGS "${LINK_FLAGS} -Wl,--no-undefined")
else(FLAG_NO_UNDEFINED)
message(STATUS "LINKER FLAG -Wl,--no-undefined WAS NOT FOUND!")
endif(FLAG_NO_UNDEFINED)
CHECK_C_COMPILER_FLAG(-fvisibility=hidden FLAG_FVISIBILITY)
if (FLAG_FVISIBILITY)
set(COMPILE_FLAGS "${COMPILE_FLAGS} -fvisibility=hidden")
endif(FLAG_FVISIBILITY)
endif(CMAKE_COMPILER_IS_GNUCC)
#при сборке MSVC компилируем runtime-библиотеку статически, чтобы не зависеть от версии
if(MSVC)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
foreach(flag_var
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
if(${flag_var} MATCHES "/MD")
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
endif(${flag_var} MATCHES "/MD")
endforeach(flag_var)
#убираем флаг /INCREMENTAL, так как в MSVC с ним могут быть
#внутренние ошибки линковщика
foreach(flag_var
CMAKE_SHARED_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS_DEBUG
CMAKE_SHARED_LINKER_FLAGS_RELEASE
CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL
CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO
CMAKE_SHARED_EXE_FLAGS
CMAKE_SHARED_EXE_FLAGS_DEBUG
CMAKE_SHARED_EXE_FLAGS_RELEASE
CMAKE_SHARED_EXE_FLAGS_MINSIZEREL
CMAKE_SHARED_EXE_FLAGS_RELWITHDEBINFO)
if(${flag_var} MATCHES "/INCREMENTAL:YES")
string(REGEX REPLACE "/INCREMENTAL:YES" "/INCREMENTAL:NO" ${flag_var} "${${flag_var}}")
endif(${flag_var} MATCHES "/INCREMENTAL:YES")
endforeach(flag_var)
endif(MSVC)
include(${LTIMER_DIR}/ltimer.cmake)
set(OSSPEC_USE_MUTEX ON)
set(OSSPEC_USE_THREADS OFF)
set(OSSPEC_USE_EVENTS OFF)
include(${OSSPEC_DIR}/osspec.cmake)
set(X502API_COMPILE_DEFINITIONS ${LTIMER_DEFINITIONS} ${OSSPEC_DEFINITIONS})
set(SOURCES
src/x502api.c
src/x502api_config.c
src/x502api_errs.c
src/x502api_streams.c
src/x502api_async.c
src/x502api_bf.c
src/x502api_eeprom.c
src/x502tstp.c
lib/crc/fast_crc.c
${OSSPEC_SOURCES}
${LTIMER_SOURCES})
set(SETUP_HEADERS
src/lcard_pstdint.h
src/x502api.h
src/x502tstp.h
)
set(HEADERS
src/l502_bf_cmd_defs.h
src/lboot_req.h
src/x502_fpga_regs.h
src/x502api_private.h
src/x502_eeprom.h
src/osspec_cfg.h
src/fast_crc_cfg.h
${OSSPEC_HEADERS}
${LTIMER_HEADERS})
set(LIBS
${LTIMER_LIBS}
${OSSPEC_LIBS})
include_directories(src lib/crc ${X502API_LIB_DIR}/osspec)
include(${X502_LIBS_CMAKE_FILE})
add_subdirectory(devs)
if(BUILD_EXAMPLES OR BUILD_ALL)
add_subdirectory(examples/c)
endif(BUILD_EXAMPLES OR BUILD_ALL)
if(BUILD_TESTS)
add_subdirectory(tests)
endif(BUILD_TESTS)
if(LPCIE_DOCGEN_DIR)
include(${LPCIE_DOCGEN_DIR}/LDoxyToPdf.cmake)
set(PDF_IMG_FILES doc/images/adc_frame.jpeg)
set(DOC_DOXYGEN_PRJ_FILE doc/Doxyfile.in)
set(DOXYGEN_INPUT_FILES devs/l502/l502api.h devs/e502/e502api.h src/x502api.h src/x502tstp.h doc/mainpage.md doc/about.md doc/setup.md doc/gen_descr.md doc/tstp_descr.md)
ADD_DOXY_TO_PDF_TARGET(x502api)
endif(LPCIE_DOCGEN_DIR)
#цели для сборки пакетов
if(UNIX AND CMAKE_EXT_INCLUDE_DIR)
set(PACKAGE_NAME ${PROJECT_NAME})
set(PACKAGE_VERSION ${X502API_VERSION})
set(PACKAGE_ARCH_INSTALL_FILE ${PACKAGE_NAME}.install)
include(${CMAKE_EXT_INCLUDE_DIR}/packages/packages.cmake)
endif(UNIX AND CMAKE_EXT_INCLUDE_DIR)
if(WIN32 AND LCARD_SDK_MAKE_INSTALLER)
set(X502API_CONVERTED_SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/conv_src)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/x64)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/x86)
file(MAKE_DIRECTORY ${X502API_CONVERTED_SOURCE_DIR})
string(REGEX REPLACE "/" "\\\\" ICONV_EXEC ${ICONV_EXEC})
string(REGEX REPLACE "/" "\\\\" X502API_CONVERTED_SOURCE_DIR ${X502API_CONVERTED_SOURCE_DIR})
set(X502API_ORIG_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE "/" "\\\\" X502API_ORIG_SOURCE_DIR ${X502API_ORIG_SOURCE_DIR})
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/win_install/conv_src_cp1251.bat.in
${CMAKE_CURRENT_BINARY_DIR}/conv_src_cp1251.bat @ONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/win_install/make64.bat.in
${CMAKE_CURRENT_BINARY_DIR}/x64/make.bat @ONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/win_install/make32.bat.in
${CMAKE_CURRENT_BINARY_DIR}/x86/make.bat @ONLY)
add_custom_target(convert_src
COMMAND cmd /c conv_src_cp1251.bat
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
add_custom_target(x502api_64
COMMAND cmd /c make.bat
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/x64
DEPENDS convert_src)
#x86 версию собираем 2008 студией (Express) для совместимости с Win2000
#set(VS2008_SETENV "${VS2008_DIR}/vcvarsall.bat")
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/x86)
add_custom_target(x502api_32
COMMAND cmd /c make.bat
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/x86
DEPENDS convert_src
)
endif()