Skip to content

Commit b19e2a7

Browse files
committed
Fixed inlining.
1 parent 1d33b6a commit b19e2a7

File tree

4 files changed

+40
-24
lines changed

4 files changed

+40
-24
lines changed

cmake/backend/emscripten.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ function(nui_add_emscripten_target)
111111
${NUI_ADD_EMSCRIPTEN_TARGET_ARGS_CMAKE_OPTIONS}
112112
-DNUI_INLINE_EXTRACTOR_TARGET_FILE=$<TARGET_FILE:inline-parser>
113113
-DNUI_INLINE_INJECTOR_TARGET_FILE=$<TARGET_FILE:inline-injector>
114+
-DNUI_MODULE_BUILD_DIR=${CMAKE_BINARY_DIR}/module_${NUI_ADD_EMSCRIPTEN_TARGET_ARGS_TARGET}
114115
"${SOURCE_DIR}"
115116
# copy over package.json and fill parcel options that do not exist on it
116117
${BUILD_COMMAND}

cmake/frontend/emscripten.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function(nui_prepare_emscripten_target)
2020

2121
set(INLINER_COMMAND "")
2222
if (NOT NO_INLINE)
23-
nui_enable_inline(TARGET ${NUI_PREPARE_EMSCRIPTEN_TARGET_ARGS_TARGET})
23+
nui_enable_inline(TARGET ${NUI_PREPARE_EMSCRIPTEN_TARGET_ARGS_TARGET} RELATIVE_TO ${CMAKE_CURRENT_SOURCE_DIR})
2424
if (NOT NO_INLINE_INJECT)
2525
set(INLINER_COMMAND COMMAND ${NUI_INLINE_INJECTOR_TARGET_FILE} "${CMAKE_BINARY_DIR}/static/index.html" "${CMAKE_BINARY_DIR}/nui-inline/inline_imports.js" "${CMAKE_BINARY_DIR}/nui-inline/inline_imports.css")
2626
endif()
@@ -34,7 +34,7 @@ function(nui_prepare_emscripten_target)
3434

3535
add_custom_target(
3636
${NUI_PREPARE_EMSCRIPTEN_TARGET_ARGS_TARGET}-parcel
37-
COMMAND ${CMAKE_COMMAND} -E copy_directory "${NUI_SOURCE_DIRECTORY}/nui/js" "${CMAKE_BINARY_DIR}/nui-js"
37+
COMMAND ${CMAKE_COMMAND} -E copy_directory "${NUI_SOURCE_DIRECTORY}/nui/js" "${NUI_MODULE_BUILD_DIR}/nui-js"
3838
COMMAND ${CMAKE_COMMAND} -E copy_directory ${NUI_PREPARE_EMSCRIPTEN_TARGET_ARGS_STATIC} "${CMAKE_BINARY_DIR}/static"
3939
${INLINER_COMMAND}
4040
COMMAND "${CMAKE_BINARY_DIR}/node_modules/.bin/parcel" build --dist-dir "${CMAKE_BINARY_DIR}/bin" ${NUI_PREPARE_EMSCRIPTEN_TARGET_ARGS_PARCEL_ARGS}

cmake/inline_extractor.cmake

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,65 +3,80 @@ function(nui_preprocess_inline_js)
33
set(multi_value_args EXTRA_CXX_FLAGS)
44
cmake_parse_arguments(CPP "" "${one_value_args}" "${multi_value_args}" ${ARGN})
55

6-
string(TOUPPER ${CMAKE_BUILD_TYPE} build_type)
7-
string(REPLACE " " ";" c_flags "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${build_type}}")
6+
set(CURRENT_BUILD_TYPE "Release")
7+
if (CMAKE_BUILD_TYPE)
8+
set(CURRENT_BUILD_TYPE "${CMAKE_BUILD_TYPE}")
9+
endif()
10+
11+
string(TOUPPER ${CURRENT_BUILD_TYPE} PREPROCESS_BUILD_TYPE)
12+
string(REPLACE " " ";" PREPROCESS_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${PREPROCESS_BUILD_TYPE}}")
813

14+
set(INCLUDE_DIRS "$<TARGET_PROPERTY:${CPP_TARGET},INCLUDE_DIRECTORIES>")
15+
set(COMPILE_DEFINITIONS "$<TARGET_PROPERTY:${CPP_TARGET},COMPILE_DEFINITIONS>")
916
add_custom_command(
1017
OUTPUT ${CPP_OUTPUT}
1118
COMMAND ${CMAKE_COMMAND} -E make_directory ${CPP_DIRECTORY}
1219
COMMAND ${CMAKE_CXX_COMPILER}
13-
#"-D$<JOIN:$<TARGET_PROPERTY:${CPP_TARGET},COMPILE_DEFINITIONS>,;-D>"
14-
"-I$<JOIN:$<TARGET_PROPERTY:${CPP_TARGET},INCLUDE_DIRECTORIES>,;-I>"
15-
${c_flags}
20+
"$<$<BOOL:${COMPILE_DEFINITIONS}>:-D$<JOIN:${COMPILE_DEFINITIONS},;-D>>"
21+
"$<$<BOOL:${INCLUDE_DIRS}>:-I$<JOIN:${INCLUDE_DIRS},;-I>>"
22+
${PREPROCESS_CXX_FLAGS}
1623
$<TARGET_PROPERTY:${CPP_TARGET},COMPILE_OPTIONS>
1724
${CPP_EXTRA_CXX_FLAGS}
1825
-E ${CPP_SOURCE} -o ${CPP_OUTPUT}
19-
# COMMAND "${NUI_INLINE_EXTRACTOR_TARGET_FILE}" ${CPP_INLINE_CACHE} ${CPP_OUTPUT} ${CPP_IS_FIRST}
2026
COMMAND_EXPAND_LISTS VERBATIM
2127
IMPLICIT_DEPENDS C ${CPP_SOURCE}
2228
DEPENDS ${CPP_SOURCE} ${CPP_DEPENDS})
2329
endfunction()
2430

2531
function(nui_enable_inline)
26-
set(one_value_args TARGET UNPACKED_MODE)
32+
set(one_value_args TARGET UNPACKED_MODE RELATIVE_TO)
2733
set(multi_value_args)
2834
cmake_parse_arguments(nui_enable_inline_ARGS "" "${one_value_args}" "${multi_value_args}" ${ARGN})
2935

30-
get_target_property(INLINE_JS_SOURCES ${nui_enable_inline_ARGS_TARGET} SOURCES)
36+
get_target_property(INLINE_SOURCES ${nui_enable_inline_ARGS_TARGET} SOURCES)
37+
message(STATUS "Inline sources for ${nui_enable_inline_ARGS_TARGET}")
3138

3239
set(INLINE_DIRECTORY_SUBDIR "nui-inline")
33-
set(INLINE_DIRECTORY "${CMAKE_BINARY_DIR}/${INLINE_DIRECTORY_SUBDIR}")
40+
set(INLINE_DIRECTORY "${NUI_MODULE_BUILD_DIR}/${INLINE_DIRECTORY_SUBDIR}")
3441
set(INLINE_CACHE "${INLINE_DIRECTORY}/inline.cache")
3542
set(INLINE_IMPORTS_SCRIPTS "${INLINE_DIRECTORY}/inline_imports.js")
3643
set(INLINE_IMPORTS_STYLES "${INLINE_DIRECTORY}/inline_imports.css")
3744

3845
# for each source file preprocess it:
3946
set(IS_FIRST TRUE)
40-
foreach(source_file ${INLINE_JS_SOURCES})
41-
get_filename_component(source_file_name "${source_file}" NAME)
42-
set(preprocessed_source_file "${INLINE_DIRECTORY}/${source_file_name}.i")
47+
foreach(SOURCE_FILE ${INLINE_SOURCES})
48+
# Get relative path to source file
49+
file(RELATIVE_PATH SOURCE_FILE_NAME_RELATIVE "${nui_enable_inline_ARGS_RELATIVE_TO}" "${SOURCE_FILE}")
50+
get_filename_component(SOURCE_FILE_NAME "${SOURCE_FILE_NAME_RELATIVE}" NAME_WE)
51+
# Get just the directory part of the source file
52+
get_filename_component(SOURCE_FILE_DIR "${SOURCE_FILE_NAME_RELATIVE}" DIRECTORY)
53+
if (NOT "${SOURCE_FILE_DIR}" STREQUAL "")
54+
set(PREPROCESSED_SOURCE_FILE "${INLINE_DIRECTORY}/${SOURCE_FILE_DIR}/${SOURCE_FILE_NAME}.i")
55+
else()
56+
set(PREPROCESSED_SOURCE_FILE "${INLINE_DIRECTORY}/${SOURCE_FILE_NAME}.i")
57+
endif()
4358
nui_preprocess_inline_js(
4459
TARGET ${nui_enable_inline_ARGS_TARGET}
45-
DIRECTORY "${INLINE_DIRECTORY}"
60+
DIRECTORY "${INLINE_DIRECTORY}/${SOURCE_FILE_DIR}"
4661
INLINE_CACHE "${INLINE_CACHE}"
47-
SOURCE "${source_file}"
48-
OUTPUT "${preprocessed_source_file}"
62+
SOURCE "${SOURCE_FILE}"
63+
OUTPUT "${PREPROCESSED_SOURCE_FILE}"
4964
EXTRA_CXX_FLAGS -P -CC -DNUI_INLINE -DNUI_MODULE_SOURCE_DIR="${CMAKE_SOURCE_DIR}" -DNUI_MODULE_CURRENT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}"
5065
IS_FIRST ${IS_FIRST}
5166
)
5267
set(IS_FIRST FALSE)
53-
message(STATUS "Preprocessing ${source_file} to ${preprocessed_source_file}")
54-
list(APPEND preprocessed_sources "${preprocessed_source_file}")
68+
message(STATUS "Preprocessing ${SOURCE_FILE} to ${PREPROCESSED_SOURCE_FILE}")
69+
list(APPEND PREPROCESSED_SOURCES "${PREPROCESSED_SOURCE_FILE}")
5570
endforeach()
5671

5772
add_custom_command(
5873
OUTPUT
5974
${INLINE_IMPORTS_SCRIPTS}
6075
${INLINE_IMPORTS_STYLES}
6176
COMMAND ${CMAKE_COMMAND} -E make_directory ${INLINE_DIRECTORY}
62-
COMMAND "${NUI_INLINE_EXTRACTOR_TARGET_FILE}" ${INLINE_CACHE} ${CMAKE_BINARY_DIR} ${INLINE_DIRECTORY_SUBDIR} ${preprocessed_sources}
77+
COMMAND "${NUI_INLINE_EXTRACTOR_TARGET_FILE}" ${INLINE_CACHE} ${CMAKE_BINARY_DIR} ${INLINE_DIRECTORY_SUBDIR} ${PREPROCESSED_SOURCES}
6378
COMMAND_EXPAND_LISTS VERBATIM
64-
DEPENDS ${preprocessed_sources}
79+
DEPENDS ${PREPROCESSED_SOURCES}
6580
)
6681

6782
add_custom_target(

examples/basic/backend/source/backend/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
target_sources(basic-example PRIVATE main.cpp)
1+
target_sources(basic-example PRIVATE main.cpp)
22

33
target_include_directories(basic-example PRIVATE ${CMAKE_CURRENT_LIST_DIR}/../../include)
44

@@ -11,10 +11,10 @@ set_target_properties(basic-example
1111
)
1212

1313
# Creates a target that is compiled through emscripten. This target becomes the frontend part.
14-
nui_add_emscripten_target(basic-example
14+
nui_add_emscripten_target(
1515
TARGET
1616
basic-example
17-
PREJS
17+
PREJS
1818
${PREJS_FILE}
1919
SOURCE_DIR
2020
${CMAKE_SOURCE_DIR}

0 commit comments

Comments
 (0)