view common/portability/Makefile @ 2575:902e2e96f4e8

A preliminary port of Thermostat to macos. It is quite usable except for statistics that query the OS (like memory and IO usage over time). The main unfinished business: - native code for memory and IO usage - JUnit - GUI often hangs on exit. - Mac .app bundle build Reviewed-by: neugens Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2017-January/022086.html
author Simon Tooke <stooke@redhat.com>
date Mon, 30 Jan 2017 13:06:07 -0500
parents b98beac5559c
children 648dc28c87ed
line wrap: on
line source

CC         = gcc
JAVAH      = javah
MYCFLAGS   = -c -Wall $(EXTRA_CFLAGS)
MYLDFLAGS  = -shared $(EXTRA_CFLAGS)
COPY       = cp -a

CLASSPATH  = target/classes/
TARGET_DIR = target

ifeq ($(JNI_PLATFORM),win32)
    JNI_PLATFORM = win32
    SO_PREFIX  =
    SO_SUFFIX  = .dll
else
ifeq ($(JNI_PLATFORM),darwin)
    JNI_PLATFORM = darwin
    SO_PREFIX  = lib
    SO_SUFFIX  = .dylib
    MYCFLAGS   +=
    MYLDFLAGS  +=
else
    JNI_PLATFORM = linux
    SO_PREFIX  = lib
    SO_SUFFIX  = .so
    MYCFLAGS   += -fPIC
    MYLDFLAGS  += -fPIC
endif
endif

INCLUDE    = -I $(TARGET_DIR) -I "$(JAVA_HOME)/include/" -I "$(JAVA_HOME)/include/$(JNI_PLATFORM)"

HOSTNAME_SOURCES    = src/main/native/HostName.c
HOSTNAME_TARGET     = $(TARGET_DIR)/HostName.c
HOSTNAME_OBJECTS    = $(HOSTNAME_TARGET:.c=.o)
HOSTNAME_EXECUTABLE = $(SO_PREFIX)HostNameWrapper$(SO_SUFFIX)

USERNAME_SOURCES    = src/main/native/UserNameUtilImpl.c
USERNAME_TARGET     = $(TARGET_DIR)/UserNameUtilImpl.c
USERNAME_OBJECTS    = $(USERNAME_TARGET:.c=.o)
USERNAME_EXECUTABLE = $(SO_PREFIX)UserNameUtilWrapper$(SO_SUFFIX)

ifeq ($(JNI_PLATFORM),win32)
HELPER_SOURCES    = src/main/native/WindowsHelperImpl.c
HELPER_TARGET     = $(TARGET_DIR)/WindowsHelperImpl.c
HELPER_OBJECTS    = $(HELPER_TARGET:.c=.o)
HELPER_EXECUTABLE = $(SO_PREFIX)WindowsHelperWrapper$(SO_SUFFIX)
endif

ifeq ($(JNI_PLATFORM),darwin)
HELPER_SOURCES    = src/main/native/MacOSHelperImpl.c
HELPER_TARGET     = $(TARGET_DIR)/MacOSHelperImpl.c
HELPER_OBJECTS    = $(HELPER_TARGET:.c=.o)
HELPER_EXECUTABLE = $(SO_PREFIX)MacOSHelperWrapper$(SO_SUFFIX)
endif

EXECUTABLES          = $(HOSTNAME_EXECUTABLE) $(USERNAME_EXECUTABLE)

.PHONY:UserNameUtilImpl
JNI_LIST = com.redhat.thermostat.common.portability.HostName com.redhat.thermostat.common.portability.internal.linux.UserNameUtilImpl

ifeq ($(JNI_PLATFORM),win32)
    EXECUTABLES  += $(HELPER_EXECUTABLE)
    JNI_LIST     +=  com.redhat.thermostat.common.portability.internal.windows.WindowsHelperImpl
    HELPER_LIBS  += -l psapi
endif

ifeq ($(JNI_PLATFORM),darwin)
    EXECUTABLES  += $(HELPER_EXECUTABLE)
    JNI_LIST     +=  com.redhat.thermostat.common.portability.internal.macos.MacOSHelperImpl
endif

$(JNI_LIST):
	$(JAVAH) -force -classpath $(CLASSPATH) -d $(TARGET_DIR) $(JNI_LIST)

all: $(JNI_LIST) init $(HOSTNAME_SOURCES) $(USERNAME_SOURCES) $(HELPER_SOURCES) $(EXECUTABLES)

.PHONY:
init:
	$(COPY) $(HOSTNAME_SOURCES) $(HOSTNAME_TARGET)
	$(COPY) $(USERNAME_SOURCES) $(USERNAME_TARGET)
ifneq ($(strip $(HELPER_SOURCES)),)
	$(COPY) $(HELPER_SOURCES) $(HELPER_TARGET)
endif

$(HOSTNAME_EXECUTABLE): $(HOSTNAME_OBJECTS)
	$(CC) $(MYLDFLAGS) $(LDFLAGS) $(HOSTNAME_OBJECTS) $(PLATFORM_LIBS) -o $(TARGET_DIR)/$@

$(USERNAME_EXECUTABLE): $(USERNAME_OBJECTS)
	$(CC) $(MYLDFLAGS) $(LDFLAGS) $(USERNAME_OBJECTS) $(PLATFORM_LIBS) -o $(TARGET_DIR)/$@

$(HELPER_EXECUTABLE): $(HELPER_OBJECTS)
	$(CC) $(MYLDFLAGS) $(LDFLAGS) $(HELPER_OBJECTS) $(PLATFORM_LIBS) $(HELPER_LIBS) -o $(TARGET_DIR)/$@

.c.o:
	$(CC) $(MYCFLAGS) $(CFLAGS) $(INCLUDE) $< -o $@

.cpp.o:
	$(CC) $(MYCFLAGS) $(CFLAGS) $(INCLUDE) $< -o $@

clean-lib:
	rm -f $(TARGET_DIR)/$(HOSTNAME_EXECUTABLE)
	rm -f $(TARGET_DIR)/$(USERNAME_EXECUTABLE)
	rm -f $(TARGET_DIR)/$(HELPER_EXECUTABLE)

clean-obj:
	rm -f $(HOSTNAME_OBJECTS) $(HOSTNAME_TARGET)
	rm -f $(USERNAME_OBJECTS) $(USERNAME_TARGET)
	rm -f $(HELPER_OBJECTS) $(HELPER_TARGET)

clean: clean-obj clean-lib