1
+ PROJECT_NAME := crc32fast
2
+
3
+ # Detect operating system
4
+ UNAME_S := $(shell uname -s)
5
+
6
+ # Allow override of installation directory
7
+ DESTDIR ?=
8
+
9
+ # Determine OS-specific variables
10
+ ifeq ($(UNAME_S ) ,Linux)
11
+ LIB_EXTENSION := so
12
+ INSTALL_LIB_DIR := $(PREFIX ) /lib
13
+ INSTALL_INCLUDE_DIR := $(PREFIX ) /include
14
+ POST_INSTALL := ldconfig
15
+ else ifeq ($(UNAME_S),Darwin)
16
+ LIB_EXTENSION := dylib
17
+ # on macOS, there's not really a default location, so require DESTDIR
18
+ ifeq ($(DESTDIR),)
19
+ $(error On macOS, DESTDIR must be set for installation)
20
+ endif
21
+ INSTALL_LIB_DIR := /lib
22
+ INSTALL_INCLUDE_DIR := /include
23
+ POST_INSTALL := true
24
+ else
25
+ # Windows
26
+ LIB_EXTENSION := dll
27
+ ifeq ($(DESTDIR),)
28
+ $(error On Windows, DESTDIR must be set for installation)
29
+ endif
30
+ # Use relative paths when DESTDIR is set to avoid path joining issues
31
+ PREFIX ?= Program Files\\$(PROJECT_NAME )
32
+ INSTALL_LIB_DIR := $(PREFIX ) \\bin
33
+ INSTALL_INCLUDE_DIR := $(PREFIX ) \\include
34
+ POST_INSTALL := true
35
+ endif
36
+
37
+ # Library name with extension
38
+ LIB_NAME := lib$(PROJECT_NAME ) .$(LIB_EXTENSION )
39
+
40
+ # Default target
41
+ .PHONY : all
42
+ all : build
43
+
44
+ # Build the library using Cargo
45
+ .PHONY : build
46
+ build :
47
+ cargo build --release
48
+
49
+ # Test the library using Cargo
50
+ .PHONY : test
51
+ test :
52
+ cargo test
53
+
54
+ # Install the library and headers
55
+ .PHONY : install
56
+ install : build
57
+ @install -d $(DESTDIR )$(INSTALL_LIB_DIR )
58
+ @install -d $(DESTDIR )$(INSTALL_INCLUDE_DIR )
59
+
60
+ install -m 755 target/release/$(LIB_NAME) $(DESTDIR)$(INSTALL_LIB_DIR)/
61
+
62
+ install -m 644 $(PROJECT_NAME).h $(DESTDIR)$(INSTALL_INCLUDE_DIR)/
63
+
64
+ @if [ -z "$(DESTDIR)" ] && [ "$(POST_INSTALL)" != "true" ]; then \
65
+ $(POST_INSTALL); \
66
+ fi
67
+
68
+ # Uninstall the library and headers
69
+ .PHONY : uninstall
70
+ uninstall :
71
+ rm -f $(DESTDIR )$(INSTALL_LIB_DIR ) /$(LIB_NAME )
72
+ rm -f $(DESTDIR )$(INSTALL_INCLUDE_DIR ) /$(PROJECT_NAME ) .h
73
+
74
+ @if [ -z "$(DESTDIR)" ] && [ "$(UNAME_S)" = "Linux" ]; then \
75
+ ldconfig; \
76
+ fi
77
+
78
+ # Clean build artifacts
79
+ .PHONY : clean
80
+ clean :
81
+ cargo clean
82
+
83
+ # Print installation paths (useful for debugging)
84
+ .PHONY : print-paths
85
+ print-paths :
86
+ @echo " Installation paths:"
87
+ @echo " Library dir: $( DESTDIR) $( INSTALL_LIB_DIR) "
88
+ @echo " Include dir: $( DESTDIR) $( INSTALL_INCLUDE_DIR) "
0 commit comments