Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 81 additions & 32 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ jobs:
brew install openssl sqlite3
brew install libzip json-c

# Install Luau via Homebrew
brew install luau

# Install iOS development dependencies
brew install llvm || true
brew install libomp || true
Expand Down Expand Up @@ -55,19 +58,41 @@ jobs:
fi
fi

# Note: Using Luau headers that are already in the project
echo "Using Luau headers from source/cpp/luau"
# Set up Luau paths
LUAU_PREFIX=$(brew --prefix luau)
echo "Using Homebrew Luau from $LUAU_PREFIX"

# Check actual library and include structure
echo "Checking Luau installation structure..."
ls -la $LUAU_PREFIX/include/ || echo "Include directory not found"
ls -la $LUAU_PREFIX/lib/ || echo "Lib directory not found"

# Find the actual library file
LUAU_LIBRARY=$(find $LUAU_PREFIX/lib -name "*.dylib" | head -1)
if [ -z "$LUAU_LIBRARY" ]; then
LUAU_LIBRARY=$(find $LUAU_PREFIX/lib -name "*.a" | head -1)
fi

if [ -z "$LUAU_LIBRARY" ]; then
echo "Warning: Could not find Luau library, using default path assumption"
LUAU_LIBRARY="$LUAU_PREFIX/lib/liblua.dylib"
fi

# No need to install Lua or create custom headers
# The compatibility layer is added directly in source/lfs.c
echo "Found Luau library: $LUAU_LIBRARY"

# Create directories for compiler to find headers
mkdir -p build/include
# Set environment variables for Luau
echo "LUAU_INCLUDE_DIR=$LUAU_PREFIX/include" >> $GITHUB_ENV
echo "LUAU_LIB_DIR=$LUAU_PREFIX/lib" >> $GITHUB_ENV
echo "LUA_INCLUDE_DIR=$LUAU_PREFIX/include" >> $GITHUB_ENV
echo "LUA_LIBRARIES=$LUAU_LIBRARY" >> $GITHUB_ENV

# Set environment variables to use internal Luau headers
echo "LUA_INCLUDE_DIR=$GITHUB_WORKSPACE/source/cpp/luau" >> $GITHUB_ENV
echo "CFLAGS=-I$GITHUB_WORKSPACE/source/cpp/luau -I$GITHUB_WORKSPACE/source" >> $GITHUB_ENV
echo "CXXFLAGS=-I$GITHUB_WORKSPACE/source/cpp/luau -I$GITHUB_WORKSPACE/source" >> $GITHUB_ENV
# Set compiler flags to include Luau headers - include both Homebrew and project headers
echo "CFLAGS=-I$LUAU_PREFIX/include -I$GITHUB_WORKSPACE -I$GITHUB_WORKSPACE/source" >> $GITHUB_ENV
echo "CXXFLAGS=-I$LUAU_PREFIX/include -I$GITHUB_WORKSPACE -I$GITHUB_WORKSPACE/source" >> $GITHUB_ENV

# Also pass these to subsequent commands - use project headers as fallback
export LUA_INCLUDE_DIR="$GITHUB_WORKSPACE/source/cpp/luau"
export LUA_LIBRARIES=$LUAU_LIBRARY

# Create directories for project resources (only once)
mkdir -p Resources/AIData/LocalModels
Expand All @@ -83,59 +108,83 @@ jobs:

# Create simplified Find*.cmake files for building
# First, create FindLuaFileSystem.cmake
echo "# FindLuaFileSystem.cmake - Using internal Luau headers" > cmake/FindLuaFileSystem.cmake
echo "# FindLuaFileSystem.cmake - Using Homebrew Luau" > cmake/FindLuaFileSystem.cmake
echo "# Create a target for lfs.c that ensures it can find the Luau headers" >> cmake/FindLuaFileSystem.cmake
echo "function(add_lfs_target)" >> cmake/FindLuaFileSystem.cmake
echo " if(TARGET lfs_obj)" >> cmake/FindLuaFileSystem.cmake
echo " return()" >> cmake/FindLuaFileSystem.cmake
echo " endif()" >> cmake/FindLuaFileSystem.cmake
echo "" >> cmake/FindLuaFileSystem.cmake
echo " message(STATUS \"Setting up LuaFileSystem with native Luau headers\")" >> cmake/FindLuaFileSystem.cmake
echo " message(STATUS \"Setting up LuaFileSystem with Homebrew Luau headers\")" >> cmake/FindLuaFileSystem.cmake
echo "" >> cmake/FindLuaFileSystem.cmake
echo " add_library(lfs_obj OBJECT \${CMAKE_SOURCE_DIR}/source/lfs.c)" >> cmake/FindLuaFileSystem.cmake
echo "" >> cmake/FindLuaFileSystem.cmake
echo " # Get Luau include directory from environment or find it" >> cmake/FindLuaFileSystem.cmake
echo " if(DEFINED ENV{LUAU_INCLUDE_DIR})" >> cmake/FindLuaFileSystem.cmake
echo " set(LUAU_INCLUDE_DIR \$ENV{LUAU_INCLUDE_DIR})" >> cmake/FindLuaFileSystem.cmake
echo " else()" >> cmake/FindLuaFileSystem.cmake
echo " # Try to find it using brew" >> cmake/FindLuaFileSystem.cmake
echo " execute_process(" >> cmake/FindLuaFileSystem.cmake
echo " COMMAND brew --prefix luau" >> cmake/FindLuaFileSystem.cmake
echo " OUTPUT_VARIABLE LUAU_PREFIX" >> cmake/FindLuaFileSystem.cmake
echo " OUTPUT_STRIP_TRAILING_WHITESPACE" >> cmake/FindLuaFileSystem.cmake
echo " )" >> cmake/FindLuaFileSystem.cmake
echo " set(LUAU_INCLUDE_DIR \"\${LUAU_PREFIX}/include\")" >> cmake/FindLuaFileSystem.cmake
echo " endif()" >> cmake/FindLuaFileSystem.cmake
echo "" >> cmake/FindLuaFileSystem.cmake
echo " target_include_directories(lfs_obj PRIVATE" >> cmake/FindLuaFileSystem.cmake
echo " \${LUAU_INCLUDE_DIR}" >> cmake/FindLuaFileSystem.cmake
echo " \${CMAKE_SOURCE_DIR}/source" >> cmake/FindLuaFileSystem.cmake
echo " \${CMAKE_SOURCE_DIR}/source/cpp" >> cmake/FindLuaFileSystem.cmake
echo " \${CMAKE_SOURCE_DIR}/source/cpp/luau" >> cmake/FindLuaFileSystem.cmake
echo " \${CMAKE_SOURCE_DIR}" >> cmake/FindLuaFileSystem.cmake
echo " )" >> cmake/FindLuaFileSystem.cmake
echo "" >> cmake/FindLuaFileSystem.cmake
echo " target_compile_definitions(lfs_obj PRIVATE " >> cmake/FindLuaFileSystem.cmake
echo " LFS_USE_INTERNAL_LUAU=1" >> cmake/FindLuaFileSystem.cmake
echo " LUAU_FASTFLAG_LUAERROR=1" >> cmake/FindLuaFileSystem.cmake
echo " )" >> cmake/FindLuaFileSystem.cmake
echo " # No need for special compile definitions with Homebrew Luau" >> cmake/FindLuaFileSystem.cmake
echo "" >> cmake/FindLuaFileSystem.cmake
echo " set_target_properties(lfs_obj PROPERTIES" >> cmake/FindLuaFileSystem.cmake
echo " C_STANDARD 99" >> cmake/FindLuaFileSystem.cmake
echo " POSITION_INDEPENDENT_CODE ON" >> cmake/FindLuaFileSystem.cmake
echo " )" >> cmake/FindLuaFileSystem.cmake
echo "" >> cmake/FindLuaFileSystem.cmake
echo " message(STATUS \"Using internal Luau headers from \${CMAKE_SOURCE_DIR}/source/cpp/luau\")" >> cmake/FindLuaFileSystem.cmake
echo " message(STATUS \"Using Homebrew Luau headers from \${LUAU_INCLUDE_DIR}\")" >> cmake/FindLuaFileSystem.cmake
echo "endfunction()" >> cmake/FindLuaFileSystem.cmake

# Then create FindLua.cmake
echo "# FindLua.cmake - Using internal Luau headers" > cmake/FindLua.cmake
echo "# This is a minimal finder that points to internal Luau headers" >> cmake/FindLua.cmake
echo "# FindLua.cmake - Using Homebrew Luau" > cmake/FindLua.cmake
echo "# This is a minimal finder that points to Homebrew Luau" >> cmake/FindLua.cmake
echo "" >> cmake/FindLua.cmake
echo "# Try to get from environment first" >> cmake/FindLua.cmake
echo "if(DEFINED ENV{LUAU_INCLUDE_DIR} AND DEFINED ENV{LUA_LIBRARIES})" >> cmake/FindLua.cmake
echo " set(LUA_INCLUDE_DIR \$ENV{LUAU_INCLUDE_DIR})" >> cmake/FindLua.cmake
echo " set(LUA_LIBRARIES \$ENV{LUA_LIBRARIES})" >> cmake/FindLua.cmake
echo " set(LUA_FOUND TRUE)" >> cmake/FindLua.cmake
echo "else()" >> cmake/FindLua.cmake
echo " # Try to find it using brew" >> cmake/FindLua.cmake
echo " execute_process(" >> cmake/FindLua.cmake
echo " COMMAND brew --prefix luau" >> cmake/FindLua.cmake
echo " OUTPUT_VARIABLE LUAU_PREFIX" >> cmake/FindLua.cmake
echo " OUTPUT_STRIP_TRAILING_WHITESPACE" >> cmake/FindLua.cmake
echo " )" >> cmake/FindLua.cmake
echo "" >> cmake/FindLua.cmake
echo "set(LUA_INCLUDE_DIR \"\${CMAKE_SOURCE_DIR}/source/cpp/luau\")" >> cmake/FindLua.cmake
echo "set(LUA_LIBRARIES \"\")" >> cmake/FindLua.cmake
echo "set(LUA_FOUND TRUE)" >> cmake/FindLua.cmake
echo " if(LUAU_PREFIX)" >> cmake/FindLua.cmake
echo " set(LUA_INCLUDE_DIR \"\${LUAU_PREFIX}/include\")" >> cmake/FindLua.cmake
echo " set(LUA_LIBRARIES \"\${LUAU_PREFIX}/lib/libluau.dylib\")" >> cmake/FindLua.cmake
echo " set(LUA_FOUND TRUE)" >> cmake/FindLua.cmake
echo " endif()" >> cmake/FindLua.cmake
echo "endif()" >> cmake/FindLua.cmake
echo "" >> cmake/FindLua.cmake
echo "message(STATUS \"Using internal Luau headers from \${LUA_INCLUDE_DIR}\")" >> cmake/FindLua.cmake
echo "message(STATUS \"Using Homebrew Luau headers from \${LUA_INCLUDE_DIR}\")" >> cmake/FindLua.cmake
echo "message(STATUS \"Using Homebrew Luau libraries: \${LUA_LIBRARIES}\")" >> cmake/FindLua.cmake

echo "Created CMake module files"

# For debugging - show what we've created
echo "CMake directory contents:"
ls -la cmake/

# Show current environment for debugging
echo "DYLD_LIBRARY_PATH: $DYLD_LIBRARY_PATH"
echo "Lua location in PATH (may not exist, that's okay):"
which lua || echo "Lua not found in PATH (this is expected)"
echo "Lua version (may not exist, that's okay):"
lua -v || echo "Lua version command failed (this is expected)"
# Show Luau version and paths
echo "Luau location in PATH:"
which luau || echo "Luau not found in PATH (this is unexpected)"
echo "Luau include directory: $LUAU_INCLUDE_DIR"
echo "Luau library directory: $LUAU_LIB_DIR"

- name: Install Dobby (Optional)
id: install-dobby
Expand Down
63 changes: 20 additions & 43 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,76 +19,53 @@ set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "Build architectures for iOS")
# Find Lua - try multiple approaches
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")

# Handle Lua finding on macOS
# Handle Luau finding on macOS
if(APPLE)
# First check for environment variables set by the workflow
if(DEFINED ENV{LUA_DIR} AND DEFINED ENV{LUA_INCLUDE_DIR} AND DEFINED ENV{LUA_LIBRARIES})
message(STATUS "Using Lua from environment variables")
set(LUA_INCLUDE_DIR "$ENV{LUA_INCLUDE_DIR}")
if(DEFINED ENV{LUAU_INCLUDE_DIR} AND DEFINED ENV{LUA_LIBRARIES})
message(STATUS "Using Luau from environment variables")
set(LUA_INCLUDE_DIR "$ENV{LUAU_INCLUDE_DIR}")
set(LUA_LIBRARIES "$ENV{LUA_LIBRARIES}")
set(LUA_FOUND TRUE)
else()
# Check Homebrew Lua location as fallback
# Check Homebrew Luau location
execute_process(
COMMAND brew --prefix lua
OUTPUT_VARIABLE BREW_LUA_PREFIX
COMMAND brew --prefix luau
OUTPUT_VARIABLE BREW_LUAU_PREFIX
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)

if(BREW_LUA_PREFIX)
message(STATUS "Found Homebrew Lua at: ${BREW_LUA_PREFIX}")
set(LUA_INCLUDE_DIR "${BREW_LUA_PREFIX}/include")
if(BREW_LUAU_PREFIX)
message(STATUS "Found Homebrew Luau at: ${BREW_LUAU_PREFIX}")
set(LUA_INCLUDE_DIR "${BREW_LUAU_PREFIX}/include")

# Look for the lua library file
# Look for the luau library file
find_library(LUA_LIBRARIES
NAMES lua lua5.4 lua5.3 liblua liblua5.4 liblua5.3
PATHS "${BREW_LUA_PREFIX}/lib" NO_DEFAULT_PATH)
NAMES luau libluau
PATHS "${BREW_LUAU_PREFIX}/lib" NO_DEFAULT_PATH)

if(LUA_LIBRARIES)
message(STATUS "Found Lua library: ${LUA_LIBRARIES}")
message(STATUS "Found Luau library: ${LUA_LIBRARIES}")
set(LUA_FOUND TRUE)
else()
# Hardcode as a last resort
set(LUA_LIBRARIES "${BREW_LUA_PREFIX}/lib/liblua.dylib")
message(STATUS "Using hardcoded Lua library path: ${LUA_LIBRARIES}")
set(LUA_LIBRARIES "${BREW_LUAU_PREFIX}/lib/libluau.dylib")
message(STATUS "Using hardcoded Luau library path: ${LUA_LIBRARIES}")
set(LUA_FOUND TRUE)
endif()
else()
message(STATUS "Homebrew Lua not found via brew --prefix lua")
message(STATUS "Homebrew Luau not found. Please install with: brew install luau")
endif()
endif()
endif()

# Try standard find_package
# Try standard find_package with our custom finder module
find_package(Lua QUIET)

# If not found, try FindLua51 or FindLua (both come with CMake)
if(NOT LUA_FOUND)
find_package(Lua51 QUIET)
if(LUA51_FOUND)
set(LUA_INCLUDE_DIR ${LUA_INCLUDE_DIR})
set(LUA_LIBRARIES ${LUA_LIBRARIES})
set(LUA_FOUND TRUE)
endif()
endif()

# Last attempt - look for lua manually
if(NOT LUA_FOUND AND NOT DEFINED LUA_LIBRARIES)
# Try to find the libraries manually
find_library(LUA_LIBRARIES NAMES lua lua54 lua5.4 lua53 lua5.3 liblua)
find_path(LUA_INCLUDE_DIR NAMES lua.h
PATH_SUFFIXES lua lua5.4 lua5.3 include/lua)

if(LUA_LIBRARIES AND LUA_INCLUDE_DIR)
message(STATUS "Found Lua manually: ${LUA_LIBRARIES}")
set(LUA_FOUND TRUE)
endif()
endif()

# Check if Lua was found
# Check if Luau was found
if(NOT LUA_FOUND OR NOT DEFINED LUA_LIBRARIES)
message(FATAL_ERROR "Could not find Lua. Please install Lua and its development files.")
message(FATAL_ERROR "Could not find Luau. Please install Luau with: brew install luau")
endif()

message(STATUS "Using Lua include dir: ${LUA_INCLUDE_DIR}")
Expand Down
Loading
Loading