bx: Restructure bx.cmake to be more like bx.lua

This commit is contained in:
Sandy Carter
2023-01-06 14:12:44 -05:00
committed by Sandy
parent d50eec41c1
commit e9b0bb3b6c

View File

@@ -14,21 +14,84 @@ if(NOT IS_DIRECTORY ${BX_DIR})
return()
endif()
# Grab the bx source files
file(GLOB BX_SOURCES ${BX_DIR}/src/*.cpp)
include(GNUInstallDirs)
if(BX_AMALGAMATED)
set(BX_NOBUILD ${BX_SOURCES})
list(REMOVE_ITEM BX_NOBUILD ${BX_DIR}/src/amalgamated.cpp)
foreach(BX_SRC ${BX_NOBUILD})
set_source_files_properties(${BX_SRC} PROPERTIES HEADER_FILE_ONLY ON)
endforeach()
else()
set_source_files_properties(${BX_DIR}/src/amalgamated.cpp PROPERTIES HEADER_FILE_ONLY ON)
add_library(bx STATIC)
# Put in a "bgfx" folder in Visual Studio
set_target_properties(bx PROPERTIES FOLDER "bgfx")
# Build system specific configurations
if(MINGW)
set(BX_COMPAT_PLATFORM mingw)
elseif(WIN32)
set(BX_COMPAT_PLATFORM msvc)
elseif(APPLE) # APPLE is technically UNIX... ORDERING MATTERS!
set(BX_COMPAT_PLATFORM osx)
elseif(UNIX)
set(BX_COMPAT_PLATFORM linux)
endif()
# Create the bx target
add_library(bx STATIC ${BX_SOURCES})
# Add include directory of bx
target_include_directories(
bx
PUBLIC $<BUILD_INTERFACE:${BX_DIR}/include> #
$<BUILD_INTERFACE:${BX_DIR}/3rdparty> #
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> #
$<BUILD_INTERFACE:${BX_DIR}/include/compat/${BX_COMPAT_PLATFORM}> #
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/compat/${BX_COMPAT_PLATFORM}> #
)
# Grab the bx source files
file(
GLOB_RECURSE
BX_SOURCES
${BX_DIR}/include/*.h #
${BX_DIR}/include/**.inl #
${BX_DIR}/src/*.cpp #
${BX_DIR}/scripts/*.natvis #
)
if(BX_AMALGAMATED)
list(INSERT BX_NOBUILD "${BX_DIR}/src/allocator.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/bounds.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/bx.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/commandline.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/crtnone.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/debug.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/dtoa.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/easing.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/file.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/filepath.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/hash.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/math.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/mutex.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/os.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/process.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/semaphore.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/settings.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/sort.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/string.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/thread.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/timer.cpp")
list(INSERT BX_NOBUILD "${BX_DIR}/src/url.cpp")
else()
file(GLOB_RECURSE BX_NOBUILD "${BX_DIR}/src/amalgamated.*")
endif()
# Exclude files from the build but keep them in project
foreach(BX_SRC ${BX_NOBUILD})
set_source_files_properties(${BX_SRC} PROPERTIES HEADER_FILE_ONLY ON)
endforeach()
# Add sources to the project
target_sources(bx PRIVATE ${BX_SOURCES})
# All configurations
target_compile_definitions(bx PUBLIC "BX_CONFIG_DEBUG=$<IF:$<CONFIG:Debug>,1,$<BOOL:${BX_CONFIG_DEBUG}>>")
target_compile_definitions(bx PUBLIC "__STDC_LIMIT_MACROS")
target_compile_definitions(bx PUBLIC "__STDC_FORMAT_MACROS")
target_compile_definitions(bx PUBLIC "__STDC_CONSTANT_MACROS")
target_compile_features(bx PUBLIC cxx_std_14)
# (note: see bx\scripts\toolchain.lua for equivalent compiler flag)
@@ -39,44 +102,6 @@ if(WIN32)
target_link_libraries(bx PUBLIC psapi)
endif()
include(GNUInstallDirs)
# Add include directory of bx
target_include_directories(
bx PUBLIC $<BUILD_INTERFACE:${BX_DIR}/include> $<BUILD_INTERFACE:${BX_DIR}/3rdparty>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
# Build system specific configurations
if(MINGW)
target_include_directories(
bx PUBLIC $<BUILD_INTERFACE:${BX_DIR}/include/compat/mingw>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/compat/mingw>
)
elseif(WIN32)
target_include_directories(
bx PUBLIC $<BUILD_INTERFACE:${BX_DIR}/include/compat/msvc>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/compat/msvc>
)
elseif(APPLE) # APPLE is technically UNIX... ORDERING MATTERS!
target_include_directories(
bx PUBLIC $<BUILD_INTERFACE:${BX_DIR}/include/compat/osx>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/compat/osx>
)
elseif(UNIX)
target_include_directories(
bx PUBLIC $<BUILD_INTERFACE:${BX_DIR}/include/compat/linux>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/compat/linux>
)
endif()
# All configurations
target_compile_definitions(bx PUBLIC "__STDC_LIMIT_MACROS")
target_compile_definitions(bx PUBLIC "__STDC_FORMAT_MACROS")
target_compile_definitions(bx PUBLIC "__STDC_CONSTANT_MACROS")
target_compile_definitions(bx PUBLIC "BX_CONFIG_DEBUG=$<IF:$<CONFIG:Debug>,1,$<BOOL:${BX_CONFIG_DEBUG}>>")
# Additional dependencies on Unix
if(ANDROID)
# For __android_log_write