168 lines
6.5 KiB
Makefile
168 lines
6.5 KiB
Makefile
# Variables for build tools
|
|
CMAKE=/usr/bin/cmake
|
|
MESON=/usr/bin/meson
|
|
# Paths for installed apps
|
|
INCLUDE_SYS_PATH=/usr/include
|
|
# Components and libraries
|
|
COMPONENTS=hyprcursor hyprlang hyprlock hyprpaper hyprutils wl-clipboard \
|
|
hyprwayland-scanner tomlplusplus libxcb-errors aquamarine
|
|
|
|
# Set the default target to build
|
|
.DEFAULT_GOAL := all
|
|
|
|
### Makefile variable definitions for targets ###
|
|
|
|
__Hyprlang = $(INCLUDE_SYS_PATH)/hyprlang.hpp
|
|
__Hyprcursor = $(INCLUDE_SYS_PATH)/hyprcursor
|
|
__Hyprutils = $(INCLUDE_SYS_PATH)/hyprutils
|
|
__Hyprwayland-scanner = /usr/lib64/cmake/hyprwayland-scanner
|
|
__Libxcb-errors = /usr/lib/pkgconfig/xcb-errors.pc
|
|
__Aquamarine = $(INCLUDE_SYS_PATH)/aquamarine
|
|
__Hyprland = Hyprland/build/Hyprland
|
|
__Hyprlock = hyprlock/build/hyprlock
|
|
__Hyprpaper = hyprpaper/build/hyprpaper
|
|
__Wl_clipboard = wl-clipboard/build/src
|
|
|
|
### Makefile targets for hyprwm libraries ###
|
|
|
|
# Build and install tomlplusplus if it's not on the system
|
|
tomlplusplus:
|
|
git clone https://github.com/marzer/tomlplusplus.git
|
|
__Tomlplusplus = $(INCLUDE_SYS_PATH)/toml++
|
|
$(__Tomlplusplus): tomlplusplus
|
|
@echo "Building and installing tomlplusplus..."
|
|
cd tomlplusplus && $(MESON) setup build --buildtype=release --prefix=/usr
|
|
ninja -C tomlplusplus/build
|
|
sudo $(MESON) install -C tomlplusplus/build
|
|
|
|
# Build hyprlang if the .hpp file is not installed
|
|
# Library for hyprwm
|
|
$(__Hyprlang): hyprlang
|
|
$(CMAKE) --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release \
|
|
-DCMAKE_INSTALL_PREFIX:PATH=/usr -S ./hyprlang -B ./hyprlang/build
|
|
$(CMAKE) --build ./hyprlang/build --config Release --target hyprlang \
|
|
-j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
|
|
# At this point install hyprlang since it is a library other apps need
|
|
@echo "Installing library hyprlang..."
|
|
sudo $(CMAKE) --install ./hyprlang/build
|
|
|
|
# Build hyprcursor if the .hpp file is not installed (required hyprlang)
|
|
# Library for hyprwm
|
|
$(__Hyprcursor): $(__Tomlplusplus) $(__Hyprlang) hyprcursor
|
|
$(CMAKE) --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release \
|
|
-DCMAKE_INSTALL_PREFIX:PATH=/usr -S ./hyprcursor -B ./hyprcursor/build
|
|
$(CMAKE) --build ./hyprcursor/build --config Release --target all \
|
|
-j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
|
|
@echo "Installing library hyprcursor..."
|
|
sudo $(CMAKE) --install hyprcursor/build
|
|
|
|
# Build hyprutils if the .hpp file is not installed
|
|
# Library for hyprwm
|
|
$(__Hyprutils): hyprutils
|
|
$(CMAKE) --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release \
|
|
-DCMAKE_INSTALL_PREFIX:PATH=/usr -S ./hyprutils -B ./hyprutils/build
|
|
$(CMAKE) --build ./hyprutils/build --config Release --target all \
|
|
-j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
|
|
sudo $(CMAKE) --install hyprutils/build
|
|
|
|
$(__Hyprwayland-scanner): hyprwayland-scanner
|
|
$(CMAKE) -DCMAKE_INSTALL_PREFIX=/usr -S ./hyprwayland-scanner \
|
|
-B hyprwayland-scanner/build
|
|
$(CMAKE) --build ./hyprwayland-scanner/build -j \
|
|
`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
|
|
@echo "Installing library hyprwayland-scanner..."
|
|
sudo $(CMAKE) --install ./hyprwayland-scanner/build
|
|
|
|
libxcb-errors:
|
|
git clone https://gitlab.freedesktop.org/xorg/lib/libxcb-errors.git
|
|
$(__Libxcb-errors): libxcb-errors
|
|
@echo "Building and installing library libxcb-errors..."
|
|
cd libxcb-errors && { \
|
|
git submodule update --init ; \
|
|
/bin/sh autogen.sh ; \
|
|
/bin/sh configure --prefix=/usr ; }
|
|
make -C libxcb-errors && sudo make -C libxcb-errors install
|
|
|
|
$(__Aquamarine): $(__Hyprwayland-scanner) $(__Hyprutils) aquamarine
|
|
$(CMAKE) -DCMAKE_INSTALL_PREFIX=/usr -S ./aquamarine \
|
|
-B aquamarine/build
|
|
$(CMAKE) --build ./aquamarine/build -j \
|
|
`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
|
|
@echo "Installing library aquamarine..."
|
|
sudo $(CMAKE) --install ./aquamarine/build
|
|
|
|
### Makefile targets for hyprwm apps ###
|
|
|
|
# Build Hyprland if it's not installed on the system
|
|
$(__Hyprland): $(__Hyprcursor) $(__Libxcb-errors) $(__Aquamarine)
|
|
@echo "Building Hyprland..."
|
|
sudo $(MAKE) -C Hyprland all
|
|
sudo chown -R $$USER:$$USER Hyprland/build
|
|
|
|
# Build hyprlock if it's not installed on the system
|
|
$(__Hyprlock): $(__Hyprlang)
|
|
@echo "Building hyprlock..."
|
|
$(CMAKE) --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release \
|
|
-S ./hyprlock -B ./hyprlock/build
|
|
$(CMAKE) --build ./hyprlock/build --config Release --target hyprlock \
|
|
-j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
|
|
|
|
# Build hyprpaper if it's not installed on the system
|
|
$(__Hyprpaper): $(__Hyprlang)
|
|
@echo "Building hyprpaper..."
|
|
$(CMAKE) --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release \
|
|
-DCMAKE_INSTALL_PREFIX:PATH=/usr -S ./hyprpaper -B ./hyprpaper/build
|
|
$(CMAKE) --build ./hyprpaper/build --config Release --target hyprpaper \
|
|
-j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
|
|
|
|
# Build wl-clipboard if it's not installed on the system
|
|
$(__Wl_clipboard)/wl-copy $(__Wl_clipboard)/wl-paste &:
|
|
cd wl-clipboard && $(MESON) setup --prefix=/usr build
|
|
ninja -C wl-clipboard/build
|
|
|
|
### PHONY targets that a user would run ###
|
|
all:
|
|
@if git submodule status | grep --quiet '^-' ; then\
|
|
echo "Git submodules have not been initialised. Please run: git \
|
|
submodule update --init --recursive" ; exit 1 ;\
|
|
fi
|
|
@cd Hyprland/subprojects && git submodule update --init
|
|
$(MAKE) build
|
|
|
|
build: $(__Hyprland) $(__Wl_clipboard)/wl-copy $(__Hyprlock) $(__Hyprpaper)
|
|
|
|
install: build
|
|
@echo "Installing hyprlock..."
|
|
sudo $(CMAKE) --install hyprlock/build
|
|
@echo "Installing hyprpaper"
|
|
sudo $(CMAKE) --install hyprpaper/build
|
|
@echo "Installing wl-clipboard"
|
|
sudo $(MESON) install -C wl-clipboard/build
|
|
@echo "Installing Hyprland"
|
|
sudo $(MAKE) -C Hyprland install
|
|
|
|
update:
|
|
@echo "Updating module components..."
|
|
git submodule foreach \
|
|
'git pull origin $$(git rev-parse --abbrev-ref HEAD)'
|
|
# In case these libraries haven't been pulled yet, ignore the exit code
|
|
-cd tomlplusplus && git pull origin $$(git rev-parse --abbrev-ref HEAD)
|
|
-cd libxcb-errors && git pull origin $$(git rev-parse --abbrev-ref HEAD)
|
|
@echo "Please note that if tomlplusplus or libxcb-errors throw an error \
|
|
for not being found, this is defined behaviour since these libraries \
|
|
are cloned into the project later. You can safely ignore this."
|
|
-cd Hyprland && git fetch origin --tags && git checkout $$(git tag --list \
|
|
| sort -V | tail -n1) && git pull origin $$(git rev-parse --abbrev-ref HEAD)
|
|
|
|
test: build
|
|
@echo "Be real, you don't want to do this, so we'll abort."
|
|
$(error No test-suite implemented)
|
|
|
|
clean:
|
|
@echo "Cleaning up from build process..."
|
|
@echo "Cleaning Hyprland with Makefile."
|
|
$(MAKE) -C Hyprland clear
|
|
rm -rf $(addsuffix /build, $(COMPONENTS)) >/dev/null 2>&1
|
|
|
|
.PHONY : all build install test clean update
|