From f6175ed33326b5909cfb7e8a576f491ecba6041a Mon Sep 17 00:00:00 2001 From: tobil4sk Date: Tue, 10 Sep 2024 08:45:01 +0100 Subject: [PATCH] [ci] Run hlc tests on arm64 mac (#707) --- .github/workflows/build.yml | 100 ++++++++++++++---------------------- CMakeLists.txt | 82 +++++++++++++++++------------ Makefile | 15 +++++- 3 files changed, 101 insertions(+), 96 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1fbbc051a..ca66c5378 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,7 +22,7 @@ jobs: fail-fast: false matrix: target: [linux, darwin, windows] - architecture: [32, 64] + architecture: [32, 64, arm64] build_system: [make, cmake, vs2019] include: @@ -32,10 +32,17 @@ jobs: archive_ext: tar.gz - target: darwin - runner: macos-12 haxe_nightly_dir: mac archive_ext: tar.gz + - target: darwin + architecture: 64 + runner: macos-12 + + - target: darwin + architecture: arm64 + runner: macos-14 + - build_system: cmake cmake_configuration: RelWithDebInfo @@ -74,6 +81,12 @@ jobs: - target: darwin architecture: 32 + - target: linux + architecture: arm64 + + - target: windows + architecture: arm64 + - target: windows build_system: make @@ -125,51 +138,10 @@ jobs: ;; esac - - - name: "Install: Neko" - run: | - set -eux - - case "${{ matrix.target }}" in - linux) - sudo apt-get install --no-install-recommends -y neko - ;; - - darwin) - brew install neko - ;; - - windows) - choco install --no-progress neko -y - nekopath=$(find C:/ProgramData/chocolatey/lib/neko -name neko.dll -printf '%h\n') - echo "NEKOPATH=$nekopath" >> $GITHUB_ENV - ;; - esac - neko || true # print neko version - - - - name: "Install: Haxe latest" - run: | - set -eux - - download_url="https://build.haxe.org/builds/haxe/${{ matrix.haxe_nightly_dir }}/haxe_latest.${{ matrix.archive_ext }}" - echo "Downloading [$download_url]..." - if [[ ${{ matrix.target }} == windows ]]; then - curl -fsSL --retry 3 --retry-delay 5 "$download_url" -o /tmp/haxe.zip - 7z x /tmp/haxe.zip -o/tmp - mv -v /tmp/haxe_* /tmp/haxe - cygpath -w '/tmp/haxe/' >> $GITHUB_PATH - echo "HAXE_STD_PATH=$(cygpath -w '/tmp/haxe/std')" >> $GITHUB_ENV - else - mkdir /tmp/haxe - curl -fsSL --retry 3 --retry-delay 5 "$download_url" -o /tmp/haxe.tar.gz - tar xzvf /tmp/haxe.tar.gz -C /tmp/haxe --strip-components=1 - echo "/tmp/haxe/" >> $GITHUB_PATH - echo "HAXE_STD_PATH=/tmp/haxe/std" >> $GITHUB_ENV - fi - - /tmp/haxe/haxe --version - + - name: Install haxe + uses: krdlab/setup-haxe@f0a0baa8ccdb1fe4fc316c8f30eb3ca77aa4ea4e + with: + haxe-version: latest - name: "Configure: Haxelib" run: | @@ -237,24 +209,26 @@ jobs: ${{ env.WINDOWS_BUILD_FOLDER }}/hl.exe --version ;; make) - ./hl --version - case ${{ matrix.target }} in - linux) ldd -v ./hl ;; - darwin) otool -L ./hl ;; - esac - - haxe -hl hello.hl -cp other/tests -main HelloWorld -D interp - ./hl hello.hl + if [[ ${{ matrix.architecture }} != arm64 ]]; then + ./hl --version + case ${{ matrix.target }} in + linux) ldd -v ./hl ;; + darwin) otool -L ./hl ;; + esac + + haxe -hl hello.hl -cp other/tests -main HelloWorld -D interp + ./hl hello.hl + + # ensure the executable still works when installed globally + cp hello.hl /tmp + pushd /tmp + hl hello.hl + popd + fi haxe -hl src/_main.c -cp other/tests -main HelloWorld make hlc ./hlc - - # ensure the executable still works when installed globally - cp hello.hl /tmp - pushd /tmp - hl hello.hl - popd ;; esac @@ -264,7 +238,8 @@ jobs: set -eux case "${{ matrix.target }}${{matrix.architecture}}" in - darwin*) platform_name=darwin ;; + darwinarm64) platform_name=darwin-arm64 ;; + darwin64) platform_name=darwin ;; windows*) platform_name=win${{matrix.architecture}} ;; linux64) platform_name=linux-amd64 ;; esac @@ -332,6 +307,7 @@ jobs: --prerelease \ --title "HashLink Nightly Build" \ "darwin-make-64/hashlink-${short_commit}-darwin.tar.gz#hashlink-latest-darwin.tar.gz" \ + "darwin-make-arm64/hashlink-${short_commit}-darwin-arm64.tar.gz#hashlink-latest-darwin-arm64.tar.gz" \ "linux-make-64/hashlink-${short_commit}-linux-amd64.tar.gz#hashlink-latest-linux-amd64.tar.gz" \ "windows-vs2019-32/hashlink-${short_commit}-win32.zip#hashlink-latest-win32.zip" \ "windows-vs2019-64/hashlink-${short_commit}-win64.zip#hashlink-latest-win64.zip" diff --git a/CMakeLists.txt b/CMakeLists.txt index cc7de08c4..e3fc0f595 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,6 +18,13 @@ include(GNUInstallDirs) include(FindPkgConfig) include(CTest) +set(WITH_VM_DEFAULT ON) +if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm|aarch64") + set(WITH_VM_DEFAULT OFF) +endif() + +option(WITH_VM "Whether to build the Hashlink virtual machine" ${WITH_VM_DEFAULT}) + # force Unicode over Multi-byte if(MSVC) add_definitions(-DUNICODE -D_UNICODE) @@ -165,24 +172,29 @@ set_target_properties(libhl COMPILE_DEFINITIONS "_USRDLL;LIBHL_EXPORTS;HAVE_CONFIG_H;PCRE2_CODE_UNIT_WIDTH=16" ) -add_executable(hl - src/code.c - src/jit.c - src/main.c - src/module.c - src/debugger.c - src/profile.c -) +if (WITH_VM) + add_executable(hl + src/code.c + src/jit.c + src/main.c + src/module.c + src/debugger.c + src/profile.c + ) -if (UNIX AND NOT APPLE) - set_target_properties(hl PROPERTIES INSTALL_RPATH "$ORIGIN;${CMAKE_INSTALL_PREFIX}/lib") -endif() + if (UNIX AND NOT APPLE) + set_target_properties(hl PROPERTIES INSTALL_RPATH "$ORIGIN;${CMAKE_INSTALL_PREFIX}/lib") + endif() -target_link_libraries(hl libhl) + target_link_libraries(hl libhl) + + if (WIN32) + target_link_libraries(hl user32) + endif() +endif() if(WIN32) target_link_libraries(libhl ws2_32 user32) - target_link_libraries(hl user32) else() target_link_libraries(libhl m dl pthread) endif() @@ -299,16 +311,26 @@ if(BUILD_TESTING) ##################### # Tests + if (WITH_VM) + add_test(NAME version + COMMAND hl --version + ) + set_tests_properties(version + PROPERTIES + PASS_REGULAR_EXPRESSION "${HL_VERSION}" + ) + + add_test(NAME hello.hl + COMMAND hl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test/hello.hl + ) + add_test(NAME threads.hl + COMMAND hl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test/threads.hl + ) + add_test(NAME uvsample.hl + COMMAND hl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test/uvsample.hl 6001 + ) + endif() - add_test(NAME hello.hl - COMMAND hl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test/hello.hl - ) - add_test(NAME threads.hl - COMMAND hl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test/threads.hl - ) - add_test(NAME uvsample.hl - COMMAND hl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test/uvsample.hl 6001 - ) add_test(NAME hello COMMAND hello ) @@ -318,14 +340,6 @@ if(BUILD_TESTING) add_test(NAME uvsample COMMAND uvsample 6002 ) - add_test(NAME version - COMMAND hl --version - ) - set_tests_properties(version - PROPERTIES - PASS_REGULAR_EXPRESSION "${HL_VERSION}" - ) - endif() ##################### @@ -360,10 +374,14 @@ set(HDLL_DESTINATION ${CMAKE_INSTALL_LIBDIR} ) +set(INSTALL_TARGETS libhl) +if (WITH_VM) + list(APPEND INSTALL_TARGETS hl) +endif() + install( TARGETS - hl - libhl + ${INSTALL_TARGETS} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} diff --git a/Makefile b/Makefile index 1f7209853..d33204314 100644 --- a/Makefile +++ b/Makefile @@ -169,12 +169,19 @@ ifdef DEBUG CFLAGS += -g endif -all: libhl hl libs +all: libhl libs +ifeq ($(ARCH),arm64) + $(warning HashLink vm is not supported on arm64, skipping) +else +all: hl +endif install: $(UNAME)==Darwin && ${MAKE} uninstall +ifneq ($(ARCH),arm64) mkdir -p $(INSTALL_BIN_DIR) cp hl $(INSTALL_BIN_DIR) +endif mkdir -p $(INSTALL_LIB_DIR) cp *.hdll $(INSTALL_LIB_DIR) cp libhl.${LIBEXT} $(INSTALL_LIB_DIR) @@ -254,7 +261,7 @@ release_haxelib_package: rm -rf $(HLIB)_release BUILD_DIR ?= . -PACKAGE_NAME := hashlink-$(shell $(BUILD_DIR)/hl --version)-$(RELEASE_NAME) +PACKAGE_NAME = $(eval PACKAGE_NAME := hashlink-$(shell $(BUILD_DIR)/hl --version)-$(RELEASE_NAME))$(PACKAGE_NAME) release_prepare: rm -rf $(PACKAGE_NAME) @@ -272,7 +279,11 @@ release_win: rm -rf $(PACKAGE_NAME) release_linux release_osx: +ifeq ($(ARCH),arm64) + cp libhl.$(LIBEXT) *.hdll $(PACKAGE_NAME) +else cp hl libhl.$(LIBEXT) *.hdll $(PACKAGE_NAME) +endif tar -cvzf $(PACKAGE_NAME).tar.gz $(PACKAGE_NAME) rm -rf $(PACKAGE_NAME)