aboutsummaryrefslogtreecommitdiff
path: root/makefile
blob: 71d420083df5223b436718f4f272301cb56ea898 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# INCLUDE is where you find the header files for the libs you're using. They are used during compilation.
# Example: -I /usr/include/boost/
INCLUDE=

# Compiler. Pretty self-explanatory.
CXX = g++

# Enabling C++17 mode so I can have more <algorithm> stuff
CVERSION=-std=c++17

# Native compilation flags and crosscompilation flags for Windows
CFLAGS=-g
WINFLAGS=-g -gcodeview

# Executable name stuff
V=v0.2.1-alpha
NAME=satscalc

# LIBDIR is where you can find the linkable objects or whatever. They are used for the linking stage.
# -L /usr/lib/x86_64-linux-gnu/
LIBDIR=

# LIBS are the libs you are using written with a -l and then ignoring the lib-part at the beginning of the file's name.
# So "libboost_date_time.a" will be just "-lboost_date_time"
LIBS=

# Sources are the source code files. Only the .cpp files, becuase the .h files are included into them during pre-processing.
SOURCES=$(wildcard src/*.cpp)
OBJDIR=obj/
OBJECTS=$(patsubst src/%.cpp, $(OBJDIR)%.o, $(SOURCES))
# This last line creates an identical list of objects based on the list of .cpp files.

a.out: $(OBJECTS)
	$(CXX) $(LIBDIR) $(CVERSION) $(LIBS) $(OBJECTS) -o $(NAME)

$(OBJECTS): obj/%.o : src/%.cpp
	mkdir -p $(OBJDIR)
	$(CXX) $(CFLAGS) $(INCLUDE) $(CVERSION) $(CFLAGS) -c $< -o $@

windows: 
	zig c++ -target x86_64-windows-gnu src/*.cpp $(CVERSION) $(WINFLAGS) -o $(NAME).exe

windows32: 
	zig c++ -target i386-windows-gnu src/*.cpp $(CVERSION) $(WINFLAGS) -o $(NAME).exe

mac: 
	zig c++ -target x86_64-macos-gnu src/*.cpp $(CVERSION) $(CFLAGS) -o $(NAME)

release:
	mkdir -p bin
	make CFLAGS=-O2 NAME=bin/$(NAME)-$(V)-linux
	make mac CFLAGS=-O2 NAME=bin/$(NAME)-$(V)-macOS
	make windows WINFLAGS="-O2 --static" NAME=bin/$(NAME)-$(V)-win64
	make windows32 WINFLAGS="-O2 --static" NAME=bin/$(NAME)-$(V)-win32
	chmod +x bin/*

clean:
	rm -f obj/*.o

cleanall:
	rm -rf obj/*.o bin/ $(NAME)

install: a.out
	cp satscalc /usr/local/bin/satscalc

test: a.out
	./test.sh