Skip to content

Commit 83643bf

Browse files
Updated Makefile for new building for tarballs and bins
1 parent 32c6ed4 commit 83643bf

File tree

1 file changed

+51
-14
lines changed

1 file changed

+51
-14
lines changed

Makefile

Lines changed: 51 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,47 @@
1-
APP_NAME = laclm
2-
CMD_DIR = ./cmd/$(APP_NAME)
3-
BIN_DIR = ./bin
4-
BIN_PATH = $(BIN_DIR)/$(APP_NAME)
1+
APP_NAME := laclm
2+
CMD_DIR := ./cmd/$(APP_NAME)
3+
BIN_DIR := ./bin
4+
BUILD_DIR := ./build
55

66
GOFILES := $(shell find . -name '*.go' -type f)
77

8-
.PHONY: all build clean run test lint build-linux build-mac build-win
8+
# Target platforms: OS_ARCH
9+
TARGETS := \
10+
linux_amd64 \
11+
linux_arm64
912

13+
.PHONY: all build build-cross clean run test lint vendor package
14+
15+
## Default target
1016
all: build
1117

12-
## Build the app
13-
build: $(GOFILES)
18+
## Build for local OS/arch using vendored deps
19+
build: vendor $(GOFILES)
1420
@echo "Building $(APP_NAME)..."
1521
@mkdir -p $(BIN_DIR)
16-
go build -o $(BIN_PATH) $(CMD_DIR)
22+
GOOS="" GOARCH="" go build -mod=vendor -o $(BIN_DIR)/$(APP_NAME) $(CMD_DIR)
23+
24+
## Build cross-compiled binaries for all Linux targets
25+
build-cross: vendor $(GOFILES)
26+
@echo "Cross building for targets: $(TARGETS)"
27+
@mkdir -p $(BIN_DIR)
28+
@for target in $(TARGETS); do \
29+
OS=$${target%_*}; \
30+
ARCH=$${target#*_}; \
31+
OUT=$(BIN_DIR)/$(APP_NAME)-$$OS-$$ARCH; \
32+
echo "Building $$OUT..."; \
33+
GOOS=$$OS GOARCH=$$ARCH go build -mod=vendor -o $$OUT $(CMD_DIR); \
34+
done
1735

1836
## Run the app
1937
run: build
2038
@echo "Running $(APP_NAME)..."
21-
@$(BIN_PATH)
39+
@$(BIN_DIR)/$(APP_NAME)
2240

23-
## Clean build artifacts
41+
## Clean build and package directories
2442
clean:
2543
@echo "Cleaning..."
26-
@rm -rf $(BIN_DIR)
44+
@rm -rf $(BIN_DIR) $(BUILD_DIR) vendor
2745

2846
## Run tests
2947
test:
@@ -35,6 +53,25 @@ lint:
3553
@echo "Linting..."
3654
@golangci-lint run
3755

38-
## Cross-build for Linux
39-
build-linux:
40-
GOOS=linux GOARCH=amd64 go build -o $(BIN_DIR)/$(APP_NAME)-linux $(CMD_DIR)
56+
## Vendor dependencies
57+
vendor:
58+
@echo "Vendoring dependencies..."
59+
go mod vendor
60+
61+
## Package full project source (with vendor) for each target
62+
package: clean vendor
63+
@echo "Packaging full source tarballs for: $(TARGETS)"
64+
@mkdir -p $(BUILD_DIR)
65+
@for target in $(TARGETS); do \
66+
OS=$${target%_*}; \
67+
ARCH=$${target#*_}; \
68+
NAME=$(APP_NAME)-$$OS-$$ARCH; \
69+
TARBALL=$$NAME-source.tar.gz; \
70+
echo "Creating $$TARBALL..."; \
71+
mkdir -p tmp/$$NAME; \
72+
cp -r * tmp/$$NAME; \
73+
rm -rf tmp/$$NAME/$(BUILD_DIR) tmp/$$NAME/$(BIN_DIR); \
74+
tar -czf $(BUILD_DIR)/$$TARBALL -C tmp $$NAME; \
75+
rm -rf tmp/$$NAME; \
76+
done
77+
@rm -rf tmp

0 commit comments

Comments
 (0)