Makefile 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. # SPDX-License-Identifier: GPL-3.0-only
  2. #
  3. # Copyright (C) 2021 ImmortalWrt.org
  4. include $(TOPDIR)/rules.mk
  5. PKG_NAME:=naiveproxy
  6. PKG_VERSION:=106.0.5249.91-2
  7. PKG_RELEASE:=2
  8. PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
  9. PKG_SOURCE_URL:=https://codeload.github.com/klzgrad/naiveproxy/tar.gz/v$(PKG_VERSION)?
  10. PKG_HASH:=beecb60b13b30e6e9fedba33604ae1e578fd56ba792f30c61179f0f02a3a9b44
  11. PKG_LICENSE:=BSD 3-Clause
  12. PKG_LICENSE_FILES:=LICENSE
  13. PKG_MAINTAINER:=Tianling Shen <[email protected]>
  14. ifneq ($(wildcard $(TOPDIR)/feeds/packages/devel/ninja/ninja.mk),)
  15. PKG_BUILD_DEPENDS+= ninja/host
  16. endif
  17. PKG_USE_MIPS16:=0
  18. PKG_BUILD_PARALLEL:=1
  19. ifneq ($(CONFIG_CPU_TYPE)," ")
  20. CPU_TYPE:=$(word 1, $(subst +," ,$(CONFIG_CPU_TYPE)))
  21. CPU_SUBTYPE:=$(word 2, $(subst +, ",$(CONFIG_CPU_TYPE)))
  22. ifeq ($(CPU_SUBTYPE),)
  23. CPU_SUBTYPE:=""
  24. endif
  25. else
  26. CPU_TYPE:=""
  27. CPU_SUBTYPE:=""
  28. endif
  29. include $(INCLUDE_DIR)/package.mk
  30. define Package/naiveproxy/Default
  31. URL:=https://github.com/klzgrad/naiveproxy
  32. DEPENDS:=@!(arc||armeb||mips||mips64||powerpc||TARGET_gemini) +libatomic
  33. endef
  34. define Package/naiveproxy
  35. $(call Package/naiveproxy/Default)
  36. SECTION:=net
  37. CATEGORY:=Network
  38. SUBMENU:=Web Servers/Proxies
  39. TITLE:=Make a fortune quietly
  40. endef
  41. define Package/libcronet
  42. $(call Package/naiveproxy/Default)
  43. SECTION:=libs
  44. CATEGORY:=Libraries
  45. TITLE:=The Chromium network stack library
  46. endef
  47. define Package/naiveproxy/description
  48. NaïveProxy uses Chrome's network stack to camouflage traffic with strong
  49. censorship resistance and low detectability. Reusing Chrome's stack also
  50. ensures best practices in performance and security.
  51. endef
  52. define Package/libcronet/description
  53. Cronet is the Chromium network stack made available to Android apps as a library.
  54. Cronet takes advantage of multiple technologies that reduce the latency and
  55. increase the throughput of the network requests that your app needs to work.
  56. endef
  57. ifneq ($(CONFIG_CCACHE),)
  58. export CCACHE_SLOPPINESS=time_macros
  59. export CCACHE_BASEDIR=$(PKG_BUILD_DIR)/src
  60. export CCACHE_CPP2=yes
  61. export naive_ccache_flags=cc_wrapper="$(CCACHE)"
  62. endif
  63. CLANG_VER:=16-init-907-g8b740747-1
  64. CLANG_FILE:=clang-llvmorg-$(CLANG_VER).tgz
  65. define Download/CLANG
  66. URL:=https://commondatastorage.googleapis.com/chromium-browser-clang/Linux_x64
  67. URL_FILE:=$(CLANG_FILE)
  68. FILE:=$(CLANG_FILE)
  69. HASH:=fc874a199fcb217e246c70a8280f959ad1bfed5de27ab25877421e8588237194
  70. endef
  71. GN_VER:=0bcd37bd2b83f1a9ee17088037ebdfe6eab6d31a
  72. GN_FILE:=gn-git_revision-$(GN_VER).zip
  73. define Download/GN_TOOL
  74. URL:=https://chrome-infra-packages.appspot.com/dl/gn/gn/linux-amd64/+
  75. URL_FILE:=git_revision:$(GN_VER)
  76. FILE:=$(GN_FILE)
  77. HASH:=b8bd7e136e3fefe8be27b60f8492a0c7648337a7796b538d310c0dbd0b36a82f
  78. endef
  79. PGO_VER:=5249-1664382991-4c3563c0a634429d8d381274051e58611ae6cfe3
  80. PGO_FILE:=chrome-linux-$(PGO_VER).profdata
  81. define Download/PGO_PROF
  82. URL:=https://storage.googleapis.com/chromium-optimization-profiles/pgo_profiles
  83. URL_FILE:=$(PGO_FILE)
  84. FILE:=$(PGO_FILE)
  85. HASH:=91cca2a7922040625c4fdb18db6035a2ffbf59b737bd1706966f1e4da06b468d
  86. endef
  87. define Build/Prepare
  88. $(call Build/Prepare/Default)
  89. ( \
  90. cd $(PKG_BUILD_DIR)/src ; \
  91. mkdir -p "chrome/build/pgo_profiles" ; \
  92. $(CP) "$(DL_DIR)/$(PGO_FILE)" "chrome/build/pgo_profiles" ; \
  93. mkdir -p "third_party/llvm-build/Release+Asserts" ; \
  94. $(TAR) -xzf "$(DL_DIR)/$(CLANG_FILE)" -C "third_party/llvm-build/Release+Asserts" ; \
  95. mkdir -p "gn/out" ; \
  96. unzip -o "$(DL_DIR)/$(GN_FILE)" -d "gn/out" ; \
  97. )
  98. endef
  99. define Build/Configure
  100. ( \
  101. pushd "$(PKG_BUILD_DIR)/src" ; \
  102. . ../init_env.sh "$(ARCH)" $(CPU_TYPE) $(CPU_SUBTYPE) "$(TOOLCHAIN_DIR)" ; \
  103. export naive_flags+=" $$$${naive_ccache_flags}" ; \
  104. mkdir -p "out" ; \
  105. ./gn/out/gn gen "out/Release" --args="$$$${naive_flags}" --script-executable="python3" ; \
  106. popd ; \
  107. )
  108. endef
  109. define Build/Compile
  110. $(if $(CONFIG_PACKAGE_naiveproxy), \
  111. ninja -C "$(PKG_BUILD_DIR)/src/out/Release" naive)
  112. $(if $(CONFIG_PACKAGE_libcronet), \
  113. ninja -C "$(PKG_BUILD_DIR)/src/out/Release" cronet)
  114. endef
  115. define Build/InstallDev
  116. $(INSTALL_DIR) $(1)/usr/include/libcronet
  117. $(CP) \
  118. $(PKG_BUILD_DIR)/src/components/grpc_support/include/bidirectional_stream_c.h \
  119. $(PKG_BUILD_DIR)/src/components/cronet/native/generated/cronet.idl_c.h \
  120. $(PKG_BUILD_DIR)/src/components/cronet/native/include/cronet_c.h \
  121. $(PKG_BUILD_DIR)/src/components/cronet/native/include/cronet_export.h \
  122. $(1)/usr/include/libcronet/
  123. endef
  124. define Package/naiveproxy/install
  125. $(INSTALL_DIR) $(1)/usr/bin
  126. $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/out/Release/naive $(1)/usr/bin/naive
  127. endef
  128. define Package/libcronet/install
  129. $(INSTALL_DIR) $(1)/usr/lib
  130. $(CP) $(PKG_BUILD_DIR)/src/out/Release/libcronet.so $(1)/usr/lib/
  131. endef
  132. $(eval $(call Download,CLANG))
  133. $(eval $(call Download,GN_TOOL))
  134. $(eval $(call Download,PGO_PROF))
  135. $(eval $(call BuildPackage,naiveproxy))
  136. $(eval $(call BuildPackage,libcronet))