Skip to content
This repository has been archived by the owner on Jan 31, 2022. It is now read-only.

Commit

Permalink
Clean up Makefiles -- Fixes #128
Browse files Browse the repository at this point in the history
* `config` submodule updated to pick up `XHAL_ROOT` and default `INSTALL_PATH`
* `xhalarm` and `xhalcore` `Makefile`s are simplified for reliable, reproducible builds
* `xhalarm` as dependency of `xhalcore` is moved to dependency of `xhalcore.RPM`
  • Loading branch information
jsturdy committed Aug 8, 2019
1 parent d1f8b3d commit 32b32f3
Show file tree
Hide file tree
Showing 5 changed files with 142 additions and 87 deletions.
4 changes: 3 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,6 @@ python:

xhalarm:

xhalcore: xhalarm
xhalcore:

xhalcore.RPM: xhalarm
2 changes: 1 addition & 1 deletion config
Submodule config updated 2 files
+5 −1 mfCommonDefs.mk
+3 −2 mfZynq.mk
2 changes: 1 addition & 1 deletion python/Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
SUBPACKAGES := \
reg_interface_gem \
reg_interface_gem

SUBPACKAGES.DEBUG := $(patsubst %,%.debug, $(SUBPACKAGES))
SUBPACKAGES.DOC := $(patsubst %,%.doc, $(SUBPACKAGES))
Expand Down
90 changes: 62 additions & 28 deletions xhalarm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,35 +9,47 @@ PackageDir := pkg/$(ShortPackage)
Packager := Mykhailo Dalchenko
Arch := arm

XHAL_VER_MAJOR:=$(shell $(BUILD_HOME)/$(Project)/config/tag2rel.sh | awk '{split($$0,a," "); print a[1];}' | awk '{split($$0,b,":"); print b[2];}')
XHAL_VER_MINOR:=$(shell $(BUILD_HOME)/$(Project)/config/tag2rel.sh | awk '{split($$0,a," "); print a[2];}' | awk '{split($$0,b,":"); print b[2];}')
XHAL_VER_PATCH:=$(shell $(BUILD_HOME)/$(Project)/config/tag2rel.sh | awk '{split($$0,a," "); print a[3];}' | awk '{split($$0,b,":"); print b[2];}')

INSTALL_PREFIX=/mnt/persistent/xhal

include $(BUILD_HOME)/$(Project)/config/mfCommonDefs.mk
include $(BUILD_HOME)/$(Project)/config/mfZynq.mk
include $(BUILD_HOME)/$(Project)/config/mfRPMRules.mk

PackageBase = $(shell pwd)
ProjectBase = $(PackagePath)/..
PackageSourceDir=$(ProjectBase)/xhalcore/src/common
PackageTestSourceDir=$(PackageBase)/test
PackageIncludeDir=$(ProjectBase)/xhalcore/include
PackageLibraryDir=$(PackageBase)/lib
PackageExecDir=$(PackageBase)/bin
PackageObjectDir=$(PackageBase)/src/linux/$(Arch)
ConfigDir=$(ProjectBase)/config

XHAL_VER_MAJOR:=$(shell $(ConfigDir)/tag2rel.sh | awk '{split($$0,a," "); print a[1];}' | awk '{split($$0,b,":"); print b[2];}')
XHAL_VER_MINOR:=$(shell $(ConfigDir)/tag2rel.sh | awk '{split($$0,a," "); print a[2];}' | awk '{split($$0,b,":"); print b[2];}')
XHAL_VER_PATCH:=$(shell $(ConfigDir)/tag2rel.sh | awk '{split($$0,a," "); print a[3];}' | awk '{split($$0,b,":"); print b[2];}')

ADDFLAGS=-std=gnu++14

IncludeDirs = $(BUILD_HOME)/$(Project)/xhalcore/include
IncludeDirs+= $(PackageIncludeDir)
INC=$(IncludeDirs:%=-I%)

Libraries+= -llog4cplus -lxerces-c -lstdc++
Libraries+=-llog4cplus -lxerces-c -lstdc++

LDFLAGS+=-shared $(LibraryDirs)

SrcLocation =$(BUILD_HOME)/$(Project)/xhalcore/src/common
SRCS_XHAL = $(shell echo $(SrcLocation)/utils/*.cpp)
SRCS_XHAL = $(shell echo $(PackageSourceDir)/utils/*.cpp)

AUTODEPS_XHAL = $(patsubst $(PackageSourceDir)/%.cpp,$(PackageObjectDir)/%.d,$(SRCS_XHAL))

OBJS_XHAL = $(patsubst %.d,%.o,$(AUTODEPS_XHAL))

XHAL_LIB = $(PackageLibraryDir)/libxhal.so

## Place object files in lib/linux?
ObjLocation = src/linux/$(Arch)
OBJS_XHAL = $(patsubst $(SrcLocation)/%,$(ObjLocation)/%, $(SRCS_XHAL:.cpp=.o))
TargetLibraries:= xhal

XHAL_LIB=$(BUILD_HOME)/$(Project)/$(LongPackage)/lib/libxhal.so
# destination path macro we'll use below
df = $(PackageObjectDir)/$(*F)

.PHONY: clean rpc prerpm
.PHONY: clean cleanall prerpm

default: build
@echo "Running default target"
Expand All @@ -50,31 +62,53 @@ preprpm: default
@echo "Running preprpm target"
@cp -rf lib $(PackageDir)

build: clean $(XHAL_LIB)
build: $(XHAL_LIB)

_all: clean $(XHAL_LIB)
_all: build

xhal: $(XHAL_LIB)

doc:
@echo "TO DO"

## adapted from http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/
## Generic object creation rule, generate dependencies and use them later
$(PackageObjectDir)/%.o: $(PackageSourceDir)/%.cpp
$(MakeDir) $(@D)
$(CC) $(CFLAGS) $(ADDFLAGS) $(INC) -c -MT $@ -MMD -MP -MF $(@D)/$(*F).Td -o $@ $<
mv $(@D)/$(*F).Td $(@D)/$(*F).d
touch $@

## dummy rule for dependencies
$(PackageObjectDir)/%.d:

## mark dependencies and objects as not auto-removed
.PRECIOUS: $(PackageObjectDir)/%.d
.PRECIOUS: $(PackageObjectDir)/%.o

## Force rule for all target library names
$(TargetLibraries):

$(XHAL_LIB): $(OBJS_XHAL)
@mkdir -p $(BUILD_HOME)/$(Project)/$(LongPackage)/lib
$(CC) $(ADDFLAGS) $(LDFLAGS) -o $@ $^ $(Libraries)
$(MakeDir) -p $(@D)
$(CC) $(ADDFLAGS) $(LDFLAGS) -shared -Wl,-soname,$(@F) -o $@ $^ $(Libraries)

$(OBJS_XHAL): $(SRCS_XHAL)
$(MakeDir) -p $(shell dirname $@)
$(CC) $(CFLAGS) $(ADDFLAGS) $(INC) -c -o $@ $<
## FIXME obsolete? only for xcompiled things?
# %.o: %.c
# $(CC) -std=gnu99 -c $(CFLAGS) -o $@ $<
# %.o: %.cc
# $(CXX) -std=c++0x -c $(CFLAGS) -o $@ $<

%.o: %.c
$(CC) -std=gnu99 -c $(CFLAGS) -o $@ $<
%.o: %.cc
$(CXX) -std=c++0x -c $(CFLAGS) -o $@ $<
build: $(TargetLibraries)

clean:
-rm -rf $(OBJS_XHAL)
-rm -rf $(XHAL_LIB)
-rm -rf $(BUILD_HOME)/$(Project)/$(LongPackage)/lib
-rm -rf $(PackageLibraryDir)
-rm -rf $(PackageExecDir)
-rm -rf $(PackageDir)

cleandoc:
@echo "TO DO"

cleanall: clean cleandoc
-rm -rf $(PackageObjectDir)
131 changes: 75 additions & 56 deletions xhalcore/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,48 +9,64 @@ PackageDir := pkg/$(ShortPackage)
Packager := Mykhailo Dalchenko
Arch := x86_64

XHAL_VER_MAJOR:=$(shell $(BUILD_HOME)/$(Project)/config/tag2rel.sh | awk '{split($$0,a," "); print a[1];}' | awk '{split($$0,b,":"); print b[2];}')
XHAL_VER_MINOR:=$(shell $(BUILD_HOME)/$(Project)/config/tag2rel.sh | awk '{split($$0,a," "); print a[2];}' | awk '{split($$0,b,":"); print b[2];}')
XHAL_VER_PATCH:=$(shell $(BUILD_HOME)/$(Project)/config/tag2rel.sh | awk '{split($$0,a," "); print a[3];}' | awk '{split($$0,b,":"); print b[2];}')

INSTALL_PREFIX=/opt/xhal

include $(BUILD_HOME)/$(Project)/config/mfCommonDefs.mk
include $(BUILD_HOME)/$(Project)/config/mfPythonDefs.mk
include $(BUILD_HOME)/$(Project)/config/mfRPMRules.mk

PackageBase = $(shell pwd)
ProjectBase = $(PackagePath)/..
PackageSourceDir=$(PackageBase)/src/common
PackageTestSourceDir=$(PackageBase)/test
PackageIncludeDir=$(PackageBase)/include
PackageLibraryDir=$(PackageBase)/lib
PackageExecDir=$(PackageBase)/bin
PackageObjectDir=$(PackageBase)/src/linux/$(Arch)
ConfigDir=$(ProjectBase)/config

XHAL_VER_MAJOR:=$(shell $(ConfigDir)/tag2rel.sh | awk '{split($$0,a," "); print a[1];}' | awk '{split($$0,b,":"); print b[2];}')
XHAL_VER_MINOR:=$(shell $(ConfigDir)/tag2rel.sh | awk '{split($$0,a," "); print a[2];}' | awk '{split($$0,b,":"); print b[2];}')
XHAL_VER_PATCH:=$(shell $(ConfigDir)/tag2rel.sh | awk '{split($$0,a," "); print a[3];}' | awk '{split($$0,b,":"); print b[2];}')

CCFLAGS=-O0 -g3 -fno-inline -Wall -pthread
ADDFLAGS=-fPIC -std=c++11 -m64

IncludeDirs+= /opt/xdaq/include
IncludeDirs+= $(BUILD_HOME)/$(Project)/$(LongPackage)/include
IncludeDirs+= $(XDAQ_ROOT)/include
IncludeDirs+= $(PackageIncludeDir)
INC=$(IncludeDirs:%=-I%)

Libraries+= -llog4cplus -lxerces-c -lwiscrpcsvc -lstdc++
Libraries+=-llog4cplus -lxerces-c -lwiscrpcsvc -lstdc++

LibraryDirs+=-L/opt/xdaq/lib
LibraryDirs+=-L$(XDAQ_ROOT)/lib
LibraryDirs+=-L$(PackageLibraryDir)
LibraryDirs+=-L/opt/wiscrpcsvc/lib

LDFLAGS = -shared $(LibraryDirs)

SrcLocation = src/common
SRCS_UTILS = $(shell echo $(SrcLocation)/utils/*.cpp)
SRCS_XHAL = $(shell echo $(SrcLocation)/*.cpp)
SRCS_XHALPY = $(shell echo $(SrcLocation)/python_wrappers/*.cpp)
SRCS_RPC_MAN = $(shell echo $(SrcLocation)/rpc_manager/*.cpp)
SRCS_XHAL = $(wildcard $(PackageSourceDir)/*.cpp)
SRCS_UTILS = $(wildcard $(PackageSourceDir)/utils/*.cpp)
SRCS_XHALPY = $(wildcard $(PackageSourceDir)/python_wrappers/*.cpp)
SRCS_RPC_MAN = $(wildcard $(PackageSourceDir)/rpc_manager/*.cpp)

AUTODEPS_XHAL = $(patsubst $(PackageSourceDir)/%.cpp,$(PackageObjectDir)/%.d,$(SRCS_XHAL))
AUTODEPS_UTILS = $(patsubst $(PackageSourceDir)/%.cpp,$(PackageObjectDir)/%.d,$(SRCS_UTILS))
AUTODEPS_XHALPY = $(patsubst $(PackageSourceDir)/%.cpp,$(PackageObjectDir)/%.d,$(SRCS_XHALPY))
AUTODEPS_RPC_MAN = $(patsubst $(PackageSourceDir)/%.cpp,$(PackageObjectDir)/%.d,$(SRCS_RPC_MAN))

OBJS_XHAL = $(patsubst %.d,%.o,$(AUTODEPS_XHAL))
OBJS_UTILS = $(patsubst %.d,%.o,$(AUTODEPS_UTILS))
OBJS_XHALPY = $(patsubst %.d,%.o,$(AUTODEPS_XHALPY))
OBJS_RPC_MAN = $(patsubst %.d,%.o,$(AUTODEPS_RPC_MAN))

XHAL_LIB = $(PackageLibraryDir)/libxhal.so
XHALPY_LIB = $(PackageLibraryDir)/xhalpy.so
RPC_MAN_LIB = $(PackageLibraryDir)/librpcman.so

## Place object files in src/linux/$(Arch)
ObjLocation = src/linux/$(Arch)
OBJS_UTILS = $(patsubst $(SrcLocation)/%,$(ObjLocation)/%, $(SRCS_UTILS:.cpp=.o))
OBJS_XHAL = $(patsubst $(SrcLocation)/%,$(ObjLocation)/%, $(SRCS_XHAL:.cpp=.o))
OBJS_XHALPY = $(patsubst $(SrcLocation)/%,$(ObjLocation)/%, $(SRCS_XHALPY:.cpp=.o))
OBJS_RPC_MAN = $(patsubst $(SrcLocation)/%,$(ObjLocation)/%, $(SRCS_RPC_MAN:.cpp=.o))
TargetLibraries:= xhal xhalpy rpcman

XHALCORE_LIB = $(BUILD_HOME)/$(Project)/$(LongPackage)/lib/libxhal.so
RPC_MAN_LIB = $(BUILD_HOME)/$(Project)/$(LongPackage)/lib/librpcman.so
XHALPY_LIB = $(BUILD_HOME)/$(Project)/$(LongPackage)/lib/xhalpy.so
# destination path macro we'll use below
df = $(PackageObjectDir)/$(*F)

.PHONY: clean xhalcore rpc prerpm
.PHONY: clean cleanall xhal rpc prerpm

default: build
@echo "Running default target"
Expand All @@ -65,55 +81,58 @@ preprpm: default
@cp -rfp $(BUILD_HOME)/$(Project)/xhalarm/lib/*.so lib/arm
@cp -rfp lib $(PackageDir)

build: xhalcore rpc
_all: build

_all: $(XHALCORE_LIB) $(RPC_MAN_LIB) $(XHALPY_LIB)
rpc: xhal $(RPC_MAN_LIB)

rpc: xhalcore $(RPC_MAN_LIB)
xhal: $(XHAL_LIB)

xhalcore: $(XHALCORE_LIB)

xhalpy: xhalcore rpc $(XHALPY_LIB)
xhalpy: xhal rpc $(XHALPY_LIB)

doc:
@echo "TO DO"

$(OBJS_UTILS): $(SRCS_UTILS)
@rm -rf $(OBJS_UTILS)
$(MakeDir) $(shell dirname $@)
$(CC) $(CCFLAGS) $(ADDFLAGS) $(INC) -c $< -o $@
## adapted from http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/
## Generic object creation rule, generate dependencies and use them later
$(PackageObjectDir)/%.o: $(PackageSourceDir)/%.cpp
$(MakeDir) $(@D)
$(CC) $(CCFLAGS) $(ADDFLAGS) $(INC) -c -MT $@ -MMD -MP -MF $(@D)/$(*F).Td -o $@ $<
mv $(@D)/$(*F).Td $(@D)/$(*F).d
touch $@

## dummy rule for dependencies
$(PackageObjectDir)/%.d:

$(OBJS_XHAL): $(SRCS_XHAL)
$(MakeDir) $(shell dirname $@)
# $(CC) $(CCFLAGS) $(ADDFLAGS) $(INC) $(Libraries) -c $(@:%.o=%.cpp) -o $@
$(CC) $(CCFLAGS) $(ADDFLAGS) $(INC) -c -o $@ $(patsubst $(ObjLocation)/%,$(SrcLocation)/%, $(@:%.o=%.cpp))
## mark dependencies and objects as not auto-removed
.PRECIOUS: $(PackageObjectDir)/%.d
.PRECIOUS: $(PackageObjectDir)/%.o

$(OBJS_RPC_MAN): $(SRCS_RPC_MAN)
$(MakeDir) $(shell dirname $@)
# $(CC) $(CCFLAGS) $(ADDFLAGS) $(INC) $(Libraries) -c $(@:%.o=%.cpp) -o $@
$(CC) $(CCFLAGS) $(ADDFLAGS) $(INC) -c -o $@ $(patsubst $(ObjLocation)/%,$(SrcLocation)/%, $(@:%.o=%.cpp))
## Force rule for all target library names
$(TargetLibraries):

$(OBJS_XHALPY):$(SRCS_XHALPY)
$(MakeDir) $(shell dirname $@)
$(CC) $(CCFLAGS) $(ADDFLAGS) $(INC) -I$(PYTHON_INCLUDE_PREFIX) -c $< -o $@
$(XHAL_LIB): $(OBJS_XHAL) $(OBJS_UTILS)
$(MakeDir) -p $(@D)
$(CC) $(ADDFLAGS) $(LDFLAGS) -shared -Wl,-soname,$(@F) -o $@ $^ $(Libraries)

$(XHALCORE_LIB): $(OBJS_UTILS) $(OBJS_XHAL)
$(MakeDir) $(BUILD_HOME)/$(Project)/$(LongPackage)/lib
$(CC) $(ADDFLAGS) $(LDFLAGS) -o $@ $^ $(Libraries)
$(XHALPY_LIB): $(OBJS_XHALPY)
$(MakeDir) -p $(@D)
$(CC) $(ADDFLAGS) $(LDFLAGS) -L$(PYTHON_LIB_PREFIX) -shared -Wl,-soname,$(@F) -o $@ $^ $(Libraries) -lboost_python -l$(PYTHON_LIB) -lxhal -lrpcman

$(RPC_MAN_LIB): $(OBJS_RPC_MAN)
$(MakeDir) $(BUILD_HOME)/$(Project)/$(LongPackage)/lib
$(CC) $(ADDFLAGS) $(LDFLAGS) -o $@ $^ $(Libraries)
$(MakeDir) -p $(@D)
$(CC) $(ADDFLAGS) $(LDFLAGS) -shared -Wl,-soname,$(@F) -o $@ $^ $(Libraries)

$(XHALPY_LIB): $(OBJS_XHALPY)
$(MakeDir) $(BUILD_HOME)/$(Project)/$(LongPackage)/lib
$(CC) $(ADDFLAGS) $(LDFLAGS) -L$(PYTHON_LIB_PREFIX) -Llib -o $@ $< $(Libraries) -lboost_python -l$(PYTHON_LIB) -lxhal -lrpcman

build: $(TargetLibraries)

clean:
-rm -rf $(OBJS_UTILS) $(OBJS_XHAL) $(OBJS_RPC_MAN) $(OBJS_XHALPY)
-rm -rf $(XHALCORE_LIB) $(XHALPY_LIB) $(RPC_MAN_LIB)
-rm -rf $(BUILD_HOME)/$(Project)/$(LongPackage)/lib
-rm -rf $(PackageLibraryDir)
-rm -rf $(PackageExecDir)
-rm -rf $(PackageDir)

cleandoc:
@echo "TO DO"

cleanall: clean cleandoc
-rm -rf $(PackageObjectDir)

0 comments on commit 32b32f3

Please sign in to comment.