Reorder makefile sections (evaluate file names after target platform)
This solves the issue where platform-dependent class inclusion could not work (#61). Also it seems a more logical order of evaluation in general because binary file extensions are platform- dependent.
This commit is contained in:
parent
a10a5b50ad
commit
a6975e9104
1 changed files with 70 additions and 72 deletions
|
|
@ -369,78 +369,6 @@ externalsdir ?= ..
|
|||
Makefile.pdlibbuilder = true
|
||||
|
||||
|
||||
################################################################################
|
||||
### variables: library name and version ########################################
|
||||
################################################################################
|
||||
|
||||
|
||||
# strip possibles spaces from lib.name, they mess up calculated file names
|
||||
lib.name := $(strip $(lib.name))
|
||||
|
||||
# if meta file exists, check library version
|
||||
metafile := $(wildcard $(lib.name)-meta.pd)
|
||||
|
||||
ifdef metafile
|
||||
lib.version := $(shell sed -n \
|
||||
's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' \
|
||||
$(metafile))
|
||||
endif
|
||||
|
||||
|
||||
################################################################################
|
||||
### variables: files ###########################################################
|
||||
################################################################################
|
||||
|
||||
|
||||
#=== sources ===================================================================
|
||||
|
||||
|
||||
# (re)define <classname>.class.sources using file names in class.sources
|
||||
|
||||
define add-class-source
|
||||
$(notdir $(basename $v)).class.sources += $v
|
||||
endef
|
||||
|
||||
$(foreach v, $(class.sources), $(eval $(add-class-source)))
|
||||
|
||||
# derive class names from <classname>.class.sources variables
|
||||
sourcevariables := $(filter %.class.sources, $(.VARIABLES))
|
||||
classes := $(basename $(basename $(sourcevariables)))
|
||||
|
||||
# accumulate all source files specified in makefile
|
||||
classes.sources := $(sort $(foreach v, $(sourcevariables), $($v)))
|
||||
all.sources := $(classes.sources) $(lib.setup.sources) \
|
||||
$(shared.sources) $(common.sources)
|
||||
|
||||
|
||||
#=== object files ==============================================================
|
||||
|
||||
|
||||
# construct object filenames from all C and C++ source file names
|
||||
classes.objects := $(addsuffix .o, $(basename $(classes.sources)))
|
||||
common.objects := $(addsuffix .o, $(basename $(common.sources)))
|
||||
shared.objects := $(addsuffix .o, $(basename $(shared.sources)))
|
||||
lib.setup.objects := $(addsuffix .o, $(basename $(lib.setup.sources)))
|
||||
all.objects = $(classes.objects) $(common.objects) $(shared.objects) \
|
||||
$(lib.setup.objects)
|
||||
|
||||
|
||||
#=== executables ===============================================================
|
||||
|
||||
|
||||
# use recursive variables here because executable extension is not yet known
|
||||
|
||||
# construct class executable names from class names
|
||||
classes.executables = $(addsuffix .$(extension), $(classes))
|
||||
|
||||
# construct shared lib executable name if shared sources are defined
|
||||
ifdef shared.sources
|
||||
shared.lib = lib$(lib.name).$(shared.extension)
|
||||
else
|
||||
shared.lib =
|
||||
endif
|
||||
|
||||
|
||||
################################################################################
|
||||
### target platform detection ##################################################
|
||||
################################################################################
|
||||
|
|
@ -733,6 +661,76 @@ cxx.ldflags := $(cxx.ldflags) $(ldflags) $(LDFLAGS)
|
|||
cxx.ldlibs := $(cxx.ldlibs) $(ldlibs)
|
||||
|
||||
|
||||
################################################################################
|
||||
### variables: library name and version ########################################
|
||||
################################################################################
|
||||
|
||||
|
||||
# strip possibles spaces from lib.name, they mess up calculated file names
|
||||
lib.name := $(strip $(lib.name))
|
||||
|
||||
# if meta file exists, check library version
|
||||
metafile := $(wildcard $(lib.name)-meta.pd)
|
||||
|
||||
ifdef metafile
|
||||
lib.version := $(shell sed -n \
|
||||
's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' \
|
||||
$(metafile))
|
||||
endif
|
||||
|
||||
|
||||
################################################################################
|
||||
### variables: files ###########################################################
|
||||
################################################################################
|
||||
|
||||
|
||||
#=== sources ===================================================================
|
||||
|
||||
|
||||
# (re)define <classname>.class.sources using file names in class.sources
|
||||
|
||||
define add-class-source
|
||||
$(notdir $(basename $v)).class.sources += $v
|
||||
endef
|
||||
|
||||
$(foreach v, $(class.sources), $(eval $(add-class-source)))
|
||||
|
||||
# derive class names from <classname>.class.sources variables
|
||||
sourcevariables := $(filter %.class.sources, $(.VARIABLES))
|
||||
classes := $(basename $(basename $(sourcevariables)))
|
||||
|
||||
# accumulate all source files specified in makefile
|
||||
classes.sources := $(sort $(foreach v, $(sourcevariables), $($v)))
|
||||
all.sources := $(classes.sources) $(lib.setup.sources) \
|
||||
$(shared.sources) $(common.sources)
|
||||
|
||||
|
||||
#=== object files ==============================================================
|
||||
|
||||
|
||||
# construct object filenames from all C and C++ source file names
|
||||
classes.objects := $(addsuffix .o, $(basename $(classes.sources)))
|
||||
common.objects := $(addsuffix .o, $(basename $(common.sources)))
|
||||
shared.objects := $(addsuffix .o, $(basename $(shared.sources)))
|
||||
lib.setup.objects := $(addsuffix .o, $(basename $(lib.setup.sources)))
|
||||
all.objects = $(classes.objects) $(common.objects) $(shared.objects) \
|
||||
$(lib.setup.objects)
|
||||
|
||||
|
||||
#=== executables ===============================================================
|
||||
|
||||
|
||||
# construct class executable names from class names
|
||||
classes.executables := $(addsuffix .$(extension), $(classes))
|
||||
|
||||
# construct shared lib executable name if shared sources are defined
|
||||
ifdef shared.sources
|
||||
shared.lib := lib$(lib.name).$(shared.extension)
|
||||
else
|
||||
shared.lib :=
|
||||
endif
|
||||
|
||||
|
||||
################################################################################
|
||||
### variables: tools ###########################################################
|
||||
################################################################################
|
||||
|
|
|
|||
Loading…
Reference in a new issue