Skip to content

Commit c6edbd7

Browse files
committed
Add an install step
1 parent a82d3bc commit c6edbd7

File tree

6 files changed

+122
-47
lines changed

6 files changed

+122
-47
lines changed

.github/workflows/bindings.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ jobs:
8484
8585
- if: startsWith(matrix.os, 'windows')
8686
run: |
87-
mv target/${{ matrix.target }}/release/accesskit.dll.lib artifacts/${{ matrix.path }}/static
87+
mv target/${{ matrix.target }}/release/accesskit.dll.lib artifacts/${{ matrix.path }}/shared/accesskit.lib
8888
mv target/${{ matrix.target }}/release/*.pdb artifacts/${{ matrix.path }}/shared
8989
- if: contains(matrix.path, 'mingw')
9090
run: mv target/${{ matrix.target }}/release/libaccesskit.dll.a artifacts/${{ matrix.path }}/shared/libaccesskit.a
@@ -119,7 +119,7 @@ jobs:
119119
mv artifacts/headers accesskit_c/include
120120
cp -r artifacts/*/* accesskit_c/lib
121121
cp -r bindings/c/examples accesskit_c/
122-
cp bindings/c/accesskit-config.cmake accesskit_c/
122+
cp bindings/c/accesskit*.cmake accesskit_c/
123123
cp bindings/c/*.md accesskit_c/
124124
cp LICENSE* accesskit_c/
125125
mv accesskit_c ${{ github.ref_name }}

bindings/c/CMakeLists.txt

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ cmake_minimum_required(VERSION 3.20)
22

33
project(accesskit_c)
44

5-
include(accesskit-config.cmake)
65
include(FetchContent)
76

87
FetchContent_Declare(
@@ -12,20 +11,43 @@ FetchContent_Declare(
1211
)
1312
FetchContent_MakeAvailable(Corrosion)
1413

15-
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${ACCESSKIT_LIBRARIES_DIR}static")
16-
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${ACCESSKIT_LIBRARIES_DIR}shared")
17-
set(CMAKE_PDB_OUTPUT_DIRECTORY "${ACCESSKIT_LIBRARIES_DIR}shared")
14+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
15+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
16+
set(CMAKE_PDB_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
1817
corrosion_import_crate(MANIFEST_PATH Cargo.toml)
1918

2019
find_program(RUSTUP rustup)
2120
find_program(CBINDGEN cbindgen)
2221
find_program(CLANG_FORMAT clang-format)
2322

2423
add_custom_target(headers
25-
COMMAND ${RUSTUP} run nightly ${CBINDGEN} --crate accesskit_c --output "${ACCESSKIT_INCLUDE_DIR}/accesskit.hpp" "${CMAKE_SOURCE_DIR}"
26-
COMMAND ${CLANG_FORMAT} -i "${ACCESSKIT_INCLUDE_DIR}/accesskit.hpp"
27-
COMMAND ${CMAKE_COMMAND} -E rename "${ACCESSKIT_INCLUDE_DIR}/accesskit.hpp" "${ACCESSKIT_INCLUDE_DIR}/accesskit.h"
28-
BYPRODUCTS "${ACCESSKIT_INCLUDE_DIR}/accesskit.h"
24+
COMMAND ${RUSTUP} run nightly ${CBINDGEN} --crate accesskit_c --output accesskit.hpp "${CMAKE_SOURCE_DIR}"
25+
COMMAND ${CLANG_FORMAT} -i accesskit.hpp
26+
COMMAND ${CMAKE_COMMAND} -E rename accesskit.hpp accesskit.h
27+
BYPRODUCTS accesskit.h
2928
)
3029

3130
add_dependencies(cargo-prebuild_accesskit headers)
31+
32+
include("accesskit.cmake")
33+
34+
install(FILES
35+
"${CMAKE_CURRENT_BINARY_DIR}/accesskit.h"
36+
DESTINATION "${ACCESSKIT_INCLUDE_DIR}"
37+
)
38+
39+
install(FILES
40+
"$<TARGET_PROPERTY:accesskit-static,IMPORTED_LOCATION>"
41+
DESTINATION "${ACCESSKIT_LIBRARIES_DIR}/static"
42+
)
43+
44+
install(FILES
45+
"$<TARGET_PROPERTY:accesskit-shared,IMPORTED_LOCATION>"
46+
"$<$<NOT:$<STREQUAL:$<TARGET_PROPERTY:accesskit-shared,IMPORTED_IMPLIB>,>>:${CMAKE_CURRENT_BINARY_DIR}/accesskit.pdb>"
47+
DESTINATION "${ACCESSKIT_LIBRARIES_DIR}/shared"
48+
)
49+
install(FILES
50+
"$<$<NOT:$<STREQUAL:$<TARGET_PROPERTY:accesskit-shared,IMPORTED_IMPLIB>,>>:$<TARGET_PROPERTY:accesskit-shared,IMPORTED_IMPLIB>>"
51+
RENAME "accesskit.lib"
52+
DESTINATION "${ACCESSKIT_LIBRARIES_DIR}/shared"
53+
)

bindings/c/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ include_directories(YourProject ${ACCESSKIT_INCLUDE_DIR})
2525
Finally, link the library to your executable:
2626

2727
```cmake
28-
target_link_libraries(YourExecutable PUBLIC ${ACCESSKIT_LIBRARIES})
28+
target_link_libraries(hello_world PUBLIC accesskit)
2929
```
3030

3131
See [the `examples` directory](https://github.com/AccessKit/accesskit/tree/main/bindings/c/examples) for project integration examples.
@@ -45,6 +45,7 @@ Once inside the `bindings/c` directory, CMake can be used like this to build the
4545
```bash
4646
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
4747
cmake --build build
48+
cmake --install build
4849
```
4950

5051
### Notes on cross-compiling

bindings/c/accesskit-config.cmake

Lines changed: 49 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,52 @@
1-
set(ACCESSKIT_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/include")
2-
if (APPLE)
3-
set(_ACCESSKIT_OS "macos")
4-
elseif (UNIX)
5-
set(_ACCESSKIT_OS "linux")
6-
elseif (WIN32)
7-
set(_ACCESSKIT_OS "windows")
8-
if (MINGW)
9-
set(_ACCESSKIT_TOOLCHAIN "mingw/")
10-
else()
11-
set(_ACCESSKIT_TOOLCHAIN "msvc/")
12-
endif()
13-
if (CMAKE_VS_PLATFORM_NAME)
14-
string(TOLOWER "${CMAKE_VS_PLATFORM_NAME}" LOWER_VS_PLATFORM_NAME)
15-
if ("${LOWER_VS_PLATFORM_NAME}" STREQUAL "win32")
16-
set(_ACCESSKIT_ARCH x86)
17-
elseif("${LOWER_VS_PLATFORM_NAME}" STREQUAL "x64")
18-
set(_ACCESSKIT_ARCH x86_64)
19-
elseif ("${LOWER_VS_PLATFORM_NAME}" STREQUAL "arm64")
20-
set(_ACCESSKIT_ARCH "arm64")
21-
endif()
22-
endif()
1+
include("${CMAKE_CURRENT_LIST_DIR}/accesskit.cmake")
2+
3+
add_library(accesskit INTERFACE)
4+
5+
add_library(accesskit-static STATIC IMPORTED GLOBAL)
6+
find_library(_accesskit_static_lib accesskit "${ACCESSKIT_LIBRARIES_DIR}/static")
7+
set_property(
8+
TARGET accesskit-static
9+
PROPERTY IMPORTED_LOCATION "${_accesskit_static_lib}"
10+
)
11+
if (_accesskit_os STREQUAL "macos")
12+
set_property(
13+
TARGET accesskit-static
14+
PROPERTY INTERFACE_LINK_DIRECTORIES "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"
15+
)
16+
elseif (_accesskit_os STREQUAL "windows")
17+
set_property(
18+
TARGET accesskit-static
19+
PROPERTY INTERFACE_LINK_LIBRARIES bcrypt uiautomationcore userenv ws2_32
20+
)
2321
endif()
24-
if (NOT _ACCESSKIT_TOOLCHAIN)
25-
set(_ACCESSKIT_TOOLCHAIN "")
22+
23+
add_library(accesskit-shared SHARED IMPORTED GLOBAL)
24+
find_library(_accesskit_implib accesskit "${ACCESSKIT_LIBRARIES_DIR}/shared")
25+
if (_accesskit_os STREQUAL "macos")
26+
set_property(
27+
TARGET accesskit-shared
28+
PROPERTY INTERFACE_LINK_DIRECTORIES "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"
29+
)
30+
elseif (_accesskit_os STREQUAL "windows")
31+
set_property(
32+
TARGET accesskit-shared
33+
PROPERTY IMPORTED_IMPLIB "${_accesskit_implib}"
34+
)
2635
endif()
27-
if (NOT _ACCESSKIT_ARCH)
28-
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(AMD64|amd64|x86_64)$")
29-
set(_ACCESSKIT_ARCH x86_64)
30-
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(ARM64|arm64|aarch64)$")
31-
set(_ACCESSKIT_ARCH arm64)
32-
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(X86|x86|i686)$")
33-
set(_ACCESSKIT_ARCH x86)
34-
endif()
36+
if (_accesskit_os STREQUAL "linux")
37+
set(_accesskit_shared_lib "libaccesskit.so")
38+
elseif (_accesskit_os STREQUAL "macos")
39+
set(_accesskit_shared_lib "libaccesskit.dylib")
40+
elseif (_accesskit_os STREQUAL "windows")
41+
set(_accesskit_shared_lib "accesskit.dll")
42+
endif()
43+
set_property(
44+
TARGET accesskit-shared
45+
PROPERTY IMPORTED_LOCATION "${ACCESSKIT_LIBRARIES_DIR}/shared/${_accesskit_shared_lib}"
46+
)
47+
48+
if (BUILD_SHARED_LIBS)
49+
target_link_libraries(accesskit INTERFACE accesskit-shared)
50+
else()
51+
target_link_libraries(accesskit INTERFACE accesskit-static)
3552
endif()
36-
set(ACCESSKIT_LIBRARIES_DIR "${CMAKE_CURRENT_LIST_DIR}/lib/${_ACCESSKIT_OS}/${_ACCESSKIT_ARCH}/${_ACCESSKIT_TOOLCHAIN}")
37-
find_library(ACCESSKIT_LIBRARIES accesskit ${ACCESSKIT_LIBRARIES_DIR}/static)

bindings/c/accesskit.cmake

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
set(ACCESSKIT_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/include")
2+
set(_accesskit_toolchain "")
3+
4+
if (APPLE)
5+
set(_accesskit_os "macos")
6+
elseif (UNIX)
7+
set(_accesskit_os "linux")
8+
elseif (WIN32)
9+
set(_accesskit_os "windows")
10+
if (MINGW)
11+
set(_accesskit_toolchain "mingw")
12+
else()
13+
set(_accesskit_toolchain "msvc")
14+
endif()
15+
16+
if (CMAKE_VS_PLATFORM_NAME)
17+
string(TOLOWER "${CMAKE_VS_PLATFORM_NAME}" LOWER_VS_PLATFORM_NAME)
18+
if ("${LOWER_VS_PLATFORM_NAME}" STREQUAL "win32")
19+
set(_accesskit_arch x86)
20+
elseif("${LOWER_VS_PLATFORM_NAME}" STREQUAL "x64")
21+
set(_accesskit_arch x86_64)
22+
elseif ("${LOWER_VS_PLATFORM_NAME}" STREQUAL "arm64")
23+
set(_accesskit_arch "arm64")
24+
endif()
25+
endif()
26+
endif()
27+
28+
if (NOT _accesskit_arch)
29+
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(AMD64|amd64|x86_64)$")
30+
set(_accesskit_arch x86_64)
31+
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(ARM64|arm64|aarch64)$")
32+
set(_accesskit_arch arm64)
33+
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(X86|x86|i686)$")
34+
set(_accesskit_arch x86)
35+
endif()
36+
endif()
37+
38+
set(ACCESSKIT_LIBRARIES_DIR "${CMAKE_CURRENT_LIST_DIR}/lib/${_accesskit_os}/${_accesskit_arch}/${_accesskit_toolchain}")

bindings/c/examples/windows/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,5 @@ find_package(ACCESSKIT REQUIRED)
66
include_directories(windows_example ${ACCESSKIT_INCLUDE_DIR})
77

88
add_executable(hello_world hello_world.c)
9-
target_link_libraries(hello_world PUBLIC ${ACCESSKIT_LIBRARIES})
10-
target_link_libraries(hello_world PUBLIC bcrypt uiautomationcore userenv ws2_32)
9+
target_link_libraries(hello_world PUBLIC accesskit)
1110
target_compile_definitions(hello_world PRIVATE -DUNICODE -D_UNICODE)

0 commit comments

Comments
 (0)