JD2022-TU1/main/extern/Hue/wrappers/csharp/CMakeLists.txt

92 lines
3.6 KiB
CMake

#============================================
# csharp wrapper
#============================================
#create directory structure
set(csharp_src_dir ${CMAKE_BINARY_DIR}/bin/wrapper/csharp/src CACHE INTERNAL "")
set(csharp_bin_dir ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL "")
file(MAKE_DIRECTORY ${csharp_src_dir})
file(MAKE_DIRECTORY ${csharp_bin_dir})
#------------------------------------------
# configure swig
#------------------------------------------
set(CMAKE_SWIG_OUTDIR ${csharp_src_dir})
#------------------------------------------
# Configure the module to swig
#------------------------------------------
# Assumes the following exists:
# * <swig_module_name>.i
set(swig_module_name HueStream)
set(swig_module_namespace huestream)
set(swig_target ${swig_module_name}Native)
set(swig_interface_file ${swig_module_name}.i)
set(swig_module_dependencies huestream edk_support bridge_discovery)
#------------------------------------------
# Do the swig action
#------------------------------------------
set_source_files_properties(${swig_interface_file} PROPERTIES CPLUSPLUS ON)
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set_source_files_properties(${swig_interface_file} PROPERTIES SWIG_FLAGS "-namespace;${swig_module_namespace};-DGNU;-DGCC_MAJOR=${GCC_MAJOR};-DGCC_MINOR=${GCC_MINOR}")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set_source_files_properties(${swig_interface_file} PROPERTIES SWIG_FLAGS "-namespace;${swig_module_namespace};-DCLANG")
else()
set_source_files_properties(${swig_interface_file} PROPERTIES SWIG_FLAGS "-namespace;${swig_module_namespace}")
endif()
swig_add_module(${swig_target} csharp ${swig_interface_file})
swig_link_libraries(${swig_target} ${swig_module_dependencies})
set_target_properties(${SWIG_MODULE_${swig_target}_REAL_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${csharp_bin_dir})
set_target_properties(${SWIG_MODULE_${swig_target}_REAL_NAME} PROPERTIES PREFIX "")
# shared lib settings
generate_export_header(${swig_target})
set_target_properties(${swig_target} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
# add dependency on swig_build if swig is being built
if (BUILD_SWIG)
add_dependencies(${SWIG_MODULE_${swig_target}_REAL_NAME} swig_build)
endif()
if (WIN32)
# copy_to_binary_dir(${SWIG_MODULE_${swig_target}_REAL_NAME} $<TARGET_FILE:${lib}>)
endif()
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
set(csharp_platform_name "x64")
else()
set(csharp_platform_name "x86")
endif()
string(REPLACE "/" "\\" csharp_bin_dir_dos_style "${csharp_bin_dir}")
string(REPLACE "/" "\\" DOS_STYLE_SOURCE_DIR "${CSHARP_SOURCE_DIRECTORY}")
#------------------------------------------
# Build C# lib
#------------------------------------------
find_package(CSharp)
if(NOT CSHARP_FOUND)
message(WARNING "C# compiler not found, unable to generate C# binding library")
return()
endif()
include(${CSHARP_USE_FILE})
set(CSHARP_SOURCE_DIRECTORY ${csharp_src_dir})
set(CSHARP_BINARY_DIRECTORY ${csharp_bin_dir})
csharp_add_library(${swig_module_name}ManagedLib ${csharp_src_dir}/*.cs)
add_dependencies(${swig_module_name}ManagedLib ${SWIG_MODULE_${swig_target}_REAL_NAME})
#-----------------------------------------------
# Copy C# solution visual studio example project
#-----------------------------------------------
set (csharp_example_files_dir example)
set (csharp_example_wpf_proj ${CMAKE_BINARY_DIR}/bin/wrapper/csharp/example/HueStreamExampleWPF/HueStreamExampleWPF.csproj)
file(COPY ${csharp_example_files_dir} DESTINATION ${CMAKE_BINARY_DIR}/bin/wrapper/csharp)
configure_file(${csharp_example_wpf_proj} ${csharp_example_wpf_proj})