From c54ec9b1c62fa8d65729e244d598d213101b04cf Mon Sep 17 00:00:00 2001 From: Wander Lairson Costa Date: Thu, 16 Jul 2020 17:14:45 -0300 Subject: [PATCH] Add support for Windows builds Under build/tizen there is a CMakeLists.txt file that provides builds for the Windows platform. The README file was updated with instructions to build it. We also fix small build issues when compiling with msvc. Change-Id: I210ae579c71cda93eada753944979066edd8636f --- .gitignore | 2 +- README.md | 31 ++++++++ build/tizen/CMakeLists.txt | 135 +++++++++++++++++++++++++++++++++ dali-csharp-binder/src/application.cpp | 4 +- dali-csharp-binder/src/dali_wrap.cpp | 1 + dali-csharp-binder/src/text-utils.cpp | 4 +- 6 files changed, 172 insertions(+), 5 deletions(-) create mode 100644 build/tizen/CMakeLists.txt diff --git a/.gitignore b/.gitignore index 7b7b823..b88ee78 100755 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,4 @@ build/tizen/m4/ *.gcda build/tizen/.deps/ build/tizen/.libs/ - +build/tizen/build/ diff --git a/README.md b/README.md index 8b34835..d478b54 100644 --- a/README.md +++ b/README.md @@ -57,3 +57,34 @@ Then run the following commands: ./configure --prefix=$DESKTOP_PREFIX make install -j8 +3. Building for Windows +======================= + +Third party dependencies are built using vcpkg. Instructions on how to install vcpkg can be found in the +vcpkg-script folder in the windows-dependencies repository. + +- Download the windows-dependencies repository from DaliHub + + $ git clone https://github.com/dalihub/windows-dependencies.git + +- Read the windows-dependencies/vcpkg-script/Readme.md file for more instructions on how to build and install the third-party dependencies. + +3.1 Building with CMake +----------------------- + + * Requirements + It's required the version 3.12.2 of CMake and Visual Studio Community Edition + + * Define an environment variable to set the path to the VCPKG folder + + $ set VCPKG_FOLDER=C:/Users/username/Workspace/VCPKG_TOOL + + * Define an environment variable to set the path where DALi is going to be installed. + + $ set DALI_ENV_FOLDER=C:/Users/username/Workspace/dali-env + + * Execute the following commands to create the makefiles, build and install DALi. + + $ cmake -g Ninja . -DCMAKE_TOOLCHAIN_FILE=%VCPKG_FOLDER%/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_INSTALL_PREFIX=%DALI_ENV_FOLDER% + + $ cmake --build . --target install diff --git a/build/tizen/CMakeLists.txt b/build/tizen/CMakeLists.txt new file mode 100644 index 0000000..b93d67e --- /dev/null +++ b/build/tizen/CMakeLists.txt @@ -0,0 +1,135 @@ +cmake_minimum_required(VERSION 3.1) + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_C_STANDARD 99) + +set(name "dali2-csharp-binder") + +project(${name} CXX) + +set(${name}_VERSION_MAJOR 2) +set(${name}_VERSION_MINOR 0) +set(${name}_VERSION_PATCH 0) +set(${name}_VERSION ${${name}_VERSION_MAJOR}.${${name}_VERSION_MINOR}.${${name}_VERSION_PATCH}) + +add_definitions(-DDALI_PROFILE_WINDOWS) +add_compile_options( /FIdali-windows-dependencies.h ) # Adds missing definitions. +add_compile_options( /vmg ) # Avoids a 'reinterpret_cast' compile error while compiling signals and callbacks. +add_compile_options( /wd4251 ) # Ignores warning C4251: "'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'" + +add_definitions(-D_USE_MATH_DEFINES) + +set(VCPKG_INCLUDE_DIR "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include") + +find_package( pthreads REQUIRED ) +find_package( curl REQUIRED ) +find_library( GETOPT_LIBRARY NAMES getopt ) +find_library( EXIF_LIBRARY NAMES libexif ) + +find_package( png REQUIRED ) +find_package( gif REQUIRED ) +find_package( jpeg REQUIRED ) +find_library( TURBO_JPEG_LIBRARY NAMES turbojpeg ) + +find_package( unofficial-fontconfig REQUIRED ) +find_package( freetype REQUIRED ) +find_package( harfbuzz REQUIRED ) +find_library( FRIBIDI_LIBRARY NAMES fribidi ) + +find_package( unofficial-angle REQUIRED ) +find_package( unofficial-cairo REQUIRED ) + +find_package( WebP REQUIRED ) + +find_package( dali-windows-dependencies REQUIRED ) +find_package( dali2-core REQUIRED ) +find_package( dali2-adaptor REQUIRED ) +find_package( dali2-toolkit REQUIRED ) + +# Set up the include dir +set( INCLUDE_DIR ${CMAKE_INSTALL_PREFIX}/include ) +set( LIB_DIR ${CMAKE_INSTALL_PREFIX}/lib ) +set( BIN_DIR ${CMAKE_INSTALL_PREFIX}/bin ) + +set( REQUIRED_LIBS + PThreads4W::PThreads4W + CURL::libcurl + ${GETOPT_LIBRARY} + ${EXIF_LIBRARY} + ${PNG_LIBRARIES} + ${GIF_LIBRARIES} + JPEG::JPEG + ${TURBO_JPEG_LIBRARY} + unofficial::fontconfig::fontconfig + Freetype::Freetype + harfbuzz::harfbuzz + ${FRIBIDI_LIBRARY} + unofficial::angle::libEGL + unofficial::angle::libGLESv2 + unofficial::cairo::cairo + WebP::webp + WebP::webpdemux + dali-windows-dependencies::dali-windows-dependencies + dali2-core::dali2-core + dali2-adaptor::dali2-adaptor + dali2-toolkit::dali2-toolkit +) + +include_directories( + ${VCPKG_INCLUDE_DIR} + ${CMAKE_INSTALL_PREFIX}/include + ${INCLUDE_DIR} +) + +link_directories(${LIB_DIR}) + +set(dali_csharp_binder_dir ${CMAKE_CURRENT_SOURCE_DIR}/../../dali-csharp-binder) + +set(SOURCES + ${dali_csharp_binder_dir}/src/callbackbase_wrap.cpp + ${dali_csharp_binder_dir}/src/keyboard_focus_manager_wrap.cpp + ${dali_csharp_binder_dir}/src/devel-property-wrap.cpp + ${dali_csharp_binder_dir}/src/version-check.cpp + ${dali_csharp_binder_dir}/src/layout-controller.cpp + ${dali_csharp_binder_dir}/src/flex-layout.cpp + ${dali_csharp_binder_dir}/src/gestures.cpp + ${dali_csharp_binder_dir}/src/view-wrapper-impl-wrap.cpp + ${dali_csharp_binder_dir}/src/event-thread-callback-wrap.cpp + ${dali_csharp_binder_dir}/src/application.cpp + ${dali_csharp_binder_dir}/src/text-editor.cpp + ${dali_csharp_binder_dir}/src/text-field.cpp + ${dali_csharp_binder_dir}/src/window.cpp + ${dali_csharp_binder_dir}/src/tts-player.cpp + ${dali_csharp_binder_dir}/src/input-method-context.cpp + ${dali_csharp_binder_dir}/src/input-method-options.cpp + ${dali_csharp_binder_dir}/src/animation.cpp + ${dali_csharp_binder_dir}/src/adaptor.cpp + ${dali_csharp_binder_dir}/src/extents.cpp + ${dali_csharp_binder_dir}/src/text-label.cpp + ${dali_csharp_binder_dir}/src/text-utils.cpp + ${dali_csharp_binder_dir}/src/dali_wrap.cpp +) + +add_library(${name} SHARED ${SOURCES}) +target_link_libraries(${name} ${REQUIRED_LIBS}) + +set_target_properties(${name} + PROPERTIES + VERSION ${${name}_VERSION} + SOVERSION ${${name}_VERSION_MAJOR} + CLEAN_DIRECT_OUPUT 1 +) + +# Install the pdb file. +if( ${CMAKE_BUILD_TYPE} MATCHES Debug ) + set(BIN_DIR ${BIN_DIR}/debug) + set(LIB_DIR ${LIB_DIR}/debug) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/Debug/${name}.pdb DESTINATION ${BIN_DIR} ) +endif() + +# Install the library so file and symlinks +install( TARGETS ${name} + LIBRARY DESTINATION ${LIB_DIR} + ARCHIVE DESTINATION ${LIB_DIR} + RUNTIME DESTINATION ${BIN_DIR} +) diff --git a/dali-csharp-binder/src/application.cpp b/dali-csharp-binder/src/application.cpp index cd3c116..9a9d256 100755 --- a/dali-csharp-binder/src/application.cpp +++ b/dali-csharp-binder/src/application.cpp @@ -726,9 +726,9 @@ SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Dali_Application_GetWindowsListSize() return jresult; } -SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_Application_GetWindowsFromList(uint jarg1) { +SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_Application_GetWindowsFromList(unsigned int jarg1) { void * jresult ; - uint index = jarg1; + unsigned int index = jarg1; Dali::WindowContainer result; { diff --git a/dali-csharp-binder/src/dali_wrap.cpp b/dali-csharp-binder/src/dali_wrap.cpp index 5e88da6..7892569 100644 --- a/dali-csharp-binder/src/dali_wrap.cpp +++ b/dali-csharp-binder/src/dali_wrap.cpp @@ -419,6 +419,7 @@ void SWIG_CSharpException(int code, const char *msg) { #define SWIGSTDCALL +#include #include #include diff --git a/dali-csharp-binder/src/text-utils.cpp b/dali-csharp-binder/src/text-utils.cpp index 3e55114..e4d9152 100755 --- a/dali-csharp-binder/src/text-utils.cpp +++ b/dali-csharp-binder/src/text-utils.cpp @@ -22,12 +22,12 @@ #include #include +extern SWIG_CSharpStringHelperCallback SWIG_csharp_string_callback; + #ifdef __cplusplus extern "C" { #endif -extern SWIG_CSharpStringHelperCallback SWIG_csharp_string_callback; - SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_new_RendererParameters_0() { void * jresult ; Dali::Toolkit::DevelText::RendererParameters *result = 0 ; -- 2.7.4