#============================================ # 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: # * .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} $) 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})