mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-02 22:54:36 +00:00
Create & install a cmake package file (part 3)
The cargo target directory tree is now populated with a cmake package file and that's also installed into the prefix specified with the cargo cmake xtask. As a consequence, the cpptest example can be built by first building the cmake package: cargo xtask cmake or cargo xtask cmake --release --target some-triplet) or cargo xtask cmake --release --prefix /somewhere --install and then run cmake in the cpptest example with a prefix path: -DCMAKE_PREFIX_PATH=/where/you/installed/it or simply -DCMAKE_PREFIX_PATH=../../target/debug for example. Pending still is the sixtyfps compiler tool installation and discovery.
This commit is contained in:
parent
a2c5e66bee
commit
2e0a5ddb25
3 changed files with 67 additions and 39 deletions
|
@ -2,27 +2,23 @@ cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
project(SixtyFPS LANGUAGES CXX)
|
project(SixtyFPS LANGUAGES CXX)
|
||||||
|
|
||||||
|
add_library(SixtyFPS INTERFACE)
|
||||||
|
|
||||||
foreach(lib_path IN LISTS SIXTYFPS_INTERNAL_LIBS)
|
foreach(lib_path IN LISTS SIXTYFPS_INTERNAL_LIBS)
|
||||||
get_filename_component(lib_name "${lib_path}" NAME_WE)
|
get_filename_component(lib_name "${lib_path}" NAME_WE)
|
||||||
|
|
||||||
add_library(internal_lib_${lib_name} OBJECT IMPORTED)
|
add_library(${lib_name} STATIC IMPORTED)
|
||||||
set_property(TARGET internal_lib_${lib_name} PROPERTY IMPORTED_OBJECTS "${lib_path}")
|
set_property(TARGET ${lib_name} PROPERTY IMPORTED_LOCATION "${lib_path}")
|
||||||
|
|
||||||
list(APPEND resolved_internal_libs "$<TARGET_OBJECTS:internal_lib_${lib_name}>")
|
target_link_libraries(SixtyFPS INTERFACE ${lib_name})
|
||||||
|
list(APPEND internal_libs ${lib_name})
|
||||||
|
|
||||||
|
install(FILES ${lib_path} TYPE LIB)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
add_library(SixtyFPS STATIC lib.cpp ${resolved_internal_libs})
|
|
||||||
|
|
||||||
# When synthesizing the final .a file, make sure that ar flattens instead of creating a .a that just contains a .a (won't be usable)
|
|
||||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
||||||
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> crT <TARGET> <LINK_FLAGS> <OBJECTS>")
|
|
||||||
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> cruT <TARGET> <LINK_FLAGS> <OBJECTS>")
|
|
||||||
set(CMAKE_CXX_ARCHIVE_APPEND "<CMAKE_AR> ruT <TARGET> <LINK_FLAGS> <OBJECTS>")
|
|
||||||
set(CMAKE_C_ARCHIVE_APPEND "<CMAKE_AR> ruT <TARGET> <LINK_FLAGS> <OBJECTS>")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (DEFINED SIXTYFPS_EXTERNAL_LIBS)
|
if (DEFINED SIXTYFPS_EXTERNAL_LIBS)
|
||||||
target_link_libraries(SixtyFPS PRIVATE ${SIXTYFPS_EXTERNAL_LIBS})
|
target_link_libraries(SixtyFPS INTERFACE ${SIXTYFPS_EXTERNAL_LIBS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(api_headers
|
set(api_headers
|
||||||
|
@ -36,34 +32,40 @@ foreach(header IN LISTS api_headers)
|
||||||
set_property(TARGET SixtyFPS APPEND PROPERTY PUBLIC_HEADER ../include/${header})
|
set_property(TARGET SixtyFPS APPEND PROPERTY PUBLIC_HEADER ../include/${header})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
target_include_directories(SixtyFPS PUBLIC
|
file(GLOB_RECURSE generated_headers RELATIVE_PATH "${CMAKE_BINARY_DIR}" "${CMAKE_BINARY_DIR}/include/*.h")
|
||||||
|
|
||||||
|
foreach(header IN LISTS generated_headers)
|
||||||
|
set_property(TARGET SixtyFPS APPEND PROPERTY PUBLIC_HEADER ${header})
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
target_include_directories(SixtyFPS INTERFACE
|
||||||
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
|
||||||
$<INSTALL_INTERFACE:include/sixtyfps>
|
$<INSTALL_INTERFACE:include/sixtyfps>
|
||||||
)
|
)
|
||||||
|
|
||||||
export(TARGETS SixtyFPS NAMESPACE SixtyFPS:: FILE "${CMAKE_BINARY_DIR}/cmake/SixtyFPSTargets.cmake")
|
export(TARGETS SixtyFPS NAMESPACE SixtyFPS:: FILE "${CMAKE_BINARY_DIR}/lib/cmake/SixtyFPS/SixtyFPSTargets.cmake")
|
||||||
|
|
||||||
#install(EXPORT SixtyFPSTargets NAMESPACE SixtyFPS:: DESTINATION lib/cmake/SixtyFPS)
|
install(EXPORT SixtyFPSTargets NAMESPACE SixtyFPS:: DESTINATION lib/cmake/SixtyFPS)
|
||||||
#
|
|
||||||
#install(TARGETS SixtyFPS
|
install(TARGETS SixtyFPS
|
||||||
# EXPORT SixtyFPSTargets
|
EXPORT SixtyFPSTargets
|
||||||
# LIBRARY DESTINATION lib
|
LIBRARY DESTINATION lib
|
||||||
# PUBLIC_HEADER DESTINATION include/sixtyfps
|
PUBLIC_HEADER DESTINATION include/sixtyfps
|
||||||
#)
|
)
|
||||||
#
|
|
||||||
#include(CMakePackageConfigHelpers)
|
include(CMakePackageConfigHelpers)
|
||||||
#
|
|
||||||
#configure_package_config_file("SixtyFPSConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/SixtyFPSConfig.cmake" INSTALL_DESTINATION lib/cmake/SixtyFPS)
|
configure_package_config_file("SixtyFPSConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/SixtyFPS/SixtyFPSConfig.cmake" INSTALL_DESTINATION lib/cmake/SixtyFPS)
|
||||||
#
|
|
||||||
#write_basic_package_version_file(
|
write_basic_package_version_file(
|
||||||
# ${CMAKE_CURRENT_BINARY_DIR}/SixtyFPSConfigVersion.cmake
|
${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/SixtyFPS/SixtyFPSConfigVersion.cmake
|
||||||
# VERSION 1.0.0
|
VERSION 1.0.0
|
||||||
# COMPATIBILITY SameMajorVersion
|
COMPATIBILITY SameMajorVersion
|
||||||
#)
|
)
|
||||||
#
|
|
||||||
#install(FILES
|
install(FILES
|
||||||
# "${CMAKE_CURRENT_BINARY_DIR}/SixtyFPSConfig.cmake"
|
"${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/SixtyFPS/SixtyFPSConfig.cmake"
|
||||||
# "${CMAKE_CURRENT_BINARY_DIR}/SixtyFPSConfigVersion.cmake"
|
"${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/SixtyFPS/SixtyFPSConfigVersion.cmake"
|
||||||
# DESTINATION lib/cmake/SixtyFPS
|
DESTINATION lib/cmake/SixtyFPS
|
||||||
#)
|
)
|
26
api/sixtyfps-cpp/cmake/SixtyFPSConfig.cmake.in
Normal file
26
api/sixtyfps-cpp/cmake/SixtyFPSConfig.cmake.in
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
@PACKAGE_INIT@
|
||||||
|
|
||||||
|
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
||||||
|
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
|
||||||
|
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
|
||||||
|
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
|
||||||
|
if(_IMPORT_PREFIX STREQUAL "/")
|
||||||
|
set(_IMPORT_PREFIX "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
foreach(internal_lib IN ITEMS @internal_libs@)
|
||||||
|
add_library(${internal_lib} STATIC IMPORTED)
|
||||||
|
set(fn "${internal_lib}${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||||
|
# Don't look in lib when we're inside a cargo tree, as cargo doesn't use a lib/ sub-dir.
|
||||||
|
if(EXISTS "${_IMPORT_PREFIX}/${fn}")
|
||||||
|
else()
|
||||||
|
set(fn "lib/${fn}")
|
||||||
|
endif()
|
||||||
|
set_property(TARGET ${internal_lib} PROPERTY IMPORTED_LOCATION "${_IMPORT_PREFIX}/${fn}")
|
||||||
|
|
||||||
|
set(fn)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set(_IMPORT_PREFIX)
|
||||||
|
|
||||||
|
include("${CMAKE_CURRENT_LIST_DIR}/SixtyFPSTargets.cmake")
|
|
@ -32,7 +32,7 @@ function(SIXTYFPS_TARGET_60_SOURCES target)
|
||||||
target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
|
target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
include(${_SIXTYFPS_TARGET_DIR}/cmake/SixtyFPSTargets.cmake)
|
find_package(SixtyFPS REQUIRED)
|
||||||
|
|
||||||
### END This should be moce in some file in api/sixtyfps-cpp/cmake
|
### END This should be moce in some file in api/sixtyfps-cpp/cmake
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue