mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-09-24 15:54:12 +00:00
237 lines
7 KiB
Makefile
237 lines
7 KiB
Makefile
SHELL = /bin/sh
|
|
|
|
.SUFFIXES:
|
|
.SUFFIXES: .cpp .o .d .h
|
|
|
|
OS := $(shell uname | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/')
|
|
x64 := $(shell uname -m)
|
|
ENDIAN := $(shell uname -m)
|
|
ENDIAN := $(patsubst i%86,LITTLE_ENDIAN,$(ENDIAN))
|
|
ENDIAN := $(patsubst x86_64,LITTLE_ENDIAN,$(ENDIAN))
|
|
ENDIAN := $(patsubst Power Macintosh,BIG_ENDIAN,$(ENDIAN))
|
|
CXX=g++ -std=c++11 -Wno-deprecated
|
|
|
|
##########################################################
|
|
########### Platform specific stuff #####################
|
|
##########################################################
|
|
|
|
ifeq ($(OS),LINUX)
|
|
|
|
### Raspbian is reported as a Linux OS
|
|
### and reports 'armv6l' via uname -m
|
|
### so we check -m to detect it properly
|
|
ifeq ($(x64),armv6l)
|
|
|
|
#PLATFORM_DEFINES=-DPLATFORM_ARMv6
|
|
# this is for GCC 4.6.x to make a legacy compatible compile ??
|
|
PLATFORM_DEFINES=-DPLATFORM_ARMv6 -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -ffunction-sections -fdata-sections -Wl,--gc-sections
|
|
|
|
PLATFORM_LIBS=\
|
|
libs/Aol_XML/ARMv6/libexpat.a\
|
|
libs/libcurl/ARMv6/libcurl.a\
|
|
libs/libcurl/ARMv6/libssl.a\
|
|
libs/libcurl/ARMv6/libcrypto.a\
|
|
libs/zlib/ARMv6/libz.a\
|
|
-lrt\
|
|
-lpthread\
|
|
-ldl
|
|
### the RPi2 is reported as a Linux OS
|
|
### and reports 'armv7l' via uname -m
|
|
### so we check -m to detect it properly
|
|
else ifeq ($(x64),armv7l)
|
|
# https://www.raspberrypi.org/forums/viewtopic.php?p=684549#p684549
|
|
# this is for GCC 4.6.x
|
|
#PLATFORM_DEFINES=-DPLATFORM_ARMv7 -march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard
|
|
# this is for GCC 4.8.x (default is 4.6.x on Raspbian)
|
|
PLATFORM_DEFINES=-DPLATFORM_ARMv7 -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -Wno-unused-result -Wno-ignored-qualifiers -Wno-long-long -Wno-missing-field-initializers -ffunction-sections -fdata-sections -Wl,--gc-sections
|
|
# this is for GCC 4.6.x to make a legacy compatible compile ??
|
|
#PLATFORM_DEFINES=-DPLATFORM_ARMv6 -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard
|
|
|
|
PLATFORM_LIBS=\
|
|
libs/Aol_XML/ARMv7/libexpat.a\
|
|
libs/libcurl/ARMv7/libcurl.a\
|
|
libs/libcurl/ARMv7/libssl.a\
|
|
libs/libcurl/ARMv7/libcrypto.a\
|
|
libs/zlib/ARMv7/libz.a\
|
|
-lrt\
|
|
-lpthread\
|
|
-ldl
|
|
else
|
|
PLATFORM_DEFINES=-DPLATFORM_LINUX -Wno-unused-result -Wno-ignored-qualifiers -Wno-long-long -Wno-missing-field-initializers -ffunction-sections -fdata-sections -Wl,--gc-sections
|
|
|
|
### Linux platform specific includes
|
|
### with 32-bit and 64-bit handling
|
|
ifeq ($(x64),x86_64)
|
|
INCLUDES=-Ideps/x86_64/include
|
|
PLATFORM_LIBS=\
|
|
-Ldeps/x86_64/lib -lexpat -lcurl -lssl -lcrypto -lpthread -lz -lrt -ldl
|
|
else
|
|
CXX += -m32
|
|
INCLUDES=-Ideps/i686/include
|
|
PLATFORM_LIBS=\
|
|
-Ldeps/i686/lib -lexpat -lcurl -lssl -lcrypto -lpthread -lz -lrt -ldl
|
|
endif
|
|
endif
|
|
|
|
###################################
|
|
|
|
else
|
|
ifeq ($(OS),FREEBSD)
|
|
# CXX=g++44
|
|
PLATFORM_DEFINES=-DPLATFORM_BSD -Wno-long-long -Wno-missing-field-initializers
|
|
|
|
PLATFORM_LIBS=\
|
|
libs/Aol_XML/BSD/libexpat.a\
|
|
libs/libcurl/BSD/libcurl.a\
|
|
libs/libcurl/BSD/libssl.a\
|
|
libs/libcurl/BSD/libcrypto.a\
|
|
libs/zlib/BSD/libz.a\
|
|
-lpthread\
|
|
# -R /usr/local/lib/gcc44
|
|
|
|
else
|
|
ifeq ($(OS),DARWIN)
|
|
PLATFORM_DEFINES=-DPLATFORM_MAC -Wno-long-long -Wno-missing-field-initializers
|
|
|
|
PLATFORM_LIBS=\
|
|
libs/Aol_XML/Darwin/libexpat.a\
|
|
libs/libcurl/Darwin/libcurl.a\
|
|
libs/libcurl/Darwin/libssl.a\
|
|
libs/libcurl/Darwin/libcrypto.a\
|
|
libs/zlib/Darwin/libz.a\
|
|
-lpthread
|
|
else
|
|
ERR = $(error Unknown operating system $(OS))
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(ENDIAN),LITTLE_ENDIAN)
|
|
ifneq ($(ENDIAN),BIG_ENDIAN)
|
|
ERR = $(error Unknown endian $(ENDIAN))
|
|
endif
|
|
endif
|
|
|
|
##########################################################
|
|
##########################################################
|
|
##########################################################
|
|
##########################################################
|
|
##########################################################
|
|
|
|
INCLUDES += -I. -InmrCommon
|
|
#INCLUDES=-I. -InmrCommon -Izlib -Ilibcurl/include -IGeoIP/libGeoIP
|
|
|
|
LIBS=$(PLATFORM_LIBS)
|
|
|
|
CPPFLAGS=$(PLATFORM_DEFINES) -MMD -MP -D_REENTRANT -DCURL_STATICLIB -Wno-unused-function -Wno-sign-compare -Wno-unknown-pragmas -Wall -Wextra -pedantic
|
|
|
|
CFLAGS_RELEASE=-O2 -static-libgcc -static-libstdc++ -rdynamic
|
|
CPPFLAGS_RELEASE=$(CPPFLAGS) -O2 -DNDEBUG -g
|
|
|
|
CFLAGS_DEBUG=-static-libgcc -static-libstdc++ -rdynamic
|
|
CPPFLAGS_DEBUG=$(CPPFLAGS) -ggdb -DDEBUG
|
|
|
|
VPATH=nmrCommon/threading nmrCommon/stacktrace nmrCommon/services nmrCommon/file nmrCommon/unicode webNet aolxml
|
|
#VPATH=nmrCommon/threading nmrCommon/stacktrace nmrCommon/services nmrCommon/file nmrCommon/unicode webNet aolxml GeoIP/libGeoIP
|
|
|
|
C_SOURCES=\
|
|
$(wildcard *.c)
|
|
|
|
#C_SOURCES=\
|
|
# $(wildcard *.c)\
|
|
# $(wildcard GeoIP/libGeoIP/*.c)
|
|
|
|
CXX_SOURCES=\
|
|
$(wildcard *.cpp)\
|
|
$(wildcard nmrCommon/threading/thread.cpp)\
|
|
$(wildcard nmrCommon/stacktrace/StackTrace.cpp)\
|
|
$(wildcard nmrCommon/services/logger.cpp)\
|
|
$(wildcard nmrCommon/services/serviceMain.cpp)\
|
|
$(wildcard nmrCommon/services/stdServiceImpl.cpp)\
|
|
$(wildcard nmrCommon/file/fileUtils.cpp)\
|
|
$(wildcard nmrCommon/unicode/*.cpp)\
|
|
$(wildcard webNet/*.cpp)\
|
|
$(wildcard aolxml/*.cpp)
|
|
|
|
SOURCE_FILES=$(C_SOURCES) $(CXX_SOURCES)
|
|
|
|
OBJECT_FILES=$(addsuffix .o,$(basename $(notdir $(SOURCE_FILES))))
|
|
DEBUG_OBJECTS=$(addprefix debug/,$(OBJECT_FILES))
|
|
RELEASE_OBJECTS=$(addprefix release/,$(OBJECT_FILES))
|
|
|
|
.PHONY: default
|
|
default: release
|
|
|
|
release/config.o debug/config.o: unixversion.h
|
|
release/serviceMain.o debug/serviceMain.o: unixversion.h
|
|
|
|
##############################################################
|
|
### Create unix version header from Win32 resource file
|
|
unixversion.h: sc_serv.rc
|
|
@grep --text 'PRODUCTVERSION' sc_serv.rc | sed 's/PRODUCTVERSION/static int & \[VENT\]=\{/' | sed 's/[0-9]*,[0-9]*,[0-9]*,[0-9]*/&\};/' > unixversion_tmp.h
|
|
@echo '#define VENT 4' | cat - unixversion_tmp.h > unixversion.h
|
|
@rm -f unixversion_tmp.h
|
|
|
|
################# File rules #########################3
|
|
|
|
debug/%.o: %.cpp
|
|
$(CXX) $(CPPFLAGS_DEBUG) $(INCLUDES) -c $< -o $@
|
|
|
|
debug/%.o: %.c
|
|
$(CXX) $(CPPFLAGS_DEBUG) $(INCLUDES) -c $< -o $@
|
|
|
|
release/%.o: %.cpp
|
|
$(CXX) $(CPPFLAGS_RELEASE) $(INCLUDES) -c $< -o $@
|
|
|
|
release/%.o: %.c
|
|
$(CXX) $(CPPFLAGS_RELEASE) $(INCLUDES) -c $< -o $@
|
|
|
|
#release/%.o: GeoIP/libGeoIP/%.c
|
|
# $(CXX) $(CPPFLAGS_RELEASE) $(INCLUDES) -c $< -o $@
|
|
|
|
############################################################
|
|
|
|
sc_serv_debug: $(DEBUG_OBJECTS)
|
|
$(CXX) -o sc_serv_debug $(CFLAGS_DEBUG) $(DEBUG_OBJECTS) $(LIBS)
|
|
@./sc_serv_debug -v
|
|
@echo
|
|
|
|
sc_serv: sc_serv_notstripped
|
|
strip -o sc_serv sc_serv_notstripped
|
|
@echo
|
|
|
|
sc_serv_notstripped: $(RELEASE_OBJECTS)
|
|
$(CXX) -o sc_serv_notstripped $(CFLAGS_RELEASE) $(RELEASE_OBJECTS) $(LIBS)
|
|
@./sc_serv_notstripped -v
|
|
|
|
releasedir:
|
|
@mkdir -p release
|
|
|
|
debugdir:
|
|
@mkdir -p debug
|
|
|
|
.PHONY: clean
|
|
.PHONY: release
|
|
.PHONY: debug
|
|
|
|
release: releasedir sc_serv
|
|
release_nostrip: releasedir sc_serv_notstripped
|
|
debug: debugdir sc_serv_debug
|
|
|
|
clean:
|
|
@rm -rf debug
|
|
@rm -rf release
|
|
@rm -f unixversion.h
|
|
|
|
.PHONY: err
|
|
err: ; $(ERR)
|
|
|
|
##################################################3
|
|
|
|
ifeq ($(MAKECMDGOALS),release)
|
|
-include $(RELEASE_OBJECTS:.o=.d)
|
|
else
|
|
ifneq ($(MAKECMDGOALS),clean)
|
|
-include $(DEBUG_OBJECTS:.o=.d)
|
|
endif
|
|
endif
|