Мой google-fu провалился, поэтому я спрашиваю здесь.
По какой-то причине я хочу связать конкретный c объект внутри библиотеки с моей целью.
Например, я хочу связать foo.o
в bar.a
с foobar.so
.
Есть ли какой-то синтаксис в CMake, который делает это возможным?
edit: Ok , немного больше моей проблемы.
Мы создаем модульную систему обработки сигналов с различными «уровнями» реализации:
- Python эталонная модель
- C / C ++ с плавающей точкой
- C / C ++ с фиксированной точкой
- C / C ++ DSP оптимизированная версия
Для каждого C / C ++ создается отдельный файл .a реализация. Все они поддерживают интерфейс с фиксированной запятой и интерфейс с плавающей запятой, хотя они реализуют только один из интерфейсов и выполняют перевод / батут на другой.
Другими словами, реализация с плавающей запятой имеет реализацию алгоритма с плавающей запятой и точку входа с фиксированной запятой, которая переводит все входные данные в float перед вызовом API на основе float.
Оптимизированная для DSP реализация реализует точки входа с фиксированной точкой и предоставляет «батут» с плавающей точкой для преобразования из плавающей точки в фиксированную перед вызовом фактической реализации.
Все это позволяет нам смешивать / сопоставлять реализации, чтобы мы могли начать с идеальной модели с плавающей запятой, и постепенно разработать оптимизированную версию DSP. Все это прекрасно работает в проекте C / C ++, где вы просто связываете желаемую реализацию модуля, и он «просто работает».
Кикер - наша начальная модель python, и мы хотим иметь возможность вызов кода C / C ++ из python с привязками pybind11.
Время соединения общих объектов pybind11 очень медленное и создает действительно большие объекты (даже с рекомендуемыми настройками я получаю 3 МБ DLL) ) и у нас будет много модулей, поэтому я ищу способ сократить количество .so
, которое мы делаем, комбинируя фиксированную и плавающую запись в одном и том же .so
. говоря что-то вроде:
module_pybind.so = module_fixed.a (fixed.o) + module_float.a (float.o)
и module_fixed.a (float.o) и module_float. a (fixed.o) не включается, потому что это просто батутные функции.
Я знаю, это все немного странно и запутанно, и я мучаю вещи, которые выходят за рамки нормы, но я надеюсь, что это может сработать.
Если нет, я могу поиграть в другие трюки с батутами и иметь точку входа pybind, указывающую c, которая есть только для реализованной модели.