200 lines
5.7 KiB
Plaintext
200 lines
5.7 KiB
Plaintext
# Configuration for the Makefile
|
|
|
|
OS := $(shell uname)
|
|
OS := $(OS:MINGW%=MINGW)
|
|
OS := $(OS:MSYS%=MINGW)
|
|
OS := $(OS:Windows_NT=MINGW)
|
|
OS := $(OS:Darwin=MACOS)
|
|
|
|
ifeq ($(findstring -fembed-bitcode,$(XCFLAGS)),)
|
|
# clang does not support these in combination with -fembed-bitcode
|
|
CFLAGS += -ffunction-sections -fdata-sections
|
|
endif
|
|
|
|
ifeq ($(OS),MACOS)
|
|
LDREMOVEUNREACH := -Wl,-dead_strip
|
|
else
|
|
LDREMOVEUNREACH := -Wl,--gc-sections
|
|
endif
|
|
|
|
CFLAGS += -Wsign-compare
|
|
|
|
SANITIZE_FLAGS += -fsanitize=address
|
|
SANITIZE_FLAGS += -fsanitize=leak
|
|
|
|
ifeq ($(build),debug)
|
|
CFLAGS += -pipe -g
|
|
LDFLAGS += -g
|
|
else ifeq ($(build),release)
|
|
CFLAGS += -pipe -O2 -DNDEBUG -fomit-frame-pointer
|
|
LDFLAGS += $(LDREMOVEUNREACH) -Wl,-s
|
|
else ifeq ($(build),small)
|
|
CFLAGS += -pipe -Os -DNDEBUG -fomit-frame-pointer
|
|
LDFLAGS += $(LDREMOVEUNREACH) -Wl,-s
|
|
else ifeq ($(build),valgrind)
|
|
CFLAGS += -pipe -O2 -DNDEBUG -DPACIFY_VALGRIND -fno-omit-frame-pointer
|
|
LDFLAGS += $(LDREMOVEUNREACH) -Wl,-s
|
|
else ifeq ($(build),sanitize)
|
|
CFLAGS += -pipe -g -fno-omit-frame-pointer $(SANITIZE_FLAGS)
|
|
LDFLAGS += -g $(SANITIZE_FLAGS)
|
|
else ifeq ($(build),sanitize-release)
|
|
CFLAGS += -pipe -O2 -DNDEBUG -fno-omit-frame-pointer $(SANITIZE_FLAGS)
|
|
LDFLAGS += $(LDREMOVEUNREACH) -Wl,-s $(SANITIZE_FLAGS)
|
|
else ifeq ($(build),profile)
|
|
CFLAGS += -pipe -O2 -DNDEBUG -pg
|
|
LDFLAGS += -pg
|
|
else ifeq ($(build),coverage)
|
|
CFLAGS += -pipe -g -pg -fprofile-arcs -ftest-coverage
|
|
LIBS += -lgcov
|
|
else ifeq ($(build),native)
|
|
CFLAGS += -pipe -O2 -DNDEBUG -fomit-frame-pointer -march=native
|
|
LDFLAGS += $(LDREMOVEUNREACH) -Wl,-s
|
|
else ifeq ($(build),memento)
|
|
CFLAGS += -pipe -g -DMEMENTO
|
|
LDFLAGS += -g -rdynamic
|
|
ifneq ($(HAVE_LIBDL),no)
|
|
CFLAGS += -DHAVE_LIBDL
|
|
LIBS += -ldl
|
|
endif
|
|
else ifeq ($(build),gperf)
|
|
CFLAGS += -pipe -O2 -DNDEBUG -fomit-frame-pointer -DGPERF
|
|
LIBS += -lprofiler
|
|
else
|
|
$(error unknown build setting: '$(build)')
|
|
endif
|
|
|
|
# Default system libraries
|
|
SYS_FREETYPE_LIBS := -lfreetype2
|
|
SYS_HARFBUZZ_LIBS := -lharfbuzz
|
|
SYS_JBIG2DEC_LIBS := -ljbig2dec
|
|
SYS_JPEGXR_LIBS := -ljpegxr
|
|
SYS_LCMS2_LIBS := -llcms2-art
|
|
SYS_LIBJPEG_LIBS := -ljpeg
|
|
SYS_MUJS_LIBS := -lmujs
|
|
SYS_OPENJPEG_LIBS := -lopenjp2
|
|
SYS_ZLIB_LIBS := -lz
|
|
|
|
ifeq ($(OS),MINGW)
|
|
WINDRES := windres
|
|
HAVE_WIN32 := yes
|
|
|
|
else ifeq ($(OS),MACOS)
|
|
HAVE_GLUT := yes
|
|
SYS_GLUT_CFLAGS := -Wno-deprecated-declarations
|
|
SYS_GLUT_LIBS := -framework GLUT -framework OpenGL
|
|
CC = xcrun cc
|
|
AR = xcrun ar
|
|
LD = xcrun ld
|
|
RANLIB = xcrun ranlib
|
|
|
|
else ifeq ($(OS),Linux)
|
|
HAVE_OBJCOPY := yes
|
|
|
|
ifeq ($(shell pkg-config --exists freetype2 && echo yes),yes)
|
|
SYS_FREETYPE_CFLAGS := $(shell pkg-config --cflags freetype2)
|
|
SYS_FREETYPE_LIBS := $(shell pkg-config --libs freetype2)
|
|
endif
|
|
ifeq ($(shell pkg-config --exists harfbuzz && echo yes),yes)
|
|
SYS_HARFBUZZ_CFLAGS := $(shell pkg-config --cflags harfbuzz)
|
|
SYS_HARFBUZZ_LIBS := $(shell pkg-config --libs harfbuzz)
|
|
endif
|
|
ifeq ($(shell pkg-config --exists lcms2 && echo yes),yes)
|
|
SYS_LCMS2_CFLAGS := $(shell pkg-config --cflags lcms2)
|
|
SYS_LCMS2_LIBS := $(shell pkg-config --libs lcms2)
|
|
endif
|
|
ifeq ($(shell pkg-config --exists libjpeg && echo yes),yes)
|
|
SYS_LIBJPEG_CFLAGS := $(shell pkg-config --cflags libjpeg)
|
|
SYS_LIBJPEG_LIBS := $(shell pkg-config --libs libjpeg)
|
|
endif
|
|
ifeq ($(shell pkg-config --exists libopenjp2 && echo yes),yes)
|
|
SYS_OPENJPEG_CFLAGS := $(shell pkg-config --cflags libopenjp2)
|
|
SYS_OPENJPEG_LIBS := $(shell pkg-config --libs libopenjp2)
|
|
endif
|
|
ifeq ($(shell pkg-config --exists zlib && echo yes),yes)
|
|
SYS_ZLIB_CFLAGS := $(shell pkg-config --cflags zlib)
|
|
SYS_ZLIB_LIBS := $(shell pkg-config --libs zlib)
|
|
endif
|
|
|
|
HAVE_SYS_CURL := $(shell pkg-config --exists libcurl && echo yes)
|
|
ifeq ($(HAVE_SYS_CURL),yes)
|
|
SYS_CURL_CFLAGS := $(shell pkg-config --cflags libcurl)
|
|
SYS_CURL_LIBS := $(shell pkg-config --libs libcurl)
|
|
endif
|
|
|
|
HAVE_GLUT := yes
|
|
ifeq ($(HAVE_GLUT),yes)
|
|
SYS_GLUT_CFLAGS :=
|
|
SYS_GLUT_LIBS := -lglut -lGL
|
|
endif
|
|
|
|
HAVE_X11 := $(shell pkg-config --exists x11 xext && echo yes)
|
|
ifeq ($(HAVE_X11),yes)
|
|
X11_CFLAGS := $(shell pkg-config --cflags x11 xext)
|
|
X11_LIBS := $(shell pkg-config --libs x11 xext)
|
|
endif
|
|
|
|
HAVE_LIBCRYPTO := $(shell pkg-config --exists 'libcrypto >= 1.1.0' && echo yes)
|
|
ifeq ($(HAVE_LIBCRYPTO),yes)
|
|
LIBCRYPTO_CFLAGS := $(shell pkg-config --cflags libcrypto) -DHAVE_LIBCRYPTO
|
|
LIBCRYPTO_LIBS := $(shell pkg-config --libs libcrypto)
|
|
endif
|
|
|
|
HAVE_PTHREAD := yes
|
|
ifeq ($(HAVE_PTHREAD),yes)
|
|
PTHREAD_CFLAGS :=
|
|
PTHREAD_LIBS := -lpthread
|
|
endif
|
|
|
|
endif
|
|
|
|
# The following section has various cross compilation configurations.
|
|
#
|
|
# Invoke these as:
|
|
# make OS=mingw32-cross
|
|
#
|
|
# This does rely on the generated directory being populated with the font files.
|
|
# On a unix-like system, run 'make generate' before doing the cross compile.
|
|
# On Windows, run 'nmake -f scripts\fontdump.nmake' in a Visual Studio command prompt.
|
|
|
|
ifeq "$(OS)" "wasm"
|
|
OUT := build/wasm/$(build)
|
|
CC = emcc
|
|
CXX = em++
|
|
AR = emar
|
|
HAVE_GLUT=no
|
|
HAVE_X11=no
|
|
HAVE_OBJCOPY=no
|
|
HAVE_LIBCRYPTO=no
|
|
endif
|
|
|
|
ifeq "$(OS)" "mingw32-cross"
|
|
OUT := build/$(OS)/$(build)
|
|
CC = i686-w64-mingw32-gcc
|
|
CXX = i686-w64-mingw32-g++
|
|
LD = i686-w64-mingw32-gcc
|
|
AR = i686-w64-mingw32-ar
|
|
WINDRES = i686-w64-mingw32-windres
|
|
HAVE_WIN32=yes
|
|
endif
|
|
|
|
ifeq "$(OS)" "mingw64-cross"
|
|
OUT := build/$(OS)/$(build)
|
|
CC = x86_64-w64-mingw32-gcc
|
|
CXX = x86_64-w64-mingw32-g++
|
|
LD = x86_64-w64-mingw32-gcc
|
|
AR = x86_64-w64-mingw32-ar
|
|
WINDRES = x86_64-w64-mingw32-windres
|
|
HAVE_WIN32=yes
|
|
endif
|
|
|
|
# Most variables when building for iOS are set up in ios/build_libs.sh,
|
|
# which is called from the Xcode project as a "Run Script" build step.
|
|
# The following section works for both device and simulator builds.
|
|
ifeq "$(OS)" "ios"
|
|
CC = xcrun cc
|
|
CXX = xcrun c++
|
|
AR = xcrun ar
|
|
LD = xcrun ld
|
|
RANLIB = xcrun ranlib
|
|
endif
|