297 lines
8.2 KiB
Bash
297 lines
8.2 KiB
Bash
|
#!/bin/bash
|
||
|
# build-config.sh - Essential build configuration extracted from 4ed_build.cpp
|
||
|
# This file contains all the platform-specific compiler flags, linker flags, and build settings
|
||
|
|
||
|
# =============================================================================
|
||
|
# Directory Configuration
|
||
|
# =============================================================================
|
||
|
|
||
|
# Build directories
|
||
|
BUILD_DIR="../build"
|
||
|
PACK_DIR="../distributions"
|
||
|
SITE_DIR="../site"
|
||
|
|
||
|
# Source directories
|
||
|
CODE_DIR="../code"
|
||
|
CUSTOM_DIR="../code/custom"
|
||
|
FOREIGN_DIR="../non-source/foreign"
|
||
|
|
||
|
# Include directories
|
||
|
INCLUDES=(
|
||
|
"custom"
|
||
|
"../non-source/foreign/freetype2"
|
||
|
)
|
||
|
|
||
|
# =============================================================================
|
||
|
# Platform Detection
|
||
|
# =============================================================================
|
||
|
|
||
|
# Platform codes
|
||
|
PLATFORM_WINDOWS=0
|
||
|
PLATFORM_LINUX=1
|
||
|
PLATFORM_MAC=2
|
||
|
|
||
|
# Architecture codes
|
||
|
ARCH_X64=0
|
||
|
ARCH_X86=1
|
||
|
|
||
|
# =============================================================================
|
||
|
# Build Flags
|
||
|
# =============================================================================
|
||
|
|
||
|
# Build flag bits (matching 4ed_build.cpp)
|
||
|
FLAG_OPTS=$((0x1)) # Compiler warnings/options
|
||
|
FLAG_LIBS=$((0x2)) # Link libraries
|
||
|
FLAG_ICON=$((0x4)) # Windows icon resource
|
||
|
FLAG_SHARED_CODE=$((0x8)) # Build as shared library
|
||
|
FLAG_DEBUG_INFO=$((0x10)) # Debug symbols
|
||
|
FLAG_OPTIMIZATION=$((0x20)) # Optimization level
|
||
|
FLAG_SUPER=$((0x40)) # Super tier features
|
||
|
FLAG_INTERNAL=$((0x80)) # Internal build flags
|
||
|
FLAG_SHIP=$((0x100)) # Shipping build
|
||
|
|
||
|
# =============================================================================
|
||
|
# Compiler Options - Windows (CL equivalent using clang)
|
||
|
# =============================================================================
|
||
|
|
||
|
# Windows compiler options (translated from CL to clang)
|
||
|
CLANG_OPTS_WINDOWS=(
|
||
|
"-Wall" # Enable most warnings
|
||
|
"-Wno-unused-parameter" # Disable unused parameter warnings
|
||
|
"-Wno-unused-variable" # Disable unused variable warnings
|
||
|
"-Wno-missing-field-initializers" # Disable missing field initializer warnings
|
||
|
"-Wno-deprecated-declarations" # Disable deprecated declarations warnings
|
||
|
"-Wno-missing-braces" # Disable missing braces warnings
|
||
|
"-Wno-tautological-compare" # Disable tautological compare warnings
|
||
|
"-Wno-write-strings" # Disable write strings warnings
|
||
|
"-Werror" # Treat warnings as errors
|
||
|
"-fno-rtti" # Disable RTTI (equivalent to /GR-)
|
||
|
"-fno-exceptions" # Disable exceptions (equivalent to /EHa-)
|
||
|
"-std=c++11" # C++11 standard
|
||
|
"-target x86_64-pc-windows-msvc" # Target Windows with MSVC ABI
|
||
|
)
|
||
|
|
||
|
# Windows libraries
|
||
|
LIBS_WINDOWS=(
|
||
|
"-luser32"
|
||
|
"-lwinmm"
|
||
|
"-lgdi32"
|
||
|
"-lopengl32"
|
||
|
"-lcomdlg32"
|
||
|
"-luserenv"
|
||
|
)
|
||
|
|
||
|
# Windows FreeType libraries
|
||
|
FREETYPE_LIB_WINDOWS_X64="../non-source/foreign/x64/freetype.lib"
|
||
|
FREETYPE_LIB_WINDOWS_X86="../non-source/foreign/x86/freetype.lib"
|
||
|
|
||
|
# Windows icon resource
|
||
|
WINDOWS_ICON="../non-source/res/icon.res"
|
||
|
|
||
|
# =============================================================================
|
||
|
# Compiler Options - Linux (GCC equivalent using clang)
|
||
|
# =============================================================================
|
||
|
|
||
|
CLANG_OPTS_LINUX=(
|
||
|
"-Wno-write-strings"
|
||
|
"-D_GNU_SOURCE"
|
||
|
"-fPIC"
|
||
|
"-fno-threadsafe-statics"
|
||
|
"-pthread"
|
||
|
"-Wno-unused-result"
|
||
|
"-std=c++11"
|
||
|
"-target x86_64-linux-gnu" # Target Linux
|
||
|
)
|
||
|
|
||
|
# Linux libraries
|
||
|
LIBS_LINUX=(
|
||
|
"-lX11"
|
||
|
"-lpthread"
|
||
|
"-lm"
|
||
|
"-lrt"
|
||
|
"-lGL"
|
||
|
"-ldl"
|
||
|
"-lXfixes"
|
||
|
"-lfreetype"
|
||
|
"-lfontconfig"
|
||
|
)
|
||
|
|
||
|
# Linux platform includes
|
||
|
PLATFORM_INCLUDES_LINUX=(
|
||
|
"platform_all"
|
||
|
"platform_unix"
|
||
|
)
|
||
|
|
||
|
# =============================================================================
|
||
|
# Compiler Options - macOS (Clang native)
|
||
|
# =============================================================================
|
||
|
|
||
|
CLANG_OPTS_MACOS=(
|
||
|
"-Wno-write-strings"
|
||
|
"-Wno-deprecated-declarations"
|
||
|
"-Wno-comment"
|
||
|
"-Wno-switch"
|
||
|
"-Wno-null-dereference"
|
||
|
"-Wno-tautological-compare"
|
||
|
"-Wno-unused-result"
|
||
|
"-Wno-missing-declarations"
|
||
|
"-Wno-nullability-completeness"
|
||
|
"-std=c++11"
|
||
|
"-target x86_64-apple-macos10.12" # Target macOS 10.12+
|
||
|
)
|
||
|
|
||
|
# macOS frameworks (equivalent to libraries)
|
||
|
FRAMEWORKS_MACOS=(
|
||
|
"-framework Cocoa"
|
||
|
"-framework QuartzCore"
|
||
|
"-framework CoreServices"
|
||
|
"-framework OpenGL"
|
||
|
"-framework IOKit"
|
||
|
"-framework Metal"
|
||
|
"-framework MetalKit"
|
||
|
)
|
||
|
|
||
|
# macOS FreeType libraries
|
||
|
FREETYPE_LIB_MACOS_X64="../non-source/foreign/x64/libfreetype-mac.a"
|
||
|
FREETYPE_LIB_MACOS_X86="../non-source/foreign/x86/libfreetype-mac.a"
|
||
|
|
||
|
# macOS platform includes
|
||
|
PLATFORM_INCLUDES_MACOS=(
|
||
|
"platform_all"
|
||
|
"platform_unix"
|
||
|
)
|
||
|
|
||
|
# =============================================================================
|
||
|
# Architecture-specific flags
|
||
|
# =============================================================================
|
||
|
|
||
|
# 64-bit architecture
|
||
|
ARCH_FLAGS_X64=(
|
||
|
"-m64"
|
||
|
"-DFTECH_64_BIT"
|
||
|
)
|
||
|
|
||
|
# 32-bit architecture
|
||
|
ARCH_FLAGS_X86=(
|
||
|
"-m32"
|
||
|
"-DFTECH_32_BIT"
|
||
|
)
|
||
|
|
||
|
# =============================================================================
|
||
|
# Build Mode Flags
|
||
|
# =============================================================================
|
||
|
|
||
|
# Debug flags
|
||
|
DEBUG_FLAGS=(
|
||
|
"-g" # Debug symbols
|
||
|
"-O0" # No optimization
|
||
|
"-DDO_CRAZY_EXPENSIVE_ASSERTS" # Enable expensive assertions
|
||
|
)
|
||
|
|
||
|
# Release flags
|
||
|
RELEASE_FLAGS=(
|
||
|
"-O2" # Optimization level 2 (clang equivalent to -O3 for performance)
|
||
|
)
|
||
|
|
||
|
# =============================================================================
|
||
|
# File Lists (from 4ed_build.cpp)
|
||
|
# =============================================================================
|
||
|
|
||
|
# Platform layer files
|
||
|
PLATFORM_FILES_WINDOWS=("platform_win32/win32_4ed.cpp")
|
||
|
PLATFORM_FILES_LINUX=("platform_linux/linux_4ed.cpp")
|
||
|
PLATFORM_FILES_MACOS=("platform_mac/mac_4ed.mm")
|
||
|
|
||
|
# Custom layer default target
|
||
|
DEFAULT_CUSTOM_TARGET="../code/custom/4coder_default_bindings.cpp"
|
||
|
|
||
|
# =============================================================================
|
||
|
# Build Defines
|
||
|
# =============================================================================
|
||
|
|
||
|
# Function to get defines from flags (equivalent to get_defines_from_flags in 4ed_build.cpp)
|
||
|
get_defines_from_flags() {
|
||
|
local flags=$1
|
||
|
local defines=()
|
||
|
|
||
|
if (( flags & FLAG_SHIP )); then
|
||
|
defines+=("-DSHIP_MODE")
|
||
|
fi
|
||
|
|
||
|
if (( flags & FLAG_INTERNAL )); then
|
||
|
defines+=("-DFRED_INTERNAL")
|
||
|
fi
|
||
|
|
||
|
if (( flags & FLAG_SUPER )); then
|
||
|
defines+=("-DFRED_SUPER")
|
||
|
fi
|
||
|
|
||
|
echo "${defines[@]}"
|
||
|
}
|
||
|
|
||
|
# =============================================================================
|
||
|
# Build Outputs
|
||
|
# =============================================================================
|
||
|
|
||
|
# Main executable names
|
||
|
EXECUTABLE_WINDOWS="4ed.exe"
|
||
|
EXECUTABLE_LINUX="4ed"
|
||
|
EXECUTABLE_MACOS="4ed"
|
||
|
|
||
|
# Shared library names
|
||
|
SHARED_LIB_WINDOWS="4ed_app.dll"
|
||
|
SHARED_LIB_LINUX="4ed_app.so"
|
||
|
SHARED_LIB_MACOS="4ed_app.so"
|
||
|
|
||
|
# Custom layer library names
|
||
|
CUSTOM_LIB_WINDOWS="custom_4coder.dll"
|
||
|
CUSTOM_LIB_LINUX="custom_4coder.so"
|
||
|
CUSTOM_LIB_MACOS="custom_4coder.so"
|
||
|
|
||
|
# =============================================================================
|
||
|
# Utility Functions
|
||
|
# =============================================================================
|
||
|
|
||
|
# Get platform-specific settings
|
||
|
get_platform_settings() {
|
||
|
local platform=$1
|
||
|
case $platform in
|
||
|
"windows"|"win32")
|
||
|
echo "PLATFORM_WINDOWS"
|
||
|
;;
|
||
|
"linux")
|
||
|
echo "PLATFORM_LINUX"
|
||
|
;;
|
||
|
"macos"|"mac")
|
||
|
echo "PLATFORM_MAC"
|
||
|
;;
|
||
|
*)
|
||
|
echo "UNKNOWN_PLATFORM"
|
||
|
return 1
|
||
|
;;
|
||
|
esac
|
||
|
}
|
||
|
|
||
|
# Get architecture-specific settings
|
||
|
get_arch_settings() {
|
||
|
local arch=$1
|
||
|
case $arch in
|
||
|
"x64"|"x86_64")
|
||
|
echo "ARCH_X64"
|
||
|
;;
|
||
|
"x86"|"i386")
|
||
|
echo "ARCH_X86"
|
||
|
;;
|
||
|
*)
|
||
|
echo "UNKNOWN_ARCH"
|
||
|
return 1
|
||
|
;;
|
||
|
esac
|
||
|
}
|
||
|
|
||
|
# Check if flag is set
|
||
|
has_flag() {
|
||
|
local flags=$1
|
||
|
local flag=$2
|
||
|
(( flags & flag ))
|
||
|
}
|