Ver código fonte

[CI] Fix win32 CI

Rudy Ges 3 meses atrás
pai
commit
c114dd21b7
3 arquivos alterados com 137 adições e 19 exclusões
  1. 17 18
      .github/workflows/main.yml
  2. 119 0
      Makefile.win32
  3. 1 1
      haxe.opam

+ 17 - 18
.github/workflows/main.yml

@@ -165,31 +165,21 @@ jobs:
       - name: Setup ocaml
         id: ocaml
         continue-on-error: true
-        uses: kLabz/setup-ocaml@win32
+        uses: klabz/setup-ocaml@win32-2025-2
         with:
-          ocaml-compiler: 4.08.1
-          opam-depext: false
-          opam-repositories: |
-            opam-repository-mingw: https://github.com/ocaml-opam/opam-repository-mingw.git#sunset
-            default: https://github.com/ocaml/opam-repository.git
+          ocaml-compiler: 4.14.0
           opam-local-packages: |
             haxe.opam
-          cache-prefix: w32-v1
 
       # TODO make it work on first try
       # (when cygwin cache doesn't exist, ocaml install fails with a curl error)
       - name: Setup ocaml (second chance)
         if: steps.ocaml.outcome == 'failure'
-        uses: kLabz/setup-ocaml@win32
+        uses: klabz/setup-ocaml@win32-2025-2
         with:
-          ocaml-compiler: 4.08.1
-          opam-depext: false
-          opam-repositories: |
-            opam-repository-mingw: https://github.com/ocaml-opam/opam-repository-mingw.git#sunset
-            default: https://github.com/ocaml/opam-repository.git
+          ocaml-compiler: 4.14.0
           opam-local-packages: |
             haxe.opam
-          cache-prefix: w32-v1
 
       - name: Install dependencies
         shell: pwsh
@@ -206,9 +196,18 @@ jobs:
         shell: pwsh
         run: |
           Set-PSDebug -Trace 1
+          opam install ocaml-env-mingw32
+          opam install conf-mingw-w64-pcre2-i686
           opam install haxe --deps-only
           opam list
 
+      - name: Check mingw dll files
+        shell: bash
+        run: |
+          ls "$CYG_ROOT/usr/"
+          echo "bin/"
+          ls "$CYG_ROOT/usr/i686-w64-mingw32/sys-root/mingw/bin/"
+
       - name: Expose mingw dll files
         shell: pwsh
         run: Write-Host "::add-path::${env:CYG_ROOT}/usr/$($env:MINGW_ARCH)-w64-mingw32/sys-root/mingw/bin"
@@ -229,10 +228,10 @@ jobs:
         shell: pwsh
         run: |
           Set-PSDebug -Trace 1
-          & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam config exec -- make -s -f Makefile.win -j`nproc` haxe 2>&1')
-          & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam config exec -- make -s -f Makefile.win haxelib 2>&1')
-          & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam config exec -- make -f Makefile.win echo_package_files package_bin package_installer_win package_choco 2>&1')
-          dir out
+          & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam config exec -- make -s -f Makefile.win32 -j`nproc` haxe 2>&1')
+          & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam config exec -- make -s -f Makefile.win32 haxelib 2>&1')
+          & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && file ./haxe.exe')
+          & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam config exec -- make -f Makefile.win32 echo_package_files package_bin package_installer_win package_choco 2>&1')
           & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && cygcheck ./haxe.exe')
           & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && cygcheck ./haxelib.exe')
           & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && ls ./out')

+ 119 - 0
Makefile.win32

@@ -0,0 +1,119 @@
+PLATFORM=win
+MAKEFILENAME=Makefile.win32
+include Makefile
+HAXE_OUTPUT=haxe.exe
+HAXELIB_OUTPUT=haxelib.exe
+PREBUILD_OUTPUT=prebuild.exe
+EXTENSION=.exe
+PACKAGE_SRC_EXTENSION=.zip
+ARCH?=32
+DUNE_COMMAND=dune.exe
+
+ifeq ($(ARCH),64)
+NEKO_ARCH_STR=64
+endif
+
+kill:
+	-@taskkill /F /IM haxe.exe
+
+# allow Ocaml/Mingw as well
+NATIVE_LIBS += -I "c:/program files/mingw/lib/"
+
+# use make WODI=wodi32 -f Makefile.win to build using WODI 32bit
+ifdef WODI
+NATIVE_LIBS += -I "/opt/${WODI}/lib"
+endif
+
+# use make MSVC=1 -f Makefile.win to build for OCaml/MSVC
+
+ifeq (${MSVC}, 1)
+NATIVE_LIBS = shell32.lib libs/extc/extc_stubs.obj libs/extc/process_stubs.obj libs/extc/zlib/zlib.lib libs/objsize/c_objsize.obj
+endif
+
+ifeq (${MSVC_OUTPUT}, 1)
+FILTER=sed 's/File "\([^"]\+\)", line \([0-9]\+\), \(.*\)/\1(\2): \3/' tmp.cmi
+endif
+
+ifeq (${FD_OUTPUT}, 1)
+FILTER=sed -e '/File/{ N; s/File "\([^"]\+\)", line \([0-9]\+\), characters \([0-9-]\+\):[\r\n]*\(.*\)/\1:\2: characters \3 : \4/ }' -e 's/_build\/src\//src\//' tmp.cmi
+endif
+
+ifdef FILTER
+CC_CMD=($(COMPILER) $(ALL_CFLAGS) -c $< 2>tmp.cmi && $(FILTER)) || ($(FILTER) && exit 1)
+endif
+
+ifeq ($(STATICLINK),0)
+	LIB_PARAMS = -cclib -lpcre2-8 -cclib -lz -cclib -lcrypt32 -cclib -lmbedtls -cclib -lmbedcrypto -cclib -lmbedx509
+endif
+
+PACKAGE_FILES=$(HAXE_OUTPUT) $(HAXELIB_OUTPUT) std \
+	"$(CYG_ROOT)/usr/$(MINGW_ARCH)-w64-mingw32/sys-root/mingw/bin/zlib1.dll" \
+	"$(CYG_ROOT)/usr/$(MINGW_ARCH)-w64-mingw32/sys-root/mingw/bin/libpcre2-8-0.dll" \
+	"$(CYG_ROOT)/usr/$(MINGW_ARCH)-w64-mingw32/sys-root/mingw/bin/libmbedcrypto.dll" \
+	"$(CYG_ROOT)/usr/$(MINGW_ARCH)-w64-mingw32/sys-root/mingw/bin/libmbedtls.dll" \
+	"$(CYG_ROOT)/usr/$(MINGW_ARCH)-w64-mingw32/sys-root/mingw/bin/libmbedx509.dll"
+
+# haxelib should depends on haxe, but we don't want to do that...
+haxelib_win:
+	cd $(CURDIR)/extra/haxelib_src && \
+	HAXE_STD_PATH=$$(cygpath -m $(CURDIR)/std) $(CURDIR)/$(HAXE_OUTPUT) client.hxml && \
+	nekotools boot run.n
+	mv extra/haxelib_src/run$(EXTENSION) $(HAXELIB_OUTPUT)
+
+echo_package_files:
+	echo $(PACKAGE_FILES)
+
+package_win:
+	mkdir -p out
+	rm -rf $(PACKAGE_FILE_NAME) $(PACKAGE_FILE_NAME).zip temp.zip
+	# Copy the package contents to $(PACKAGE_FILE_NAME)
+	# Using poor man's cp (zip then unzip), because cp in cygwin is quite broken
+	mkdir -p $(PACKAGE_FILE_NAME)
+	7z a -y -tzip -mx0 temp.zip $(PACKAGE_FILES) > log.txt || type log.txt
+	cd extra && 7z a -y -tzip -mx0 ../temp.zip LICENSE.txt CONTRIB.txt CHANGES.txt > log.txt || type log.txt
+	7z x -y temp.zip -o$(PACKAGE_FILE_NAME) > log.txt || type log.txt
+	rm temp.zip
+	# archive
+	7z a -r -tzip out/$(PACKAGE_FILE_NAME)_bin.zip $(PACKAGE_FILE_NAME) > log.txt || type log.txt
+	rm -r $(PACKAGE_FILE_NAME)
+	rm log.txt extra/log.txt
+
+package_choco:
+	mkdir -p OUTPUT
+	7z x -y out/$(PACKAGE_FILE_NAME)_bin.zip -oout > log.txt || type log.txt
+	mv out/$(PACKAGE_FILE_NAME) out/choco
+	cp extra/choco/haxe.nuspec out/choco/haxe.nuspec
+	sed -i 's/@SNAPSHOT_VERSION@/$(HAXE_VERSION_SHORT)-SNAP$(COMMIT_DATE)/g' out/choco/haxe.nuspec
+	sed -i 's/@NEKO_VERSION@/$(NEKO_VERSION)/g' out/choco/haxe.nuspec
+	cd out/choco && choco pack
+	mv out/choco/haxe.*.nupkg out
+	rm -rf out/choco
+
+$(INSTALLER_TMP_DIR)/neko-win.zip: $(INSTALLER_TMP_DIR)
+	curl -L https://github.com/HaxeFoundation/neko/releases/download/$(NEKO_VERSION_TAG)/neko-$(NEKO_VERSION)-win$(NEKO_ARCH_STR).zip -o installer/neko-win.zip
+
+package_installer_win: $(INSTALLER_TMP_DIR)/neko-win.zip package_win
+	$(eval OUTFILE := $(PACKAGE_OUT_DIR)/$(PACKAGE_FILE_NAME)_installer.zip)
+	rm -rf $(INSTALLER_TMP_DIR)/resources
+	# neko
+	mkdir $(INSTALLER_TMP_DIR)/resources
+	cd $(INSTALLER_TMP_DIR) && 7z x -y neko-win.zip
+	rm $(INSTALLER_TMP_DIR)/neko-win.zip
+	mv $(INSTALLER_TMP_DIR)/neko* $(INSTALLER_TMP_DIR)/resources/neko
+	# haxe
+	7z x -y $(PACKAGE_OUT_DIR)/$(PACKAGE_FILE_NAME)_bin.zip -o$(INSTALLER_TMP_DIR)/resources
+	mv $(INSTALLER_TMP_DIR)/resources/haxe* $(INSTALLER_TMP_DIR)/resources/haxe
+	# WinSetup.hx
+	cp extra/WinSetup.hx $(INSTALLER_TMP_DIR)/resources/haxe
+	# extra
+	cp extra/*.nsi $(INSTALLER_TMP_DIR)
+	cp extra/*.nsh $(INSTALLER_TMP_DIR)
+	cp -rf extra/images $(INSTALLER_TMP_DIR)
+	# nsis
+	sed -i "s/%%VERSION%%/$(HAXE_VERSION_SHORT)/g" $(INSTALLER_TMP_DIR)/installer.nsi
+	sed -i "s/%%VERSTRING%%/$(HAXE_VERSION)/g" $(INSTALLER_TMP_DIR)/installer.nsi
+	sed -i "s/%%VERLONG%%/$(HAXE_VERSION)/g" $(INSTALLER_TMP_DIR)/installer.nsi
+	sed -i "s/%%NEKO_VERSION%%/$(NEKO_VERSION)/g" $(INSTALLER_TMP_DIR)/installer.nsi
+	cd $(INSTALLER_TMP_DIR) && makensis installer.nsi
+	7z a -r -tzip $(OUTFILE) $(INSTALLER_TMP_DIR)/*.exe
+	dir $(PACKAGE_OUT_DIR)

+ 1 - 1
haxe.opam

@@ -20,7 +20,7 @@ install: [make "install" "INSTALL_DIR=%{prefix}%"]
 remove: [make "uninstall" "INSTALL_DIR=%{prefix}%"]
 depends: [
   ("ocaml" {>= "5.0"} & ("camlp5" {build}) & ("ocamlfind" {build}))
-    | ("ocaml" {>= "4.08" & < "5.0"} & ("camlp5" {build}) & ("ocamlfind" {build & = "1.9.1"}))
+    | ("ocaml" {>= "4.08" & < "5.0"} & ("camlp5" {build & = "8.03.04"}) & ("ocamlfind" {build & = "1.9.1"}))
   "dune" {>= "1.11" & < "3.16"}
   "sedlex" {>= "2.0"}
   "xml-light"