dust3d/dust3d.pro

699 lines
17 KiB
Prolog

QT += core widgets opengl network
CONFIG += release
DEFINES += NDEBUG
DEFINES += QT_MESSAGELOGCONTEXT
RESOURCES += resources.qrc
LANGUAGES = zh_CN \
es_AR \
it_IT
OBJECTS_DIR=obj
MOC_DIR=moc
############## Generate .qm from .ts #######################
# parameters: var, prepend, append
defineReplace(prependAll) {
for(a,$$1):result += $$2$${a}$$3
return($$result)
}
TRANSLATIONS = $$prependAll(LANGUAGES, $$PWD/languages/dust3d_, .ts)
TRANSLATIONS_FILES =
qtPrepareTool(LRELEASE, lrelease)
for(tsfile, TRANSLATIONS) {
qmfile = $$shadowed($$tsfile)
qmfile ~= s,.ts$,.qm,
qmdir = $$dirname(qmfile)
!exists($$qmdir) {
mkpath($$qmdir)|error("Aborting.")
}
command = $$LRELEASE -removeidentical $$tsfile -qm $$qmfile
system($$command)|error("Failed to run: $$command")
TRANSLATIONS_FILES += $$qmfile
}
########################################################
############## Generate .ts file #######################
macx {
wd = $$replace(PWD, /, $$QMAKE_DIR_SEP)
# Update the .ts file from source
qtPrepareTool(LUPDATE, lupdate)
LUPDATE += src/*.cpp src/*.h -locations none
for(lang, LANGUAGES) {
command = $$LUPDATE -ts languages/dust3d_$${lang}.ts
system($$command)|error("Failed to run: $$command")
}
}
##########################################################
win32 {
CONFIG += force_debug_info
}
win32 {
RC_FILE = $${SOURCE_ROOT}dust3d.rc
}
macx {
ICON = $${SOURCE_ROOT}dust3d.icns
RESOURCE_FILES.files = $$ICON
RESOURCE_FILES.path = Contents/Resources
QMAKE_BUNDLE_DATA += RESOURCE_FILES
}
isEmpty(HUMAN_VERSION) {
HUMAN_VERSION = "1.0.0-rc.7"
}
isEmpty(VERSION) {
VERSION = 1.0.0.37
}
HOMEPAGE_URL = "https://dust3d.org/"
REPOSITORY_URL = "https://github.com/huxingyi/dust3d"
ISSUES_URL = "https://github.com/huxingyi/dust3d/issues"
REFERENCE_GUIDE_URL = "https://docs.dust3d.org"
UPDATES_CHECKER_URL = "https://dust3d.org/dust3d-updateinfo.xml"
PLATFORM = "Unknown"
macx {
PLATFORM = "MacOS"
}
win32 {
PLATFORM = "Win32"
}
unix:!macx {
PLATFORM = "Linux"
}
QMAKE_TARGET_COMPANY = Dust3D
QMAKE_TARGET_PRODUCT = Dust3D
QMAKE_TARGET_DESCRIPTION = "Dust3D is a cross-platform open-source 3D modeling software"
QMAKE_TARGET_COPYRIGHT = "Copyright (C) 2018-2020 Dust3D Project. All Rights Reserved."
DEFINES += "PROJECT_DEFINED_APP_COMPANY=\"\\\"$$QMAKE_TARGET_COMPANY\\\"\""
DEFINES += "PROJECT_DEFINED_APP_NAME=\"\\\"$$QMAKE_TARGET_PRODUCT\\\"\""
DEFINES += "PROJECT_DEFINED_APP_VER=\"\\\"$$VERSION\\\"\""
DEFINES += "PROJECT_DEFINED_APP_HUMAN_VER=\"\\\"$$HUMAN_VERSION\\\"\""
DEFINES += "PROJECT_DEFINED_APP_HOMEPAGE_URL=\"\\\"$$HOMEPAGE_URL\\\"\""
DEFINES += "PROJECT_DEFINED_APP_REPOSITORY_URL=\"\\\"$$REPOSITORY_URL\\\"\""
DEFINES += "PROJECT_DEFINED_APP_ISSUES_URL=\"\\\"$$ISSUES_URL\\\"\""
DEFINES += "PROJECT_DEFINED_APP_REFERENCE_GUIDE_URL=\"\\\"$$REFERENCE_GUIDE_URL\\\"\""
DEFINES += "PROJECT_DEFINED_APP_UPDATES_CHECKER_URL=\"\\\"$$UPDATES_CHECKER_URL\\\"\""
DEFINES += "PROJECT_DEFINED_APP_PLATFORM=\"\\\"$$PLATFORM\\\"\""
CONFIG += c++14
macx {
QMAKE_CXXFLAGS_RELEASE -= -O
QMAKE_CXXFLAGS_RELEASE -= -O1
QMAKE_CXXFLAGS_RELEASE -= -O2
QMAKE_CXXFLAGS_RELEASE += -O3
}
unix:!macx {
QMAKE_CXXFLAGS_RELEASE -= -O
QMAKE_CXXFLAGS_RELEASE -= -O1
QMAKE_CXXFLAGS_RELEASE -= -O2
QMAKE_CXXFLAGS_RELEASE += -O3
}
win32 {
QMAKE_CXXFLAGS += /MP
QMAKE_CXXFLAGS += /O2
QMAKE_CXXFLAGS += /bigobj
}
DEFINES += NOMINMAX
include(thirdparty/QtAwesome/QtAwesome/QtAwesome.pri)
include(thirdparty/qtsingleapplication/src/qtsingleapplication.pri)
include(thirdparty/Qt-Color-Widgets/color_widgets.pri)
INCLUDEPATH += src
SOURCES += src/fixholes.cpp
HEADERS += src/fixholes.h
SOURCES += src/toonline.cpp
HEADERS += src/toonline.h
SOURCES += src/meshstroketifier.cpp
HEADERS += src/meshstroketifier.h
SOURCES += src/autosaver.cpp
HEADERS += src/autosaver.h
SOURCES += src/documentsaver.cpp
HEADERS += src/documentsaver.h
SOURCES += src/normalanddepthmapsgenerator.cpp
HEADERS += src/normalanddepthmapsgenerator.h
SOURCES += src/modeloffscreenrender.cpp
HEADERS += src/modeloffscreenrender.h
SOURCES += src/modelshaderprogram.cpp
HEADERS += src/modelshaderprogram.h
SOURCES += src/modelmeshbinder.cpp
HEADERS += src/modelmeshbinder.h
SOURCES += src/modelwidget.cpp
HEADERS += src/modelwidget.h
SOURCES += src/document.cpp
HEADERS += src/document.h
SOURCES += src/documentwindow.cpp
HEADERS += src/documentwindow.h
SOURCES += src/skeletongraphicswidget.cpp
HEADERS += src/skeletongraphicswidget.h
SOURCES += src/parttreewidget.cpp
HEADERS += src/parttreewidget.h
SOURCES += src/partwidget.cpp
HEADERS += src/partwidget.h
SOURCES += src/aboutwidget.cpp
HEADERS += src/aboutwidget.h
SOURCES += src/meshgenerator.cpp
HEADERS += src/meshgenerator.h
SOURCES += src/util.cpp
HEADERS += src/util.h
SOURCES += src/turnaroundloader.cpp
HEADERS += src/turnaroundloader.h
SOURCES += src/snapshot.cpp
HEADERS += src/snapshot.h
SOURCES += src/snapshotxml.cpp
HEADERS += src/snapshotxml.h
SOURCES += src/ds3file.cpp
HEADERS += src/ds3file.h
SOURCES += src/glbfile.cpp
HEADERS += src/glbfile.h
SOURCES += src/theme.cpp
HEADERS += src/theme.h
SOURCES += src/model.cpp
HEADERS += src/model.h
SOURCES += src/texturegenerator.cpp
HEADERS += src/texturegenerator.h
SOURCES += src/object.cpp
HEADERS += src/object.h
SOURCES += src/meshresultpostprocessor.cpp
HEADERS += src/meshresultpostprocessor.h
SOURCES += src/logbrowser.cpp
HEADERS += src/logbrowser.h
SOURCES += src/logbrowserdialog.cpp
HEADERS += src/logbrowserdialog.h
SOURCES += src/floatnumberwidget.cpp
HEADERS += src/floatnumberwidget.h
SOURCES += src/ccdikresolver.cpp
HEADERS += src/ccdikresolver.h
SOURCES += src/skeletonikmover.cpp
HEADERS += src/skeletonikmover.h
SOURCES += src/spinnableawesomebutton.cpp
HEADERS += src/spinnableawesomebutton.h
SOURCES += src/infolabel.cpp
HEADERS += src/infolabel.h
SOURCES += src/graphicscontainerwidget.cpp
HEADERS += src/graphicscontainerwidget.h
SOURCES += src/rigwidget.cpp
HEADERS += src/rigwidget.h
SOURCES += src/markiconcreator.cpp
HEADERS += src/markiconcreator.h
SOURCES += src/bonemark.cpp
HEADERS += src/bonemark.h
SOURCES += src/skeletonside.cpp
HEADERS += src/skeletonside.h
SOURCES += src/meshsplitter.cpp
HEADERS += src/meshsplitter.h
SOURCES += src/rig.cpp
HEADERS += src/rig.h
SOURCES += src/rigtype.cpp
HEADERS += src/rigtype.h
SOURCES += src/riggenerator.cpp
HEADERS += src/riggenerator.h
SOURCES += src/skinnedmeshcreator.cpp
HEADERS += src/skinnedmeshcreator.h
SOURCES += src/jointnodetree.cpp
HEADERS += src/jointnodetree.h
SOURCES += src/preferenceswidget.cpp
HEADERS += src/preferenceswidget.h
SOURCES += src/motionmanagewidget.cpp
HEADERS += src/motionmanagewidget.h
SOURCES += src/motionlistwidget.cpp
HEADERS += src/motionlistwidget.h
SOURCES += src/motionwidget.cpp
HEADERS += src/motionwidget.h
SOURCES += src/motionsgenerator.cpp
HEADERS += src/motionsgenerator.h
SOURCES += src/texturetype.cpp
HEADERS += src/texturetype.h
SOURCES += src/imageforever.cpp
HEADERS += src/imageforever.h
SOURCES += src/materialeditwidget.cpp
HEADERS += src/materialeditwidget.h
SOURCES += src/materiallistwidget.cpp
HEADERS += src/materiallistwidget.h
SOURCES += src/materialmanagewidget.cpp
HEADERS += src/materialmanagewidget.h
SOURCES += src/materialpreviewsgenerator.cpp
HEADERS += src/materialpreviewsgenerator.h
SOURCES += src/materialwidget.cpp
HEADERS += src/materialwidget.h
SOURCES += src/material.cpp
HEADERS += src/material.h
SOURCES += src/fbxfile.cpp
HEADERS += src/fbxfile.h
SOURCES += src/tabwidget.cpp
HEADERS += src/tabwidget.h
SOURCES += src/flowlayout.cpp
HEADERS += src/flowlayout.h
SOURCES += src/shortcuts.cpp
HEADERS += src/shortcuts.h
SOURCES += src/trianglesourcenoderesolve.cpp
HEADERS += src/trianglesourcenoderesolve.h
SOURCES += src/uvunwrap.cpp
HEADERS += src/uvunwrap.h
SOURCES += src/triangletangentresolve.cpp
HEADERS += src/triangletangentresolve.h
SOURCES += src/skeletondocument.cpp
HEADERS += src/skeletondocument.h
SOURCES += src/combinemode.cpp
HEADERS += src/combinemode.h
SOURCES += src/polycount.cpp
HEADERS += src/polycount.h
SOURCES += src/cutdocument.cpp
HEADERS += src/cutdocument.h
SOURCES += src/cutface.cpp
HEADERS += src/cutface.h
SOURCES += src/parttarget.cpp
HEADERS += src/parttarget.h
SOURCES += src/partbase.cpp
HEADERS += src/partbase.h
SOURCES += src/preferences.cpp
HEADERS += src/preferences.h
HEADERS += src/shadervertex.h
SOURCES += src/scripteditwidget.cpp
HEADERS += src/scripteditwidget.h
SOURCES += src/scriptvariableswidget.cpp
HEADERS += src/scriptvariableswidget.h
SOURCES += src/scriptwidget.cpp
HEADERS += src/scriptwidget.h
SOURCES += src/scriptrunner.cpp
HEADERS += src/scriptrunner.h
SOURCES += src/variablesxml.cpp
HEADERS += src/variablesxml.h
SOURCES += src/updateschecker.cpp
HEADERS += src/updateschecker.h
SOURCES += src/updatescheckwidget.cpp
HEADERS += src/updatescheckwidget.h
SOURCES += src/intnumberwidget.cpp
HEADERS += src/intnumberwidget.h
SOURCES += src/imagepreviewwidget.cpp
HEADERS += src/imagepreviewwidget.h
SOURCES += src/texturepainter.cpp
HEADERS += src/texturepainter.h
SOURCES += src/paintmode.cpp
HEADERS += src/paintmode.h
SOURCES += src/proceduralanimation.cpp
HEADERS += src/proceduralanimation.h
SOURCES += src/boundingboxmesh.cpp
HEADERS += src/boundingboxmesh.h
SOURCES += src/regionfiller.cpp
HEADERS += src/regionfiller.h
SOURCES += src/cyclefinder.cpp
HEADERS += src/cyclefinder.h
SOURCES += src/shortestpath.cpp
HEADERS += src/shortestpath.h
SOURCES += src/meshwrapper.cpp
HEADERS += src/meshwrapper.h
SOURCES += src/meshstitcher.cpp
HEADERS += src/meshstitcher.h
SOURCES += src/strokemeshbuilder.cpp
HEADERS += src/strokemeshbuilder.h
SOURCES += src/meshcombiner.cpp
HEADERS += src/meshcombiner.h
SOURCES += src/positionkey.cpp
HEADERS += src/positionkey.h
SOURCES += src/strokemodifier.cpp
HEADERS += src/strokemodifier.h
SOURCES += src/boxmesh.cpp
HEADERS += src/boxmesh.h
SOURCES += src/meshrecombiner.cpp
HEADERS += src/meshrecombiner.h
SOURCES += src/triangulatefaces.cpp
HEADERS += src/triangulatefaces.h
SOURCES += src/booleanmesh.cpp
HEADERS += src/booleanmesh.h
SOURCES += src/imageskeletonextractor.cpp
HEADERS += src/imageskeletonextractor.h
SOURCES += src/contourtopartconverter.cpp
HEADERS += src/contourtopartconverter.h
SOURCES += src/remesher.cpp
HEADERS += src/remesher.h
SOURCES += src/clothsimulator.cpp
HEADERS += src/clothsimulator.h
SOURCES += src/componentlayer.cpp
HEADERS += src/componentlayer.h
SOURCES += src/isotropicremesh.cpp
HEADERS += src/isotropicremesh.h
SOURCES += src/clothforce.cpp
HEADERS += src/clothforce.h
SOURCES += src/projectfacestonodes.cpp
HEADERS += src/projectfacestonodes.h
SOURCES += src/simulateclothmeshes.cpp
HEADERS += src/simulateclothmeshes.h
SOURCES += src/ddsfile.cpp
HEADERS += src/ddsfile.h
SOURCES += src/fileforever.cpp
HEADERS += src/fileforever.h
SOURCES += src/partpreviewimagesgenerator.cpp
HEADERS += src/partpreviewimagesgenerator.h
SOURCES += src/remeshhole.cpp
HEADERS += src/remeshhole.h
SOURCES += src/centripetalcatmullromspline.cpp
HEADERS += src/centripetalcatmullromspline.h
SOURCES += src/simpleshadermesh.cpp
HEADERS += src/simpleshadermesh.h
SOURCES += src/simpleshadermeshbinder.cpp
HEADERS += src/simpleshadermeshbinder.h
SOURCES += src/simpleshaderwidget.cpp
HEADERS += src/simpleshaderwidget.h
SOURCES += src/blockmesh.cpp
HEADERS += src/blockmesh.h
SOURCES += src/planemesh.cpp
HEADERS += src/planemesh.h
SOURCES += src/hermitecurveinterpolation.cpp
HEADERS += src/hermitecurveinterpolation.h
SOURCES += src/genericspineandpseudophysics.cpp
HEADERS += src/genericspineandpseudophysics.h
SOURCES += src/chainsimulator.cpp
HEADERS += src/chainsimulator.h
SOURCES += src/vertebratamovemotionbuilder.cpp
HEADERS += src/vertebratamovemotionbuilder.h
SOURCES += src/simplerendermeshgenerator.cpp
HEADERS += src/simplerendermeshgenerator.h
SOURCES += src/motioneditwidget.cpp
HEADERS += src/motioneditwidget.h
SOURCES += src/vertebratamovemotionparameterswidget.cpp
HEADERS += src/vertebratamovemotionparameterswidget.h
SOURCES += src/objectxml.cpp
HEADERS += src/objectxml.h
SOURCES += src/rigxml.cpp
HEADERS += src/rigxml.h
SOURCES += src/ragdoll.cpp
HEADERS += src/ragdoll.h
SOURCES += src/motionbuilder.cpp
HEADERS += src/motionbuilder.h
SOURCES += src/statusbarlabel.cpp
HEADERS += src/statusbarlabel.h
SOURCES += src/silhouetteimagegenerator.cpp
HEADERS += src/silhouetteimagegenerator.h
SOURCES += src/main.cpp
HEADERS += src/version.h
INCLUDEPATH += thirdparty/FastMassSpring/ClothApp
SOURCES += thirdparty/FastMassSpring/ClothApp/MassSpringSolver.cpp
HEADERS += thirdparty/FastMassSpring/ClothApp/MassSpringSolver.h
INCLUDEPATH += thirdparty/instant-meshes
INCLUDEPATH += thirdparty/instant-meshes/instant-meshes-dust3d/src
INCLUDEPATH += thirdparty/instant-meshes/instant-meshes-dust3d/ext/tbb/include
INCLUDEPATH += thirdparty/instant-meshes/instant-meshes-dust3d/ext/dset
INCLUDEPATH += thirdparty/instant-meshes/instant-meshes-dust3d/ext/pss
INCLUDEPATH += thirdparty/instant-meshes/instant-meshes-dust3d/ext/pcg32
INCLUDEPATH += thirdparty/instant-meshes/instant-meshes-dust3d/ext/rply
INCLUDEPATH += thirdparty/instant-meshes/instant-meshes-dust3d/ext/half
unix {
SOURCES += thirdparty/instant-meshes/instant-meshes-api.cpp
LIBS += -L$${SOURCE_ROOT}thirdparty/instant-meshes/build -linstant-meshes
LIBS += -L$${SOURCE_ROOT}thirdparty/instant-meshes/build/ext_build/tbb -ltbb_static
unix:!macx {
LIBS += -ldl
}
}
win32 {
DEFINES += _USE_MATH_DEFINES
LIBS += -L$${SOURCE_ROOT}thirdparty/instant-meshes/build/RelWithDebInfo -linstant-meshes
LIBS += -L$${SOURCE_ROOT}thirdparty/instant-meshes/build/ext_build/tbb/RelWithDebInfo -ltbb
}
INCLUDEPATH += thirdparty/quickjs/quickjs-2019-07-09-dust3d
DEFINES += "CONFIG_VERSION=\"\\\"2019-07-09\\\"\""
SOURCES += thirdparty/quickjs/quickjs-2019-07-09-dust3d/quickjs.c
HEADERS += thirdparty/quickjs/quickjs-2019-07-09-dust3d/quickjs.h
SOURCES += thirdparty/quickjs/quickjs-2019-07-09-dust3d/cutils.c
HEADERS += thirdparty/quickjs/quickjs-2019-07-09-dust3d/cutils.h
SOURCES += thirdparty/quickjs/quickjs-2019-07-09-dust3d/libunicode.c
HEADERS += thirdparty/quickjs/quickjs-2019-07-09-dust3d/libunicode.h
SOURCES += thirdparty/quickjs/quickjs-2019-07-09-dust3d/libregexp.c
HEADERS += thirdparty/quickjs/quickjs-2019-07-09-dust3d/libregexp.h
INCLUDEPATH += thirdparty/crc64
SOURCES += thirdparty/crc64/crc64.c
HEADERS += thirdparty/crc64/crc64.h
INCLUDEPATH += thirdparty/miniz
SOURCES += thirdparty/miniz/miniz.c
HEADERS += thirdparty/miniz/miniz.h
INCLUDEPATH += thirdparty/fbx/src
SOURCES += thirdparty/fbx/src/fbxdocument.cpp
HEADERS += thirdparty/fbx/src/fbxdocument.h
SOURCES += thirdparty/fbx/src/fbxnode.cpp
HEADERS += thirdparty/fbx/src/fbxnode.h
SOURCES += thirdparty/fbx/src/fbxproperty.cpp
HEADERS += thirdparty/fbx/src/fbxproperty.h
SOURCES += thirdparty/fbx/src/fbxutil.cpp
HEADERS += thirdparty/fbx/src/fbxutil.h
INCLUDEPATH += thirdparty/simpleuv
INCLUDEPATH += thirdparty/simpleuv/thirdparty/libigl/include
INCLUDEPATH += thirdparty/simpleuv/thirdparty/eigen
INCLUDEPATH += thirdparty/simpleuv/thirdparty/squeezer
SOURCES += thirdparty/simpleuv/simpleuv/uvunwrapper.cpp
HEADERS += thirdparty/simpleuv/simpleuv/uvunwrapper.h
SOURCES += thirdparty/simpleuv/simpleuv/parametrize.cpp
HEADERS += thirdparty/simpleuv/simpleuv/parametrize.h
SOURCES += thirdparty/simpleuv/simpleuv/chartpacker.cpp
HEADERS += thirdparty/simpleuv/simpleuv/chartpacker.h
SOURCES += thirdparty/simpleuv/simpleuv/triangulate.cpp
HEADERS += thirdparty/simpleuv/simpleuv/triangulate.h
HEADERS += thirdparty/simpleuv/simpleuv/meshdatatype.h
SOURCES += thirdparty/simpleuv/simpleuv/meshdatatype.cpp
SOURCES += thirdparty/simpleuv/thirdparty/squeezer/maxrects.c
HEADERS += thirdparty/simpleuv/thirdparty/squeezer/maxrects.h
INCLUDEPATH += thirdparty/QtWaitingSpinner
SOURCES += thirdparty/QtWaitingSpinner/waitingspinnerwidget.cpp
HEADERS += thirdparty/QtWaitingSpinner/waitingspinnerwidget.h
INCLUDEPATH += thirdparty/json
win32 {
LIBS += -luser32
LIBS += -lopengl32
isEmpty(BOOST_INCLUDEDIR) {
BOOST_INCLUDEDIR = $$(BOOST_INCLUDEDIR)
}
isEmpty(CGAL_DIR) {
CGAL_DIR = $$(CGAL_DIR)
}
isEmpty(BOOST_INCLUDEDIR) {
error("No BOOST_INCLUDEDIR define found in environment variables")
}
isEmpty(CGAL_DIR) {
error("No CGAL_DIR define found in environment variables")
}
GMP_LIBNAME = libgmp-10
MPFR_LIBNAME = libmpfr-4
CGAL_INCLUDEDIR = $$CGAL_DIR\include
GMP_INCLUDEDIR = $$CGAL_DIR\auxiliary\gmp\include
GMP_LIBDIR = $$CGAL_DIR\auxiliary\gmp\lib
MPFR_INCLUDEDIR = $$GMP_INCLUDEDIR
MPFR_LIBDIR = $$GMP_LIBDIR
}
macx {
GMP_LIBNAME = gmp
MPFR_LIBNAME = mpfr
BOOST_INCLUDEDIR = /usr/local/opt/boost/include
CGAL_INCLUDEDIR = /usr/local/opt/cgal/include
GMP_INCLUDEDIR = /usr/local/opt/gmp/include
GMP_LIBDIR = /usr/local/opt/gmp/lib
MPFR_INCLUDEDIR = /usr/local/opt/mpfr/include
MPFR_LIBDIR = /usr/local/opt/mpfr/lib
}
unix:!macx {
GMP_LIBNAME = gmp
MPFR_LIBNAME = mpfr
BOOST_INCLUDEDIR = /usr/local/include
CGAL_INCLUDEDIR = /usr/local/include
GMP_INCLUDEDIR = /usr/local/include
GMP_LIBDIR = /usr/local/lib
MPFR_INCLUDEDIR = /usr/local/include
MPFR_LIBDIR = /usr/local/lib
}
INCLUDEPATH += $$BOOST_INCLUDEDIR
INCLUDEPATH += $$GMP_INCLUDEDIR
LIBS += -L$$GMP_LIBDIR -l$$GMP_LIBNAME
INCLUDEPATH += $$MPFR_INCLUDEDIR
LIBS += -L$$MPFR_LIBDIR -l$$MPFR_LIBNAME
INCLUDEPATH += $$CGAL_INCLUDEDIR
target.path = ./
INSTALLS += target