92 lines
3.6 KiB
CMake
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})
|