crafter-build is moving to a single Flatpak distribution, and there is no Windows host in that picture: no build.cmd, no MSVC or mingw host build, no DLL plus launcher. Delete every host-Windows path instead of leaving it to rot unverified: the cmd.exe command runner and quoting, the LOCALAPPDATA cache, the MSVC and mingw-host LoadProject variants with their LIBCXX_DIR and CRAFTER_MINGW_DIR plumbing, the winsock port probe, the LoadLibrary libclang loader, the console-width and isatty shims, and the preprocessor guards around the Linux bodies. The x86_64-w64-mingw32 cross-compile target stays. It is target logic (output names, -femulated-tls, the libstdc++ link extras, copying a dependency DLL next to a mingw exe, wine as the runner) and did not depend on any of the removed code. The msvc target goes with the host that was the only thing able to use it. Three target-path warts fixed on the way: ExpectedOutput named a mingw static library <name>.lib while the archive step wrote lib<name>.a, so those libraries relinked on every run; the import lib is no longer copied next to a mingw exe, since the dependency's own bin dir is already on the link line; and llvm-ar now writes every archive, not only the LTO ones, so Debug and Release archives are made the same way. CRAFTER_API and Crafter.Build-Api.h existed only for the DLL boundary. Nothing downstream used them, so they are removed rather than kept as an empty macro nobody can verify. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
142 lines
No EOL
7.5 KiB
Shell
Executable file
142 lines
No EOL
7.5 KiB
Shell
Executable file
#SPDX-License-Identifier: LGPL-3.0-only
|
|
#SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts®
|
|
|
|
mkdir -p build
|
|
mkdir -p bin
|
|
mkdir -p lib
|
|
mkdir -p share/crafter-build
|
|
mkdir -p share/crafter-build/wasi-runtime
|
|
|
|
cp wasi-runtime/runtime.js share/crafter-build/wasi-runtime/
|
|
cp wasi-runtime/index.html.in share/crafter-build/wasi-runtime/
|
|
|
|
cp interfaces/Crafter.Build.cppm share/crafter-build/
|
|
cp interfaces/Crafter.Build-Shader.cppm share/crafter-build/
|
|
cp interfaces/Crafter.Build-Platform.cppm share/crafter-build/
|
|
cp interfaces/Crafter.Build-Interface.cppm share/crafter-build/
|
|
cp interfaces/Crafter.Build-Implementation.cppm share/crafter-build/
|
|
cp interfaces/Crafter.Build-External.cppm share/crafter-build/
|
|
cp interfaces/Crafter.Build-Clang.cppm share/crafter-build/
|
|
cp interfaces/Crafter.Build-Test.cppm share/crafter-build/
|
|
cp interfaces/Crafter.Build-Lint.cppm share/crafter-build/
|
|
cp interfaces/Crafter.Build-Progress.cppm share/crafter-build/
|
|
cp interfaces/Crafter.Build-Asset.cppm share/crafter-build/
|
|
|
|
git clone https://github.com/KhronosGroup/glslang.git ./build/glslang
|
|
|
|
current_dir=$(pwd)
|
|
|
|
cd ./build/glslang
|
|
cmake -B build \
|
|
-DCMAKE_C_COMPILER=clang \
|
|
-DCMAKE_CXX_COMPILER=clang++ \
|
|
-DCMAKE_CXX_FLAGS="-stdlib=libc++" \
|
|
-DCMAKE_EXE_LINKER_FLAGS="-stdlib=libc++" \
|
|
-DCMAKE_SHARED_LINKER_FLAGS="-stdlib=libc++" \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=$current_dir/build \
|
|
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=$current_dir/build \
|
|
-DENABLE_OPT=OFF
|
|
|
|
cmake --build build --config Release
|
|
cd ../../
|
|
|
|
MARCH="${CRAFTER_BUILD_MARCH:-native}"
|
|
MTUNE="${CRAFTER_BUILD_MTUNE:-native}"
|
|
# The bootstrap targets the host toolchain's own triple: x86_64-pc-linux-gnu
|
|
# on glibc distros, x86_64-alpine-linux-musl on Alpine. Override with
|
|
# CRAFTER_BUILD_TARGET. The per-target define (triple with '-' -> '_') is the
|
|
# same one the self-hosted build emits, so the host-gated code paths match.
|
|
TARGET="${CRAFTER_BUILD_TARGET:-$(clang++ -print-target-triple)}"
|
|
TARGET_DEFINE="CRAFTER_BUILD_CONFIGURATION_TARGET_$(printf '%s' "$TARGET" | tr - _)"
|
|
|
|
# Crafter.Build-Lint includes libclang's clang-c/Index.h. glibc distros keep
|
|
# it in /usr/include; Alpine keeps LLVM under /usr/lib/llvmNN, so ask
|
|
# llvm-config and add the dir when it is not already on the default path
|
|
# (never add /usr/include itself: that breaks libc++'s #include_next).
|
|
LLVM_INCDIR="$(llvm-config --includedir 2>/dev/null || true)"
|
|
case "$LLVM_INCDIR" in ""|/usr/include) LLVM_INCFLAG="" ;; *) LLVM_INCFLAG="-I$LLVM_INCDIR" ;; esac
|
|
|
|
common_options="--target=$TARGET -stdlib=libc++ -I./build/glslang $LLVM_INCFLAG -std=c++26 -O3 -march=$MARCH -mtune=$MTUNE -fprebuilt-module-path=./build -D $TARGET_DEFINE -D CRAFTER_BUILD_CONFIGURATION_TYPE_EXECUTABLE -c"
|
|
|
|
clang++ --target=$TARGET -std=c++26 -stdlib=libc++ -O3 -march=$MARCH -mtune=$MTUNE -Wno-reserved-identifier -Wno-reserved-module-identifier --precompile /usr/share/libc++/v1/std.cppm -o ./build/std.pcm
|
|
|
|
clang++ $common_options -fmodule-output interfaces/Crafter.Build-Shader.cppm -o ./build/Crafter.Build-Shader.o
|
|
clang++ $common_options -fmodule-output interfaces/Crafter.Build-Platform.cppm -o ./build/Crafter.Build-Platform.o
|
|
clang++ $common_options -fmodule-output interfaces/Crafter.Build-Interface.cppm -o ./build/Crafter.Build-Interface.o
|
|
clang++ $common_options -fmodule-output interfaces/Crafter.Build-Implementation.cppm -o ./build/Crafter.Build-Implementation.o
|
|
clang++ $common_options -fmodule-output interfaces/Crafter.Build-External.cppm -o ./build/Crafter.Build-External.o
|
|
clang++ $common_options -fmodule-output interfaces/Crafter.Build-Clang.cppm -o ./build/Crafter.Build-Clang.o
|
|
clang++ $common_options -fmodule-output interfaces/Crafter.Build-Test.cppm -o ./build/Crafter.Build-Test.o
|
|
clang++ $common_options -fmodule-output interfaces/Crafter.Build-Lint.cppm -o ./build/Crafter.Build-Lint.o
|
|
clang++ $common_options -fmodule-output interfaces/Crafter.Build-Progress.cppm -o ./build/Crafter.Build-Progress.o
|
|
# Asset partition: bootstrap compiles it WITHOUT CRAFTER_BUILD_HAS_ASSET so
|
|
# CompressAsset takes the stub branch and the impl unit doesn't try to
|
|
# `import Crafter.Asset` (no Crafter.Asset PCM exists at this stage — the
|
|
# self-host pass that follows wires in the real dep).
|
|
clang++ $common_options -fmodule-output interfaces/Crafter.Build-Asset.cppm -o ./build/Crafter.Build-Asset.o
|
|
clang++ $common_options -fmodule-output interfaces/Crafter.Build.cppm -o ./build/Crafter.Build.o
|
|
|
|
clang++ $common_options ./implementations/Crafter.Build-Shader.cpp -o ./build/Crafter.Build-Shader_impl.o
|
|
clang++ $common_options ./implementations/Crafter.Build-Platform.cpp -o ./build/Crafter.Build-Platform_impl.o
|
|
clang++ $common_options ./implementations/Crafter.Build-Interface.cpp -o ./build/Crafter.Build-Interface_impl.o
|
|
clang++ $common_options ./implementations/Crafter.Build-Implementation.cpp -o ./build/Crafter.Build-Implementation_impl.o
|
|
clang++ $common_options ./implementations/Crafter.Build-External.cpp -o ./build/Crafter.Build-External_impl.o
|
|
clang++ $common_options ./implementations/Crafter.Build-Clang.cpp -o ./build/Crafter.Build-Clang_impl.o
|
|
clang++ $common_options ./implementations/Crafter.Build-Test.cpp -o ./build/Crafter.Build-Test_impl.o
|
|
clang++ $common_options ./implementations/Crafter.Build-Lint.cpp -o ./build/Crafter.Build-Lint_impl.o
|
|
clang++ $common_options ./implementations/Crafter.Build-Progress.cpp -o ./build/Crafter.Build-Progress_impl.o
|
|
clang++ $common_options ./implementations/Crafter.Build-Asset.cpp -o ./build/Crafter.Build-Asset_impl.o
|
|
clang++ $common_options ./implementations/main.cpp -o ./build/main.o
|
|
|
|
ar rcs ./lib/libcrafter-build.a \
|
|
./build/Crafter.Build-Shader.o \
|
|
./build/Crafter.Build-Platform.o \
|
|
./build/Crafter.Build-Interface.o \
|
|
./build/Crafter.Build-Implementation.o \
|
|
./build/Crafter.Build-External.o \
|
|
./build/Crafter.Build-Clang.o \
|
|
./build/Crafter.Build-Test.o \
|
|
./build/Crafter.Build-Lint.o \
|
|
./build/Crafter.Build-Progress.o \
|
|
./build/Crafter.Build-Asset.o \
|
|
./build/Crafter.Build.o \
|
|
./build/Crafter.Build-Shader_impl.o \
|
|
./build/Crafter.Build-Platform_impl.o \
|
|
./build/Crafter.Build-Interface_impl.o \
|
|
./build/Crafter.Build-Implementation_impl.o \
|
|
./build/Crafter.Build-External_impl.o \
|
|
./build/Crafter.Build-Clang_impl.o \
|
|
./build/Crafter.Build-Test_impl.o \
|
|
./build/Crafter.Build-Lint_impl.o \
|
|
./build/Crafter.Build-Progress_impl.o \
|
|
./build/Crafter.Build-Asset_impl.o
|
|
|
|
clang++ --target=$TARGET -std=c++26 -stdlib=libc++ -O3 -march=$MARCH -mtune=$MTUNE -fuse-ld=lld \
|
|
-Wl,--export-dynamic \
|
|
-L./build \
|
|
./build/Crafter.Build-Shader.o \
|
|
./build/Crafter.Build-Platform.o \
|
|
./build/Crafter.Build-Interface.o \
|
|
./build/Crafter.Build-Implementation.o \
|
|
./build/Crafter.Build-External.o \
|
|
./build/Crafter.Build-Clang.o \
|
|
./build/Crafter.Build-Test.o \
|
|
./build/Crafter.Build-Lint.o \
|
|
./build/Crafter.Build-Progress.o \
|
|
./build/Crafter.Build-Asset.o \
|
|
./build/Crafter.Build.o \
|
|
./build/Crafter.Build-Shader_impl.o \
|
|
./build/Crafter.Build-Platform_impl.o \
|
|
./build/Crafter.Build-Interface_impl.o \
|
|
./build/Crafter.Build-Implementation_impl.o \
|
|
./build/Crafter.Build-External_impl.o \
|
|
./build/Crafter.Build-Clang_impl.o \
|
|
./build/Crafter.Build-Test_impl.o \
|
|
./build/Crafter.Build-Lint_impl.o \
|
|
./build/Crafter.Build-Progress_impl.o \
|
|
./build/Crafter.Build-Asset_impl.o \
|
|
./build/main.o \
|
|
-lSPIRV -lGenericCodeGen -lglslang -lOSDependent -lMachineIndependent -lglslang-default-resource-limits \
|
|
-ldl \
|
|
-o ./bin/crafter-build |