BUILD.gn 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557
  1. import("//Ladybird/compile_qt_resource_file.gni")
  2. import("//Ladybird/enable_appkit.gni")
  3. import("//Ladybird/enable_qt.gni")
  4. import("//Ladybird/link_qt.gni")
  5. import("//Ladybird/moc_qt_objects.gni")
  6. group("Ladybird") {
  7. if (current_os == "mac") {
  8. deps = [ ":Ladybird.app" ]
  9. } else {
  10. deps = [ ":ladybird_executable" ]
  11. }
  12. }
  13. moc_qt_objects("generate_moc") {
  14. sources = [
  15. "Qt/Application.h",
  16. "Qt/AutoComplete.h",
  17. "Qt/BrowserWindow.h",
  18. "Qt/EventLoopImplementationQtEventTarget.h",
  19. "Qt/FindInPageWidget.h",
  20. "Qt/InspectorWidget.h",
  21. "Qt/LocationEdit.h",
  22. "Qt/Settings.h",
  23. "Qt/SettingsDialog.h",
  24. "Qt/Tab.h",
  25. "Qt/TabBar.h",
  26. "Qt/TaskManagerWindow.h",
  27. "Qt/WebContentView.h",
  28. ]
  29. }
  30. compile_qt_resource_file("compile_resource_file") {
  31. sources = [ "Qt/ladybird.qrc" ]
  32. }
  33. link_qt("ladybird_qt_components") {
  34. qt_components = [
  35. "Core",
  36. "Gui",
  37. "Widgets",
  38. "Network",
  39. ]
  40. }
  41. config("ladybird_config") {
  42. include_dirs = [
  43. "//Userland",
  44. "//Userland/Applications",
  45. "//Userland/Services",
  46. ]
  47. }
  48. ladybird_helper_processes = [
  49. "ImageDecoder",
  50. "RequestServer",
  51. "WebContent",
  52. "WebWorker",
  53. ]
  54. executable("ladybird_executable") {
  55. configs += [ ":ladybird_config" ]
  56. data_deps = ladybird_helper_processes
  57. deps = [
  58. "//AK",
  59. "//Userland/Libraries/LibCore",
  60. "//Userland/Libraries/LibFileSystem",
  61. "//Userland/Libraries/LibGfx",
  62. "//Userland/Libraries/LibIPC",
  63. "//Userland/Libraries/LibImageDecoderClient",
  64. "//Userland/Libraries/LibJS",
  65. "//Userland/Libraries/LibMain",
  66. "//Userland/Libraries/LibRequests",
  67. "//Userland/Libraries/LibURL",
  68. "//Userland/Libraries/LibWeb",
  69. "//Userland/Libraries/LibWebView",
  70. ]
  71. sources = [
  72. "HelperProcess.cpp",
  73. "Utilities.cpp",
  74. ]
  75. if (enable_qt) {
  76. configs += [ ":ladybird_qt_components" ]
  77. sources += [
  78. "Qt/Application.cpp",
  79. "Qt/AutoComplete.cpp",
  80. "Qt/BrowserWindow.cpp",
  81. "Qt/EventLoopImplementationQt.cpp",
  82. "Qt/EventLoopImplementationQtEventTarget.cpp",
  83. "Qt/FindInPageWidget.cpp",
  84. "Qt/Icon.cpp",
  85. "Qt/InspectorWidget.cpp",
  86. "Qt/LocationEdit.cpp",
  87. "Qt/Settings.cpp",
  88. "Qt/SettingsDialog.cpp",
  89. "Qt/StringUtils.cpp",
  90. "Qt/TVGIconEngine.cpp",
  91. "Qt/Tab.cpp",
  92. "Qt/TabBar.cpp",
  93. "Qt/TaskManagerWindow.cpp",
  94. "Qt/WebContentView.cpp",
  95. "Qt/main.cpp",
  96. ]
  97. sources += get_target_outputs(":generate_moc") +
  98. get_target_outputs(":compile_resource_file")
  99. deps += [
  100. ":compile_resource_file",
  101. ":generate_moc",
  102. ]
  103. } else if (enable_appkit) {
  104. sources += [
  105. "AppKit/Application/Application.mm",
  106. "AppKit/Application/ApplicationDelegate.mm",
  107. "AppKit/Application/EventLoopImplementation.mm",
  108. "AppKit/UI/Event.mm",
  109. "AppKit/UI/Inspector.mm",
  110. "AppKit/UI/InspectorController.mm",
  111. "AppKit/UI/LadybirdWebView.mm",
  112. "AppKit/UI/LadybirdWebViewBridge.cpp",
  113. "AppKit/UI/Palette.mm",
  114. "AppKit/UI/SearchPanel.mm",
  115. "AppKit/UI/Tab.mm",
  116. "AppKit/UI/TabController.mm",
  117. "AppKit/UI/TaskManager.mm",
  118. "AppKit/UI/TaskManagerController.mm",
  119. "AppKit/Utilities/Conversions.mm",
  120. "AppKit/main.mm",
  121. ]
  122. deps += [ "//Userland/Libraries/LibUnicode" ]
  123. cflags_objcc = [
  124. "-fobjc-arc",
  125. "-Wno-deprecated-anon-enum-enum-conversion", # Required for CGImageCreate
  126. ]
  127. include_dirs = [
  128. "AppKit",
  129. "//Userland",
  130. ]
  131. frameworks = [
  132. "Cocoa.framework",
  133. "UniformTypeIdentifiers.framework",
  134. ]
  135. }
  136. if (current_os == "mac") {
  137. sources += [ "MachPortServer.cpp" ]
  138. deps += [ "//Userland/Libraries/LibThreading" ]
  139. } else {
  140. data_deps += [
  141. ":ladybird_copy_cacert",
  142. ":ladybird_copy_config_resources",
  143. ":ladybird_copy_fonts",
  144. ":ladybird_copy_icons_128x128",
  145. ":ladybird_copy_icons_16x16",
  146. ":ladybird_copy_icons_32x32",
  147. ":ladybird_copy_icons_48x48",
  148. ":ladybird_copy_icons_browser",
  149. ":ladybird_copy_themes",
  150. ":ladybird_copy_web_resources",
  151. ":ladybird_copy_web_templates",
  152. ]
  153. }
  154. output_name = "Ladybird"
  155. }
  156. executable("headless-browser") {
  157. include_dirs = [ "//Userland/Services" ]
  158. configs += [ ":ladybird_config" ]
  159. deps = [
  160. "//AK",
  161. "//Userland/Libraries/LibCore",
  162. "//Userland/Libraries/LibCrypto",
  163. "//Userland/Libraries/LibDiff",
  164. "//Userland/Libraries/LibFileSystem",
  165. "//Userland/Libraries/LibGfx",
  166. "//Userland/Libraries/LibHTTP",
  167. "//Userland/Libraries/LibIPC",
  168. "//Userland/Libraries/LibImageDecoderClient",
  169. "//Userland/Libraries/LibJS",
  170. "//Userland/Libraries/LibMain",
  171. "//Userland/Libraries/LibRequests",
  172. "//Userland/Libraries/LibTLS",
  173. "//Userland/Libraries/LibURL",
  174. "//Userland/Libraries/LibWeb",
  175. "//Userland/Libraries/LibWebSocket",
  176. "//Userland/Libraries/LibWebView",
  177. ]
  178. data_deps = ladybird_helper_processes
  179. sources = [
  180. "//Userland/Utilities/headless-browser.cpp",
  181. "HelperProcess.cpp",
  182. "Utilities.cpp",
  183. ]
  184. }
  185. fonts = [
  186. "//Base/res/fonts/SerenitySans-Regular.ttf",
  187. "//Base/res/fonts/NotoEmoji.ttf",
  188. ]
  189. icons_16x16 = [
  190. "//Base/res/icons/16x16/app-system-monitor.png",
  191. "//Base/res/icons/16x16/audio-volume-high.png",
  192. "//Base/res/icons/16x16/audio-volume-muted.png",
  193. "//Base/res/icons/16x16/close-tab.png",
  194. "//Base/res/icons/16x16/edit-copy.png",
  195. "//Base/res/icons/16x16/filetype-css.png",
  196. "//Base/res/icons/16x16/filetype-folder-open.png",
  197. "//Base/res/icons/16x16/filetype-html.png",
  198. "//Base/res/icons/16x16/filetype-image.png",
  199. "//Base/res/icons/16x16/filetype-sound.png",
  200. "//Base/res/icons/16x16/filetype-video.png",
  201. "//Base/res/icons/16x16/find.png",
  202. "//Base/res/icons/16x16/go-forward.png",
  203. "//Base/res/icons/16x16/history.png",
  204. "//Base/res/icons/16x16/layers.png",
  205. "//Base/res/icons/16x16/layout.png",
  206. "//Base/res/icons/16x16/network.png",
  207. "//Base/res/icons/16x16/new-tab.png",
  208. "//Base/res/icons/16x16/open-parent-directory.png",
  209. "//Base/res/icons/16x16/paste.png",
  210. "//Base/res/icons/16x16/pause.png",
  211. "//Base/res/icons/16x16/play.png",
  212. "//Base/res/icons/16x16/select-all.png",
  213. "//Base/res/icons/16x16/settings.png",
  214. "//Base/res/icons/16x16/spoof.png",
  215. "//Base/res/icons/16x16/trash-can.png",
  216. "//Base/res/icons/16x16/zoom-in.png",
  217. "//Base/res/icons/16x16/zoom-out.png",
  218. "//Base/res/icons/16x16/zoom-reset.png",
  219. ]
  220. icons_32x32 = [
  221. "//Base/res/icons/32x32/app-system-monitor.png",
  222. "//Base/res/icons/32x32/filetype-folder.png",
  223. "//Base/res/icons/32x32/filetype-unknown.png",
  224. "//Base/res/icons/32x32/msgbox-warning.png",
  225. ]
  226. icons_48x48 = [ "//Base/res/icons/48x48/app-browser.png" ]
  227. icons_128x128 = [
  228. "//Base/res/icons/128x128/app-browser.png",
  229. "//Base/res/icons/128x128/app-browser-dark.png",
  230. ]
  231. icons_browser = [
  232. "//Base/res/icons/browser/clear-cache.png",
  233. "//Base/res/icons/browser/cookie.png",
  234. "//Base/res/icons/browser/dom-tree.png",
  235. "//Base/res/icons/browser/local-storage.png",
  236. ]
  237. themes = [
  238. "//Base/res/themes/Default.ini",
  239. "//Base/res/themes/Dark.ini",
  240. ]
  241. web_resources = [
  242. "//Base/res/ladybird/about.html",
  243. "//Base/res/ladybird/inspector.css",
  244. "//Base/res/ladybird/inspector.html",
  245. "//Base/res/ladybird/inspector.js",
  246. "//Base/res/ladybird/newtab.html",
  247. ]
  248. web_templates = [
  249. "//Base/res/ladybird/templates/directory.html",
  250. "//Base/res/ladybird/templates/error.html",
  251. "//Base/res/ladybird/templates/version.html",
  252. ]
  253. cacert = [ "$root_build_dir/cacert.pem" ]
  254. config_resources = [
  255. "//Base/res/ladybird/default-config/BrowserAutoplayAllowlist.txt",
  256. "//Base/res/ladybird/default-config/BrowserContentFilters.txt",
  257. "//Base/res/ladybird/default-config/bookmarks.json",
  258. ]
  259. if (current_os != "mac") {
  260. copy("ladybird_copy_fonts") {
  261. sources = fonts
  262. outputs = [ "$root_out_dir/share/Lagom/fonts/{{source_file_part}}" ]
  263. }
  264. copy("ladybird_copy_icons_16x16") {
  265. sources = icons_16x16
  266. outputs = [ "$root_out_dir/share/Lagom/icons/16x16/{{source_file_part}}" ]
  267. }
  268. copy("ladybird_copy_icons_32x32") {
  269. sources = icons_32x32
  270. outputs = [ "$root_out_dir/share/Lagom/icons/32x32/{{source_file_part}}" ]
  271. }
  272. copy("ladybird_copy_icons_48x48") {
  273. sources = icons_48x48
  274. outputs = [ "$root_out_dir/share/Lagom/icons/48x48/{{source_file_part}}" ]
  275. }
  276. copy("ladybird_copy_icons_128x128") {
  277. sources = icons_128x128
  278. outputs = [ "$root_out_dir/share/Lagom/icons/128x128/{{source_file_part}}" ]
  279. }
  280. copy("ladybird_copy_icons_browser") {
  281. sources = icons_browser
  282. outputs = [ "$root_out_dir/share/Lagom/icons/browser/{{source_file_part}}" ]
  283. }
  284. copy("ladybird_copy_themes") {
  285. sources = themes
  286. outputs = [ "$root_out_dir/share/Lagom/themes/{{source_file_part}}" ]
  287. }
  288. copy("ladybird_copy_web_resources") {
  289. sources = web_resources
  290. outputs = [ "$root_out_dir/share/Lagom/ladybird/{{source_file_part}}" ]
  291. }
  292. copy("ladybird_copy_web_templates") {
  293. sources = web_templates
  294. outputs =
  295. [ "$root_out_dir/share/Lagom/ladybird/templates/{{source_file_part}}" ]
  296. }
  297. copy("ladybird_copy_cacert") {
  298. public_deps = [ "//Userland/Libraries/LibTLS:ca_certificates_download" ]
  299. sources = cacert
  300. outputs = [ "$root_out_dir/share/Lagom/ladybird/{{source_file_part}}" ]
  301. }
  302. copy("ladybird_copy_config_resources") {
  303. sources = config_resources
  304. outputs = [
  305. "$root_out_dir/share/Lagom/ladybird/default-config/{{source_file_part}}",
  306. ]
  307. }
  308. } else {
  309. # macOS bundle steps
  310. bundle_data("ladybird_bundle_info_plist") {
  311. sources = [ "Info.plist" ]
  312. outputs = [ "{{bundle_contents_dir}}/Info.plist" ]
  313. }
  314. bundle_data("ladybird_bundle_executables") {
  315. public_deps = [
  316. ":headless-browser",
  317. ":ladybird_executable",
  318. "ImageDecoder",
  319. "RequestServer",
  320. "WebContent",
  321. "WebDriver",
  322. "WebWorker",
  323. ]
  324. sources = [
  325. "$root_out_dir/bin/Ladybird",
  326. "$root_out_dir/bin/WebDriver",
  327. "$root_out_dir/bin/headless-browser",
  328. "$root_out_dir/libexec/ImageDecoder",
  329. "$root_out_dir/libexec/RequestServer",
  330. "$root_out_dir/libexec/WebContent",
  331. "$root_out_dir/libexec/WebWorker",
  332. ]
  333. outputs = [ "{{bundle_executable_dir}}/{{source_file_part}}" ]
  334. }
  335. bundle_data("ladybird_bundle_libs") {
  336. public_deps = [
  337. "//AK",
  338. "//Userland/Libraries/LibCompress",
  339. "//Userland/Libraries/LibCore",
  340. "//Userland/Libraries/LibCrypto",
  341. "//Userland/Libraries/LibDiff",
  342. "//Userland/Libraries/LibFileSystem",
  343. "//Userland/Libraries/LibGfx",
  344. "//Userland/Libraries/LibHTTP",
  345. "//Userland/Libraries/LibIDL",
  346. "//Userland/Libraries/LibIPC",
  347. "//Userland/Libraries/LibImageDecoderClient",
  348. "//Userland/Libraries/LibJS",
  349. "//Userland/Libraries/LibLine",
  350. "//Userland/Libraries/LibMedia",
  351. "//Userland/Libraries/LibRIFF",
  352. "//Userland/Libraries/LibRegex",
  353. "//Userland/Libraries/LibRequests",
  354. "//Userland/Libraries/LibSyntax",
  355. "//Userland/Libraries/LibTLS",
  356. "//Userland/Libraries/LibTextCodec",
  357. "//Userland/Libraries/LibThreading",
  358. "//Userland/Libraries/LibURL",
  359. "//Userland/Libraries/LibWasm",
  360. "//Userland/Libraries/LibWeb",
  361. "//Userland/Libraries/LibWebSocket",
  362. "//Userland/Libraries/LibWebView",
  363. "//Userland/Libraries/LibXML",
  364. ]
  365. sources = [
  366. "$root_out_dir/lib/liblagom-ak.dylib",
  367. "$root_out_dir/lib/liblagom-compress.dylib",
  368. "$root_out_dir/lib/liblagom-core-minimal.dylib",
  369. "$root_out_dir/lib/liblagom-core.dylib",
  370. "$root_out_dir/lib/liblagom-crypto.dylib",
  371. "$root_out_dir/lib/liblagom-diff.dylib",
  372. "$root_out_dir/lib/liblagom-filesystem.dylib",
  373. "$root_out_dir/lib/liblagom-gfx.dylib",
  374. "$root_out_dir/lib/liblagom-http.dylib",
  375. "$root_out_dir/lib/liblagom-idl.dylib",
  376. "$root_out_dir/lib/liblagom-imagedecoderclient.dylib",
  377. "$root_out_dir/lib/liblagom-ipc.dylib",
  378. "$root_out_dir/lib/liblagom-js.dylib",
  379. "$root_out_dir/lib/liblagom-line.dylib",
  380. "$root_out_dir/lib/liblagom-media.dylib",
  381. "$root_out_dir/lib/liblagom-regex.dylib",
  382. "$root_out_dir/lib/liblagom-requests.dylib",
  383. "$root_out_dir/lib/liblagom-riff.dylib",
  384. "$root_out_dir/lib/liblagom-syntax.dylib",
  385. "$root_out_dir/lib/liblagom-textcodec.dylib",
  386. "$root_out_dir/lib/liblagom-threading.dylib",
  387. "$root_out_dir/lib/liblagom-tls.dylib",
  388. "$root_out_dir/lib/liblagom-url.dylib",
  389. "$root_out_dir/lib/liblagom-wasm.dylib",
  390. "$root_out_dir/lib/liblagom-web.dylib",
  391. "$root_out_dir/lib/liblagom-websocket.dylib",
  392. "$root_out_dir/lib/liblagom-webview.dylib",
  393. "$root_out_dir/lib/liblagom-xml.dylib",
  394. ]
  395. outputs = [ "{{bundle_contents_dir}}/lib/{{source_file_part}}" ]
  396. }
  397. bundle_data("ladybird_fonts") {
  398. sources = fonts
  399. outputs = [ "{{bundle_resources_dir}}/fonts/{{source_file_part}}" ]
  400. }
  401. bundle_data("ladybird_icons_16x16") {
  402. sources = icons_16x16
  403. outputs = [ "{{bundle_resources_dir}}/icons/16x16/{{source_file_part}}" ]
  404. }
  405. bundle_data("ladybird_icons_32x32") {
  406. sources = icons_32x32
  407. outputs = [ "{{bundle_resources_dir}}/icons/32x32/{{source_file_part}}" ]
  408. }
  409. bundle_data("ladybird_icons_48x48") {
  410. sources = icons_48x48
  411. outputs = [ "{{bundle_resources_dir}}/icons/48x48/{{source_file_part}}" ]
  412. }
  413. bundle_data("ladybird_icons_128x128") {
  414. sources = icons_128x128
  415. outputs = [ "{{bundle_resources_dir}}/icons/128x128/{{source_file_part}}" ]
  416. }
  417. bundle_data("ladybird_icons_browser") {
  418. sources = icons_browser
  419. outputs = [ "{{bundle_resources_dir}}/icons/browser/{{source_file_part}}" ]
  420. }
  421. bundle_data("ladybird_themes") {
  422. sources = themes
  423. outputs = [ "{{bundle_resources_dir}}/themes/{{source_file_part}}" ]
  424. }
  425. bundle_data("ladybird_web_resources") {
  426. sources = web_resources
  427. outputs = [ "{{bundle_resources_dir}}/ladybird/{{source_file_part}}" ]
  428. }
  429. bundle_data("ladybird_web_templates") {
  430. sources = web_templates
  431. outputs =
  432. [ "{{bundle_resources_dir}}/ladybird/templates/{{source_file_part}}" ]
  433. }
  434. bundle_data("ladybird_cacert") {
  435. public_deps = [ "//Userland/Libraries/LibTLS:ca_certificates_download" ]
  436. sources = cacert
  437. outputs = [ "{{bundle_resources_dir}}/ladybird/{{source_file_part}}" ]
  438. }
  439. bundle_data("ladybird_config_resources") {
  440. sources = config_resources
  441. outputs = [
  442. "{{bundle_resources_dir}}/ladybird/default-config/{{source_file_part}}",
  443. ]
  444. }
  445. action("ladybird_create_icon") {
  446. script = "//Meta/gn/build/invoke_process_with_args.py"
  447. icon_path = "//Ladybird/Icons/macos/app_icon.iconset"
  448. sources = [
  449. "$icon_path/icon_128x128.png",
  450. "$icon_path/icon_128x128@2x.png",
  451. "$icon_path/icon_16x16.png",
  452. "$icon_path/icon_16x16@2x.png",
  453. "$icon_path/icon_256x256.png",
  454. "$icon_path/icon_256x256@2x.png",
  455. "$icon_path/icon_32x32.png",
  456. "$icon_path/icon_32x32@2x.png",
  457. "$icon_path/icon_512x512.png",
  458. "$icon_path/icon_512x512@2x.png",
  459. ]
  460. outputs = [ "$target_gen_dir/app_icon.icns" ]
  461. args = [
  462. "iconutil",
  463. "--convert",
  464. "icns",
  465. rebase_path(icon_path, root_build_dir),
  466. "--output",
  467. rebase_path(outputs[0], root_build_dir),
  468. ]
  469. }
  470. bundle_data("ladybird_icon") {
  471. public_deps = [ ":ladybird_create_icon" ]
  472. sources = get_target_outputs(public_deps[0])
  473. outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
  474. }
  475. create_bundle("Ladybird.app") {
  476. product_type = "com.apple.product-type.application"
  477. bundle_root_dir = "$root_build_dir/$target_name"
  478. bundle_contents_dir = "$bundle_root_dir/Contents"
  479. bundle_resources_dir = "$bundle_contents_dir/Resources"
  480. bundle_executable_dir = "$bundle_contents_dir/MacOS"
  481. deps = [
  482. ":ladybird_bundle_executables",
  483. ":ladybird_bundle_info_plist",
  484. ":ladybird_bundle_libs",
  485. ":ladybird_cacert",
  486. ":ladybird_config_resources",
  487. ":ladybird_fonts",
  488. ":ladybird_icon",
  489. ":ladybird_icons_128x128",
  490. ":ladybird_icons_16x16",
  491. ":ladybird_icons_32x32",
  492. ":ladybird_icons_48x48",
  493. ":ladybird_icons_browser",
  494. ":ladybird_themes",
  495. ":ladybird_web_resources",
  496. ":ladybird_web_templates",
  497. ]
  498. }
  499. }