@@ -5,10 +5,12 @@ CROSS ?= none
55
66UNAME_S := $(shell uname -s)
77UNAME_M := $(shell uname -m)
8- rwildcard = $(wildcard $1$2) $(foreach d,$(wildcard $1* ) ,$(call rwildcard,$d/,$2) )
8+ rwildcard = $(wildcard $1$2) $(foreach d,$(wildcard $1* ) ,$(call rwildcard,$d/,$2) )
99CC_IS_CLANG := $(shell $(CC ) --version | grep -q clang && echo true || echo false)
1010
11- PACKAGES := capstone freetype2 glfw3 libavcodec libavformat libavutil libswresample libuv zlib libcurl
11+ PACKAGES := capstone freetype2 glfw3 libavcodec libavformat libavutil libswresample libcurl libuv zlib
12+ OPTIONAL_PACKAGES := md4c fmt libllhttp libluv liburiparser
13+ OPTIONAL_LIBRARIES := multipart ucl
1214
1315LOCALES := el es_ES fr ja pt_BR uk zh_CN
1416
@@ -19,29 +21,28 @@ HAS_SUBMODULES = true
1921endif
2022
2123CXXFLAGS += -std=c++2b
22- CPPFLAGS += ` pkg-config --cflags $( PACKAGES) `
2324CPPFLAGS += -I.
2425CPPFLAGS += -Isrc
2526CPPFLAGS += -Ithird_party
2627CPPFLAGS += -Ithird_party/ELFIO
27- CPPFLAGS += -Ithird_party/fmt/include/
28+ CPPFLAGS_pkg_fmt += -Ithird_party/fmt/include/
2829CPPFLAGS += -Ithird_party/gl3w
2930CPPFLAGS += -Ithird_party/googletest/googletest/include
3031CPPFLAGS += -Ithird_party/imgui
3132CPPFLAGS += -Ithird_party/imgui/backends
3233CPPFLAGS += -Ithird_party/imgui/examples
3334CPPFLAGS += -Ithird_party/imgui/misc/cpp
3435CPPFLAGS += -Ithird_party/libelfin
35- CPPFLAGS += -Ithird_party/llhttp
36+ CPPFLAGS_pkg_libllhttp += -Ithird_party/llhttp
3637CPPFLAGS += -Ithird_party/luajit/src
37- CPPFLAGS += -Ithird_party/luv/src
38- CPPFLAGS += -Ithird_party/luv/deps/lua-compat-5.3/c-api
38+ CPPFLAGS_pkg_libluv += -Ithird_party/luv/src
39+ CPPFLAGS_pkg_libluv += -Ithird_party/luv/deps/lua-compat-5.3/c-api
3940CPPFLAGS += -Ithird_party/magic_enum/include/magic_enum
40- CPPFLAGS += -Ithird_party/md4c/src
41- CPPFLAGS += -Ithird_party/multipart-parser-c
41+ CPPFLAGS_pkg_md4c += -Ithird_party/md4c/src
42+ CPPFLAGS_lib_multipart += -Ithird_party/multipart-parser-c
4243CPPFLAGS += -Ithird_party/tracy/public
43- CPPFLAGS += -Ithird_party/ucl -Ithird_party/ucl/include
44- CPPFLAGS += -Ithird_party/uriparser/include
44+ CPPFLAGS_lib_ucl += -Ithird_party/ucl -Ithird_party/ucl/include
45+ CPPFLAGS_pkg_liburiparser += -Ithird_party/uriparser/include
4546CPPFLAGS += -Ithird_party/zep/extensions
4647CPPFLAGS += -Ithird_party/zep/include
4748CPPFLAGS += -Ithird_party/xbyak/xbyak
@@ -75,7 +76,6 @@ ifeq ($(UNAME_S),Darwin)
7576endif
7677
7778LUAJIT_LDFLAGS := $(LDFLAGS )
78- LDFLAGS += ` pkg-config --libs $( PACKAGES) `
7979
8080ifeq ($(UNAME_S ) ,Darwin)
8181 LDFLAGS += -lc++ -framework GLUT -framework OpenGL -framework CoreFoundation -framework Cocoa
@@ -108,8 +108,8 @@ endif
108108
109109LD := $(CXX )
110110
111- SRCS : = $(call rwildcard,src/,* .cc)
112- SRCS += third_party/fmt/src/os.cc third_party/fmt/src/format.cc
111+ SRCS + = $(call rwildcard,src/,* .cc)
112+ SRCS_pkg_fmt += third_party/fmt/src/os.cc third_party/fmt/src/format.cc
113113IMGUI_SRCS += $(wildcard third_party/imgui/* .cpp)
114114VIXL_SRCS := $(call rwildcard, third_party/vixl/src,* .cc)
115115SRCS += $(IMGUI_SRCS )
@@ -129,16 +129,16 @@ SRCS += third_party/imgui/misc/freetype/imgui_freetype.cpp
129129SRCS += third_party/imgui_lua_bindings/imgui_lua_bindings.cpp
130130SRCS += third_party/imgui_md/imgui_md.cpp
131131SRCS += third_party/imgui_memory_editor/imgui_memory_editor.cpp
132- SRCS += $(wildcard third_party/llhttp/* .c)
132+ SRCS_pkg_libllhttp += $(wildcard third_party/llhttp/* .c)
133133SRCS += $(wildcard third_party/lpeg/* .c)
134134SRCS += third_party/lua-protobuf/pb.c
135135SRCS += third_party/luafilesystem/src/lfs.c
136- SRCS += third_party/luv/src/luv.c
137- SRCS += third_party/md4c/src/md4c.c
138- SRCS += third_party/multipart-parser-c/multipart_parser.c
136+ SRCS_pkg_libluv += third_party/luv/src/luv.c
137+ SRCS_pkg_md4c += third_party/md4c/src/md4c.c
138+ SRCS_lib_multipart += third_party/multipart-parser-c/multipart_parser.c
139139SRCS += third_party/nanovg/src/nanovg.c
140- SRCS += third_party/tracy/public/TracyClient.cpp
141- SRCS += third_party/ucl/src/n2e_99.c third_party/ucl/src/alloc.c
140+ SRCS_ReleaseWithTracy += third_party/tracy/public/TracyClient.cpp
141+ SRCS_lib_ucl += third_party/ucl/src/n2e_99.c third_party/ucl/src/alloc.c
142142SRCS += $(wildcard third_party/uriparser/src/* .c)
143143SRCS += third_party/zep/extensions/repl/mode_repl.cpp
144144SRCS += $(wildcard third_party/zep/src/* .cpp)
@@ -176,6 +176,37 @@ TOOLS = exe2elf exe2iso modconv ps1-packer psyq-obj-parser
176176
177177# #############################################################################
178178
179+ SRCS += $(SRCS_$(BUILD ) )
180+
181+ define CHECK_PKG
182+ ifeq ($(shell pkg-config --exists $(1 ) && echo true || echo false) ,true)
183+ PACKAGES += $(1 )
184+ else
185+ CPPFLAGS += $(CPPFLAGS_pkg_$(1 ) )
186+ LDFLAGS += $(LDFLAGS_pkg_$(1 ) )
187+ SRCS += $(SRCS_pkg_$(1 ) )
188+ endif
189+ endef
190+
191+ define CHECK_LIB
192+ ifeq ($(shell echo "int main() {}" | gcc -x c - -l$(1 ) -Wl,--no-as-needed -Wl,--unresolved-symbols=ignore-all -Wl,--no-undefined -o /dev/null >& /dev/null && echo true || echo false),true)
193+ LDFLAGS += -l$(1 )
194+ else
195+ CPPFLAGS += $(CPPFLAGS_lib_$(1 ) )
196+ LDFLAGS += $(LDFLAGS_lib_$(1 ) )
197+ SRCS += $(SRCS_lib_$(1 ) )
198+ endif
199+ endef
200+
201+ $(foreach pkg,$(OPTIONAL_PACKAGES),$(eval $(call CHECK_PKG,$(pkg))))
202+ $(foreach lib,$(OPTIONAL_LIBRARIES),$(eval $(call CHECK_LIB,$(lib))))
203+
204+ CPPFLAGS_PKGCONFIG := $(shell pkg-config --cflags $(PACKAGES ) )
205+ LDFLAGS_PKGCONFIG := $(shell pkg-config --libs $(PACKAGES ) )
206+
207+ CPPFLAGS += $(CPPFLAGS_PKGCONFIG )
208+ LDFLAGS += $(LDFLAGS_PKGCONFIG )
209+
179210OBJECTS += $(patsubst % .c,% .o,$(filter % .c,$(SRCS ) ) )
180211OBJECTS += $(patsubst % .cc,% .o,$(filter % .cc,$(SRCS ) ) )
181212OBJECTS += $(patsubst % .cpp,% .o,$(filter % .cpp,$(SRCS ) ) )
0 commit comments