xref: /aosp_15_r20/external/libwebsockets/cmake/LwsCheckRequirements.cmake (revision 1c60b9aca93fdbc9b5f19b2d2194c91294b22281)
1*1c60b9acSAndroid Build Coastguard Worker# If we are being built as part of lws, confirm current build config supports
2*1c60b9acSAndroid Build Coastguard Worker# reqconfig, else skip building ourselves.
3*1c60b9acSAndroid Build Coastguard Worker#
4*1c60b9acSAndroid Build Coastguard Worker# If we are being built externally, confirm installed lws was configured to
5*1c60b9acSAndroid Build Coastguard Worker# support reqconfig, else error out with a helpful message about the problem.
6*1c60b9acSAndroid Build Coastguard Worker#
7*1c60b9acSAndroid Build Coastguard Worker
8*1c60b9acSAndroid Build Coastguard Workerinclude(CheckIncludeFile)
9*1c60b9acSAndroid Build Coastguard Worker
10*1c60b9acSAndroid Build Coastguard WorkerMACRO(require_lws_config reqconfig _val result)
11*1c60b9acSAndroid Build Coastguard Worker
12*1c60b9acSAndroid Build Coastguard Worker	if (DEFINED ${reqconfig})
13*1c60b9acSAndroid Build Coastguard Worker	if (${reqconfig})
14*1c60b9acSAndroid Build Coastguard Worker		set (rq 1)
15*1c60b9acSAndroid Build Coastguard Worker	else()
16*1c60b9acSAndroid Build Coastguard Worker		set (rq 0)
17*1c60b9acSAndroid Build Coastguard Worker	endif()
18*1c60b9acSAndroid Build Coastguard Worker	else()
19*1c60b9acSAndroid Build Coastguard Worker		set(rq 0)
20*1c60b9acSAndroid Build Coastguard Worker	endif()
21*1c60b9acSAndroid Build Coastguard Worker
22*1c60b9acSAndroid Build Coastguard Worker	if (${_val} EQUAL ${rq})
23*1c60b9acSAndroid Build Coastguard Worker		set(SAME 1)
24*1c60b9acSAndroid Build Coastguard Worker	else()
25*1c60b9acSAndroid Build Coastguard Worker		set(SAME 0)
26*1c60b9acSAndroid Build Coastguard Worker	endif()
27*1c60b9acSAndroid Build Coastguard Worker
28*1c60b9acSAndroid Build Coastguard Worker	string(COMPARE EQUAL "${result}" requirements _cmp)
29*1c60b9acSAndroid Build Coastguard Worker
30*1c60b9acSAndroid Build Coastguard Worker	# we go in the first clause if in-tree
31*1c60b9acSAndroid Build Coastguard Worker	if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME})
32*1c60b9acSAndroid Build Coastguard Worker		if (${_val})
33*1c60b9acSAndroid Build Coastguard Worker			message("${SAMP}: skipping as lws being built without ${reqconfig}")
34*1c60b9acSAndroid Build Coastguard Worker		else()
35*1c60b9acSAndroid Build Coastguard Worker			message("${SAMP}: skipping as lws built with ${reqconfig}")
36*1c60b9acSAndroid Build Coastguard Worker		endif()
37*1c60b9acSAndroid Build Coastguard Worker		set(${result} 0)
38*1c60b9acSAndroid Build Coastguard Worker	else()
39*1c60b9acSAndroid Build Coastguard Worker		if (LWS_WITH_MINIMAL_EXAMPLES)
40*1c60b9acSAndroid Build Coastguard Worker			set(MET ${SAME})
41*1c60b9acSAndroid Build Coastguard Worker		else()
42*1c60b9acSAndroid Build Coastguard Worker			CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig})
43*1c60b9acSAndroid Build Coastguard Worker			if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig})
44*1c60b9acSAndroid Build Coastguard Worker				set(HAS_${reqconfig} 0)
45*1c60b9acSAndroid Build Coastguard Worker			else()
46*1c60b9acSAndroid Build Coastguard Worker				set(HAS_${reqconfig} 1)
47*1c60b9acSAndroid Build Coastguard Worker			endif()
48*1c60b9acSAndroid Build Coastguard Worker			if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val}))
49*1c60b9acSAndroid Build Coastguard Worker				set(MET 1)
50*1c60b9acSAndroid Build Coastguard Worker			else()
51*1c60b9acSAndroid Build Coastguard Worker				set(MET 0)
52*1c60b9acSAndroid Build Coastguard Worker			endif()
53*1c60b9acSAndroid Build Coastguard Worker		endif()
54*1c60b9acSAndroid Build Coastguard Worker		if (NOT MET AND _cmp)
55*1c60b9acSAndroid Build Coastguard Worker			if (${_val})
56*1c60b9acSAndroid Build Coastguard Worker				message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}")
57*1c60b9acSAndroid Build Coastguard Worker			else()
58*1c60b9acSAndroid Build Coastguard Worker				message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project")
59*1c60b9acSAndroid Build Coastguard Worker			endif()
60*1c60b9acSAndroid Build Coastguard Worker		endif()
61*1c60b9acSAndroid Build Coastguard Worker
62*1c60b9acSAndroid Build Coastguard Worker	endif()
63*1c60b9acSAndroid Build Coastguard WorkerENDMACRO()
64*1c60b9acSAndroid Build Coastguard Worker
65*1c60b9acSAndroid Build Coastguard WorkerMACRO(require_pthreads result)
66*1c60b9acSAndroid Build Coastguard Worker	CHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H)
67*1c60b9acSAndroid Build Coastguard Worker	if (NOT LWS_HAVE_PTHREAD_H)
68*1c60b9acSAndroid Build Coastguard Worker		if (LWS_WITH_MINIMAL_EXAMPLES)
69*1c60b9acSAndroid Build Coastguard Worker			set(${result} 0)
70*1c60b9acSAndroid Build Coastguard Worker			message("${SAMP}: skipping as no pthreads")
71*1c60b9acSAndroid Build Coastguard Worker		else()
72*1c60b9acSAndroid Build Coastguard Worker			message(FATAL_ERROR "threading support requires pthreads")
73*1c60b9acSAndroid Build Coastguard Worker		endif()
74*1c60b9acSAndroid Build Coastguard Worker	else()
75*1c60b9acSAndroid Build Coastguard Worker		if (WIN32)
76*1c60b9acSAndroid Build Coastguard Worker			set(PTHREAD_LIB ${LWS_EXT_PTHREAD_LIBRARIES})
77*1c60b9acSAndroid Build Coastguard Worker		else()
78*1c60b9acSAndroid Build Coastguard Worker			set(PTHREAD_LIB pthread)
79*1c60b9acSAndroid Build Coastguard Worker		endif()
80*1c60b9acSAndroid Build Coastguard Worker	endif()
81*1c60b9acSAndroid Build Coastguard WorkerENDMACRO()
82*1c60b9acSAndroid Build Coastguard Worker
83*1c60b9acSAndroid Build Coastguard WorkerMACRO(sai_resource SR_NAME SR_AMOUNT SR_LEASE SR_SCOPE)
84*1c60b9acSAndroid Build Coastguard Worker	if (DEFINED ENV{SAI_OVN})
85*1c60b9acSAndroid Build Coastguard Worker
86*1c60b9acSAndroid Build Coastguard Worker		site_name(HOST_NAME)
87*1c60b9acSAndroid Build Coastguard Worker
88*1c60b9acSAndroid Build Coastguard Worker		#
89*1c60b9acSAndroid Build Coastguard Worker		# Creates a "test" called res_${SR_SCOPE} that waits to be
90*1c60b9acSAndroid Build Coastguard Worker		# given a lease on ${SR_AMOUNT} of a resource ${SR_NAME}, for at
91*1c60b9acSAndroid Build Coastguard Worker		# most $SR_LEASE seconds, until the test dependent on it can
92*1c60b9acSAndroid Build Coastguard Worker		# proceed.
93*1c60b9acSAndroid Build Coastguard Worker		#
94*1c60b9acSAndroid Build Coastguard Worker		# We need to keep this sai-resource instance up for the
95*1c60b9acSAndroid Build Coastguard Worker		# duration of the actual test it is authorizing, when it
96*1c60b9acSAndroid Build Coastguard Worker		# is killed, the resource is then immediately released.
97*1c60b9acSAndroid Build Coastguard Worker		#
98*1c60b9acSAndroid Build Coastguard Worker		# The resource cookie has to be globally unique within the
99*1c60b9acSAndroid Build Coastguard Worker		# distributed builder sessions, so it includes the builder
100*1c60b9acSAndroid Build Coastguard Worker		# hostname and builder instance information
101*1c60b9acSAndroid Build Coastguard Worker		#
102*1c60b9acSAndroid Build Coastguard Worker
103*1c60b9acSAndroid Build Coastguard Worker		add_test(NAME st_res_${SR_SCOPE} COMMAND
104*1c60b9acSAndroid Build Coastguard Worker			 ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh
105*1c60b9acSAndroid Build Coastguard Worker			 res_${SR_SCOPE}
106*1c60b9acSAndroid Build Coastguard Worker			 sai-resource ${SR_NAME} ${SR_AMOUNT} ${SR_LEASE}
107*1c60b9acSAndroid Build Coastguard Worker			 ${HOST_NAME}-res_${SR_SCOPE}-$ENV{SAI_PROJECT}-$ENV{SAI_OVN})
108*1c60b9acSAndroid Build Coastguard Worker
109*1c60b9acSAndroid Build Coastguard Worker		# allow it to wait for up to 100s for the resource lease
110*1c60b9acSAndroid Build Coastguard Worker
111*1c60b9acSAndroid Build Coastguard Worker		set_tests_properties(st_res_${SR_SCOPE} PROPERTIES
112*1c60b9acSAndroid Build Coastguard Worker				     WORKING_DIRECTORY .
113*1c60b9acSAndroid Build Coastguard Worker				     FIXTURES_SETUP res_sspcmin
114*1c60b9acSAndroid Build Coastguard Worker				     TIMEOUT 100)
115*1c60b9acSAndroid Build Coastguard Worker
116*1c60b9acSAndroid Build Coastguard Worker		add_test(NAME ki_res_${SR_SCOPE} COMMAND
117*1c60b9acSAndroid Build Coastguard Worker			 ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh
118*1c60b9acSAndroid Build Coastguard Worker			 res_${SR_SCOPE} sai-resource )
119*1c60b9acSAndroid Build Coastguard Worker
120*1c60b9acSAndroid Build Coastguard Worker		set_tests_properties(ki_res_${SR_SCOPE} PROPERTIES
121*1c60b9acSAndroid Build Coastguard Worker					FIXTURES_CLEANUP res_${SR_SCOPE})
122*1c60b9acSAndroid Build Coastguard Worker
123*1c60b9acSAndroid Build Coastguard Worker	endif()
124*1c60b9acSAndroid Build Coastguard WorkerENDMACRO()
125*1c60b9acSAndroid Build Coastguard Worker
126