CMakeLists.txt 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  2. set(NCD_ADDITIONAL_SOURCES)
  3. set(NCD_ADDITIONAL_LIBS)
  4. if (NOT EMSCRIPTEN)
  5. if (BADVPN_USE_LINUX_RFKILL)
  6. list(APPEND NCD_ADDITIONAL_SOURCES
  7. extra/NCDRfkillMonitor.c
  8. modules/net_backend_rfkill.c
  9. )
  10. endif ()
  11. if (BADVPN_USE_LINUX_INPUT)
  12. list(APPEND NCD_ADDITIONAL_SOURCES
  13. modules/sys_evdev.c
  14. )
  15. endif ()
  16. if (BADVPN_USE_INOTIFY)
  17. list(APPEND NCD_ADDITIONAL_SOURCES
  18. modules/sys_watch_directory.c
  19. )
  20. endif ()
  21. add_library(ncdinterfacemonitor
  22. extra/NCDInterfaceMonitor.c
  23. )
  24. target_link_libraries(ncdinterfacemonitor base system)
  25. add_library(ncdrequest
  26. extra/NCDRequestClient.c
  27. )
  28. target_link_libraries(ncdrequest base system ncdvalgenerator ncdvalparser)
  29. list(APPEND NCD_ADDITIONAL_SOURCES
  30. extra/NCDIfConfig.c
  31. extra/build_cmdline.c
  32. modules/command_template.c
  33. modules/event_template.c
  34. modules/regex_match.c
  35. modules/run.c
  36. modules/runonce.c
  37. modules/daemon.c
  38. modules/net_backend_waitdevice.c
  39. modules/net_backend_waitlink.c
  40. modules/net_backend_badvpn.c
  41. modules/net_backend_wpa_supplicant.c
  42. modules/net_up.c
  43. modules/net_dns.c
  44. modules/net_iptables.c
  45. modules/net_ipv4_addr.c
  46. modules/net_ipv4_route.c
  47. modules/net_ipv4_dhcp.c
  48. modules/net_ipv4_arp_probe.c
  49. modules/net_watch_interfaces.c
  50. modules/sys_watch_input.c
  51. modules/sys_watch_usb.c
  52. modules/sys_request_server.c
  53. modules/net_ipv6_wait_dynamic_addr.c
  54. modules/sys_request_client.c
  55. modules/reboot.c
  56. modules/net_ipv6_addr.c
  57. modules/net_ipv6_route.c
  58. modules/socket.c
  59. modules/sys_start_process.c
  60. )
  61. list(APPEND NCD_ADDITIONAL_LIBS
  62. dhcpclient arpprobe ncdinterfacemonitor ncdrequest udevmonitor badvpn_random
  63. )
  64. endif ()
  65. add_library(ncdtokenizer
  66. NCDConfigTokenizer.c
  67. )
  68. target_link_libraries(ncdtokenizer base)
  69. add_library(ncdstringindex
  70. NCDStringIndex.c
  71. )
  72. add_library(ncdreftarget
  73. NCDRefTarget.c
  74. )
  75. target_link_libraries(ncdreftarget base)
  76. add_library(ncdval
  77. NCDVal.c
  78. )
  79. target_link_libraries(ncdval base ncdstringindex ncdreftarget)
  80. add_library(ncdvalgenerator
  81. NCDValGenerator.c
  82. )
  83. target_link_libraries(ncdvalgenerator base ncdval)
  84. add_library(ncdvalparser
  85. NCDValParser.c
  86. )
  87. target_link_libraries(ncdvalparser base ncdval ncdtokenizer ncdvalcons)
  88. add_library(ncdast
  89. NCDAst.c
  90. )
  91. add_library(ncdconfigparser
  92. NCDConfigParser.c
  93. )
  94. target_link_libraries(ncdconfigparser base ncdtokenizer ncdast)
  95. add_library(ncdsugar
  96. NCDSugar.c
  97. )
  98. target_link_libraries(ncdsugar ncdast)
  99. add_library(ncdvalcons
  100. NCDValCons.c
  101. )
  102. target_link_libraries(ncdvalcons ncdval)
  103. add_library(ncdbuildprogram
  104. NCDBuildProgram.c
  105. )
  106. target_link_libraries(ncdbuildprogram base ncdast ncdconfigparser)
  107. add_library(ncdinterpreter
  108. NCDInterpreter.c
  109. NCDModule.c
  110. NCDModuleIndex.c
  111. NCDObject.c
  112. NCDInterpProcess.c
  113. NCDInterpProg.c
  114. NCDPlaceholderDb.c
  115. NCDMethodIndex.c
  116. extra/BEventLock.c
  117. extra/NCDBuf.c
  118. modules/var.c
  119. modules/list.c
  120. modules/depend.c
  121. modules/multidepend.c
  122. modules/dynamic_depend.c
  123. modules/concat.c
  124. modules/if.c
  125. modules/strcmp.c
  126. modules/logical.c
  127. modules/sleep.c
  128. modules/print.c
  129. modules/blocker.c
  130. modules/spawn.c
  131. modules/imperative.c
  132. modules/ref.c
  133. modules/index.c
  134. modules/alias.c
  135. modules/process_manager.c
  136. modules/ondemand.c
  137. modules/foreach.c
  138. modules/choose.c
  139. modules/from_string.c
  140. modules/to_string.c
  141. modules/value.c
  142. modules/try.c
  143. modules/exit.c
  144. modules/getargs.c
  145. modules/arithmetic.c
  146. modules/parse.c
  147. modules/valuemetic.c
  148. modules/file.c
  149. modules/netmask.c
  150. modules/implode.c
  151. modules/call2.c
  152. modules/assert.c
  153. modules/explode.c
  154. modules/net_ipv4_addr_in_network.c
  155. modules/net_ipv6_addr_in_network.c
  156. modules/timer.c
  157. modules/file_open.c
  158. modules/backtrack.c
  159. modules/depend_scope.c
  160. modules/substr.c
  161. modules/log.c
  162. modules/buffer.c
  163. ${NCD_ADDITIONAL_SOURCES}
  164. )
  165. target_link_libraries(ncdinterpreter
  166. system flow flowextra ncdval ncdstringindex ncdvalgenerator ncdvalparser
  167. ncdconfigparser ncdsugar ${NCD_ADDITIONAL_LIBS}
  168. )
  169. if (BADVPN_USE_LINUX_INPUT)
  170. string(REPLACE " " ";" FLAGS_LIST "${CMAKE_C_FLAGS}")
  171. execute_process(COMMAND ${CMAKE_C_COMPILER} ${FLAGS_LIST} -E ${CMAKE_CURRENT_SOURCE_DIR}/include_linux_input.c
  172. RESULT_VARIABLE LINUX_INPUT_PREPROCESS_RESULT
  173. OUTPUT_VARIABLE LINUX_INPUT_PREPROCESS_OUTPUT)
  174. if (NOT LINUX_INPUT_PREPROCESS_RESULT EQUAL 0)
  175. message(FATAL_ERROR "failed to preprocess linux/input.h include")
  176. endif ()
  177. string(REGEX MATCH "\"(/[^\"]+/linux/input.h)\"" LINUX_INPUT_MATCH ${LINUX_INPUT_PREPROCESS_OUTPUT})
  178. if (NOT LINUX_INPUT_MATCH)
  179. message(FATAL_ERROR "failed to match preprocessor output for path of linux/input.h")
  180. endif ()
  181. set(LINUX_INPUT_H_PATH ${CMAKE_MATCH_1})
  182. message(STATUS "Generating linux_input_names.h from ${LINUX_INPUT_H_PATH}")
  183. execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/parse_linux_input.sh
  184. ${LINUX_INPUT_H_PATH}
  185. ${CMAKE_CURRENT_BINARY_DIR}/linux_input_names.h
  186. RESULT_VARIABLE LINUX_INPUT_PARSE_RESULT)
  187. if (NOT LINUX_INPUT_PARSE_RESULT EQUAL 0)
  188. message(FATAL_ERROR "failed to generate linux_input_names.h")
  189. endif ()
  190. endif ()
  191. if (NOT EMSCRIPTEN)
  192. add_executable(badvpn-ncd ncd.c)
  193. target_link_libraries(badvpn-ncd ncdinterpreter ncdbuildprogram)
  194. install(
  195. TARGETS badvpn-ncd
  196. RUNTIME DESTINATION bin
  197. )
  198. endif ()
  199. if (EMSCRIPTEN)
  200. add_executable(emncd emncd.c)
  201. target_link_libraries(emncd ncdinterpreter)
  202. add_custom_command(
  203. OUTPUT emncd.bc
  204. DEPENDS emncd
  205. COMMAND cp emncd emncd.bc
  206. )
  207. add_custom_command(
  208. OUTPUT emncd.js
  209. DEPENDS emncd.bc
  210. COMMAND
  211. ${CMAKE_C_COMPILER} emncd.bc -o emncd.js -O2
  212. -s EXPORTED_FUNCTIONS=\"['_breactor_timer_cb','_main','_emncd_start','_emncd_stop']\"
  213. )
  214. add_custom_target(emncd_js ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/emncd.js)
  215. endif ()