Update to gcc 12.2 and clang 15.0.0
[modules.git] / Makefile
1 BUILD_DIR := build
2 PREBUILT_DIR := $(BUILD_DIR)/prebuilt
3 DIRS := $(BUILD_DIR) $(PREBUILT_DIR)
4
5 #USE_CLANG := YES
6
7 ifdef USE_CLANG
8
9 CXX := clang++
10 CXXFLAGS := \
11         -std=c++2b -stdlib=libc++ \
12         -fimplicit-modules -fimplicit-module-maps \
13         -fprebuilt-module-path=$(PREBUILT_DIR) \
14         -fmodules-cache-path=$(PREBUILT_DIR)
15 #       -fmodule-map-file=/usr/include/c++/v1/module.modulemap
16 #       -fbuiltin-module-map
17
18 MODFLAGS := -Xclang -emit-module-interface
19
20 else # COMPILER != clang
21
22 CXX := g++
23 CXXFLAGS := -std=c++2b -fmodules-ts
24 MODFLAGS :=
25
26 # libstdc++ 12.2 does not bundle pre-built modules:
27 # g++ -std=c++2b -fmodules-ts -fmodule-header=system -x c++-system-header string iostream
28
29 endif
30
31
32 APP = hellomodules
33 SRCS = main.cc helloworld.cc
34 MODS = helloworld
35
36 OBJS = $(patsubst %.cc, build/%.o, $(SRCS))
37 PCMS = $(patsubst %, $(PREBUILT_DIR)/%.pcm, $(MODS))
38
39 all: $(DIRS) $(APP)
40
41 clean:
42         rm -f $(APP)
43         rm -f $(OBJS)
44         rm -f $(PCMS)
45         rm -rf $(PREBUILT_DIR)
46         rm -rf gcm.cache
47
48 $(DIRS):
49         mkdir -p $(DIRS)
50
51 $(APP): $(OBJS) $(PCMS)
52         $(CXX) $(CXXFLAGS) -o $@ $(OBJS)
53
54 $(BUILD_DIR)/%.o: %.cc $(PCMS)
55         $(CXX) $(CXXFLAGS) -o $@ -c $<
56
57 $(PREBUILT_DIR)/%.pcm: %.cc
58         $(CXX) $(MODFLAGS) $(CXXFLAGS) -o $@ -c $<