xref: /netbsd-src/external/bsd/libfido2/dist/src/CMakeLists.txt (revision b5c47949a45ac972130c38cf13dfd8afb1f09285)
1# Copyright (c) 2018 Yubico AB. All rights reserved.
2# Use of this source code is governed by a BSD-style
3# license that can be found in the LICENSE file.
4
5add_definitions(-D_FIDO_INTERNAL)
6
7list(APPEND FIDO_SOURCES
8	aes256.c
9	assert.c
10	authkey.c
11	bio.c
12	blob.c
13	buf.c
14	cbor.c
15	cred.c
16	credman.c
17	dev.c
18	ecdh.c
19	eddsa.c
20	err.c
21	es256.c
22	hid.c
23	info.c
24	io.c
25	iso7816.c
26	log.c
27	pin.c
28	reset.c
29	rs256.c
30	u2f.c
31)
32
33if(FUZZ)
34	list(APPEND FIDO_SOURCES ../fuzz/prng.c)
35	list(APPEND FIDO_SOURCES ../fuzz/uniform_random.c)
36	list(APPEND FIDO_SOURCES ../fuzz/wrap.c)
37endif()
38
39if(USE_HIDAPI)
40	list(APPEND FIDO_SOURCES hid_hidapi.c)
41elseif(WIN32)
42	list(APPEND FIDO_SOURCES hid_win.c)
43elseif(APPLE)
44	list(APPEND FIDO_SOURCES hid_osx.c)
45elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
46	list(APPEND FIDO_SOURCES hid_linux.c)
47elseif(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
48	list(APPEND FIDO_SOURCES hid_openbsd.c)
49else()
50	message(FATAL_ERROR "please define a hid backend for your platform")
51endif()
52
53if(NOT MSVC)
54	set_source_files_properties(${FIDO_SOURCES} PROPERTIES COMPILE_FLAGS
55	    "-Wconversion -Wsign-conversion")
56endif()
57
58list(APPEND COMPAT_SOURCES
59	../openbsd-compat/bsd-getpagesize.c
60	../openbsd-compat/explicit_bzero.c
61	../openbsd-compat/explicit_bzero_win32.c
62	../openbsd-compat/recallocarray.c
63	../openbsd-compat/strlcat.c
64	../openbsd-compat/timingsafe_bcmp.c
65)
66
67# static library
68add_library(fido2 STATIC ${FIDO_SOURCES} ${COMPAT_SOURCES})
69target_link_libraries(fido2 ${CBOR_LIBRARIES} ${CRYPTO_LIBRARIES}
70	${UDEV_LIBRARIES} ${BASE_LIBRARIES} ${HIDAPI_LIBRARIES})
71if(WIN32)
72	if (MINGW)
73		target_link_libraries(fido2 wsock32 ws2_32 bcrypt setupapi hid)
74	else()
75		target_link_libraries(fido2 wsock32 ws2_32 bcrypt SetupAPI hid)
76		set_target_properties(fido2 PROPERTIES OUTPUT_NAME fido2_static)
77	endif()
78elseif(APPLE)
79	target_link_libraries(fido2 "-framework CoreFoundation"
80		"-framework IOKit")
81endif()
82install(TARGETS fido2 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
83	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
84
85# dynamic library
86add_library(fido2_shared SHARED ${FIDO_SOURCES} ${COMPAT_SOURCES})
87target_link_libraries(fido2_shared ${CBOR_LIBRARIES} ${CRYPTO_LIBRARIES}
88	${UDEV_LIBRARIES} ${BASE_LIBRARIES} ${HIDAPI_LIBRARIES})
89if(WIN32)
90	if (MINGW)
91		target_link_libraries(fido2_shared wsock32 ws2_32 bcrypt
92			setupapi hid)
93	else()
94		target_link_libraries(fido2_shared wsock32 ws2_32 bcrypt
95			SetupAPI hid)
96	endif()
97elseif(APPLE)
98	target_link_libraries(fido2_shared "-framework CoreFoundation"
99		"-framework IOKit")
100endif()
101set_target_properties(fido2_shared PROPERTIES OUTPUT_NAME fido2
102	VERSION ${FIDO_VERSION} SOVERSION ${FIDO_MAJOR})
103install(TARGETS fido2_shared
104	ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
105	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
106	RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR})
107
108install(FILES fido.h DESTINATION include)
109install(DIRECTORY fido DESTINATION include)
110
111if(NOT WIN32)
112	configure_file(libfido2.pc.in libfido2.pc @ONLY)
113	install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libfido2.pc"
114		DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
115endif()
116