mirror of
https://github.com/Interlisp/maiko.git
synced 2026-04-18 08:26:02 +00:00
Compare commits
18 Commits
maiko-2306
...
debug-arra
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4245764b31 | ||
|
|
4520609479 | ||
|
|
3b42f0579d | ||
|
|
29b492093d | ||
|
|
1c6d366e3c | ||
|
|
c74e7a0169 | ||
|
|
060420ce42 | ||
|
|
44a4a4c42c | ||
|
|
2b24184293 | ||
|
|
c4f8ccc928 | ||
|
|
0ab92f5e65 | ||
|
|
501fb8e87a | ||
|
|
da7025ff02 | ||
|
|
b6328a234d | ||
|
|
74d6728fba | ||
|
|
59f2f2e835 | ||
|
|
8563c8700d | ||
|
|
aa019bdce2 |
18
.github/workflows/Dockerfile_builder
vendored
Executable file
18
.github/workflows/Dockerfile_builder
vendored
Executable file
@@ -0,0 +1,18 @@
|
|||||||
|
#*******************************************************************************
|
||||||
|
#
|
||||||
|
# Dockerfile to build image with all the tools to build Maiko
|
||||||
|
#
|
||||||
|
# Copyright 2023 by Interlisp.org
|
||||||
|
#
|
||||||
|
# Frank Halasz 2023-02-21
|
||||||
|
#
|
||||||
|
# ******************************************************************************
|
||||||
|
|
||||||
|
FROM ubuntu:latest
|
||||||
|
SHELL ["/bin/bash", "-c"]
|
||||||
|
USER root:root
|
||||||
|
# Install build tools
|
||||||
|
RUN apt-get update && apt-get install -y make clang libx11-dev gcc
|
||||||
|
USER root
|
||||||
|
WORKDIR /root
|
||||||
|
ENTRYPOINT /bin/bash
|
||||||
25
.github/workflows/Dockerfile_maiko
vendored
Executable file
25
.github/workflows/Dockerfile_maiko
vendored
Executable file
@@ -0,0 +1,25 @@
|
|||||||
|
#*******************************************************************************
|
||||||
|
#
|
||||||
|
# Dockerfile to build Maiko for Linux to be used by buildRelease github action
|
||||||
|
# The output of this is intended to be a directory in the github workspace
|
||||||
|
# file system it is not intended to be a useable Docker image.
|
||||||
|
#
|
||||||
|
# Copyright 2023 by Interlisp.org
|
||||||
|
#
|
||||||
|
# Frank Halasz 2023-02-21
|
||||||
|
#
|
||||||
|
# ******************************************************************************
|
||||||
|
|
||||||
|
FROM ghcr.io/interlisp/maiko-builder
|
||||||
|
ARG INSTALL_LOCATION=/usr/local/interlisp/maiko
|
||||||
|
SHELL ["/bin/bash", "-c"]
|
||||||
|
# Copy over / clean maiko repo
|
||||||
|
COPY . ${INSTALL_LOCATION}
|
||||||
|
# Build maiko
|
||||||
|
RUN cd ${INSTALL_LOCATION}/bin \
|
||||||
|
&& ./makeright x cleanup \
|
||||||
|
&& ./makeright x
|
||||||
|
RUN cd ${INSTALL_LOCATION}/bin \
|
||||||
|
&& if [ "$(./machinetype)" = "x86_64" ]; then \
|
||||||
|
./makeright init; \
|
||||||
|
fi
|
||||||
18
.github/workflows/buildBuilderImage.yml
vendored
18
.github/workflows/buildBuilderImage.yml
vendored
@@ -32,15 +32,9 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
# Checkout just the relevant Dockerfile
|
# Checkout maiko
|
||||||
- name: Checkout files
|
- name: Checkout maiko
|
||||||
uses: Bhacaz/checkout-files@v2
|
uses: actions/checkout@v3
|
||||||
with:
|
|
||||||
files: .github/workflows/Dockerfile_builder
|
|
||||||
|
|
||||||
# Checkout the branch of maiko code
|
|
||||||
#- name: Checkout
|
|
||||||
# uses: actions/checkout@v3
|
|
||||||
|
|
||||||
# Setup docker environment variables
|
# Setup docker environment variables
|
||||||
- name: Setup Docker Environment Variables
|
- name: Setup Docker Environment Variables
|
||||||
@@ -49,7 +43,7 @@ jobs:
|
|||||||
DOCKER_REGISTRY="ghcr.io"
|
DOCKER_REGISTRY="ghcr.io"
|
||||||
DOCKER_NAMESPACE=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')
|
DOCKER_NAMESPACE=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')
|
||||||
DOCKER_REPO=${DOCKER_REGISTRY}/${DOCKER_NAMESPACE}/maiko-builder
|
DOCKER_REPO=${DOCKER_REGISTRY}/${DOCKER_NAMESPACE}/maiko-builder
|
||||||
DOCKER_TAGS="${DOCKER_REPO}:latest
|
DOCKER_TAGS="${DOCKER_REPO}:latest"
|
||||||
echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> ${GITHUB_ENV}
|
echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> ${GITHUB_ENV}
|
||||||
echo "DOCKER_TAGS=${DOCKER_TAGS}" >> ${GITHUB_ENV}
|
echo "DOCKER_TAGS=${DOCKER_TAGS}" >> ${GITHUB_ENV}
|
||||||
|
|
||||||
@@ -66,7 +60,7 @@ jobs:
|
|||||||
|
|
||||||
# Login to ghcr.io
|
# Login to ghcr.io
|
||||||
- name: Login to GitHub Container Registry
|
- name: Login to GitHub Container Registry
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v2
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.repository_owner }}
|
username: ${{ github.repository_owner }}
|
||||||
@@ -89,5 +83,5 @@ jobs:
|
|||||||
push: true
|
push: true
|
||||||
tags: ${{ env.DOCKER_TAGS }}
|
tags: ${{ env.DOCKER_TAGS }}
|
||||||
|
|
||||||
|
|
||||||
######################################################################################
|
######################################################################################
|
||||||
|
|||||||
@@ -1,30 +1,27 @@
|
|||||||
#*******************************************************************************
|
#*******************************************************************************
|
||||||
# buidReleaseInclDocker.yml
|
# buidRelease.yml
|
||||||
#
|
#
|
||||||
# Workflow to build a Maiko release that is pushed to github as well as
|
# Workflow to build a Maiko release that is pushed to github.
|
||||||
# Docker images incorporating the release, which are pushed to Docker Hub.
|
# For linux: release assets are built/pushed for X86_64, aarch64 and arm7vl.
|
||||||
# For linux: release assets are built/pushed for X86_64, aarch64 and arm7vl and
|
# For macOS: release assets are built/pushed for X86_64 and aarch64 as well as
|
||||||
# a multiplatform Docker image is pushed.
|
# a set of universal binaries.
|
||||||
# For macOS: release assets are built/pushed for X86_64. (No aarch64 as yet.)
|
|
||||||
# For Windows: not supported
|
# For Windows: not supported
|
||||||
#
|
#
|
||||||
# Note release pushed to github automatically includes source code assets
|
# Note release pushed to github automatically includes source code assets
|
||||||
# in tar and zip formats.
|
# in tar and zip formats.
|
||||||
#
|
#
|
||||||
# 2022-01-16 by Frank Halasz based on earlier workflow called buildDocker.yml
|
# 2022-01-16 by Frank Halasz based on earlier workflow called buildDocker.yml
|
||||||
|
# Updated 2023-06-06: Remove docker image push; increase build efficeincy for linux
|
||||||
#
|
#
|
||||||
# Copyright 2022 by Interlisp.org
|
# Copyright 2022-2023 by Interlisp.org
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# ******************************************************************************
|
# ******************************************************************************
|
||||||
|
|
||||||
name: 'Build/Push Release & Docker Image'
|
name: 'Build/Push Release'
|
||||||
|
|
||||||
env:
|
|
||||||
workflow: 'buildReleaseInclDocker.yml'
|
|
||||||
|
|
||||||
# Run this workflow on ...
|
# Run this workflow on ...
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
draft:
|
draft:
|
||||||
@@ -66,14 +63,18 @@ defaults:
|
|||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
# 2 separate jobs here that can run in parallel
|
# 3 separate jobs here that can run in parallel
|
||||||
#
|
#
|
||||||
# 1. Linux: Build/push a multiplatform Linux Docker image and use results to
|
# 1. Linux: Build a multiplatform Linux Docker file system (not saved) and use
|
||||||
# build/push Linux release assets.
|
# results to build/push Linux release assets.
|
||||||
#
|
#
|
||||||
# 2. MacOs: Build maiko for MacOS (x86_64, aarch64, and universal) then create
|
# 2. MacOs: Build maiko for MacOS (x86_64, aarch64, and universal) then create
|
||||||
# and push release assets.
|
# and push release assets.
|
||||||
#
|
#
|
||||||
|
# 3. Windows: Build maiko for cygwin and SDL (x86_64). Build is done within the
|
||||||
|
# cygwin-maiko-builder Docker image by building a new docker files system (and
|
||||||
|
# not a docker container) which is used to build/push Windows(cygwin) assets.
|
||||||
|
#
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
@@ -87,6 +88,9 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
draft: ${{ steps.one.outputs.draft }}
|
draft: ${{ steps.one.outputs.draft }}
|
||||||
force: ${{ steps.one.outputs.force }}
|
force: ${{ steps.one.outputs.force }}
|
||||||
|
linux: ${{ steps.one.outputs.linux }}
|
||||||
|
macos: ${{ steps.one.outputs.macos }}
|
||||||
|
windows: ${{ steps.one.outputs.windows }}
|
||||||
steps:
|
steps:
|
||||||
- id: one
|
- id: one
|
||||||
run: >
|
run: >
|
||||||
@@ -99,9 +103,11 @@ jobs:
|
|||||||
echo "workflow_call";
|
echo "workflow_call";
|
||||||
echo "draft=${{ inputs.draft }}" >> $GITHUB_OUTPUT;
|
echo "draft=${{ inputs.draft }}" >> $GITHUB_OUTPUT;
|
||||||
echo "force=${{ inputs.force }}" >> $GITHUB_OUTPUT;
|
echo "force=${{ inputs.force }}" >> $GITHUB_OUTPUT;
|
||||||
fi
|
fi;
|
||||||
|
echo "linux=true" >> $GITHUB_OUTPUT;
|
||||||
|
echo "macos=true" >> $GITHUB_OUTPUT;
|
||||||
|
echo "windows=true" >> $GITHUB_OUTPUT;
|
||||||
|
|
||||||
|
|
||||||
######################################################################################
|
######################################################################################
|
||||||
|
|
||||||
@@ -114,7 +120,7 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
release_not_built: ${{ steps.check.outputs.release_not_built }}
|
release_not_built: ${{ steps.check.outputs.release_not_built }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
# Checkout the actions for this repo owner
|
# Checkout the actions for this repo owner
|
||||||
- name: Checkout Actions
|
- name: Checkout Actions
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
@@ -124,7 +130,7 @@ jobs:
|
|||||||
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
||||||
|
|
||||||
# Check if build already run for this commit
|
# Check if build already run for this commit
|
||||||
- name: Build already completed?
|
- name: Build already completed?
|
||||||
id: check
|
id: check
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
uses: ./../actions/check-sentry-action
|
uses: ./../actions/check-sentry-action
|
||||||
@@ -137,12 +143,15 @@ jobs:
|
|||||||
# Use docker images to create and push release assets to github
|
# Use docker images to create and push release assets to github
|
||||||
|
|
||||||
linux:
|
linux:
|
||||||
|
|
||||||
needs: [inputs, sentry]
|
needs: [inputs, sentry]
|
||||||
if: |
|
if: |
|
||||||
needs.sentry.outputs.release_not_built == 'true'
|
needs.inputs.outputs.linux == 'true'
|
||||||
|| needs.inputs.outputs.force == 'true'
|
&& (
|
||||||
|
needs.sentry.outputs.release_not_built == 'true'
|
||||||
|
|| needs.inputs.outputs.force == 'true'
|
||||||
|
)
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -154,7 +163,7 @@ jobs:
|
|||||||
path: ./Actions_${{ github.sha }}
|
path: ./Actions_${{ github.sha }}
|
||||||
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
||||||
|
|
||||||
# Checkout the branch
|
# Checkout the branch
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
@@ -174,33 +183,27 @@ jobs:
|
|||||||
echo "build_time=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT
|
echo "build_time=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT
|
||||||
echo "docker_tags=${DOCKER_TAGS}" >> $GITHUB_OUTPUT
|
echo "docker_tags=${DOCKER_TAGS}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
# Setup the Docker Machine Emulation environment.
|
# Setup the Docker Machine Emulation environment.
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@master
|
uses: docker/setup-qemu-action@v2
|
||||||
with:
|
with:
|
||||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||||
|
|
||||||
# Setup the Docker Buildx funtion
|
# Setup the Docker Buildx funtion
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
id: buildx
|
id: buildx
|
||||||
uses: docker/setup-buildx-action@master
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
# Login into DockerHub - required to store the created image
|
|
||||||
- name: Login to DockerHub
|
|
||||||
uses: docker/login-action@v2
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
||||||
|
|
||||||
# Do the Docker Build using the Dockerfile in the repository we
|
# Do the Docker Build using the Dockerfile in the repository we
|
||||||
# checked out. Push the result to Docker Hub.
|
# checked out. Save the results in a directory under /tmp to be used
|
||||||
|
# for creating release tars. Does not creatre a docker image and does not
|
||||||
|
# push anything to Docker Hub.
|
||||||
#
|
#
|
||||||
# NOTE: THE ACTUAL MAIKO BUILD (FOR LINUX) HAPPENS HERE - I.E., IN THE
|
# NOTE: THE ACTUAL MAIKO BUILD (FOR LINUX) HAPPENS HERE - I.E., IN THE
|
||||||
# DOCKER BUILD CALL. BUILD COMMANDS ARE SPECIFIED IN THE
|
# DOCKER BUILD CALL. BUILD COMMANDS ARE SPECIFIED IN THE
|
||||||
# Dockerfile, NOT HERE IN THE WORKFLOW.
|
# Dockerfile, NOT HERE IN THE WORKFLOW.
|
||||||
#
|
#
|
||||||
- name: Build Docker Image for Push to Docker Hub
|
- name: Build Docker Image and Save It Locally
|
||||||
if: ${{ true }}
|
|
||||||
uses: docker/build-push-action@v4
|
uses: docker/build-push-action@v4
|
||||||
with:
|
with:
|
||||||
builder: ${{ steps.buildx.outputs.name }}
|
builder: ${{ steps.buildx.outputs.name }}
|
||||||
@@ -208,23 +211,7 @@ jobs:
|
|||||||
BUILD_DATE=${{ steps.docker_env.outputs.build_time }}
|
BUILD_DATE=${{ steps.docker_env.outputs.build_time }}
|
||||||
RELEASE_TAG=${{ steps.tag.outputs.release_tag }}
|
RELEASE_TAG=${{ steps.tag.outputs.release_tag }}
|
||||||
context: .
|
context: .
|
||||||
file: ./Dockerfile
|
file: ./.github/workflows/Dockerfile_maiko
|
||||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
|
||||||
# Push the result to DockerHub
|
|
||||||
push: true
|
|
||||||
tags: ${{ steps.docker_env.outputs.docker_tags }}
|
|
||||||
|
|
||||||
# Redo the Docker Build (hopefully mostly using the cache from the previous build).
|
|
||||||
# But save the results in a directory under /tmp to be used for creating release tars.
|
|
||||||
- name: Rebuild Docker Image For Saving Locally
|
|
||||||
uses: docker/build-push-action@v4
|
|
||||||
with:
|
|
||||||
builder: ${{ steps.buildx.outputs.name }}
|
|
||||||
build-args: |
|
|
||||||
BUILD_DATE=${{ steps.docker_env.outputs.build_time }}
|
|
||||||
RELEASE_TAG=${{ steps.tag.outputs.release_tag }}
|
|
||||||
context: .
|
|
||||||
file: ./Dockerfile
|
|
||||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||||
# Put the results out to the local file system
|
# Put the results out to the local file system
|
||||||
outputs: type=local,dest=/tmp/docker_images
|
outputs: type=local,dest=/tmp/docker_images
|
||||||
@@ -254,7 +241,7 @@ jobs:
|
|||||||
# Push Release to github
|
# Push Release to github
|
||||||
- name: Push the release
|
- name: Push the release
|
||||||
uses: ncipollo/release-action@v1
|
uses: ncipollo/release-action@v1
|
||||||
with:
|
with:
|
||||||
allowUpdates: true
|
allowUpdates: true
|
||||||
artifacts:
|
artifacts:
|
||||||
/tmp/release_tars/${{ steps.tag.outputs.release_tag }}-linux.x86_64.tgz,
|
/tmp/release_tars/${{ steps.tag.outputs.release_tag }}-linux.x86_64.tgz,
|
||||||
@@ -273,14 +260,17 @@ jobs:
|
|||||||
|
|
||||||
needs: [inputs, sentry]
|
needs: [inputs, sentry]
|
||||||
if: |
|
if: |
|
||||||
needs.sentry.outputs.release_not_built == 'true'
|
needs.inputs.outputs.macos == 'true'
|
||||||
|| needs.inputs.outputs.force == 'true'
|
&& (
|
||||||
|
needs.sentry.outputs.release_not_built == 'true'
|
||||||
|
|| needs.inputs.outputs.force == 'true'
|
||||||
|
)
|
||||||
|
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
# Checkout the branch
|
# Checkout the branch
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
@@ -325,7 +315,7 @@ jobs:
|
|||||||
sudo ditto /Volumes/SDL2/SDL2.framework /Library/Frameworks/SDL2.framework
|
sudo ditto /Volumes/SDL2/SDL2.framework /Library/Frameworks/SDL2.framework
|
||||||
hdiutil detach /Volumes/SDL2/
|
hdiutil detach /Volumes/SDL2/
|
||||||
|
|
||||||
# Build maiko
|
# Build maiko
|
||||||
- name: Build ldeinit
|
- name: Build ldeinit
|
||||||
working-directory: ./bin
|
working-directory: ./bin
|
||||||
run: |
|
run: |
|
||||||
@@ -389,6 +379,98 @@ jobs:
|
|||||||
draft: ${{ needs.inputs.outputs.draft }}
|
draft: ${{ needs.inputs.outputs.draft }}
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
######################################################################################
|
||||||
|
|
||||||
|
# Windows: build for Windows-Cygwin via Docker build and use results to
|
||||||
|
# create and push release assets to github
|
||||||
|
|
||||||
|
windows:
|
||||||
|
|
||||||
|
needs: [inputs, sentry]
|
||||||
|
if: |
|
||||||
|
needs.inputs.outputs.windows == 'true'
|
||||||
|
&& (
|
||||||
|
needs.sentry.outputs.release_not_built == 'true'
|
||||||
|
|| needs.inputs.outputs.force == 'true'
|
||||||
|
)
|
||||||
|
|
||||||
|
runs-on: windows-2022
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: powershell
|
||||||
|
|
||||||
|
steps:
|
||||||
|
|
||||||
|
# setup git to not mess up line endings
|
||||||
|
- name: git config
|
||||||
|
run: git config --global core.autocrlf input
|
||||||
|
|
||||||
|
# Retrieve Cygwin setup and install cygwin
|
||||||
|
- name: Install cygwin
|
||||||
|
id: cygwin
|
||||||
|
run: |
|
||||||
|
wget https://cygwin.com/setup-x86_64.exe -OutFile setup-x86_64.exe
|
||||||
|
Unblock-File setup-x86_64.exe
|
||||||
|
Start-Process setup-x86_64.exe -Wait -ArgumentList @("--root", ".\cygwin", "--quiet-mode", "--no-admin", "--wait", "--no-shortcuts", "--no-write-registry", "--verbose", "--site", "http://www.gtlib.gatech.edu/pub/cygwin/", "--packages", "nano,binutils,make,cmake,gcc,clang")
|
||||||
|
cygwin\bin\bash -login -c 'sed -i -e "s/^none/#none/" /etc/fstab; echo "none / cygdrive binary,posix=0,user 0 0" >>/etc/fstab'
|
||||||
|
|
||||||
|
# Retrieve SDL2 and install in cygwin
|
||||||
|
- name: Install SDL2
|
||||||
|
id: sdl2
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
gh release download 2.26.5 --repo interlisp/cygwin-sdl --pattern *.tgz --output .\cygwin\sdl2.tar.gz
|
||||||
|
cygwin\bin\bash -login -c 'cd /; tar xzf sdl2.tar.gz'
|
||||||
|
|
||||||
|
# Checkout the branch
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
path: cygwin\maiko
|
||||||
|
|
||||||
|
# Checkout the actions for this repo owner
|
||||||
|
- name: Checkout Actions
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
repository: ${{ github.repository_owner }}/.github
|
||||||
|
path: ./Actions_${{ github.sha }}
|
||||||
|
- run: |
|
||||||
|
mv ./Actions_${{ github.sha }}/actions ../actions
|
||||||
|
rm -recurse -force ./Actions_${{ github.sha }}
|
||||||
|
|
||||||
|
# Setup release tag
|
||||||
|
- name: Setup Release Tag
|
||||||
|
id: tag
|
||||||
|
uses: ./../actions/release-tag-action
|
||||||
|
with:
|
||||||
|
path: cygwin/maiko
|
||||||
|
|
||||||
|
# Build maiko TODO-cleanup
|
||||||
|
- name: Build Cygwin-SDL Maiko
|
||||||
|
run: |
|
||||||
|
cygwin\bin\bash -login -c 'cd /maiko/bin && ./makeright sdl cleanup && ./makeright sdl'
|
||||||
|
cygwin\bin\bash -login -c 'mkdir /tmp/maiko; mkdir /tmp/maiko/bin; mkdir /tmp/maiko/cygwin.x86_64'
|
||||||
|
cygwin\bin\bash -login -c 'cp /maiko/bin/osversion /tmp/maiko/bin; cp /maiko/bin/machinetype /tmp/maiko/bin'
|
||||||
|
cygwin\bin\bash -login -c 'cp /maiko/bin/config.guess /tmp/maiko/bin; cp /maiko/bin/config.sub /tmp/maiko/bin'
|
||||||
|
cygwin\bin\bash -login -c 'cp /maiko/cygwin.x86_64/* /tmp/maiko/cygwin.x86_64; cp /usr/local/bin/SDL2.DLL /tmp/maiko/cygwin.x86_64'
|
||||||
|
cygwin\bin\bash -login -c 'chmod +x /tmp/maiko/bin/*; chmod +x /tmp/maiko/cygwin.x86_64/*'
|
||||||
|
cygwin\bin\bash -login -c 'echo lde > /tmp/maiko/cygwin.x86_64/lde.exe.local; echo ldesdl > /tmp/maiko/cygwin.x86_64/ldesdl.exe.local'
|
||||||
|
cygwin\bin\bash -login -c 'mkdir -p /tmp/release_tars'
|
||||||
|
cygwin\bin\bash -login -c 'tar -c -z -C /tmp -f /tmp/release_tars/${{ steps.tag.outputs.release_tag }}-cygwin.x86_64.tgz maiko'
|
||||||
|
|
||||||
|
# Push Release to github
|
||||||
|
- name: Push the release
|
||||||
|
uses: ncipollo/release-action@v1
|
||||||
|
with:
|
||||||
|
allowUpdates: true
|
||||||
|
artifacts:
|
||||||
|
cygwin/tmp/release_tars/${{ steps.tag.outputs.release_tag }}-cygwin.x86_64.tgz
|
||||||
|
tag: ${{ steps.tag.outputs.release_tag }}
|
||||||
|
draft: ${{ needs.inputs.outputs.draft }}
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
######################################################################################
|
######################################################################################
|
||||||
@@ -403,9 +485,9 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
build_successful: ${{ steps.output.outputs.build_successful }}
|
build_successful: ${{ steps.output.outputs.build_successful }}
|
||||||
|
|
||||||
needs: [inputs, sentry, linux, macos]
|
needs: [inputs, sentry, linux, macos, windows]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
# Checkout the actions for this repo owner
|
# Checkout the actions for this repo owner
|
||||||
- name: Checkout Actions
|
- name: Checkout Actions
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
@@ -415,16 +497,15 @@ jobs:
|
|||||||
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
||||||
|
|
||||||
# Set sentry
|
# Set sentry
|
||||||
- name: Is build for this commit already completed?
|
- name: Is build for this commit already completed?
|
||||||
id: set
|
id: set
|
||||||
uses: ./../actions/set-sentry-action
|
uses: ./../actions/set-sentry-action
|
||||||
with:
|
with:
|
||||||
tag: "release_docker"
|
tag: "release_docker"
|
||||||
|
|
||||||
- name: Output
|
- name: Output
|
||||||
id: output
|
id: output
|
||||||
run: |
|
run: |
|
||||||
echo "build_successful=true" >> $GITHUB_OUTPUT
|
echo "build_successful=true" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
|
||||||
######################################################################################
|
######################################################################################
|
||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -22,9 +22,12 @@ cmake-build-*/**
|
|||||||
*.armv7l-x/**
|
*.armv7l-x/**
|
||||||
*.armv7l/**
|
*.armv7l/**
|
||||||
*.aarch64-x/**
|
*.aarch64-x/**
|
||||||
|
*.aarch64-sdl/**
|
||||||
*.aarch64/**
|
*.aarch64/**
|
||||||
init.386/**
|
init.386/**
|
||||||
*.universal/**
|
*.universal/**
|
||||||
# core files
|
# core files
|
||||||
core
|
core
|
||||||
*.core
|
*.core
|
||||||
|
*.swp
|
||||||
|
|
||||||
|
|||||||
55
Dockerfile
55
Dockerfile
@@ -1,55 +0,0 @@
|
|||||||
#*******************************************************************************
|
|
||||||
#
|
|
||||||
# Dockerfile to build Maiko (Stage 1) and create a Docker image and push it
|
|
||||||
# to DockerHub (stage 2).
|
|
||||||
#
|
|
||||||
# Copyright 2022 by Interlisp.org
|
|
||||||
#
|
|
||||||
# ******************************************************************************
|
|
||||||
|
|
||||||
#
|
|
||||||
# Build Maiko Stage
|
|
||||||
#
|
|
||||||
FROM ubuntu:focal AS builder
|
|
||||||
SHELL ["/bin/bash", "-c"]
|
|
||||||
USER root:root
|
|
||||||
# Install build tools
|
|
||||||
RUN apt-get update && apt-get install -y make clang libx11-dev gcc x11vnc xvfb
|
|
||||||
# Copy over / clean maiko repo
|
|
||||||
COPY . /app/maiko
|
|
||||||
RUN rm -rf /app/maiko/linux*
|
|
||||||
# Build maiko
|
|
||||||
WORKDIR /app/maiko/bin
|
|
||||||
RUN ./makeright x
|
|
||||||
RUN if [ "$(./osversion)" = "linux" ] && [ "$(./machinetype)" = "x86_64" ]; then ./makeright init; fi
|
|
||||||
# Prep for Install Stage
|
|
||||||
RUN mv ../$(./osversion).$(./machinetype) ../TRANSFER
|
|
||||||
#
|
|
||||||
# Install Maiko Stage
|
|
||||||
#
|
|
||||||
FROM ubuntu:focal
|
|
||||||
ARG BUILD_DATE="not_available"
|
|
||||||
ARG RELEASE_TAG="not_available"
|
|
||||||
LABEL name="Maiko"
|
|
||||||
LABEL description="Virtual machine for Interlisp Medley"
|
|
||||||
LABEL url="https://github.com/Interlisp/maiko"
|
|
||||||
LABEL build-time=$BUILD_DATE
|
|
||||||
LABEL release_tag=$RELEASE_TAG
|
|
||||||
ENV MAIKO_RELEASE=$RELEASE_TAG
|
|
||||||
ENV MAIKO_BUILD_DATE=$BUILD_DATE
|
|
||||||
ARG BUILD_LOCATION=/app/maiko
|
|
||||||
ARG INSTALL_LOCATION=/usr/local/interlisp/maiko
|
|
||||||
#
|
|
||||||
SHELL ["/bin/bash", "-c"]
|
|
||||||
USER root:root
|
|
||||||
# Copy release files into /usr/local/directories
|
|
||||||
COPY --from=builder ${BUILD_LOCATION}/bin/osversion ${INSTALL_LOCATION}/bin/
|
|
||||||
COPY --from=builder ${BUILD_LOCATION}/bin/machinetype ${INSTALL_LOCATION}/bin/
|
|
||||||
COPY --from=builder ${BUILD_LOCATION}/bin/config.guess ${INSTALL_LOCATION}/bin/
|
|
||||||
COPY --from=builder ${BUILD_LOCATION}/bin/config.sub ${INSTALL_LOCATION}/bin/
|
|
||||||
COPY --from=builder ${BUILD_LOCATION}/TRANSFER/lde* ${INSTALL_LOCATION}/TRANSFER/
|
|
||||||
RUN cd ${INSTALL_LOCATION} && mv TRANSFER "$(cd bin && ./osversion).$(cd bin/ && ./machinetype)"
|
|
||||||
# Some niceties
|
|
||||||
USER root
|
|
||||||
WORKDIR /root
|
|
||||||
ENTRYPOINT /bin/bash
|
|
||||||
20
bin/makefile-cygwin.x86_64-sdl
Normal file
20
bin/makefile-cygwin.x86_64-sdl
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# Options for Linux, Intel x86_64 and X-Window
|
||||||
|
|
||||||
|
CC = gcc -m64 $(GCC_CFLAGS) -I/usr/local/include
|
||||||
|
#CC = clang -m64 $(CLANG_CFLAGS)
|
||||||
|
|
||||||
|
XFILES = $(OBJECTDIR)sdl.o
|
||||||
|
|
||||||
|
XFLAGS = -DSDL
|
||||||
|
|
||||||
|
# OPTFLAGS is normally -O2.
|
||||||
|
OPTFLAGS = -O2 -g3
|
||||||
|
DFLAGS = $(XFLAGS) -DRELEASE=351
|
||||||
|
|
||||||
|
LDFLAGS = -lm -L/usr/local/lib -lSDL2
|
||||||
|
#
|
||||||
|
LDELDFLAGS =
|
||||||
|
|
||||||
|
OBJECTDIR = ../$(RELEASENAME)/
|
||||||
|
|
||||||
|
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldesdl
|
||||||
@@ -16,8 +16,8 @@ XFILES = $(OBJECTDIR)xmkicon.o \
|
|||||||
XFLAGS = -I/opt/X11/include -DXWINDOW
|
XFLAGS = -I/opt/X11/include -DXWINDOW
|
||||||
|
|
||||||
# OPTFLAGS is normally -O2.
|
# OPTFLAGS is normally -O2.
|
||||||
OPTFLAGS = -O2
|
OPTFLAGS = -g -O2
|
||||||
DEBUGFLAGS = # -DDEBUG -DOPTRACE
|
DEBUGFLAGS = -DARRAYCHECK -DDTDDEBUG # -DDEBUG -DOPTRACE
|
||||||
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351
|
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351
|
||||||
|
|
||||||
LDFLAGS = -L/opt/X11/lib -lX11 -lm
|
LDFLAGS = -L/opt/X11/lib -lX11 -lm
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ XFLAGS = -I/opt/X11/include -DXWINDOW
|
|||||||
|
|
||||||
# OPTFLAGS is normally -O2.
|
# OPTFLAGS is normally -O2.
|
||||||
OPTFLAGS = -O1 -g
|
OPTFLAGS = -O1 -g
|
||||||
DEBUGFLAGS = # -DDEBUG -DOPTRACE
|
DEBUGFLAGS = -DARRAYCHECK -DDTDDEBUG # -DDEBUG -DOPTRACE
|
||||||
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351
|
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=351
|
||||||
|
|
||||||
LDFLAGS = -L/opt/X11/lib -lX11 -lm
|
LDFLAGS = -L/opt/X11/lib -lX11 -lm
|
||||||
|
|||||||
13
inc/adr68k.h
13
inc/adr68k.h
@@ -28,11 +28,19 @@
|
|||||||
*/
|
*/
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
|
|
||||||
|
#include <execinfo.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "lispemul.h"
|
#include "lispemul.h"
|
||||||
#include "lspglob.h"
|
#include "lspglob.h"
|
||||||
|
|
||||||
|
static inline void dobacktrace()
|
||||||
|
{
|
||||||
|
void* callstack[128];
|
||||||
|
int i, frames = backtrace(callstack, 128);
|
||||||
|
backtrace_symbols_fd(callstack, frames, 2);
|
||||||
|
}
|
||||||
|
|
||||||
static inline LispPTR LAddrFromNative(void *NAddr)
|
static inline LispPTR LAddrFromNative(void *NAddr)
|
||||||
{
|
{
|
||||||
if ((uintptr_t)NAddr & 1) {
|
if ((uintptr_t)NAddr & 1) {
|
||||||
@@ -48,8 +56,9 @@ static inline DLword *NativeAligned2FromLAddr(LispPTR LAddr)
|
|||||||
|
|
||||||
static inline LispPTR *NativeAligned4FromLAddr(LispPTR LAddr)
|
static inline LispPTR *NativeAligned4FromLAddr(LispPTR LAddr)
|
||||||
{
|
{
|
||||||
if (LAddr & 1) {
|
if (LAddr & 1 || LAddr > 0x0FFFFFFF) {
|
||||||
printf("Misaligned pointer in NativeAligned4FromLAddr 0x%x\n", LAddr);
|
printf("Misaligned/bad pointer in NativeAligned4FromLAddr 0x%x\n", LAddr);
|
||||||
|
dobacktrace();
|
||||||
}
|
}
|
||||||
return (void *)(Lisp_world + LAddr);
|
return (void *)(Lisp_world + LAddr);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,6 +97,18 @@ struct buf {
|
|||||||
};
|
};
|
||||||
#endif /* BIGVM */
|
#endif /* BIGVM */
|
||||||
#else
|
#else
|
||||||
|
#ifdef BIGVM
|
||||||
|
struct buf {
|
||||||
|
LispPTR filepage;
|
||||||
|
LispPTR vmempage;
|
||||||
|
LispPTR buffernext;
|
||||||
|
unsigned sysnext : 28;
|
||||||
|
unsigned unused : 1;
|
||||||
|
unsigned iodirty : 1;
|
||||||
|
unsigned usermapped : 1;
|
||||||
|
unsigned noreference : 1;
|
||||||
|
};
|
||||||
|
#else
|
||||||
struct buf {
|
struct buf {
|
||||||
LispPTR filepage;
|
LispPTR filepage;
|
||||||
LispPTR vmempage;
|
LispPTR vmempage;
|
||||||
@@ -107,6 +119,7 @@ struct buf {
|
|||||||
unsigned usermapped : 1;
|
unsigned usermapped : 1;
|
||||||
unsigned noreference : 1;
|
unsigned noreference : 1;
|
||||||
};
|
};
|
||||||
|
#endif /* BIGVM */
|
||||||
#endif /* BYTESWAP */
|
#endif /* BYTESWAP */
|
||||||
|
|
||||||
/************* The following procedure is common !! **************************/
|
/************* The following procedure is common !! **************************/
|
||||||
@@ -143,8 +156,10 @@ LispPTR findptrsbuffer(LispPTR ptr) {
|
|||||||
while (LAddrFromNative(bptr) != NIL) {
|
while (LAddrFromNative(bptr) != NIL) {
|
||||||
if (ptr == bptr->vmempage)
|
if (ptr == bptr->vmempage)
|
||||||
return (LAddrFromNative(bptr));
|
return (LAddrFromNative(bptr));
|
||||||
else
|
else {
|
||||||
|
if (bptr->sysnext & 0xF0000000) printf("findptrsbuffer: would have failed %p 0x%X\n", bptr, bptr->sysnext);
|
||||||
bptr = (struct buf *)NativeAligned4FromLAddr(bptr->sysnext);
|
bptr = (struct buf *)NativeAligned4FromLAddr(bptr->sysnext);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return (NIL);
|
return (NIL);
|
||||||
}
|
}
|
||||||
@@ -192,8 +207,6 @@ LispPTR checkarrayblock(LispPTR base, LispPTR free, LispPTR onfreelist) {
|
|||||||
{
|
{
|
||||||
bbase = (struct arrayblock *)NativeAligned4FromLAddr(base);
|
bbase = (struct arrayblock *)NativeAligned4FromLAddr(base);
|
||||||
btrailer = (struct arrayblock *)NativeAligned4FromLAddr(Trailer(base, bbase));
|
btrailer = (struct arrayblock *)NativeAligned4FromLAddr(Trailer(base, bbase));
|
||||||
bfwd = (struct arrayblock *)NativeAligned4FromLAddr(bbase->fwd);
|
|
||||||
bbwd = (struct arrayblock *)NativeAligned4FromLAddr(bbase->bkwd);
|
|
||||||
if (bbase->password != ARRAYBLOCKPASSWORD) {
|
if (bbase->password != ARRAYBLOCKPASSWORD) {
|
||||||
printarrayblock(base);
|
printarrayblock(base);
|
||||||
error("ARRAYBLOCK password wrong\n");
|
error("ARRAYBLOCK password wrong\n");
|
||||||
@@ -215,7 +228,10 @@ LispPTR checkarrayblock(LispPTR base, LispPTR free, LispPTR onfreelist) {
|
|||||||
} else if (!onfreelist || (bbase->arlen < MINARRAYBLOCKSIZE))
|
} else if (!onfreelist || (bbase->arlen < MINARRAYBLOCKSIZE))
|
||||||
/* Remaining tests only for free list. */
|
/* Remaining tests only for free list. */
|
||||||
return (NIL);
|
return (NIL);
|
||||||
else if ((bbwd->fwd != base) || (bfwd->bkwd != base)) {
|
|
||||||
|
bfwd = (struct arrayblock *)NativeAligned4FromLAddr(bbase->fwd);
|
||||||
|
bbwd = (struct arrayblock *)NativeAligned4FromLAddr(bbase->bkwd);
|
||||||
|
if ((bbwd->fwd != base) || (bfwd->bkwd != base)) {
|
||||||
error("ARRAYBLOCK links fouled\n");
|
error("ARRAYBLOCK links fouled\n");
|
||||||
} else {
|
} else {
|
||||||
fbl = FreeBlockChainN(bbase->arlen);
|
fbl = FreeBlockChainN(bbase->arlen);
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ retry:
|
|||||||
if (917505 == *(LispPTR *)ptr) error("N_OP_createcell E0001 error");
|
if (917505 == *(LispPTR *)ptr) error("N_OP_createcell E0001 error");
|
||||||
/* replace dtd_free with newcell's top DLword (it may keep next chain)*/
|
/* replace dtd_free with newcell's top DLword (it may keep next chain)*/
|
||||||
dtd68k->dtd_free = (*((LispPTR *)ptr)) & POINTERMASK;
|
dtd68k->dtd_free = (*((LispPTR *)ptr)) & POINTERMASK;
|
||||||
if (dtd68k->dtd_free & 0x8000001) error("bad entry on free chain.");
|
if (dtd68k->dtd_free & 0x8000001) error("bad entry on free chain(1).");
|
||||||
|
|
||||||
dtd68k->dtd_oldcnt++;
|
dtd68k->dtd_oldcnt++;
|
||||||
|
|
||||||
@@ -84,7 +84,7 @@ retry:
|
|||||||
return (tos);
|
return (tos);
|
||||||
} else {
|
} else {
|
||||||
dtd68k->dtd_free = initmdspage(alloc_mdspage(dtd68k->dtd_typeentry), dtd68k->dtd_size, NIL);
|
dtd68k->dtd_free = initmdspage(alloc_mdspage(dtd68k->dtd_typeentry), dtd68k->dtd_size, NIL);
|
||||||
if (dtd68k->dtd_free & 0x8000000) error("bad entry on free chain.");
|
if (dtd68k->dtd_free & 0x8000000) error("bad entry on free chain(2).");
|
||||||
goto retry;
|
goto retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,7 +119,7 @@ retry:
|
|||||||
|
|
||||||
/* replace dtd_free with newcell's top DLword (it may keep next chain)*/
|
/* replace dtd_free with newcell's top DLword (it may keep next chain)*/
|
||||||
dtd68k->dtd_free = (*((LispPTR *)ptr)) & POINTERMASK;
|
dtd68k->dtd_free = (*((LispPTR *)ptr)) & POINTERMASK;
|
||||||
if (dtd68k->dtd_free & 0x8000000) error("bad entry on free chain.");
|
if (dtd68k->dtd_free & 0x8000000) error("bad entry on free chain(3).");
|
||||||
|
|
||||||
#ifdef DTDDEBUG
|
#ifdef DTDDEBUG
|
||||||
if ((dtd68k->dtd_free != 0) && (type != GetTypeNumber(dtd68k->dtd_free)))
|
if ((dtd68k->dtd_free != 0) && (type != GetTypeNumber(dtd68k->dtd_free)))
|
||||||
@@ -144,7 +144,7 @@ retry:
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
dtd68k->dtd_free = initmdspage(alloc_mdspage(dtd68k->dtd_typeentry), dtd68k->dtd_size, NIL);
|
dtd68k->dtd_free = initmdspage(alloc_mdspage(dtd68k->dtd_typeentry), dtd68k->dtd_size, NIL);
|
||||||
if (dtd68k->dtd_free & 0x8000000) error("bad entry on free chain.");
|
if (dtd68k->dtd_free & 0x8000000) error("bad entry on free chain(4).");
|
||||||
|
|
||||||
#ifdef DTDDEBUG
|
#ifdef DTDDEBUG
|
||||||
check_dtd_chain(type);
|
check_dtd_chain(type);
|
||||||
|
|||||||
Reference in New Issue
Block a user