diff --git a/openwrt-21.02/patches/node/010-execvp-arg-list-too-long.patch b/openwrt-21.02/patches/node/010-execvp-arg-list-too-long.patch new file mode 100644 index 0000000..c0390c7 --- /dev/null +++ b/openwrt-21.02/patches/node/010-execvp-arg-list-too-long.patch @@ -0,0 +1,208 @@ +--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py ++++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py +@@ -151,6 +151,32 @@ cmd_alink_thin = rm -f $@ && $(AR.$(TOOL + quiet_cmd_link = LINK($(TOOLSET)) $@ + cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) $(LIBS) -Wl,--end-group + ++define xargs ++ $(1) $(wordlist 1,100,$(2)) ++ $(if $(word 101,$(2)),$(call xargs,$(1),$(wordlist 101,$(words $(2)),$(2)))) ++endef ++ ++define write-to-file ++ @echo >$(1) ++ $(call xargs,printf "%s\\n" >>$(1),$(2)) ++endef ++ ++OBJ_FILE_LIST_SFX := ar-file-list ++ ++define create_archive ++ $(eval OBJ_FILE_LIST := $(basename $(notdir $(1))).$(OBJ_FILE_LIST_SFX)) ++ rm -f $(1) $(1).$(OBJ_FILE_LIST); mkdir -p `dirname $(1)` ++ $(call write-to-file,$(1).$(OBJ_FILE_LIST),$(filter %.o,$(2))) ++ $(AR.$(TOOLSET)) crs $(1) @$(1).$(OBJ_FILE_LIST) ++endef ++ ++define create_thin_archive ++ $(eval OBJ_FILE_LIST := $(basename $(notdir $(1))).$(OBJ_FILE_LIST_SFX)) ++ rm -f $(1) $(OBJ_FILE_LIST); mkdir -p `dirname $(1)` ++ $(call write-to-file,$(1).$(OBJ_FILE_LIST),$(filter %.o,$(2))) ++ $(AR.$(TOOLSET)) crsT $(1) @$(1).$(OBJ_FILE_LIST) ++endef ++ + # We support two kinds of shared objects (.so): + # 1) shared_library, which is just bundling together many dependent libraries + # into a link line. +@@ -195,6 +221,32 @@ cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) + quiet_cmd_alink_thin = AR($(TOOLSET)) $@ + cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^) + ++define xargs ++ $(1) $(wordlist 1,100,$(2)) ++ $(if $(word 101,$(2)),$(call xargs,$(1),$(wordlist 101,$(words $(2)),$(2)))) ++endef ++ ++define write-to-file ++ @echo >$(1) ++ $(call xargs,printf "%s\\n" >>$(1),$(2)) ++endef ++ ++OBJ_FILE_LIST_SFX := ar-file-list ++ ++define create_archive ++ $(eval OBJ_FILE_LIST := $(basename $(notdir $(1))).$(OBJ_FILE_LIST_SFX)) ++ rm -f $(1) $(1).$(OBJ_FILE_LIST); mkdir -p `dirname $(1)` ++ $(call write-to-file,$(1).$(OBJ_FILE_LIST),$(filter %.o,$(2))) ++ $(AR.$(TOOLSET)) crs $(1) @$(1).$(OBJ_FILE_LIST) ++endef ++ ++define create_thin_archive ++ $(eval OBJ_FILE_LIST := $(basename $(notdir $(1))).$(OBJ_FILE_LIST_SFX)) ++ rm -f $(1) $(OBJ_FILE_LIST); mkdir -p `dirname $(1)` ++ $(call write-to-file,$(1).$(OBJ_FILE_LIST),$(filter %.o,$(2))) ++ $(AR.$(TOOLSET)) crsT $(1) @$(1).$(OBJ_FILE_LIST) ++endef ++ + # Due to circular dependencies between libraries :(, we wrap the + # special "figure out circular dependencies" flags around the entire + # input list during linking. +@@ -1612,11 +1664,17 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj) + "Spaces in alink input filenames not supported (%s)" % link_dep) + if (self.flavor not in ('mac', 'openbsd', 'netbsd', 'win') and not + self.is_standalone_static_library): +- self.WriteDoCmd([self.output_binary], link_deps, 'alink_thin', +- part_of_all, postbuilds=postbuilds) ++ if self.flavor in ('linux', 'android'): ++ self.WriteMakeRule([self.output_binary], link_deps, actions = ['$(call create_thin_archive,$@,$^)']) ++ else: ++ self.WriteDoCmd([self.output_binary], link_deps, 'alink_thin', ++ part_of_all, postbuilds=postbuilds) + else: +- self.WriteDoCmd([self.output_binary], link_deps, 'alink', part_of_all, +- postbuilds=postbuilds) ++ if self.flavor in ('linux', 'android'): ++ self.WriteMakeRule([self.output_binary], link_deps, actions = ['$(call create_archive,$@,$^)']) ++ else: ++ self.WriteDoCmd([self.output_binary], link_deps, 'alink', part_of_all, ++ postbuilds=postbuilds) + elif self.type == 'shared_library': + self.WriteLn('%s: LD_INPUTS := %s' % ( + QuoteSpaces(self.output_binary), +--- a/tools/gyp/pylib/gyp/generator/make.py ++++ b/tools/gyp/pylib/gyp/generator/make.py +@@ -155,6 +155,32 @@ cmd_alink_thin = rm -f $@ && $(AR.$(TOOL + quiet_cmd_link = LINK($(TOOLSET)) $@ + cmd_link = $(LINK.$(TOOLSET)) -o $@ $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,--start-group $(LD_INPUTS) $(LIBS) -Wl,--end-group + ++define xargs ++ $(1) $(wordlist 1,100,$(2)) ++ $(if $(word 101,$(2)),$(call xargs,$(1),$(wordlist 101,$(words $(2)),$(2)))) ++endef ++ ++define write-to-file ++ @echo >$(1) ++ $(call xargs,printf "%s\\n" >>$(1),$(2)) ++endef ++ ++OBJ_FILE_LIST_SFX := ar-file-list ++ ++define create_archive ++ $(eval OBJ_FILE_LIST := $(basename $(notdir $(1))).$(OBJ_FILE_LIST_SFX)) ++ rm -f $(1) $(1).$(OBJ_FILE_LIST); mkdir -p `dirname $(1)` ++ $(call write-to-file,$(1).$(OBJ_FILE_LIST),$(filter %.o,$(2))) ++ $(AR.$(TOOLSET)) crs $(1) @$(1).$(OBJ_FILE_LIST) ++endef ++ ++define create_thin_archive ++ $(eval OBJ_FILE_LIST := $(basename $(notdir $(1))).$(OBJ_FILE_LIST_SFX)) ++ rm -f $(1) $(OBJ_FILE_LIST); mkdir -p `dirname $(1)` ++ $(call write-to-file,$(1).$(OBJ_FILE_LIST),$(filter %.o,$(2))) ++ $(AR.$(TOOLSET)) crsT $(1) @$(1).$(OBJ_FILE_LIST) ++endef ++ + # We support two kinds of shared objects (.so): + # 1) shared_library, which is just bundling together many dependent libraries + # into a link line. +@@ -199,6 +225,32 @@ cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) + quiet_cmd_alink_thin = AR($(TOOLSET)) $@ + cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^) + ++define xargs ++ $(1) $(wordlist 1,100,$(2)) ++ $(if $(word 101,$(2)),$(call xargs,$(1),$(wordlist 101,$(words $(2)),$(2)))) ++endef ++ ++define write-to-file ++ @echo >$(1) ++ $(call xargs,printf "%s\\n" >>$(1),$(2)) ++endef ++ ++OBJ_FILE_LIST_SFX := ar-file-list ++ ++define create_archive ++ $(eval OBJ_FILE_LIST := $(basename $(notdir $(1))).$(OBJ_FILE_LIST_SFX)) ++ rm -f $(1) $(1).$(OBJ_FILE_LIST); mkdir -p `dirname $(1)` ++ $(call write-to-file,$(1).$(OBJ_FILE_LIST),$(filter %.o,$(2))) ++ $(AR.$(TOOLSET)) crs $(1) @$(1).$(OBJ_FILE_LIST) ++endef ++ ++define create_thin_archive ++ $(eval OBJ_FILE_LIST := $(basename $(notdir $(1))).$(OBJ_FILE_LIST_SFX)) ++ rm -f $(1) $(OBJ_FILE_LIST); mkdir -p `dirname $(1)` ++ $(call write-to-file,$(1).$(OBJ_FILE_LIST),$(filter %.o,$(2))) ++ $(AR.$(TOOLSET)) crsT $(1) @$(1).$(OBJ_FILE_LIST) ++endef ++ + # Due to circular dependencies between libraries :(, we wrap the + # special "figure out circular dependencies" flags around the entire + # input list during linking. +@@ -1766,21 +1818,35 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj) + self.flavor not in ("mac", "openbsd", "netbsd", "win") + and not self.is_standalone_static_library + ): +- self.WriteDoCmd( +- [self.output_binary], +- link_deps, +- "alink_thin", +- part_of_all, +- postbuilds=postbuilds, +- ) ++ if self.flavor in ('linux', 'android'): ++ self.WriteMakeRule( ++ [self.output_binary], ++ link_deps, ++ actions = ['$(call create_thin_archive,$@,$^)'] ++ ) ++ else: ++ self.WriteDoCmd( ++ [self.output_binary], ++ link_deps, ++ 'alink_thin', ++ part_of_all, ++ postbuilds=postbuilds ++ ) + else: +- self.WriteDoCmd( +- [self.output_binary], +- link_deps, +- "alink", +- part_of_all, +- postbuilds=postbuilds, +- ) ++ if self.flavor in ('linux', 'android'): ++ self.WriteMakeRule( ++ [self.output_binary], ++ link_deps, ++ actions = ['$(call create_archive,$@,$^)'] ++ ) ++ else: ++ self.WriteDoCmd( ++ [self.output_binary], ++ link_deps, ++ 'alink', ++ part_of_all, ++ postbuilds=postbuilds ++ ) + elif self.type == "shared_library": + self.WriteLn( + "%s: LD_INPUTS := %s" diff --git a/openwrt-21.02/steps/04-prepare_package.sh b/openwrt-21.02/steps/04-prepare_package.sh index f341558..41b9b0a 100755 --- a/openwrt-21.02/steps/04-prepare_package.sh +++ b/openwrt-21.02/steps/04-prepare_package.sh @@ -25,11 +25,20 @@ cd openwrt # replace vpn routing packages rm -rf feeds/packages/net/vpn-policy-routing/ cp -R ../stangri_repo/vpn-policy-routing feeds/packages/net/ +rm -rf feeds/luci/applications/luci-app-vpn-policy-routing +cp -R ../stangri_repo/luci-app-vpn-policy-routing feeds/luci/applications/ + +# add pbr +cp -R ../stangri_repo/pbr feeds/packages/net/ +cp -R ../stangri_repo/luci-app-pbr feeds/luci/applications/ # this does not work #./scripts/feeds uninstall luci-app-vpn-policy-routing #./scripts/feeds install -p stangri_repo luci-app-vpn-policy-routing +# copy patch for nodejs not building +cp $ROOTDIR/openwrt-21.02/patches/node/010-execvp-arg-list-too-long.patch feeds/packages/lang/node/patches/ + # Time stamp with $Build_Date=$(date +%Y.%m.%d) MANUAL_DATE="$(date +%Y.%m.%d) (manual build)" BUILD_STRING=${BUILD_STRING:-$MANUAL_DATE}