diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8c3c95c25..61abcb915 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,7 @@ on: - '**' env: - GO_VERSION: 1.24 + GO_VERSION: "1.24.7" jobs: ci-lint: @@ -195,6 +195,7 @@ jobs: - name: Install FFI env: GITHUB_TOKEN: ${{ github.token }} + CURIO_OPTIMAL_LIBFILCRYPTO: 0 run: | make deps shell: bash @@ -230,7 +231,7 @@ jobs: echo "Using YugabyteDB Container IP: ${{env.CURIO_HARMONYDB_HOSTS}}" export CURIO_HARMONYDB_HOSTS=${{ env.CURIO_HARMONYDB_HOSTS }} export LOTUS_HARMONYDB_HOSTS=${{ env.CURIO_HARMONYDB_HOSTS }} - go test -v --tags=debug -timeout 30m ${{ matrix.test-suite.target }} + go test -v --tags="debug,fvm" -timeout 30m ${{ matrix.test-suite.target }} - name: Stop YugabyteDB container if: always() # Ensure this runs even if the tests fail diff --git a/GO_VERSION_MIN b/GO_VERSION_MIN index 614245ec4..8407e2600 100644 --- a/GO_VERSION_MIN +++ b/GO_VERSION_MIN @@ -1 +1 @@ -1.24 \ No newline at end of file +1.24.7 diff --git a/Makefile b/Makefile index 668089c46..1ceb9d9be 100644 --- a/Makefile +++ b/Makefile @@ -10,14 +10,31 @@ FFI_DEPS:=$(addprefix $(FFI_PATH),$(FFI_DEPS)) $(FFI_DEPS): build/.filecoin-install ; +# When enabled, build size-optimized libfilcrypto by default +CURIO_OPTIMAL_LIBFILCRYPTO ?= 1 + build/.filecoin-install: $(FFI_PATH) - $(MAKE) -C $(FFI_PATH) $(FFI_DEPS:$(FFI_PATH)%=%) + @if [ "$(CURIO_OPTIMAL_LIBFILCRYPTO)" = "1" ]; then \ + FFI_DISABLE_FVM=1 $(MAKE) curio-libfilecoin; \ + else \ + $(MAKE) -C $(FFI_PATH) $(FFI_DEPS:$(FFI_PATH)%=%); \ + fi @touch $@ MODULES+=$(FFI_PATH) BUILD_DEPS+=build/.filecoin-install CLEAN+=build/.filecoin-install +## Custom libfilcrypto build for Curio (size-optimized, no FVM) +.PHONY: curio-libfilecoin +curio-libfilecoin: + FFI_BUILD_FROM_SOURCE=1 \ + FFI_USE_GPU=1 \ + FFI_USE_MULTICORE_SDR=1 \ + RUSTFLAGS='-C codegen-units=1 -C opt-level=3 -C strip=symbols' \ + $(MAKE) -C $(FFI_PATH) clean .install-filcrypto + @echo "Rebuilt libfilcrypto for Curio (OpenCL+multicore, no default features)." + ffi-version-check: @[[ "$$(awk '/const Version/{print $$5}' extern/filecoin-ffi/version.go)" -eq 3 ]] || (echo "FFI version mismatch, update submodules"; exit 1) BUILD_DEPS+=ffi-version-check @@ -82,6 +99,17 @@ CLEAN+=build/.update-modules deps: $(BUILD_DEPS) .PHONY: deps +## Test targets + +test-deps: CURIO_OPTIMAL_LIBFILCRYPTO=0 +test-deps: $(BUILD_DEPS) + @echo "Built dependencies with FVM support for testing" +.PHONY: test-deps + +test: test-deps + go test -v -tags="cgo,fvm" -timeout 30m ./itests/... +.PHONY: test + ## ldflags -s -w strips binary CURIO_TAGS ?= cunative @@ -270,10 +298,24 @@ marketgen: swag init -dir market/mk20/http -g http.go -o market/mk20/http --parseDependencyLevel 3 --parseDependency .PHONY: marketgen -gensimple: api-gen go-generate cfgdoc-gen docsgen marketgen docsgen-cli +# Run gen steps sequentially in a single shell to avoid Go build cache race conditions. +# The "unlinkat: directory not empty" error occurs when multiple go processes +# contend for the same build cache simultaneously. +# Set GOCACHE_CLEAN=1 to clear the build cache before running (fixes persistent issues). +gensimple: +ifeq ($(GOCACHE_CLEAN),1) + $(GOCC) clean -cache +endif + $(MAKE) deps + $(MAKE) api-gen + $(MAKE) go-generate + $(MAKE) cfgdoc-gen + $(MAKE) docsgen + $(MAKE) marketgen + $(MAKE) docsgen-cli $(GOCC) run ./scripts/fiximports go mod tidy -.PHONY: gen +.PHONY: gensimple fiximports: $(GOCC) run ./scripts/fiximports diff --git a/api/api_chain_all.go b/api/api_chain_all.go index e055896db..2ad7811eb 100644 --- a/api/api_chain_all.go +++ b/api/api_chain_all.go @@ -1,5 +1,4 @@ //go:build !forest -// +build !forest package api diff --git a/api/api_chain_limited.go b/api/api_chain_limited.go index cd6fb1104..48e3032f7 100644 --- a/api/api_chain_limited.go +++ b/api/api_chain_limited.go @@ -1,5 +1,4 @@ //go:build forest -// +build forest package api diff --git a/build/params_2k.go b/build/params_2k.go index 6803030c0..e611a6a8b 100644 --- a/build/params_2k.go +++ b/build/params_2k.go @@ -1,5 +1,4 @@ //go:build 2k -// +build 2k package build diff --git a/build/params_calibnet.go b/build/params_calibnet.go index 3cb080d4c..e5defa216 100644 --- a/build/params_calibnet.go +++ b/build/params_calibnet.go @@ -1,5 +1,4 @@ //go:build calibnet -// +build calibnet package build diff --git a/build/params_mainnet.go b/build/params_mainnet.go index 86a00f7d5..a1d4fa702 100644 --- a/build/params_mainnet.go +++ b/build/params_mainnet.go @@ -1,5 +1,4 @@ //go:build !calibnet && !debug && !2k -// +build !calibnet,!debug,!2k package build diff --git a/build/params_testnet.go b/build/params_testnet.go index 02e700e1f..0822daabe 100644 --- a/build/params_testnet.go +++ b/build/params_testnet.go @@ -1,5 +1,4 @@ //go:build debug -// +build debug package build diff --git a/cmd/curio/ffi.go b/cmd/curio/ffi.go index 976fecf93..22fb2dcf3 100644 --- a/cmd/curio/ffi.go +++ b/cmd/curio/ffi.go @@ -1,13 +1,13 @@ package main import ( + "context" "fmt" "os" "github.com/ipfs/go-cid" "github.com/snadrus/must" "github.com/urfave/cli/v2" - "golang.org/x/net/context" "github.com/filecoin-project/go-jsonrpc" diff --git a/extern/filecoin-ffi b/extern/filecoin-ffi index 586063e9c..a7d5488a8 160000 --- a/extern/filecoin-ffi +++ b/extern/filecoin-ffi @@ -1 +1 @@ -Subproject commit 586063e9cfa45147d554f176759520398715ba41 +Subproject commit a7d5488a8e5c0f732ba24ff8768ac5903e3d38b1 diff --git a/go.mod b/go.mod index f065850a9..b55d1b774 100644 --- a/go.mod +++ b/go.mod @@ -112,13 +112,12 @@ require ( go.opencensus.io v0.24.0 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 - golang.org/x/crypto v0.43.0 + golang.org/x/crypto v0.45.0 golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b - golang.org/x/net v0.46.0 - golang.org/x/sync v0.17.0 - golang.org/x/sys v0.37.0 - golang.org/x/term v0.36.0 - golang.org/x/text v0.30.0 + golang.org/x/sync v0.18.0 + golang.org/x/sys v0.38.0 + golang.org/x/term v0.37.0 + golang.org/x/text v0.31.0 golang.org/x/tools v0.38.0 golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da ) @@ -370,6 +369,7 @@ require ( go.yaml.in/yaml/v2 v2.4.3 // indirect go4.org v0.0.0-20230225012048-214862532bf5 // indirect golang.org/x/mod v0.29.0 // indirect + golang.org/x/net v0.47.0 // indirect golang.org/x/telemetry v0.0.0-20251009181524-91c411e14f39 // indirect golang.org/x/time v0.14.0 // indirect gonum.org/v1/gonum v0.16.0 // indirect diff --git a/go.sum b/go.sum index 0a9ac8d38..be8df3a12 100644 --- a/go.sum +++ b/go.sum @@ -1564,8 +1564,8 @@ golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= -golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= +golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= +golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1660,8 +1660,8 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= -golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= +golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= +golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1686,8 +1686,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= -golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= +golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180202135801-37707fdb30a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1767,8 +1767,8 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= -golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= +golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/telemetry v0.0.0-20251009181524-91c411e14f39 h1:jHQt1JBuPc+c/cAlupnkce8or0E04hX2Oqmnqq1XCVA= golang.org/x/telemetry v0.0.0-20251009181524-91c411e14f39/go.mod h1:Pi4ztBfryZoJEkyFTI5/Ocsu2jXyDr6iSdgJiYE/uwE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -1780,8 +1780,8 @@ golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q= -golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= +golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= +golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1794,8 +1794,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= -golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/harmony/resources/getGPU.go b/harmony/resources/getGPU.go index a9a207125..c50c70f06 100644 --- a/harmony/resources/getGPU.go +++ b/harmony/resources/getGPU.go @@ -1,5 +1,4 @@ //go:build !darwin -// +build !darwin package resources diff --git a/harmony/resources/getGPU_darwin.go b/harmony/resources/getGPU_darwin.go index 6ba5c57a5..986172029 100644 --- a/harmony/resources/getGPU_darwin.go +++ b/harmony/resources/getGPU_darwin.go @@ -1,5 +1,4 @@ //go:build darwin -// +build darwin package resources diff --git a/harmony/resources/memsys.go b/harmony/resources/memsys.go deleted file mode 100644 index 1a45b5b22..000000000 --- a/harmony/resources/memsys.go +++ /dev/null @@ -1,22 +0,0 @@ -//go:build darwin || freebsd || openbsd || dragonfly || netbsd -// +build darwin freebsd openbsd dragonfly netbsd - -package resources - -import ( - "encoding/binary" - "syscall" -) - -func sysctlUint64(name string) (uint64, error) { - s, err := syscall.Sysctl(name) - if err != nil { - return 0, err - } - // hack because the string conversion above drops a \0 - b := []byte(s) - if len(b) < 8 { - b = append(b, 0) - } - return binary.LittleEndian.Uint64(b), nil -}