How to additionally compile the source files in subdirectories when using Makefile?

Hi guys,

I am writing a LLVM pass plugin, and just simply add a directory mypass into llvm/lib/Transforms. But since I don't hope this directory to contain too many source files, I add some subdirectories.

For instance, there are 2 files inside *mypass/sub: basic.h, basic.cpp. Here is the structure of the directory llvm/lib/Transforms/mypass

  $tree mypass
  mypass
  ├── Makefile
  ├── mypass.c
  └── sub
      ├── basic.cpp
      ├── basic.h
      └── Makefile

The problem is that basic.cpp will never be compiled into the loadable module which mypass.c symbols lies in. And LLVMLIBS USEDLIBS doesn't work either.

Here is mypass/Makefile

  LEVEL = ../../..
  DIRS = sub
  LIBRARYNAME = mypass
  LOADABLE_MODULE = 1

  include $(LEVEL)/Makefile.common

And mypass/sub/Makefile

  LEVEL = ../../../..
  # LIBRARYNAME = test_sub
  # ARCHIVE_LIBRARY = 1
  # LOADABLE_MODULE = 1
  
  include $(LEVEL)/Makefile.common

When mypss/sub/Makefile uses LOADABLE_MODULE = 1 with another library name(test_sub), and by additionally loading it when using opt, it does work but I think there is a better way.

Also AFAIK, using cmake is much easier for this case since it only needs to use this configuration in mypass/Makefile:

  add_llvm_loadable_module( mypass
    mypass.cpp
    sub/basic.cpp
    )

But for some reasons I have to use GNU make to do this. Is there a good way?