veandco / go-sdl2

SDL2 binding for Go
https://godoc.org/github.com/veandco/go-sdl2
BSD 3-Clause "New" or "Revised" License
2.17k stars 219 forks source link

fatal error: 'SDL2/_real_SDL_config.h' file not found #555

Closed jkassis closed 1 year ago

jkassis commented 1 year ago

Go version: 1.20

Go-SDL2 version: latest

SDL2 version: debian bullseye

Docker OS: Debian Bullseye

Host OS: Apple Silicon M2

In my Dockerfile, I do this...

# install all the variants of libsdl2
RUN apt update && apt -y --no-install-recommends install libsdl2-dev:i386 libsdl2-image-dev:i386 libsdl2-mixer-dev:i386 libsdl2-ttf-dev:i386
RUN apt update && apt -y --no-install-recommends install libsdl2-dev:arm64 libsdl2-image-dev:arm64 libsdl2-mixer-dev:arm64 libsdl2-ttf-dev:arm64
RUN apt update && apt -y --no-install-recommends install libsdl2-dev:amd64 libsdl2-image-dev:amd64 libsdl2-mixer-dev:amd64 libsdl2-ttf-dev:amd64
RUN apt update && apt -y --no-install-recommends install libsdl2-dev:armhf libsdl2-image-dev:armhf libsdl2-mixer-dev:armhf libsdl2-ttf-dev:armhf
ENV PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/arm-linux-gnueabihf/pkgconfig:/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig

My build script...

#!/usr/bin/env bash
set -e

cd port/golang
PWD=`pwd`
echo "Working in $PWD"

echo ""
echo ""
echo "The following info can help you debug your builds..."
echo "These sdl2 packages are known to pkg-config"
 pkg-config --libs sdl2 || exit

echo ""
echo ""
echo "These sdl2 files are installed in /usr"
find /usr -name '*SDL*' || exit

echo ""
echo ""
echo "These compilers are installed through OSXCross in /osxcross/target/bin/"
find /osxcross/target/bin/ -name '*-clang' || exit
find /osxcross/target/bin/ -name '*-gcc' || exit

echo ""
echo ""
echo "Building arm64..."

# export OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1
CGO_CFLAGS=`sdl2-config --cflags`
CGO_CXXFLAGS=`sdl2-config --cflags`
CGO_CPPFLAGS=`sdl2-config --cflags`
CGO_LDFLAGS=`sdl2-config --libs`

CMD=$(cat << END
 CGO_CFLAGS="$CGO_CFLAGS"
 CGO_CXXFLAGS="$CGO_CXXFLAGS"
 CGO_CPPFLAGS="$CGO_CPPFLAGS"
 CGO_LDFLAGS="$CGO_LDFLAGS"
 CGO_ENABLED=1
 CC=/osxcross/target/bin/arm64-apple-darwin21.4-clang
 CC_FOR_TARGET=/osxcross/target/bin/arm64-apple-darwin21.4-clang
 CPP_FOR_TARGET=/osxcross/target/bin/arm64-apple-darwin21.4-clang
 CXX_FOR_TARGET=/osxcross/target/bin/arm64-apple-darwin21.4-clang
 GOOS=darwin
 GOARCH=arm64
 go build -tags static -ldflags "-s -w" -v -a
    -o ../../build/app-macos-golang code/main.go
END
)

echo ""
echo ""
echo ""
echo "Running..."
echo $CMD
eval $CMD

echo ""
echo ""
echo ""
echo "Complete!"```

The output is this...

Working in /proj/port/golang

The following info can help you debug your builds...
These sdl2 packages are known to pkg-config
-lSDL2

These sdl2 files are installed in /usr
/usr/include/SDL2
/usr/include/SDL2/SDL_rwops.h
/usr/include/SDL2/SDL_locale.h
/usr/include/SDL2/SDL_cpuinfo.h
/usr/include/SDL2/SDL_metal.h
/usr/include/SDL2/SDL_rect.h
/usr/include/SDL2/SDL_messagebox.h
/usr/include/SDL2/SDL_haptic.h
/usr/include/SDL2/SDL_gamecontroller.h
/usr/include/SDL2/SDL_misc.h
/usr/include/SDL2/SDL_opengl.h
/usr/include/SDL2/SDL_keyboard.h
/usr/include/SDL2/SDL_test_fuzzer.h
/usr/include/SDL2/SDL_surface.h
/usr/include/SDL2/SDL_sensor.h
/usr/include/SDL2/SDL_error.h
/usr/include/SDL2/SDL_events.h
/usr/include/SDL2/SDL_version.h
/usr/include/SDL2/SDL_opengl_glext.h
/usr/include/SDL2/SDL_types.h
/usr/include/SDL2/SDL_keycode.h
/usr/include/SDL2/SDL_test_font.h
/usr/include/SDL2/SDL_touch.h
/usr/include/SDL2/SDL_opengles2_gl2ext.h
/usr/include/SDL2/SDL_syswm.h
/usr/include/SDL2/SDL_opengles2.h
/usr/include/SDL2/SDL_mutex.h
/usr/include/SDL2/SDL_mixer.h
/usr/include/SDL2/SDL_bits.h
/usr/include/SDL2/SDL_opengles2_gl2.h
/usr/include/SDL2/SDL_test_crc32.h
/usr/include/SDL2/SDL_stdinc.h
/usr/include/SDL2/SDL_assert.h
/usr/include/SDL2/SDL_vulkan.h
/usr/include/SDL2/SDL_test_common.h
/usr/include/SDL2/SDL_pixels.h
/usr/include/SDL2/SDL_test_log.h
/usr/include/SDL2/SDL_scancode.h
/usr/include/SDL2/SDL_filesystem.h
/usr/include/SDL2/SDL_main.h
/usr/include/SDL2/SDL_test_assert.h
/usr/include/SDL2/SDL_mouse.h
/usr/include/SDL2/SDL_egl.h
/usr/include/SDL2/SDL_log.h
/usr/include/SDL2/SDL_audio.h
/usr/include/SDL2/SDL_thread.h
/usr/include/SDL2/SDL_image.h
/usr/include/SDL2/SDL_gesture.h
/usr/include/SDL2/SDL_test_harness.h
/usr/include/SDL2/SDL_blendmode.h
/usr/include/SDL2/SDL_render.h
/usr/include/SDL2/SDL_opengles2_khrplatform.h
/usr/include/SDL2/SDL_endian.h
/usr/include/SDL2/SDL_opengles2_gl2platform.h
/usr/include/SDL2/SDL_hints.h
/usr/include/SDL2/SDL_platform.h
/usr/include/SDL2/SDL_power.h
/usr/include/SDL2/SDL_revision.h
/usr/include/SDL2/SDL_timer.h
/usr/include/SDL2/SDL_test_memory.h
/usr/include/SDL2/SDL_test_random.h
/usr/include/SDL2/SDL_name.h
/usr/include/SDL2/SDL_clipboard.h
/usr/include/SDL2/SDL_test_images.h
/usr/include/SDL2/SDL_shape.h
/usr/include/SDL2/SDL_config.h
/usr/include/SDL2/SDL_ttf.h
/usr/include/SDL2/SDL_joystick.h
/usr/include/SDL2/SDL_test_md5.h
/usr/include/SDL2/SDL_test_compare.h
/usr/include/SDL2/SDL_atomic.h
/usr/include/SDL2/SDL.h
/usr/include/SDL2/SDL_quit.h
/usr/include/SDL2/SDL_system.h
/usr/include/SDL2/SDL_video.h
/usr/include/SDL2/SDL_loadso.h
/usr/include/SDL2/SDL_test.h
/usr/include/SDL2/SDL_opengles.h
/usr/include/arm-linux-gnueabihf/SDL2
/usr/include/arm-linux-gnueabihf/SDL2/_real_SDL_config.h
/usr/include/arm-linux-gnueabihf/SDL2/SDL_platform.h
/usr/include/aarch64-linux-gnu/SDL2
/usr/include/aarch64-linux-gnu/SDL2/_real_SDL_config.h
/usr/include/aarch64-linux-gnu/SDL2/SDL_platform.h
/usr/include/i386-linux-gnu/SDL2
/usr/include/i386-linux-gnu/SDL2/_real_SDL_config.h
/usr/include/i386-linux-gnu/SDL2/SDL_platform.h
/usr/include/x86_64-linux-gnu/SDL2
/usr/include/x86_64-linux-gnu/SDL2/_real_SDL_config.h
/usr/include/x86_64-linux-gnu/SDL2/SDL_platform.h
/usr/share/doc/libsdl2-2.0-0/README-SDL.txt
/usr/share/doc/libsoap-lite-perl/examples/WSDL
/usr/share/cmake-3.18/Help/module/FindSDL_ttf.rst
/usr/share/cmake-3.18/Help/module/FindSDL_net.rst
/usr/share/cmake-3.18/Help/module/FindSDL_image.rst
/usr/share/cmake-3.18/Help/module/FindSDL_sound.rst
/usr/share/cmake-3.18/Help/module/FindSDL.rst
/usr/share/cmake-3.18/Help/module/FindSDL_mixer.rst
/usr/share/cmake-3.18/Modules/FindSDL_net.cmake
/usr/share/cmake-3.18/Modules/FindSDL_mixer.cmake
/usr/share/cmake-3.18/Modules/FindSDL_image.cmake
/usr/share/cmake-3.18/Modules/FindSDL_sound.cmake
/usr/share/cmake-3.18/Modules/FindSDL.cmake
/usr/share/cmake-3.18/Modules/FindSDL_ttf.cmake
/usr/lib/x86_64-linux-gnu/pkgconfig/SDL2_ttf.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/SDL2_image.pc
/usr/lib/x86_64-linux-gnu/libSDL2_test.a
/usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0
/usr/lib/x86_64-linux-gnu/libSDL2_image-2.0.so.0
/usr/lib/x86_64-linux-gnu/libSDL2_ttf.so
/usr/lib/x86_64-linux-gnu/libSDL2.a
/usr/lib/x86_64-linux-gnu/libSDL2_ttf-2.0.so
/usr/lib/x86_64-linux-gnu/libSDL2_image.so
/usr/lib/x86_64-linux-gnu/libSDL2_image-2.0.so.0.2.3
/usr/lib/x86_64-linux-gnu/libSDL2.so
/usr/lib/x86_64-linux-gnu/libSDL2_ttf-2.0.so.0.14.1
/usr/lib/x86_64-linux-gnu/libSDL2_ttf.a
/usr/lib/x86_64-linux-gnu/cmake/SDL2
/usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0.14.0
/usr/lib/x86_64-linux-gnu/libSDL2_ttf-2.0.so.0
/usr/lib/x86_64-linux-gnu/libSDL2_image.a
/usr/lib/x86_64-linux-gnu/installed-tests/SDL2
/usr/lib/x86_64-linux-gnu/libSDL2_image-2.0.so
/usr/lib/x86_64-linux-gnu/libSDL2main.a
/usr/lib/x86_64-linux-gnu/libSDL2-2.0.so
/usr/lib/arm-linux-gnueabihf/libSDL2_test.a
/usr/lib/arm-linux-gnueabihf/libSDL2-2.0.so.0
/usr/lib/arm-linux-gnueabihf/libSDL2_mixer.so
/usr/lib/arm-linux-gnueabihf/libSDL2_image-2.0.so.0
/usr/lib/arm-linux-gnueabihf/libSDL2_ttf.so
/usr/lib/arm-linux-gnueabihf/libSDL2.a
/usr/lib/arm-linux-gnueabihf/libSDL2_ttf-2.0.so
/usr/lib/arm-linux-gnueabihf/libSDL2_image.so
/usr/lib/arm-linux-gnueabihf/libSDL2_image-2.0.so.0.2.3
/usr/lib/arm-linux-gnueabihf/libSDL2.so
/usr/lib/arm-linux-gnueabihf/libSDL2_ttf-2.0.so.0.14.1
/usr/lib/arm-linux-gnueabihf/libSDL2_ttf.a
/usr/lib/arm-linux-gnueabihf/cmake/SDL2
/usr/lib/arm-linux-gnueabihf/libSDL2_mixer-2.0.so.0.2.2
/usr/lib/arm-linux-gnueabihf/libSDL2_mixer-2.0.so.0
/usr/lib/arm-linux-gnueabihf/libSDL2-2.0.so.0.14.0
/usr/lib/arm-linux-gnueabihf/libSDL2_ttf-2.0.so.0
/usr/lib/arm-linux-gnueabihf/libSDL2_image.a
/usr/lib/arm-linux-gnueabihf/installed-tests/SDL2
/usr/lib/arm-linux-gnueabihf/libSDL2_image-2.0.so
/usr/lib/arm-linux-gnueabihf/libSDL2_mixer.a
/usr/lib/arm-linux-gnueabihf/libSDL2_mixer-2.0.so
/usr/lib/arm-linux-gnueabihf/libSDL2main.a
/usr/lib/arm-linux-gnueabihf/libSDL2-2.0.so
/usr/lib/arm-linux-gnueabihf/pkgconfig/SDL2_ttf.pc
/usr/lib/arm-linux-gnueabihf/pkgconfig/SDL2_mixer.pc
/usr/lib/arm-linux-gnueabihf/pkgconfig/SDL2_image.pc
/usr/lib/aarch64-linux-gnu/pkgconfig/SDL2_ttf.pc
/usr/lib/aarch64-linux-gnu/pkgconfig/SDL2_image.pc
/usr/lib/aarch64-linux-gnu/libSDL2_test.a
/usr/lib/aarch64-linux-gnu/libSDL2-2.0.so.0
/usr/lib/aarch64-linux-gnu/libSDL2_image-2.0.so.0
/usr/lib/aarch64-linux-gnu/libSDL2_ttf.so
/usr/lib/aarch64-linux-gnu/libSDL2.a
/usr/lib/aarch64-linux-gnu/libSDL2_ttf-2.0.so
/usr/lib/aarch64-linux-gnu/libSDL2_image.so
/usr/lib/aarch64-linux-gnu/libSDL2_image-2.0.so.0.2.3
/usr/lib/aarch64-linux-gnu/libSDL2.so
/usr/lib/aarch64-linux-gnu/libSDL2_ttf-2.0.so.0.14.1
/usr/lib/aarch64-linux-gnu/libSDL2_ttf.a
/usr/lib/aarch64-linux-gnu/cmake/SDL2
/usr/lib/aarch64-linux-gnu/libSDL2-2.0.so.0.14.0
/usr/lib/aarch64-linux-gnu/libSDL2_ttf-2.0.so.0
/usr/lib/aarch64-linux-gnu/libSDL2_image.a
/usr/lib/aarch64-linux-gnu/installed-tests/SDL2
/usr/lib/aarch64-linux-gnu/libSDL2_image-2.0.so
/usr/lib/aarch64-linux-gnu/libSDL2main.a
/usr/lib/aarch64-linux-gnu/libSDL2-2.0.so
/usr/lib/i386-linux-gnu/libSDL2_test.a
/usr/lib/i386-linux-gnu/libSDL2-2.0.so.0
/usr/lib/i386-linux-gnu/libSDL2_image-2.0.so.0
/usr/lib/i386-linux-gnu/libSDL2_ttf.so
/usr/lib/i386-linux-gnu/libSDL2.a
/usr/lib/i386-linux-gnu/libSDL2_ttf-2.0.so
/usr/lib/i386-linux-gnu/libSDL2_image.so
/usr/lib/i386-linux-gnu/libSDL2_image-2.0.so.0.2.3
/usr/lib/i386-linux-gnu/libSDL2.so
/usr/lib/i386-linux-gnu/libSDL2_ttf-2.0.so.0.14.1
/usr/lib/i386-linux-gnu/libSDL2_ttf.a
/usr/lib/i386-linux-gnu/cmake/SDL2
/usr/lib/i386-linux-gnu/libSDL2-2.0.so.0.14.0
/usr/lib/i386-linux-gnu/libSDL2_ttf-2.0.so.0
/usr/lib/i386-linux-gnu/libSDL2_image.a
/usr/lib/i386-linux-gnu/installed-tests/SDL2
/usr/lib/i386-linux-gnu/libSDL2_image-2.0.so
/usr/lib/i386-linux-gnu/libSDL2main.a
/usr/lib/i386-linux-gnu/libSDL2-2.0.so
/usr/lib/i386-linux-gnu/pkgconfig/SDL2_ttf.pc
/usr/lib/i386-linux-gnu/pkgconfig/SDL2_image.pc

These compilers are installed through OSXCross in /osxcross/target/bin/
/osxcross/target/bin/oa64e-clang
/osxcross/target/bin/arm64-apple-darwin21.4-clang
/osxcross/target/bin/o64h-clang
/osxcross/target/bin/x86_64-apple-darwin21.4-clang
/osxcross/target/bin/oa64-clang
/osxcross/target/bin/x86_64h-apple-darwin21.4-clang
/osxcross/target/bin/o64-clang
/osxcross/target/bin/aarch64-apple-darwin21.4-clang
/osxcross/target/bin/arm64e-apple-darwin21.4-clang

Building arm64...

Running...
CGO_CFLAGS="-I/usr/include/SDL2 -D_REENTRANT" CGO_CXXFLAGS="-I/usr/include/SDL2 -D_REENTRANT" CGO_CPPFLAGS="-I/usr/include/SDL2 -D_REENTRANT" CGO_LDFLAGS="-lSDL2" CGO_ENABLED=1 CC=/osxcross/target/bin/arm64-apple-darwin21.4-clang CC_FOR_TARGET=/osxcross/target/bin/arm64-apple-darwin21.4-clang CPP_FOR_TARGET=/osxcross/target/bin/arm64-apple-darwin21.4-clang CXX_FOR_TARGET=/osxcross/target/bin/arm64-apple-darwin21.4-clang GOOS=darwin GOARCH=arm64 go build -tags static -ldflags "-s -w" -v -a -o ../../build/app-macos-golang code/main.go
internal/goarch
internal/unsafeheader
internal/cpu
internal/abi
internal/coverage/rtcov
internal/bytealg
internal/goexperiment
internal/goos
runtime/internal/atomic
runtime/internal/math
runtime/internal/sys
internal/itoa
runtime
math/bits
math
unicode/utf8
internal/race
sync/atomic
unicode
image/color
internal/reflectlite
sync
internal/testlog
runtime/cgo
errors
strconv
reflect
sort
internal/fmtsort
io
internal/oserror
syscall
# runtime/cgo
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
# runtime/cgo
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
# runtime/cgo
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
# runtime/cgo
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
# runtime/cgo
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
# runtime/cgo
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
# runtime/cgo
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
# runtime/cgo
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
# runtime/cgo
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
# runtime/cgo
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
internal/safefilepath
path
encoding/binary
bytes
internal/syscall/unix
time
internal/syscall/execenv
strings
bufio
image
internal/poll
io/fs
internal/godebug
math/rand
os
fmt
github.com/veandco/go-sdl2/sdl
# github.com/veandco/go-sdl2/sdl
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
osxcross: warning: possibly dangerous include path specified: '-I /usr/include/SDL2'
osxcross: info: you can silence this warning via 'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1' (env)
In file included from vendor/github.com/veandco/go-sdl2/sdl/audio.go:4:
In file included from ./sdl_wrapper.h:5:
In file included from /usr/include/SDL2/SDL.h:32:
In file included from /usr/include/SDL2/SDL_main.h:25:
In file included from /usr/include/SDL2/SDL_stdinc.h:31:
/usr/include/SDL2/SDL_config.h:4:10: fatal error: 'SDL2/_real_SDL_config.h' file not found
#include <SDL2/_real_SDL_config.h>
         ^~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
veeableful commented 1 year ago

Hi @jkassis, it seems like the project is being compiled statically. In that case, the SDL2 apt packages shouldn't be needed. You can reference the following steps to compile for macOS M1. Let me know if it helps! I just added initial M1 static compilation support on v0.4.32.

  1. Run a container. This example uses Debian image with Podman.

    podman run -it --name debian debian:latest bash
  2. Install required packages.

    apt update && apt install -y vim git curl xz-utils clang make cmake libxml2-dev libssl-dev libz-dev
  3. Clone osxcross

    cd /opt
    git clone https://github.com/tpoechtrager/osxcross
  4. Build macOS SDK

    cd /opt/osxcross/tarballs
    curl -O https://s3.veand.co/go-sdl2/MacOSX11.3.sdk.tar.xz
    cd /opt/osxcross
    SDK_VERSION=11.3 ./build.sh
  5. Download and extract Go

    cd /opt
    curl -L -O https://go.dev/dl/go1.20.linux-amd64.tar.gz
    tar xf go1.20.linux-amd64.tar.gz
  6. Set up PATH for Go by editing ~/.profile

vim ~/.profile

Put the following content at the bottom of ~/.profile:

export GOROOT="/opt/go"
export GOPATH="/opt/.go"
export PATH="$GOPATH/bin:$GOROOT/bin:$PATH"

Reload .profile

. ~/.profile
  1. Set up an example go-sdl2 project
    cd /opt
    mkdir example
    cd /opt/example
    go mod init example
    vim main.go

Put the following code in main.go:

package main

import (
    "github.com/veandco/go-sdl2/sdl"
    "github.com/veandco/go-sdl2/ttf"
    "github.com/veandco/go-sdl2/img"
    "github.com/veandco/go-sdl2/mix"
)

func main() {
    sdl.Init(sdl.INIT_EVERYTHING)
    ttf.Init()
    img.Init(img.INIT_PNG)
    mix.Init(mix.INIT_MP3)
}

Then download the dependencies using:

go mod tidy
  1. Create a build script for cross-compiling the program to macOS
vim build.sh

Put the following content in build.sh:

#!/usr/bin/env bash

export TARGET="x86_64-apple-darwin20.4"
export OSXCROSS="/opt/osxcross"
export SDK_VERSION=11.3
export DARWIN="${OSXCROSS}/target"
export DARWIN_SDK="${DARWIN}/SDK/MacOSX${SDK_VERSION}.sdk"

export PATH="${DARWIN}/bin:${DARWIN_SDK}/bin:${PATH}"
export LDFLAGS="-L${DARWIN_SDK}/lib -mmacosx-version-min=10.10"
export CC="${TARGET}-clang"
export CXX="${TARGET}-clang++"

CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build -tags static -ldflags "-s -w"

Then make it executable and run it:

chmod +x build.sh
./build.sh
  1. After it finished building, you can copy the executable to your local machine by running this on the host machine:
    podman cp debian:/opt/example/example .
jkassis commented 1 year ago

i forgot to mention in my original posts that my project is (was) vendored.

v0.4.32 works with your instructions here (without the apts installed) unless building from vendor'd libs.

go mod -vendor probably pruned the static C code needed to build this?!? any thoughts about how to prevent this?

veeableful commented 1 year ago

Hi @jkassis, I have pushed new commits that have workarounds for it. Would you mind trying the v0.4.x branch and let me know if it works for you? I will create another tag if it works for you. Thanks!

jkassis commented 1 year ago

very nice. works! thank you!

veeableful commented 1 year ago

Thank you for testing it! I have pushed a new tag v0.4.33.