Warning, /education/gcompris/cmake/box2d.cmake is written in an unsupported language. File is not indexed.
0001 #=============================================================================
0002 # SPDX-FileCopyrightText: 2018 Johnny Jazeix <jazeix@gmail.com>
0003 #
0004 # SPDX-License-Identifier: BSD-3-Clause
0005 #=============================================================================
0006
0007 set(QML_BOX2D_MODULE "auto" CACHE STRING "Policy for qml-box2d module [auto|submodule|system|disabled]")
0008
0009 if(NOT ${QML_BOX2D_MODULE} STREQUAL "disabled")
0010 include(qt_helper)
0011
0012 getQtQmlPath(_qt_qml_system_path)
0013 set(_box2d_system_dir "${_qt_qml_system_path}/Box2D.2.0")
0014
0015 if(${QML_BOX2D_MODULE} STREQUAL "submodule")
0016 message(STATUS "Building qml-box2d module from submodule")
0017 set(_need_box2d_submodule "TRUE")
0018 else()
0019 # try to find module in system scope
0020 find_library(QML_BOX2D_LIBRARY NAMES Box2D libBox2D PATHS ${_box2d_system_dir} NO_DEFAULT_PATH)
0021 # Look in default path if not found
0022 if(NOT QML_BOX2D_LIBRARY AND NOT "${CMAKE_FIND_ROOT_PATH}" STREQUAL "")
0023 # Remove the root path to look for the library
0024 set(_box2d_without_cmake_find_root_path)
0025 string(REPLACE "${CMAKE_FIND_ROOT_PATH}" "" _box2d_without_cmake_find_root_path ${_box2d_system_dir})
0026 find_library(QML_BOX2D_LIBRARY NAMES Box2D libBox2D PATHS ${_box2d_without_cmake_find_root_path})
0027 endif()
0028
0029 if(QML_BOX2D_LIBRARY)
0030 message(STATUS "Using system qml-box2d plugin at ${QML_BOX2D_LIBRARY}")
0031 # for packaging builds, copy the module manually to the correct location
0032 if(ANDROID)
0033 file(COPY ${_box2d_system_dir}/qmldir ${QML_BOX2D_LIBRARY} DESTINATION lib/qml/Box2D.2.0)
0034 endif()
0035 # FIXME: add others as needed
0036 else()
0037 if(${QML_BOX2D_MODULE} STREQUAL "auto")
0038 message(STATUS "Did not find the qml-box2d module in system scope, falling back to submodule build ...")
0039 set(_need_box2d_submodule "TRUE")
0040 else()
0041 message(FATAL_ERROR "Did not find the qml-box2d module in system scope and submodule build was not requested. Can't continue!")
0042 endif()
0043 endif()
0044 endif()
0045
0046 if(_need_box2d_submodule)
0047 # build qml-box2d ourselves from submodule
0048 include(ExternalProject)
0049
0050 get_property(_qmake_program TARGET Qt5::qmake PROPERTY IMPORT_LOCATION)
0051
0052 set(_box2d_source_dir ${CMAKE_CURRENT_SOURCE_DIR}/external/qml-box2d)
0053 if(WIN32)
0054 set(_box2d_library_dir "release/")
0055 set(_box2d_library_file "Box2D.dll")
0056 elseif(CMAKE_HOST_APPLE)
0057 set(_box2d_library_dir "")
0058 set(_box2d_library_file "libBox2D.dylib")
0059 elseif(ANDROID AND Qt5Widgets_VERSION VERSION_GREATER_EQUAL "5.14.0")
0060 set(_box2d_library_dir "")
0061 set(_box2d_library_file "libBox2D_${ANDROID_ABI}.so")
0062 else()
0063 set(_box2d_library_dir "")
0064 set(_box2d_library_file "libBox2D.so")
0065 endif()
0066 set(_box2d_install_dir ${CMAKE_CURRENT_BINARY_DIR}/lib/qml/Box2D.2.0)
0067 # make sure submodule is up2date
0068 find_package(Git)
0069 if(GIT_FOUND)
0070 execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
0071 endif()
0072
0073 # for visual studio, we need to create a vcxproj
0074 if(WIN32 AND NOT MINGW)
0075 set(_qmake_options -spec win32-msvc -tp vc)
0076 else()
0077 set(_qmake_options "")
0078 endif()
0079 set(BOX2D_MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM})
0080 # Ninja is not supported by qmake.
0081 # In case Ninja is set as generator, use make on Linux, nmake on Windows
0082 if(${CMAKE_GENERATOR} MATCHES "Ninja")
0083 if(WIN32)
0084 set(BOX2D_MAKE_PROGRAM "nmake")
0085 else()
0086 set(BOX2D_MAKE_PROGRAM "make")
0087 endif()
0088 endif()
0089
0090 if(ANDROID AND Qt5Widgets_VERSION VERSION_GREATER_EQUAL "5.14.0")
0091 # Only build the necessary architecture for box2d
0092 # Capitalize first letter of the abi...
0093 string(SUBSTRING ${ANDROID_ABI} 0 1 FIRST_LETTER)
0094 string(TOUPPER ${FIRST_LETTER} FIRST_LETTER)
0095 string(REGEX REPLACE "^.(.*)" "${FIRST_LETTER}\\1" ANDROID_ABI_CAP "${ANDROID_ABI}")
0096 set(BOX2D_MAKE_PROGRAM ${BOX2D_MAKE_PROGRAM} -f Makefile.${ANDROID_ABI_CAP})
0097 # I didn't find a better way to copy the libraries to the lib folder only on Android when doing an aab package...
0098 set(EXTRA_INSTALL_ANDROID_BOX2D ${CMAKE_COMMAND} -E make_directory ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} && ${CMAKE_COMMAND} -E copy ${_box2d_library_dir}${_box2d_library_file} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} && )
0099 endif()
0100
0101 ExternalProject_Add(qml_box2d
0102 DOWNLOAD_COMMAND ""
0103 SOURCE_DIR ${_box2d_source_dir}
0104 CONFIGURE_COMMAND ${_qmake_program} ${_qmake_options} ${_box2d_source_dir}/box2d.pro
0105 BUILD_COMMAND ${BOX2D_MAKE_PROGRAM}
0106 INSTALL_DIR ${_box2d_install_dir}
0107 INSTALL_COMMAND ${EXTRA_INSTALL_ANDROID_BOX2D} ${CMAKE_COMMAND} -E copy ${_box2d_library_dir}${_box2d_library_file} ${_box2d_source_dir}/qmldir ${_box2d_install_dir}
0108 )
0109
0110 add_library(qml-box2d SHARED IMPORTED)
0111 set_target_properties(qml-box2d PROPERTIES IMPORTED_LOCATION ${_box2d_install_dir}/${_box2d_library_file})
0112
0113 if(APPLE)
0114 install(DIRECTORY ${_box2d_install_dir} DESTINATION gcompris-qt.app/Contents/lib/qml)
0115 else()
0116 install(DIRECTORY ${_box2d_install_dir} DESTINATION lib/qml)
0117 endif()
0118 endif()
0119 endif()